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

question-closed Zależność wpisywania zmiennej int w kodzie.

Object Storage Arubacloud
0 głosów
272 wizyt
pytanie zadane 25 lutego 2016 w C i C++ przez Wiktor Kurek Nowicjusz (230 p.)
zamknięte 25 lutego 2016 przez Wiktor Kurek

Witam.
Zaczynam się uczyć programować i mam takie pytanie. Czy jest jakaś zależność między wstawianiem zmiennej int w późniejszym wpisywaniu kodu? Nie wiem jak to sformułować, więc posłużę się przykładem.
Mam takie zadanie, które rozwiązałem:

Napisz program, który za pomocą polecenia cin pobiera liczby podane przez użytkownika. Następnie sumuje te liczby tak długo, dopóki użytkownik nie poda liczby zero. Jako wynik działania program wypisze na ekran tylko jedną liczbę, będącą sumą liczb dotychczas wpisanych przez użytkownika.

Przykładowo dla liczb wpisanych przez użytkownika: 4 8 9 44 0 program wypisze na ekran liczbę: 65.

Rozwiązanie poprawne:

#include <iostream>
using namespace std;

int main()
{
	int liczba;
	int kolejnaliczba;
	int suma=0;
	
	cout << "Podaj liczbe: ";
	cin >> kolejnaliczba;
	
	while(liczba!=0)
	{
	cout << "Podaj kolejna liczbe: "<< endl;
	cin >> liczba;
	
	suma = suma+liczba;
}
suma=suma+kolejnaliczba;
cout << "Suma wynosi: " << suma;
return 0;
}

Rozwiązanie błędne:

#include <iostream>
using namespace std;

int main()
{
	int liczba;
	int kolejnaliczba;
	int suma=0;
	
	cout << "Podaj liczbe: " << endl;
	cin >> liczba;
	
	while (kolejnaliczba!=0)
	{
		cout << "Podaj nastepna liczbe: ";
		cin >> kolejnaliczba;
		suma = suma+kolejnaliczba;
	}
	
	suma=suma+liczba;
	cout << "Suma wynosi: " << suma;
	return 0;
}

Chodzi mi oto, że mamy zmienne:

int liczba;
int kolejna liczba;

W pierwszym przypadku wstawiam najpierw w cout "int kolejna liczba", a w drugim, jakby nie patrząc po kolei to robię, bo tak myślałem, wstawiam "int liczba"... i jeżeli jakby te zmienne int zamienię miejscami, tak jak na górze w przykładach, to kod nie działa.
Nie wiem czy to dobrze wyjaśniłem, ale chciałbym wiedzieć czy jest jakaś zależność między właśnie tym, że najpierw wstawiamy ostatnią napisaną zmienną int.

Z góry dziękuję za odpowiedź i pozdrawiam.
 

komentarz zamknięcia: Pytanie zostało wyjaśnione.

2 odpowiedzi

+2 głosów
odpowiedź 25 lutego 2016 przez adrian17 Ekspert (344,860 p.)

Oba programy są niepoprawne (i chyba niczym się nie różnią).

W pierwszym:

int liczba;
(...)
while(liczba!=0)

W drugim:

int kolejnaliczba;
(...)
while (kolejnaliczba!=0)

Te zmienne nie mają żadnej wartości, a porównujesz je z zerem.

komentarz 25 lutego 2016 przez Patrycjerz Mędrzec (192,320 p.)
Przecież obie zmienne mają w sobie tzw. śmieci - mało prawdopodobne, aby były one właśnie zerem, ale i tak lepiej inicjalizować dane, w tym przypadku np. jedynką.
komentarz 25 lutego 2016 przez Wiktor Kurek Nowicjusz (230 p.)
Tyle, że właśnie pierwszy program odpalony działa, a w drugim od razu po wpisaniu pierwszej cyfry, wyświetla się suma.
komentarz 25 lutego 2016 przez adrian17 Ekspert (344,860 p.)
A u mnie na odwrót, drugi zachowuje się "normalnie". Rzecz w tym że oba są błędnie napisane i mogą zachowywać się jakkolwiek, w tym dawać złudzenie poprawności.
komentarz 25 lutego 2016 przez Patrycjerz Mędrzec (192,320 p.)

@Wiktor Kurek Zainicjalizuj zmienne jakąś wartością różną od zera - wtedy oba programy powinny działać.

komentarz 25 lutego 2016 przez Wiktor Kurek Nowicjusz (230 p.)
Ooo. Dziękuję bardzo wszystkim za pomoc.
Czyli za każdym razem jak będę ten zmienne, to mam inicjować jakąś wartość?
komentarz 25 lutego 2016 przez Patrycjerz Mędrzec (192,320 p.)
Jeśli od początku istnienia zmiennej zależy od niej zachowanie programu, to powinno się taką zmienną inicjalizować.
komentarz 25 lutego 2016 przez Wiktor Kurek Nowicjusz (230 p.)
Dziękuję serdecznie!
0 głosów
odpowiedź 25 lutego 2016 przez MetGang Nałogowiec (34,360 p.)
Kod nie działa? W sensie wynik niepoprawny czy kompilacja? Proszę podawać takie informacje.

Jeśli wynik jest niepoprawny, to jak dla mnie problem może polegać na inicjalizacji prymitywów (char, int, float itp.), a raczej ich nieinicjalizacji. Prymitywy mają to do siebie, by aby wyciągnąć największą możliwą prędkość działania, są one tylko tak jakby "tylko wstawiane w pamięci" tzn. ich konstruktor (czyli zwykłe zerowanie) nie jest wykonywany (w przypadku zmiennych globalnych jest on wywoływany zawsze). W takim przypadku, zmienna może zawierać śmieci.

Dlatego lepiej jest zerować prymitywy, jeśli chcemy mieć pewność, że wszystko zadziała poprawnie.
komentarz 25 lutego 2016 przez Wiktor Kurek Nowicjusz (230 p.)
W drugim przypadku od razu po wpisaniu pierwszej liczby, wyświetla się suma.
Czyli np. jak np. wpiszę 1, to od razu wyświetla się "Suma wynosi: 1".

Podobne pytania

0 głosów
2 odpowiedzi 337 wizyt
pytanie zadane 11 października 2016 w C i C++ przez JanuszSTW Początkujący (480 p.)
0 głosów
1 odpowiedź 487 wizyt
0 głosów
1 odpowiedź 303 wizyt
pytanie zadane 22 grudnia 2017 w C i C++ przez MikeMG Początkujący (330 p.)

92,536 zapytań

141,377 odpowiedzi

319,456 komentarzy

61,922 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!

...