Min z ciągu liczb


(Bolkowice10) #1

Witam Was. mam problem następującu:

mam wpisywac liczby dopóki nie wpisze 0 (to znak ze trzeba zakończyc wprowadzanie danych). No i zrobiłem to, jednak na końcu mi jako min mi wyskakuje 0, które powinno być wyeliminowane...

zrobiłem to następująco(i niestety nie moge dac warunku &&(liczba!=0)

#include 

using namespace std;

int main()

{

int liczba,min;

while (liczba!=0)

{

cin >> liczba;

if (liczba
min=liczba;

}

cout<
return 0;

}

(balcer656) #2

Zauważ, że wczytujesz pierw liczbę, a później sprawdzasz warunek czy jest równa 0


(Bolkowice10) #3

czyli co, inna pętla czy jak?


(Pablo_Wawa) #4

Popraw linię

if (liczba
na

[code]if (liczba!=0 && liczba i gotowe. @balcer656 - masz rację, brakuje inicjalizacji zmiennej liczba przed pętlą
[code]liczba=1;

(cokolwiek), ale gość widać że nie potrafi programować, więc nie wiem, czy to załapie. :frowning:


(Bolkowice10) #5

tak wiem, Ale niestety programy sprawdza nam soft jakis który tego nie przepuszcza... więc poszukuje innych pomysłów.


(Copycona) #6

Ten kod jest nieprawidłowy. Kompilator rzuca takie dwa spore ostrzeżenia, które dotyczą błędu tego samego typu:

1.cpp||In function 'int main()':|

1.cpp|6|warning: 'liczba' is used uninitialized in this function [-Wuninitialized]|

1.cpp|12|warning: 'min' may be used uninitialized in this function [-Wmaybe-uninitialized]|

||=== Build finished: 0 errors, 2 warnings ===|

Odczytujesz niezainicjalizowane zmienne lokalne.

Jeżeli chodzi o zmienną liczba - zamiast pętli while zastosuj do while.

Co do poprawienia kwestii 'min' przydała by się jakaś flaga, czy co najmniej jedna liczba została wczytana. Jeżeli nie zamiast instrukcji porównania należy od razu zastosować instrukcję przypisania, jeżeli natomiast to druga i kolejna liczba to tak jak masz to napisane aktualnie.


(Pablo_Wawa) #7

To kod

if (liczba
min=liczba;

zastąp takim

if (liczba==0);

else

if (liczba
min=liczba;

Może to przepuści ten kompilator?


(Frankfurterium) #8

Jeżeli rozchodzi się o samo (nie twierdzę, że ładne) obejście && liczba != 0, możesz

while (1 == 1) { // nie pamiętam, czy w C++ można robić "puste" warunki

  cin >> liczba;

  if (liczba == 0) break;

  if (liczba < min) min = liczba;  

}

(balcer656) #9

@Frankfurterium, na pewno można wpisać true w warunku


([alex]) #10

Od groma wypowiedzi, zaś nikt nie zauważył braku początkowej inicjalizacji min.

#include 

using namespace std;

int main()

  {

   int min=0;

   while(true)

     {

      int liczba,

      cin>>liczba;

      if(!liczba) break;

      if((!min)||(min>liczba)) min=liczba;

     }

   cout<
   return 0;

  }

(Copycona) #11

[alex] - hm, a mój post? :wink: Inaczej to widziałem, ale zwróciłem uwagę na kwestię braku inicjalizacji zmiennej min.


([alex]) #12

Heh, racja, przeoczyłem. W takim razie te mądrale co pisali po twoim poście to jacyś żartownisie czy sabotażyści?


([alex]) #13

Zaś na stwierdzenia nic nie wnoszące jest spore zapotrzebowanie, dobrze rozumiem?