matikusz 1 Napisano 13 Października 2014 Udostępnij Napisano 13 Października 2014 Witam, otóż mam problem ze zrozumieniem tego kodu: #include <iostream> using namespace std; int main() { int x[] = { 6, 0, 5, 10, 16, 100, 22}; int y = 0; for (int i = 0; i <= 7; i++) if (y < x[i]) y = x[i]; cout << "Najwieksza liczba to: " << y << endl; system("PAUSE"); return 0; } Wiem że program ma wyliczyć z siedmiu liczb najwyższą ze zmiennej x. I tu zaczynają się schodki: jak mam rozumieć wyrażenie "x[] = { ... }" ? Dalej tworzymy pętle for , która jeśli dobrze rozumiem powtarza 7 razy wyrażenie niżej ? I tu kolejna niewiadoma: "y < x" No i na końcu wypisuje na konsoli zmienną y. Pozdrawiam i z góry dziękuje za pomoc. Cytuj Link to post Share on other sites
Karister 707 Napisano 13 Października 2014 Udostępnij Napisano 13 Października 2014 (edytowane) Niezły kurs niewymagający wstępnej wiedzy: http://www.cs.put.poznan.pl/arybarczyk/Kurs%20C++.pdf Edytowane 13 Października 2014 przez Karister Cytuj Link to post Share on other sites
matikusz 1 Napisano 13 Października 2014 Autor Udostępnij Napisano 13 Października 2014 Nie zależy mi na całym kursie ponieważ programowania uczę się w szkole, tylko na tą jedną jedyną funkcją którą potrzebuje wytłumaczyć. Cytuj Link to post Share on other sites
Rozwiązanie Luki91 157 Napisano 13 Października 2014 Rozwiązanie Udostępnij Napisano 13 Października 2014 Zacznijmy od tego, że ten program jest błędny. Prawidłowy kod z objaśnieniami: #include <iostream> using namespace std; int main() { int x[] = {6, 0, 5, 10, 16, 100, 22}; // deklarujesz tablicę liczb całkowitych oraz ją inicjalizujesz (przypisujesz wartość) int y = x[0]; // zapamiętujesz pierwszy element tablicy for (int i = 1; i < 7; i++) // przechodzisz pętlą po całej tablicy (zaczynając od elementu drugiego o indeksie 1 i kończąc na ostatnim o indeksie 6 - tablica jest indeksowana od zera!) { if (y < x[i]) // jeśli napotkany element tablicy jest większy od tego zapamiętanego { y = x[i]; // zapamiętujesz ten napotkany element } } cout << "Najwieksza liczba to: " << y << endl; // na końcu twoim zapamiętanym elementem będzie ten największy system("PAUSE"); return 0; } 1 Cytuj Link to post Share on other sites
matikusz 1 Napisano 13 Października 2014 Autor Udostępnij Napisano 13 Października 2014 Ok, dziękuję za odpowiedź. @Luki91 możesz mi tylko wytłumaczyć co w tamtej wcześniejszej funkcji było źle zrobione ? Kompilowała się i działała, testowałem różne kombinacje w tablicy i zawsze wychodziło prawidłowo. Cytuj Link to post Share on other sites
Luki91 157 Napisano 13 Października 2014 Udostępnij Napisano 13 Października 2014 (edytowane) int y = 0; Jeśli założysz początkową wartość równą zero, program zwróci zły wynik jeśli w tablicy będziesz miał same ujemne liczby. for (int i = 0; i <= 7; i++) Tablice w językach C-podobnych zawsze są indeksowane od zera. To jest rzecz, na którą nabiera się każdy początkujący programista. Zatem jeśli masz tablicę 7-elementową, jej elementy mają indeksy 0, 1, 2, 3, 4, 5, 6. Pętla miała warunek końcowy i<=7, więc kolejno pobierała z tablicy elementy o indeksach 0, 1, 2, 3, 4, 5, 6, 7. Widzisz różnicę? Pobierasz z tablicy element x[7], podczas gdy ostatni element to x[6]. C++, w przeciwieństwie do np. języka C#, nie zasygnalizuje ci tego błędu w żaden sposób. Jeśli odwołasz się poza zakres tablicy, zostaną pobrane dane z pamięci leżące poza twoją tablicą. To może być dowolna liczba, więc wynik programu będzie praktycznie losowy Edytowane 13 Października 2014 przez Luki91 1 Cytuj Link to post Share on other sites
Recommended Posts
Dołącz do dyskusji
Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.