Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Poziom 1 rozdział 11 - zadanie

Ostatnio zmodyfikowano 2016-04-24 22:52
Autor Wiadomość
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...  

C/C++
#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;
}
P-147478
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.
P-147479
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?
P-147522
Rashmistrz
» 2016-04-21 22:46:52
coś przeoczyłem
a - d
,
b - e
,
c - f
.

» Kurs C++ » Poziom 1Pojęcie zmiennej i podstawowe typy danych lekcja
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...
P-147527
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ć.

C/C++
#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;
}
P-147573
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).
P-147596
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...

C/C++
{
    std::cout << " Mamy trzy taczki z weglem po 100 kg\n";
   
    int a, b, c;
    a = 100;
    b = 100;
    c = 100;
   
    // itd......

Chyba, że ja coś źle pojmuję...
P-147619
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:
C/C++
//Sposób drugi:
int x1, y1, z1;
x1 = 0;
y1 = 0;
z1 = 0;
P-147625
« 1 »
  Strona 1 z 1