Program kasa

0

Program kasa działa - ale pod koniec 1 grosz wyskakuje w jakiś dziwnych znaczkach jak sobie z tym poradzić ???

//bilbioteki
#include <iostream>
#include <fstream>
#include <conio.h>
#include <stdio.h> 
#include <math.h> 
#include <iomanip>
#include <cstdio>
////bilbioteki
using namespace std;
 
main()
//deklaracja zmiennych
      {
      int kwota_poczatkowa=200, i=0;
      float reszta, cena_do_zaplaty;
      float n[13];
      signed int in[13];
//deklaracja zmiennych
      ofstream plik;//deklaracja funkcji pliku do zapisu
//banknoty/monety      
      n[0]=100;
       n[1]=50;
        n[2]=20;
         n[3]=10;
          n[4]=5;
           n[5]=2;
            n[6]=1;
             n[7]=0.5;
              n[8]=0.2;
               n[9]=0.1;
                n[10]=0.05;
                 n[11]=0.02;
                  n[12]=0.01;
 
 
//ilosc banknotow/monet      
      in[0]=3;
       in[1]=5;
        in[2]=20;
         in[3]=1;
          in[4]=1;
           in[5]=1;
            in[6]=1; 
             in[7]=1; 
              in[8]=1; 
               in[9]=1; 
                in[10]=1; 
                 in[11]=1; 
                  in[12]=1;    
 
 
      plik.open("plik.txt");//otwarcie pliku do zapisu
 cout<<"PROGRAM KASA"<<endl;
      //1 wpisanie kwoty początkowej
      cout<<"podaj wartosc z ktorej automat ma wydac: ";
      cin>>kwota_poczatkowa;
      //1 wpisanie kwoty początkowej
 
      //2 podanie ceny do zapłaty
      cout<<"podaj cene do zaplaty: ";
      cin>>cena_do_zaplaty;
      //2 podanie ceny do zapłaty
 
      //3 wypis do pliku plik.txt
      plik<<"zaplacono: "<<cena_do_zaplaty<<endl;
      plik<<"wartosc z ktorej  wydac: "<<kwota_poczatkowa<<endl;
      //3 wypis do pliku plik.txt
 
      //4 zaokrąglanie aby pozbyć się błędu z 1 groszem
      reszta=kwota_poczatkowa-cena_do_zaplaty;
      //4 zaokrąglanie aby pozbyć się błędu z 1 groszem
 
      //5 gdy reszta jest większa od 0 i i mniejsze niż 13 
      while((reszta>0) && (i<13))
      //5 gdy reszta jest większa od 0 i i mniejsze niż 13 
 
      //6 
            {
            if((reszta>=n[i]) && (in[i]>0)) // jesli reszta jest wieksze równe n[i] i in[i] większe od 0 to
                    {
     //7 zapis do pliku plik.txt i wypisanie na ekranie 
                    plik<<"wydano: "<<n[i]<<endl;
                    cout<<"wydano: "<<n[i]<<" zl"<<endl;
     //7 zapis do pliku plik.txt i wypisanie na ekranie 
 
     //8 zaokrąglanie aby pozbyć się błędu z 1 groszem
                    
                  //  reszta = floorf((reszta-n[i])*100 + 0.5) / 100;
                  reszta=reszta-n[i];
                    //* 100 + 0.5) / 100;
     //8 zaokrąglanie aby pozbyć się błędu z 1 groszem
   
                    cout<<"ilosc banknotow poczatkowych : "<<in[i]<<endl;
                    if (in[i]>0)
                       {
                       in[i]=in[i]-1; 
                       }
                  
                    cout<<"zostalo do wydania"<< setprecision(4)<<reszta<<" zl"<<endl;
                    cout<<"ilosc pozostalych banknotow :"<<in[i]<<endl;
                    cout<<"indeks banknotu : "<<i<<endl;
                    cout<<""<<endl;
                    getch();
                    }
            else //w przeciwnym razie
                    {
                    i++;
                    }    
           }
 
 
           if (reszta>0)
              {
               cout<<"nie udalo sie wydac - zostalo "<<reszta<<endl;    
              }
 
 
           else//w przeciwnym razie
              {
              cout<<"wydano cala naleznosc - zostalo "<<reszta<<endl;//koniec
              cout<<"dziengi"<<endl;
              }
 
 
        plik.close();
        getch();
        }
0

Napisać ten program po ludzku, osobiście na tym forum podałem ze 3 wersji tego programu.

0

Czemu jesteś tak negatywnie nastawiony? - Skończyłem swój program i myślę że przyda się innym użytkownikom


//bilbioteki
#include <iostream>
#include <fstream>
#include <conio.h>
#include <stdio.h> 
#include <math.h> 
#include <iomanip>
#include <cstdio>
////bilbioteki
using namespace std;
 
main()
//deklaracja zmiennych
      {
      int kwota_poczatkowa=200, i=0;
      float reszta, cena_do_zaplaty;
      float n[13];
      signed int in[13];
//deklaracja zmiennych
      ofstream plik;//deklaracja funkcji pliku do zapisu
//banknoty/monety      
      n[0]=10000;
       n[1]=5000;
        n[2]=2000;
         n[3]=1000;
          n[4]=500;
           n[5]=200;
            n[6]=100;
             n[7]=50;
              n[8]=20;
               n[9]=10;
                n[10]=5;
                 n[11]=2;
                  n[12]=1;
 
 
//ilosc banknotow/monet      
      in[0]=3;
       in[1]=5;
        in[2]=20;
         in[3]=1;
          in[4]=1;
           in[5]=1;
            in[6]=1; 
             in[7]=1; 
              in[8]=1; 
               in[9]=1; 
                in[10]=1; 
                 in[11]=1; 
                  in[12]=1;    
 
 
      plik.open("plik.txt");//otwarcie pliku do zapisu
 cout<<"PROGRAM KASA"<<endl;
      //1 wpisanie kwoty początkowej
      cout<<"podaj wartosc z ktorej automat ma wydac: ";
      cin>>kwota_poczatkowa;
      //1 wpisanie kwoty początkowej
 kwota_poczatkowa*100;
      //2 podanie ceny do zapłaty
      cout<<"podaj cene do zaplaty: ";
      cin>>cena_do_zaplaty;
      //2 podanie ceny do zapłaty
 
      //3 wypis do pliku plik.txt
      plik<<"zaplacono: "<<cena_do_zaplaty<<endl;
      plik<<"wartosc z ktorej  wydac: "<<kwota_poczatkowa<<endl;
      //3 wypis do pliku plik.txt
 
      //4 zaokrąglanie aby pozbyć się błędu z 1 groszem
      reszta=kwota_poczatkowa*100-cena_do_zaplaty*100; // zwiekszyłem sobie liczby o *100 aby obliczał bez przecinków 
      //4 zaokrąglanie aby pozbyć się błędu z 1 groszem
 
      //5 gdy reszta jest większa od 0 i i mniejsze niż 13 
      while((reszta>0) && (i<13))
      //5 gdy reszta jest większa od 0 i i mniejsze niż 13 
 
      //6 
            {
            if((reszta>=n[i]) && (in[i]>0)) // jesli reszta jest wieksze równe n[i] i in[i] większe od 0 to
                    {
     //7 zapis do pliku plik.txt i wypisanie na ekranie 
                    plik<<"wydano: "<<n[i]/100<<endl;
                    cout<<"wydano: "<<n[i]/100<<" zl"<<endl;
     //7 zapis do pliku plik.txt i wypisanie na ekranie 
 
     //8 zaokrąglanie aby pozbyć się błędu z 1 groszem
                    
                  //  reszta = floorf((reszta-n[i])*100 + 0.5) / 100; - sposób 2  
                  reszta=reszta-n[i];
                    //* 100 + 0.5) / 100; - sposób 2
     //8 zaokrąglanie aby pozbyć się błędu z 1 groszem
   
                    cout<<"ilosc banknotow poczatkowych : "<<in[i]<<endl;
                    if (in[i]>0)
                       {
                       in[i]=in[i]-1; 
                       }
                  
                    cout<<"zostalo do wydania : "<<reszta/100<<" zl"<<endl;
                    cout<<"ilosc pozostalych banknotow :"<<in[i]<<endl;
                    cout<<"indeks banknotu : "<<i<<endl;
                    cout<<""<<endl;
                    getch();
                    }
            else //w przeciwnym razie
                    {
                    i++;
                    }    
           }
 
 
           if (reszta>0)
              {
               cout<<"nie udalo sie wydac - zostalo "<<reszta<<endl;    
              }
 
 
           else//w przeciwnym razie
              {
              cout<<"wydano cala naleznosc - zostalo "<<reszta<<endl;//koniec
              cout<<"dziengi"<<endl;
              }
 
 
        plik.close();
        getch();
        }
0
maciejdorynek95 napisał(a):

Czemu jesteś tak negatywnie nastawiony?
Temu:

#include <fstream>
#include <iomanip>
#include <iostream>
#include <algorithm>
using namespace std;
 
int main()
  {
   struct _content_ { unsigned coin,count; } content[]=
     {
                  {20000,0}, {10000,3}, 
        {5000,5}, {2000,20}, {1000,1},
        {500,1},  {200,1},   {100,1},
        {50,1},   {20,1},    {10,1},
        {5,1},    {2,1},     {1,1},
     };
   ofstream fout("plik.txt");
   cout<<"podaj wartosc z ktorej automat ma wydac: ";
   double value,price;
   if(!(cin>>value)) return 1;
   cout<<"podaj cene do zaplaty: ";
   if(!(cin>>price)) return 1;   
   fout<<"zaplacono: "<<price<<endl;
   fout<<"wartosc z ktorej  wydac: "<<value<<endl;
   unsigned rest=(unsigned)((value-price)*100+0.5);
   cout<<"do wydania: "<<fixed<<setprecision(2)<<rest/100.0<<" zl"<<endl;
   for(unsigned p=0;p<sizeof(content)/sizeof(*content);++p)
     {
      unsigned cnt=min(content[p].count,rest/content[p].coin);
      if(cnt)
        {
         fout<<"wydano: "<<cnt<<" * "<<fixed<<setprecision(2)<<content[p].coin/100.0<<" zl"<<endl;
         cout<<"wydano: "<<cnt<<" * "<<fixed<<setprecision(2)<<content[p].coin/100.0<<" zl"<<endl;
         rest-=cnt*content[p].coin;
         //cout<<"\tilosc banknotow poczatkowych: "<<content[p].count<<endl;
         content[p].count-=cnt;
         cout<<"zostalo do wydania: "<<fixed<<setprecision(2)<<rest/100.0<<" zl"<<endl;
         //cout<<"\tilosc pozostalych banknotow: "<<content[p].count<<endl;
         //cout<<"\tindeks banknotu: "<<p<<endl<<endl;
        }
     }
   if(rest>0) cout<<"nie udalo sie wydac - zostalo: "<<fixed<<setprecision(2)<<rest/100.0<<" zl"<<endl;    
   else cout<<"wydano cala naleznosc"<<endl;
   return 0;
  }

1 użytkowników online, w tym zalogowanych: 0, gości: 1