proszę o wytłumaczenie tego programu - program kasa -poprawiony wątek

0

Jak w temacie proszę o wytłumaczenie tego programu do końca bo trochę sobie potłumaczyłem w komunikatach między wersami kodów lecz dalszej części nie rozumiem i wołam o pomoc :)

//bilbioteki
#include <iostream>
#include <fstream>
#include <conio.h>
#include <stdio.h> 
#include <math.h> 
////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
      
      //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 automat ma wydac: "<<kwota_poczatkowa<<endl;
      //3 wypis do pliku plik.txt
      
      //4 zaokrąglanie aby pozbyć się błędu z 1 groszem
      reszta=floorf((kwota_poczatkowa-cena_do_zaplaty) * 100 + 0.5) / 100; 
      //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]<<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; 
     //8 zaokrąglanie aby pozbyć się błędu z 1 groszem
     
                    cout<<"in[i]: "<<in[i]<<endl;
                    if (in[i]>0)
                       {
                       in[i]=in[i]-1; 
                       }
					cout<<"zostalo: "<<reszta<<endl;
                    cout<<"in[i]: "<<in[i]<<endl;
                    cout<<"i: "<<i<<endl;
                    }
			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
              }
              
              
        plik.close();
        getch();
        }
0

Czego konretnie nie rozumiesz?

0

tego

 cout<<"in[i]: "<<in[i]<<endl;
                    if (in[i]>0)
                       {
                       in[i]=in[i]-1; 
                       }
                    cout<<"zostalo: "<<reszta<<endl;
                    cout<<"in[i]: "<<in[i]<<endl;
                    cout<<"i: "<<i<<endl;
                    }
            else //w przeciwnym razie
                    {
                    i++;
                    }    
0

Jeżeli wydana moneta 1zł to zmniejszasz ilość dostępnych monet 1zł o jeden. Jeżeli nie wieszcz co to cout lub i++ to zacznij od przeczytania byle jakiego kursu pierwszych max dwie strony.

0

To jest zachłanny algorytm na wydawanie reszty, z tego co widzę. Miejsce które oznaczyłeś jako niezrozumiałe dla Ciebie ma już wcześniej sprawdzone czy ten nominał który znajduje się w n[i] jest mniejszy do reszty (czyli można go wydać) i teraz musi sprawdzić czy jeszcze ma takie nominały. To ile ma danych nominałów znajduje się w tablicy 'in[]', jeśli jeszcze jest to odejmuje jeden i wypisuje że to zrobił. To else jak mniemam odnosi się do wcześniejszego warunku
if((reszta>=n[i]) && (in[i]>0))
Jeśli ten warunek nie jest spełniony to przechodzimy do kolejnego nominału ( mniejszego )

Pozdrawiam , rjiuk

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