[C++] Prawe do lewego, lewe do prawego, czyli...

Awatar użytkownika
Ceplusplusik
Użytkownik
Użytkownik
Posty: 228
Rejestracja: 7 paź 2012, o 17:02
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 94 razy

[C++] Prawe do lewego, lewe do prawego, czyli...

Post autor: Ceplusplusik »

Witam. Stworzyłem dzisiaj prosty program na wyciąganie wartości największej, minimalnej i tak dalej. Co mnie zaintrygowało?

Kod: Zaznacz cały

	int const maxLiczba=10e8;
	int const minLiczba=-10e8;
	
	double max = minLiczba;
	double min = maxLiczba;
	
	for (i; i<n; i++)
	{
		cout << "Wprowadz wartosc liczby w danej petli: ";cin>>liczba;
		
		if (liczba>max)
		max = liczba;
		
		if (min>liczba)
		min = liczba;
		
		suma = suma + liczba;
	}
Że gdy wpiszemy zamiast

Kod: Zaznacz cały

max = liczba
min = liczba
odwrotnie, czyli

Kod: Zaznacz cały

liczba = max
liczba = min
to program totalnie nie orientuje się, co ma w danej chwili zrobić. Wiadomo, od razu poprawka, ale zostaje pytanie: z czego to wynika?
pawel_wr
Użytkownik
Użytkownik
Posty: 22
Rejestracja: 25 paź 2012, o 04:00
Płeć: Mężczyzna
Lokalizacja: wroclaw
Pomógł: 3 razy

[C++] Prawe do lewego, lewe do prawego, czyli...

Post autor: pawel_wr »

Trudno cokolwiek rzeczowego powiedzieć,gdy nie ma całości kodu.
Jakiego typu jest zmienna "liczba" albo "suma" ?
Ile wynosi n ?
Popatrz na swój kod,czy twoja pętla for ( w siódmym wierszu ) jest prawidłowa ?
Awatar użytkownika
Ceplusplusik
Użytkownik
Użytkownik
Posty: 228
Rejestracja: 7 paź 2012, o 17:02
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 94 razy

[C++] Prawe do lewego, lewe do prawego, czyli...

Post autor: Ceplusplusik »

Zamieszczam cały kod. Delikatnie inny od wypisanego powyżej, ale wszystko na tej samej zasadzie, jedynie inny rodzaj pętli i nazwy licznika ("licznik" zamiast "i"):

Kod: Zaznacz cały

#include <iostream>
#include <cmath>
using namespace std;

int main ()
{
	int licznik = 0;
	int n;
	cout << "Wprowadz liczbe okreslajaca, ile razy petla ma sie wykonac: ";cin>>n;
	double liczba;
	double suma = 0;
	
	const double maxLiczba = 1e8; //stala 10^8
	const double minLiczba = -1e8; // -10^8
	
	double max= minLiczba;
	double min = maxLiczba;
	
	
	do
	{
		cout << "Podaj liczbe: ";
		cin >>liczba;
		
		if (liczba==0)
		{
			break;
		}
		
		if (liczba>max)
		max=liczba;
		
		if (liczba<min)
		min=liczba;
		
		suma += liczba;
		licznik++;
		
	} while (licznik<n);
	
	cout << endl << "Suma = " << suma << endl;
	cout << endl << "Srednia = " << suma/licznik << endl;
	cout << endl << "Max = " << max << endl;
	cout << endl << "Min = " << min << endl;
}
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[C++] Prawe do lewego, lewe do prawego, czyli...

Post autor: Afish »

Ceplusplusik pisze:to program totalnie nie orientuje się, co ma w danej chwili zrobić. Wiadomo, od razu poprawka, ale zostaje pytanie: z czego to wynika?
Co znaczy "nie orientuje się"? Jak zrobisz przypisanie na odwrót, to raczej zmieniasz logikę programu, więc trudno oczekiwać braku zmiany działania.
Awatar użytkownika
Ceplusplusik
Użytkownik
Użytkownik
Posty: 228
Rejestracja: 7 paź 2012, o 17:02
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 94 razy

[C++] Prawe do lewego, lewe do prawego, czyli...

Post autor: Ceplusplusik »

W porządku - więc przypisywanie nie jest przemienne, a do tej pory postępowałem zupełnie na to nie patrząc. Pozdrawiam.
ODPOWIEDZ