Pracovníci, kterí chystají zamestnancum výplaty, potrebují vedet, kolik bankovek a mincí od kazdého druhu budou potrebovat, aby bylo mozno kazdému vyplatit presnou cástku. Proto se sestavují výcetky platidel, kde je kazdá cástka rozepsána na jednotlivé bankovky a mince a jejich pocty se potom sectou a vyzádají v bance.
Napiste program, který bude ze souboru císt pro kazdého pracovníka následující data (oddelená bezným zpusobem, tj. jedním nebo více bílými znaky):
h = v hotovosti, u =
prevést na bankovní úcet, p = zaslat postovní poukázkou)Pro kazdý prectený záznam program vypíse ve vhodném formátu príjmení, jméno (v tomto poradí odchylném od poradí na vstupu) a plat. Pri výplate v hotovosti rozepíse cástku na jednotlivé bankovky a mince, pri výplate na úcet nebo postou pouze uvede zpusob úhrady (slovne, ne pouze kód).
Na záver program vypíse rekapitulaci: sumární cástku vyplacenou vsem v hotovosti, její rozepsání na jednotlivá platidla (pocet x hodnota = cástka v daném platidle), dále sumární cástku prevedenou na bankovní úcty a sumární cástku zaslanou postou.
vycetka.c
h u p, ohlaste do výsledné sestavy chybu, peníze nezahrnte do zádné
sumy a pokracujte dál s tím, ze po zpracování program skoncí s
nenulovým výsledkovým kódem. main rozliste jednotlivé
typy chyb (neexistující/neprístupný soubor, chybný pocet parametru,
chybný kód zpusobu platby). aisa.
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<ctype.h>
#include<stdlib.h>
FILE *in,*out;
char meno[30],prijmeni[30],sposob;
long int plat,hotovost,ucet,posta;
unsigned int peniaze[]={5000,2000,1000,500,200,100,50,20,10,5,2,1},
celkovo[12],kusy[12];
int i,j,ende;
/*----------------------------MINCOVKA---------------------------------------*/
int mincovka(int suma)
{return 0;}
/*=============================MAIN==========================================*/
int main(int argc,char *argv[])
{
if(argc<3)
{printf("Zadaj parametre: vstupny subor a vystupny subor; ");return 1;}
if(argc>=3)
{if((in=fopen(argv[1],"r"))==NULL)
{printf("CHYBA: Vstupny subor sa nepodarilo otvorit.");return 2;}
if((out=fopen(argv[2],"w"))==NULL)
{printf("CHYBA: Vystupny subor sa nepodarilo vytvorit");
fclose(in);return 2;}
}
fprintf(out,"\n Vypis bankoviek a minci potrebnych na vyplaty\n");
fprintf(out,"\nPRIEZVISKO\n");
fprintf(out,"MENO PLAT ");
while(peniaze[i]!=0)
{
fprintf(out,"%5d",peniaze[i]);
i++;
}
fprintf(out,"\n--------"
"-----------------------------------------------------------------------\n");
while( fscanf(in,"%s %s %ld %c",meno,prijmeni,&plat,&sposob)!=EOF)
{
meno[10]='\0';
prijmeni[20]='\0';
fprintf(out,"%-21s\n%-11s %5ld: ",prijmeni,meno,plat);
if (sposob=='p') {fprintf(out,"Zaslane poukazkou.");posta+=plat;}
if (sposob=='u') {fprintf(out,"Prevod na ucet.");ucet+=plat;}
if ((sposob!='h')&&(sposob!='p')&&(sposob!='u'))
{fprintf(out,"Chybny sposob platby: %c",sposob);ende=4;}
i=0;
if (sposob=='h')
{hotovost+=plat;
while(peniaze[i]!=0)
{ kusy[i]=(int)(plat/peniaze[i]);
plat-=kusy[i]*peniaze[i];
celkovo[i]+=kusy[i];
fprintf(out,"%5d",kusy[i]);
i++;
}
}
fprintf(out,"\n");
};
/*---------------------- KONECNY VYPIS ----------------------------------*/
fprintf(out,
"\nREKAPITULACIA:\n\n"
"Celkovo vyplatene v hotovosti: %6ld Kc , a to v \n\n"
,hotovost);
i=0;
while(peniaze[i]!=0)
{
fprintf(out,"%6d x %6d Kc = %7ld Kc \n",celkovo[i],peniaze[i],
(long int)(celkovo[i]*peniaze[i]));
i++;
}
fprintf(out,
"Celkovo zaslane na ucet: %6ld Kc\n\n"
"celkovo zaslane poukazkov: %6ld Kc\n\n"
,ucet,posta);
fclose(in);
fclose(out);
return ende;
}