skibixd Temat założony przez niniejszego użytkownika |
Największa i najmniejsza liczba z podanych » 2016-02-29 09:51:50 Witam, mam do napisania program, na któego wejściu użytkownik podaje liczby (po spacji), a na wyjściu program zwraca najmniejszą i największą liczbę. Mam pomysł aby to na tablicy, najpierw podajemy liczbę, która staje się wymiarem tablicy, ale jak to zrobić bez tablicy? |
|
carlosmay |
» 2016-02-29 10:03:43 ale jak to zrobić bez tablicy? |
Operator >> wczytuje dane domyślnie pomijając znaki odstępu. Można w pętli pobierać kolejne liczby do zmiennej tymczasowej. Następnie instrukcją warunkową sprawdzać maksimum i minimum. while( std::cin >> zmienna ) { std::cout << zmienna << ' '; } Wejście: 1 2 3 4 5 . Wyjście: 1 2 3 4 5 . |
|
skibixd Temat założony przez niniejszego użytkownika |
» 2016-02-29 10:16:36 Mógłbyś napisać taki programik? Albo chociaż część, by mógłbym sobie to przeanalizować? Bardzo proszę... |
|
carlosmay |
» 2016-02-29 10:23:20 chociaż część, by mógłbym sobie to przeanalizować |
Już jest najważniejsza część. W pętli zamiast wypisać trzeba porównać pobraną wartość i zaktualizować zmienne maks i min (jeśli potrzeba). |
|
skibixd Temat założony przez niniejszego użytkownika |
» 2016-02-29 10:42:05 #include <iostream>
using namespace std;
int main() { int mini = 0, maks = 0, liczba; while( cin >> liczba ) { if( liczba > maks ) maks = liczba; else( liczba < mini ) mini = liczba; } cout << maks << endl; cout << mini << endl; return 0; }
Co zrobiłem nie tak? :( Edit: #include <iostream>
using namespace std;
int main() { int min, max, liczba; while( cin >> liczba ) { if( liczba > max ) max = liczba; if( liczba < min ) min = liczba; } cout << max << endl; cout << min << endl; return 0; } Ok, powiedzmy, że działa, ale dopiero po wpisaniu jakiegoś innego znaku pokazuje min i max. Rozumiem, że nie mam warunku wyjścia z pętli? Co zrobić aby wciśnięcie ENTER powodowało wyjście z pętli? |
|
mateczek |
» 2016-02-29 11:03:51 kilka rzeczy 1 inicjalizacja zmiennej min, max wartością zero nie jest dobrym pomysłem !!! bo z takiego ciągu: {1 4 3} max=4 a min=0. z takiego ciągu -4 -6 -1; max=0 a min -6 2 else if( liczba < mini ) mini = liczba;
3 program while( cin >> liczba ) jest poprawny i jak najbardziej nadaje się na serwisy testujące jak SPOJ. Jednak normalnie strumień Ci będzie permanentnie czekał na dane wejściowe, i będzie to wyglądało jakby się zawiesił ctrl+D kończy oczekiwanie i wypluje wynik #include <iostream> #include <string> #include <sstream>
using namespace std;
int main() { string s; stringstream ss; getline( cin, s ); ss << s; int min, max; ss >> min; max = min; int liczba; while( ss >> liczba ) { if( liczba > max ) max = liczba; else if( liczba < min ) min = liczba; } cout << max << endl; cout << min << endl; return 0; }
|
|
carlosmay |
» 2016-02-29 11:30:48 Co zrobić aby wciśnięcie ENTER powodowało wyjście z pętli? |
Jednak normalnie strumień Ci będzie permanentnie czekał na dane wejściowe, i będzie to wyglądało jakby się zawiesił |
Wystarczy dodać warunek kończący, np. dodać licznik wpisanych liczb lub dla dodatnich wpisać ujemną lub poprostu wpisać po znak (nie liczbę). Co do inicjalizacji wystarczy pobrać pierwszą i nią zainicjalizować maks i min (czy to przed pętlą, czy w pętli - to już kwestia wyboru). |
|
skibixd Temat założony przez niniejszego użytkownika |
» 2016-02-29 12:20:41 mateczek, dziękuję Ci. Wszystko było ok, program nie zaliczał poprawności mojego kodu bo min i max miały być w jednym wierszu. |
|
« 1 » 2 |