Wątek przeniesiony 2021-09-16 10:20 z Inne języki programowania przez cerrato.

[Visual Basic] Problem z pętlą i zmienną tablicową

0

Hejka,
mam problem.

Otóż mam do wykonania dwa zadania:

  1. "po wprowadzeniu 20 liczb(inputbox) w textbox pojawią się wprowadzone liczby nieparzyste. zastosuj zmienną tablicową oraz pętlę do while... loop"
  2. "po wprowadzeniu 20 liczb(inputbox) pojawia się informacja: ile wprowadzono liczb ujemnych (msgbox). zmienna tablicowa i pętla for ... next"

Wyda się to głupie, ale pewnie dla większości z Was takie coś jest dziecinnie proste, ale nie dla mnie :(
Jak się do tego zabrać?
Odnośnie 1. Czy zastosować najpierw pętlę for, żeby można było wprowadzić te 20 liczb?
Czyli była by jedna pętla for do wprowadzenia 20 liczb, potem jakoś pętla do while, zęby zostały pokazane w textboxie nieparzyste( do nieparzystych chyba jest warunek mod 2 = 1) ?

Odnośnie 2.
Zastosujemy sobie pętle for z inputboxem, do wpisania 20 liczb, potem warunek, żeby były < 0, a jak na końcu ustawić warunek, żeby program policzył wszystkie ujemne?

0

Odnośnie 1. Nie, nie musisz robić dwóch pętli. A tym bardziej jednej FOR,skoro w zadaniu masz użyć While. HINT: nie musisz liczb zapamiętywać.
Warunek masz dobry

Odnośnie 2.Jeszcze prostsze, bo na FOR. Zasada taka sama - nie zapamietujesz, bo nie są ci potrzebne. Potrzebne jest ci co innego...

w 1 przypadku to 5 linii kodu (bez deklaracji)
w 2 - 4, w wersji hardkor 3 :)

0

Hmm, a chcesz naprowadzic jak to ogarnąć?

0
Dim j&, ilosc&

For j = 1 To 5
    ilosc = ilosc - CInt(Val(InputBox("podaj liczbę", "podaj liczbę nr " & j)) < 0)
Next

Wersja hardkor 2.
VBA for Excel, ale powinno na każdym VB pójść

0

Aa odnośnie 1?

To co napisałeś niby działa, no ale jeszcze trzeba msgboxa wrzucić, żeby była podana liczba liczb ujemnych

0

To pierwsze tak samo, tylko inaczej... :)
Czyli na While i inny warunek.
I oczywiście wiesz, że tego hardkora nie możesz dać do oceny, bo go nie obronisz... Np dlaczego tam jest - (minus) zamiast + (plus) :P

0

Ale widzisz, jeszcze brakuje zmiennej tablicowej, która w jednym zadaniu wyświetli w textboxie nieparzyste, a w drugi msg ujemne

0

Ale zmienna tablicowa wcale nie jest potrzebna. Tylko utrudnia.

0

ale właśnie to jest zadanie na uczelnię i niestety muszę ją zastosować ;)

0

Ale ja nie wiem, co poeta miał na myśli... Czy w zmiennej tablicowej masz przechowywać te 20 Input, czy X Output?

0

Poeta miał na myśli, żeby w zmiennej tablicowej przechowywać 20 input, w zadaniu 1 ma przechować 20 liczb, żeby na końcu wyświetlić w textboxie same nieparzyste, natomiast w 2 zadaniu ma przechować 20 liczb, aby na końcu wyskoczył msgbox z liczba wprowadzonych liczb ujemnych.

0

I z czym masz problem?
Pół zadania juz za ciebie zrobiłem..

0

Noo właśnie słabo ogarniam to co napisałeś

0

 Dim a, b, c, tab(3, 4) As Integer
        Dim txt As String
        For a = 0 To 3
            For b = 0 To 4
                tab(a, b) = InputBox("Wprowadź liczbę", "Wprowadź liczbę nr " & a)
            Next
        Next
        For a = 0 To 3
            For b = 0 To 4
                TextBox1.Text = TextBox1.Text & tab(a, b) & vbTab
            Next
            TextBox1.Text = TextBox1.Text & vbNewLine
        Next
        Do

            txt = "W tablicy znajduje się " & "" & "" & " ujemnych"
            
            Next


        Loop
        MsgBox(txt, 4, )

doszedłem do tego, jeszcze nie wiem jak zawrzeć warunek, żeby brało ilośc liczb ujemnych i potem to wyświetliło w msg

0
        Dim a, b, c, tab(3, 4) As Integer
        
        For a = 0 To 3
            For b = 0 To 4
                tab(a, b) = InputBox("Wprowadź liczbę", "Wprowadź liczbę nr " & a) ' jak zrobic, zeby tutaj jeszcze bralo liczby od 1 do 20, np.: liczba 1, liczba 1'
            Next
        Next
        Do While a Mod (2) = 1
            TextBox1.Text = TextBox1.Text & tab(a, b) & vbTab
        Loop

no i tutaj sie zawiesilłem i nie wiem jak ruszyc

0

Czemu na tablicach dwuwymiarowych? To a ci wszystko psuje. Myśl jednowymiarowo.

0
 Dim a, tab(19) As Integer

        For a = 1 To 20
            tab(a) = InputBox("Wprowadź liczbę", "Wprowadź liczbę nr " & a)
        Next
        For a = 0 To 19
            If a = 0 Then
                TextBox1.Text = tab(a)
            Else
                TextBox1.Text = TextBox1.Text & tab(a) & vbTab
            End If
        Next
        MsgBox("W tablicy znajduje się " & "" & "" & " ujemnych", 4, )

No to kod poprawiony do zadania 2, ale teraz pytanie, jak zapisać kod do liczb ujemnych? w którym miejscu napisać <0?

   Dim a, tab(19) As Integer
        
        For a = 1 To 20
            tab(a) = InputBox(" Wprowadź liczbę", "Wprowadź liczbę nr " & a)
        Next

        Do While a Mod (2) = 1
            TextBox1.Text = TextBox1.Text & tab(a) & vbTab
            If a = 1 Then
                TextBox1.Text = tab(a)
            Else
                TextBox1.Text = TextBox1.Text & vbTab & tab(a)
            End If
        Loop

i tutaj również się zawiesiłem i dalej nie wiem co poprawić, żeby nieparzyste pojawiły się w textboxie ;(

0

Po kolei:
Dim a - deklaruje ci zmienną a jako Variant
tab(19) As Integer deklaruje ci tablicę Intów od 0 do 19. 20 elementów, ale od 0. VB domyslnie indeksuje tablice od 0. Mozna to zmienić przez deklarację na początku modulu:
Option Base 1
potem w pętli od 1 do 20 wpisujesz do tab elementy. Pytanie: gdzie wcisniesz dwudziesty element, skoro najwyzszy indeks tablicy, to 19?
Nie wspomnę (a wlasciwie wspomnę) o tym, że w ogole nie parsujesz, czy wpisany jest Int
Następnie w pętli od 0 do 19 wypisujesz do Texboxa elementy. od 0. Czyli zeriowy element zawsze bedzie 0, za to nigdy nie wyswietlisz 20-tego (o ile uda ci sie go wpisac do tablicy).
Warunek sprawdzajacy, czy jest ujemna mozesz umiescic np. w drugim For (zaraz jako pierwsza linia):
If tab(a)>0 then ujemnych=ujemnych+1
W drugim listingu Whila musisz jeszcze raz przemyslec - wpadasz w nieskonczona petle... :)

0

Tak, tak wiem ;) nie zmieniłem od 0 do 19 na 1 do 20 ;)
Siądę i jeszcze trochę przyatakuje i zobaczymy z tego co wyjdzie ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1