barrok Temat założony przez niniejszego użytkownika |
Poziom 1 rozdział 11 - zadanie » 2016-04-21 00:01:26 Witam serdecznie, poniżej jest program, który napisałem w ramach zadania do lekcji 11 z poziomu 1. W zasadzie program kompiluje się dobrze z wyjątkiem jednej rzeczy, tj. pod czas wczytywania danych jeśli podamy wartość wyższą od 100, następuje błąd. Domyślam się, że należało by określić, że wartość wprowadzanych zmiennych unsigned d, e i f nie może być większa niż 100, ale jak to zrobić? Nie wiem czy coś przeoczyłem, czy po prostu na tym etapie kursu takie zagadnienia nie były jeszcze omawiane. Wracałem do wcześniejszych lekcji i nie udało mi się znaleźć odpowiedzi... #include <iostream> #include <limits>
int main()
{ std::cout << " Mamy trzy taczki z weglem po 100 kg\n"; int a, b, c; a = 100; b = 100; c = 100; unsigned d; std::cout << " Ile wegla chcesz odsypac z taczki A? " << std::endl; std::cout << " Podaj ilosc = "; std::cin >> d; std::cout << " Wczytano? " << std::cin.good() << std::endl; std::cout << " W taczce A zostanie " << a - d << " kg wegla " << std::endl << std::endl; std::cin.clear(); std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' ); unsigned e; std::cout << " Ile wegla chcesz odsypac z taczki B? " << std::endl; std::cout << " Podaj ilosc = "; std::cin >> e; std::cout << " Wczytano? " << std::cin.good() << std::endl; std::cout << " W taczce B zostanie " << b - e << " kg wegla " << std::endl << std::endl; std::cin.clear(); std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' ); unsigned f; std::cout << " Ile wegla chcesz odsypac z taczki C? " << std::endl; std::cout << " Podaj ilosc = "; std::cin >> f; std::cout << " Wczytano? " << std::cin.good() << std::endl; std::cout << " W taczce C zostanie " << c - f << " kg wegla " << std::endl << std::endl; std::cin.clear(); std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' ); return 0; }
|
|
Gibas11 |
» 2016-04-21 00:08:24 Użyj pętli do...while i powtarzaj ją dla każdego wczytania danych jeżeli wprowadzona liczba >100, ew. jeszcze jakiś ładny komunikat o przekroczeniu maksymalnej dozwolonej wartości i powinno być ok. |
|
barrok Temat założony przez niniejszego użytkownika |
» 2016-04-21 21:49:36 Dzięki za szybką odpowiedź, chociaż to o czym napisałeś (pętla do...while) pojawia się w 1 lekcji w poziomie 2. Chyba trochę za ambitnie podszedłem do tego ćwiczenia ;) Chyba, że jest jeszcze jakieś inne, proste rozwiązanie? |
|
Rashmistrz |
» 2016-04-21 22:46:52 a - d , b - e , c - f . Pojęcie zmiennej i podstawowe typy danych Typy danych (Zakresy wartości) W skrócie powiem: Gdy odejmujesz liczbę większą od mniejszej to otrzymujesz ujemną. Jako że liczba jest ujemna, a operujesz na zmiennej bez znaku, a sama zmienna przechowuje jedynie wartości nieujemne to następuje zjawisko podobne do przekręcenia się licznika w samochodzie... |
|
barrok Temat założony przez niniejszego użytkownika |
» 2016-04-23 23:41:57 Ok, więc zastosowałem inny typ zmiennej, tj. float. Jest dobrze poza jednym mankamentem, tzn. jak wpisuje się liczbę z ułamkiem po przecinku to nie respektuje wartości po przecinku. Zamiast przecinka musi być kropka. Jednak na tym etapie wiedzy, nie jestem w stanie wymyślić jak to inaczej zapisać. #include <iostream> #include <limits>
int main()
{ std::cout << " Mamy trzy taczki z weglem po 100 kg\n"; int a, b, c; a = 100; b = 100; c = 100; float d; std::cout << " Ile wegla chcesz odsypac z taczki A? " << std::endl; std::cout << " Podaj ilosc = "; std::cin >> d; std::cout << " Wczytano? " << std::cin.good() << std::endl; std::cout << " W taczce A zostanie " << a - d << " kg wegla " << std::endl << std::endl; std::cin.clear(); std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' ); float e; std::cout << " Ile wegla chcesz odsypac z taczki B? " << std::endl; std::cout << " Podaj ilosc = "; std::cin >> e; std::cout << " Wczytano? " << std::cin.good() << std::endl; std::cout << " W taczce B zostanie " << b - e << " kg wegla " << std::endl << std::endl; std::cin.clear(); std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' ); float f; std::cout << " Ile wegla chcesz odsypac z taczki C? " << std::endl; std::cout << " Podaj ilosc = "; std::cin >> f; std::cout << " Wczytano? " << std::cin.good() << std::endl; std::cout << " W taczce C zostanie " << c - f << " kg wegla " << std::endl << std::endl; std::cin.clear(); std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' ); return 0; } |
|
carlosmay |
» 2016-04-24 13:22:42 Zamiast przecinka musi być kropka. |
Bo tak jest w C++. Aby można było używać przecinka należy włączyć polską stronę kodową dla strumieni. Witam serdecznie, poniżej jest program, który napisałem w ramach zadania do lekcji 11 z poziomu 1. |
Ten kod nie ma nic wspólnego z zadaniem z lekcji 11 (wielokrotne przypisanie, którego tutaj nie ma). |
|
barrok Temat założony przez niniejszego użytkownika |
» 2016-04-24 21:38:10 Nie bardzo rozumiem. cytat z lekcji: "Wielokrotne przypisanie służy do przypisywania kilku zmiennym tej samej wartości. Przykładowo: chcemy mieć trzy wyniki obliczeń i wszystkie wyniki mają mieć początkową wartość równą 0." Przecież w kodzie są wyraźnie zapisane trzy zmienne, tj. int a, b, c o tej samej wartości czyli 100... { std::cout << " Mamy trzy taczki z weglem po 100 kg\n"; int a, b, c; a = 100; b = 100; c = 100;
Chyba, że ja coś źle pojmuję... |
|
carlosmay |
» 2016-04-24 22:52:09 Przecież w kodzie są wyraźnie zapisane trzy zmienne, tj. int a, b, c o tej samej wartości czyli 100... |
Ale nie o to z tym chodzi.Wielokrotne przypisanie: czyli jedna zmienna ma przypisaną wartość, a pozostałe z nich przypisane są kolejno od poprzedniej. Wróć do lekcji. Jest tam opisane wielokrotne przypisanie.Nie wiedziałem, że to jest wielokrotne przypisanie. Mój błąd: int x1, y1, z1; x1 = 0; y1 = 0; z1 = 0;
|
|
|
« 1 » |