• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Podstawy C++ (for, while if)

Object Storage Arubacloud
0 głosów
986 wizyt
pytanie zadane 9 lutego 2017 w C i C++ przez rejuspl Nowicjusz (210 p.)

Witajcie, dlaczego if za każdym razem jak wpisze liczbę 25 to odejmuje mi pkt? Jeśli w warunku if jest ze poprzednia cyfra musi być różna od 25?

 

#include <iostream>

using namespace std;

int main()
{
	
	int tab[20];
	int pkt = 3;

	
		for (int i = 0; i < 19; i++)
		{
			while (pkt > 0) 
			{
				cin >> tab[i]; 

				if (tab[i] == 25 && tab[i-1]!= 25) --pkt;

				cout << tab[i] << endl;
			}

		}

return 0;
}

 

2 odpowiedzi

0 głosów
odpowiedź 9 lutego 2017 przez .kassad Gaduła (3,420 p.)
wybrane 9 lutego 2017 przez rejuspl
 
Najlepsza

Masz źle poustawiane pętle Zauważ że z pętli while wychodzisz dopiero, jak pkt == 0. Dopóki to nie nastąpi, i cały czas będzie równe 0. A jak już z pętli while wyjdziesz, to pkt cały czas jest równe 0, więc nie wejdziesz do niej ponownie. Proponowałbym coś takiego:

int i = 0;
while(i<19)
            while (pkt > 0) 
            {
                cin >> tab[i]; 
 
                if (tab[i] == 25 && tab[i-1]!= 25) --pkt;
 
                cout << tab[i] << endl;
                 
                i++;
            }
 

 

0 głosów
odpowiedź 9 lutego 2017 przez Adrian Spora Mądrala (5,100 p.)
edycja 9 lutego 2017 przez Adrian Spora

indeksy w tablicy zaczynają się od 0. Jeśli tablica jest 20 elementowa to jest indeksowana od 0-19, a u Ciebie pętla wykonuje się 19 razy. Powinno być:

for (int i = 0; i < 19; i++)

A jeśli za pierwszym razem wpisujesz 25 to pkt odejmuje Ci się ponieważ, element pod indeksem 0 tj. 25, ale później w warunki masz tab[i-1] != 25. W pierwszej iteracji tab[i-1] to tab[-1], a tablica nie ma indeksu -1 i odwołuje się do nieznanego miejsca w pamięci. Powinieneś zmienić ten warunek tak, żeby uwzględniał tą sytuację.

komentarz 9 lutego 2017 przez rejuspl Nowicjusz (210 p.)
Wiem o tym i mogę stwierdzić iż celowo to pominąłem bo to nie istotne.

Kwestia jest tak że jeśli zacznę wpisywać 10 10 25 25 25 to za każdą 25 odejmuje mi pkt a powinno odjąć tylko za pierwszą bo druga i trzecia nie spełniają warunku że poprzednia liczba musi być różna od 25.

 

A i pętla wykonuje się 20 razy bo jest "int i =0; i < 19";i++"
komentarz 9 lutego 2017 przez qrek1 Początkujący (380 p.)
Pętla wpisywania tab[i] nie jest wykonywana 20 razy, tylko w nieskończoność wypisujesz cały czas wartości do tab[0], więc nawet jak wpiszesz kilka razy i=25 to cały czas masz tylko tab[0]=25 a tab od i-1 nie jest 25.

Podobne pytania

0 głosów
0 odpowiedzi 725 wizyt
pytanie zadane 17 listopada 2019 w JavaScript przez Oskar01 Nowicjusz (120 p.)
0 głosów
6 odpowiedzi 550 wizyt
pytanie zadane 19 lipca 2015 w C i C++ przez Mir000 Nowicjusz (160 p.)
+1 głos
1 odpowiedź 6,908 wizyt

92,583 zapytań

141,434 odpowiedzi

319,669 komentarzy

61,966 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...