Skocz do zawartości

[C++] Przetłumaczenie kodu


Idź do rozwiązania Problem ogarnięty przez Luki91,

Recommended Posts

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.

Link to post
Share on other sites
  • Rozwiązanie

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;
}
  • Popieram 1
Link to post
Share on other sites
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 przez Luki91
  • Popieram 1
Link to post
Share on other sites

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ą.

Gość
Odpowiedz w tym wątku...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...