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

42 Warsaw Coding Academy
0 głosów
666 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 Mentor (353,220 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 Mentor (353,220 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 584 wizyt
pytanie zadane 11 października 2016 w C i C++ przez JanuszSTW Początkujący (480 p.)
0 głosów
1 odpowiedź 618 wizyt
0 głosów
1 odpowiedź 408 wizyt
pytanie zadane 22 grudnia 2017 w C i C++ przez MikeMG Początkujący (330 p.)

93,377 zapytań

142,379 odpowiedzi

322,525 komentarzy

62,724 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...