Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <math.h> //-lm
- struct conto{
- int data;
- double movimenti;
- };
- struct conto *letturaFile(FILE *f,int *n,double *saldoI,int *totM);
- void stampaStruttura(struct conto *c,int n);
- double saldoFinale(struct conto *c,int n,double saldoI);
- double prelieviTrimestre(struct conto *c,int n,int trimestreInizio,int trimestreFine);
- double versamentiTrimestre(struct conto *c,int n,int trimestreInizio,int trimestreFine);
- double saldotrimestre(struct conto *c,int n,double saldoTrimestre, int inizio,int fine);
- void saldoNegativo(struct conto *c,int n,double saldoI);
- int main(int argc, char *argv[]){
- int n,totM;
- double saldoI,saldoF,p1,p2,p3,p4,v1,v2,v3,v4,saldoT1,saldoT2,saldoT3,saldoT4;
- FILE *f;
- struct conto *conto;
- if(argc!=2){
- printf("parametri errati\n");
- return 1;
- }
- f=fopen(argv[1],"r");
- if(f==NULL){
- printf("file non trovato\n");
- return 1;
- }
- //funzioni lettura e stampa richieste a ,b
- conto=letturaFile(f,&n,&saldoI,&totM);
- fclose(f);
- printf("saldo iniziale:%lf\n",saldoI);
- printf("tot movimenti:%d\n",totM);
- stampaStruttura(conto,n);
- //richiesta c
- saldoF=saldoFinale(conto,n,saldoI);
- printf("saldo finale:%lf\n",saldoF);
- // richiesta d
- p1=prelieviTrimestre(conto,n,0,91);
- p2=prelieviTrimestre(conto,n,92,182);
- p3=prelieviTrimestre(conto,n,183,274);
- p4=prelieviTrimestre(conto,n,275,365);
- printf("prelievo trimestre1:%lf\nprelievo trimestre2:%lf\nprelievo trimestre3:%lf\nprelievo trimestre4:%lf\n",p1,p2,p3,p4);
- //richiesta e
- v1=versamentiTrimestre(conto,n,0,91);
- v2=versamentiTrimestre(conto,n,92,182);
- v3=versamentiTrimestre(conto,n,183,274);
- v4=versamentiTrimestre(conto,n,274,365);
- printf("versmento trimeste1:%lf\nversmento trimeste2:%lf\nversmento trimeste3:%lf\nversmento trimeste4:%lf\n",v1,v2,v3,v4);
- //richiesta f
- saldoT1=saldotrimestre(conto,n,saldoI, 0, 91);
- saldoT2=saldotrimestre(conto,n,saldoT1,92, 182 );
- saldoT3=saldotrimestre(conto,n,saldoT2,183,274);
- saldoT4=saldotrimestre(conto,n,saldoT3,275,365);
- printf("saldo trimestre1:%lf\nsaldo trimestre2:%lf\nsaldo trimestre3:%lf\nsaldo trimestre4:%lf\n",saldoT1,saldoT2,saldoT3,saldoT4);
- //richiesta g
- saldoNegativo(conto,n,saldoI);
- return 0;
- }
- struct conto *letturaFile(FILE*f,int *n, double *saldoI,int *totM){
- int nConv;
- int size=10;
- int countRiga=0;
- char buffer[100];
- struct conto *c1,*c2;
- *n=0;
- c2=malloc(size*sizeof(struct conto));
- while(fgets(buffer,sizeof(buffer),f)){
- if(countRiga>1){
- c1=c2 + *n;
- nConv=sscanf(buffer,"%d\t%lf\t",&c1->data,&c1->movimenti);
- (*n)++;
- }else{
- if(countRiga==0){
- nConv=sscanf(buffer,"%lf\t",saldoI);
- }else{
- nConv=sscanf(buffer,"%d\t",totM);
- }
- }
- countRiga++;
- if(*n>=size){
- size=2*size;
- c2=realloc(c2,size*sizeof(struct conto));
- }
- }
- c2=realloc(c2,*n*sizeof(struct conto));
- return c2;
- }
- void stampaStruttura(struct conto *c,int n){
- int i;
- for(i=0;i<n;i++){
- printf( "%d %lf\n",c[i].data,c[i].movimenti);
- }
- }
- double saldoFinale(struct conto *c,int n,double saldoI){
- int i;
- double count=saldoI;
- for(i=0;i<n;i++){
- count+=c[i].movimenti;
- }
- return count;
- }
- double prelieviTrimestre(struct conto *c,int n, int trimestreInizio, int trimestreFine ){
- int i;
- double count=0;
- for(i=0;i<n;i++){
- if(c[i].data>trimestreInizio && c[i].data<=trimestreFine ){
- if(c[i].movimenti<0){
- count+=c[i].movimenti;
- }
- }
- }
- return count;
- }
- double versamentiTrimestre(struct conto *c,int n,int trimestreInizio,int trimestreFine){
- int i;
- double count=0;
- for(i=0;i<n;i++){
- if(c[i].data<trimestreInizio && c[i].data<=trimestreFine){
- if(c[i].movimenti>0){
- count+=c[i].movimenti;
- }
- }
- }
- return count;
- }
- double saldotrimestre(struct conto *c,int n,double saldoTrimestre,int inizio,int fine){
- int i;
- double count=saldoTrimestre;
- for(i=0;i<n;i++){
- if(c[i].data>inizio && c[i].data<=fine){
- count+=c[i].movimenti;
- }
- }
- return count;
- }
- void saldoNegativo(struct conto *c,int n,double saldoI){
- int i;
- double negativo=0;
- int giorno ;
- double count=0;
- for(i=0;i<n;i++){
- if(c[i].movimenti<0){
- count+=c[i].movimenti;
- if((saldoI+count)<0){
- giorno=c[i].data;
- negativo=c[i].movimenti;
- printf("giorno:%d\nsaldo negativo:%lf\n",giorno,negativo);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement