• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Liczby wymierne C++

Object Storage Arubacloud
0 głosów
6,013 wizyt
pytanie zadane 28 stycznia 2017 w C i C++ przez Alcomats Użytkownik (580 p.)
Witam, aktualnie jestem na 3 odcinku " Kurs C++ odc. 3: Pętla: for, while, do..while. Pętle wyjaśnione". Zrozumiałem już całą pętle. Zawsze po przerobionym odcinku sam sobie wymyślam program jaki chce stworzyć. Po tym odcinku wpadłem na pomysł by zrobić program tankowania benzyny i wszystko ładnie pięknie z tym, że jak wiemy zarówno cena jak i litry benzyny zwiekszaja sie na dystrybutorach po przecinku czyli np 0,01l = 0,456zł lub 1l = 4,56zł. Domyślam sie ze chodzi o funkcje glowna "INT" - ktora odpowiada za to zeby wyswietlaly sie tylko liczby naturalne w wynikach. Co zrobic gdy chce zeby pokazywaly sie liczby wymierne czyli po przecinku w wynikach ?

2 odpowiedzi

0 głosów
odpowiedź 28 stycznia 2017 przez niezalogowany

To nie tak. Zapis:

int main()
{
  return 0;
}

Oznacza że funkcja zwróci liczbę całkowitą, zwracany typ funkcji main() nie ma wpływu na typ drukowanych wyników, zwracana wartość to coś co się nazywa errorlevel http://ss64.com/nt/errorlevel.html

Jeżeli chcesz mieć liczny zmiennoprzecinkowe, to musisz skorzystać z np typu float, poczytaj: http://cpp0x.pl/kursy/Kurs-C++/Poziom-1/Pojecie-zmiennej-i-podstawowe-typy-danych/11

0 głosów
odpowiedź 28 stycznia 2017 przez Michał Muzyka Pasjonat (24,080 p.)
Cześć, aby zrealizować to musisz użyć zmiennych typu float. Zmienna int - przechowuje liczby całkowite, gdy podasz w niej liczbę zmiennoprzecinkową, to część po przecinku zostanie ucięta. Zmienna float oraz double przechowuje liczby przecinkowe czyli np. 0,12 itd.
komentarz 28 stycznia 2017 przez Alcomats Użytkownik (580 p.)

Okej działa dziękuje bardzo! Lecz mam jeszcze jedno pytanie w warunku while wpisałem czarno na białym, że pętla ma się powtarzać do momentu kiedy osiągnie wartość "kasa". Lecz w programie pokazuje mi wartość wiekszą od wpisanej. Wpisane miałem 10 a pokazuje 10,054. Dam screena dla podglądu :

komentarz 28 stycznia 2017 przez czujek22 Dyskutant (7,670 p.)
Dzieje się tak, ponieważ najpierw sprawdzany jest warunek, potem wykonywane instrukcje. Czyli przyjdzie moment, gdy pieniądze bedą miały wartosc np 9,95 czyli warunek pieniądze<kasa bedzie spełniony i instrukcja pieniądze=pieniądze+0,457 zostanie wykonana i wtedy dopiero petla zostanie przerwana bo warunek juz sie nie bedzie spełniał ale pieniądze bedą wynosiły 10,3.. zł.

Oczywiście są inne wartosci ale dalem tylko przyklad,
komentarz 28 stycznia 2017 przez Alcomats Użytkownik (580 p.)
Okej rozumiem, czyli jaki zapis/funkcje byś zastosował ?
1
komentarz 28 stycznia 2017 przez Michał Muzyka Pasjonat (24,080 p.)

dodałbym pomocniczego ifa przed dodawaniem np:
 

if(pieniadze+0,457 > kasa)
         break;

 

komentarz 28 stycznia 2017 przez Alcomats Użytkownik (580 p.)

Michał Muzyka, jak używam pomocniczego ifa tego którego przedstawiłeś to faktycznie gotówka zwiększa sie tylko do "kasa" ale program sie kończy i mam pustą konsole. Wyśle tobie cały kod, może jak będziesz miał czas to wkleisz do codeblocksa i pokombinujesz :)

 

#include <iostream>
#include <windows.h>
#include <cstdlib>

using namespace std;

float pieniadze=0; float litry=0; int kasa;


int main()
{
    cout<< "Za ile pieniedzy chcesz zatankowac[zl]: ";
    cin>>kasa;

   while(pieniadze<kasa)
   {
       Sleep (50);
       system("cls");
        litry=litry+0.1;
        pieniadze = pieniadze+0.457;


       cout<<"Litry:     "<<litry<<" [l]"<<endl;
       cout <<"Pieniadze: "<<pieniadze<<" [zl]"<<endl;
   }

    return 0;
}

 

komentarz 28 stycznia 2017 przez Michał Muzyka Pasjonat (24,080 p.)

Wystarczyło troche zmienić kolejność wyrażeń:
 

#include <iostream>
#include <windows.h>
#include <cstdlib>

using namespace std;

float pieniadze=0; float litry=0; int kasa;


int main()
{
    cout<< "Za ile pieniedzy chcesz zatankowac[zl]: ";
    cin>>kasa;

   while(pieniadze<kasa)
   {
       if( pieniadze+0.457 > kasa)
            break;

        Sleep (50);
       system("cls");

        litry=litry+0.1;
        pieniadze = pieniadze+0.457;


       cout<<"Litry:     "<<litry<<" [l]"<<endl;
       cout <<"Pieniadze: "<<pieniadze<<" [zl]"<<endl;
   }

    return 0;
}

 

komentarz 28 stycznia 2017 przez Alcomats Użytkownik (580 p.)
hehe ok wszystko ładnie pięknie lecz program też nie dopełnia do pełnej kwoty np 10zł, fakycznie nie przekracza jej tak jak jest to zapisane w warunku lecz teraz kiedy wpisałem 10, to pokazuje kwote 9,597. Więc niestety nie załatwiło to problemu.
komentarz 28 stycznia 2017 przez niezalogowany
Mnożąc liczbę 0,457 nigdy nie uzyskasz równych 10 zł, a jeżeli chcesz aby program wyliczał taką ilość benzyny za dokładnie podaną kwotę to zaprogramuj to.
komentarz 28 stycznia 2017 przez Michał Muzyka Pasjonat (24,080 p.)
#include <iostream>
#include <windows.h>
#include <cstdlib>

using namespace std;

float pieniadze=0; float litry=0; int kasa;

void show()
{
    Sleep (50);
    system("cls");
    cout<<"Litry:     "<<litry<<" [l]"<<endl;
    cout <<"Pieniadze: "<<pieniadze<<" [zl]"<<endl;
}

int main()
{
    cout<< "Za ile pieniedzy chcesz zatankowac[zl]: ";
    cin>>kasa;
           system("cls");

   while(pieniadze<kasa)
   {
       if( pieniadze+0.457 > kasa)
       {
           float tmp =kasa - pieniadze;
           float s = tmp / 0.457;
           float t = 0.1 * s;
           litry += t;
           pieniadze = kasa;
           break;
       }

        litry=litry+0.1;
        pieniadze = pieniadze+0.457;

        show();
   }

   show();
    return 0;
}

 

Podobne pytania

0 głosów
2 odpowiedzi 893 wizyt
pytanie zadane 9 maja 2018 w C i C++ przez koniak20 Początkujący (390 p.)
0 głosów
3 odpowiedzi 1,953 wizyt
pytanie zadane 28 marca 2017 w C i C++ przez Kenzy Obywatel (1,160 p.)
0 głosów
2 odpowiedzi 5,901 wizyt
pytanie zadane 8 lutego 2017 w C i C++ przez maciek061 Gaduła (4,490 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...