Advertisement
Perlamado

Untitled

Feb 24th, 2020
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.72 KB | None | 0 0
  1.  
  2.  
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <stdlib.h>
  6. #include <math.h> //-lm
  7.  
  8. struct conto{
  9. int data;
  10. double movimenti;
  11. };
  12. struct conto *letturaFile(FILE *f,int *n,double *saldoI,int *totM);
  13. void stampaStruttura(struct conto *c,int n);
  14. double saldoFinale(struct conto *c,int n,double saldoI);
  15. double prelieviTrimestre(struct conto *c,int n,int trimestreInizio,int trimestreFine);
  16. double versamentiTrimestre(struct conto *c,int n,int trimestreInizio,int trimestreFine);
  17. double saldotrimestre(struct conto *c,int n,double saldoTrimestre, int inizio,int fine);
  18. void saldoNegativo(struct conto *c,int n,double saldoI);
  19.  
  20.  
  21. int main(int argc, char *argv[]){
  22.  
  23. int n,totM;
  24. double saldoI,saldoF,p1,p2,p3,p4,v1,v2,v3,v4,saldoT1,saldoT2,saldoT3,saldoT4;
  25. FILE *f;
  26. struct conto *conto;
  27.  
  28. if(argc!=2){
  29. printf("parametri errati\n");
  30. return 1;
  31. }
  32. f=fopen(argv[1],"r");
  33. if(f==NULL){
  34. printf("file non trovato\n");
  35. return 1;
  36. }
  37.  
  38. //funzioni lettura e stampa richieste a ,b
  39. conto=letturaFile(f,&n,&saldoI,&totM);
  40. fclose(f);
  41. printf("saldo iniziale:%lf\n",saldoI);
  42. printf("tot movimenti:%d\n",totM);
  43. stampaStruttura(conto,n);
  44. //richiesta c
  45. saldoF=saldoFinale(conto,n,saldoI);
  46. printf("saldo finale:%lf\n",saldoF);
  47. // richiesta d
  48. p1=prelieviTrimestre(conto,n,0,91);
  49. p2=prelieviTrimestre(conto,n,92,182);
  50. p3=prelieviTrimestre(conto,n,183,274);
  51. p4=prelieviTrimestre(conto,n,275,365);
  52. printf("prelievo trimestre1:%lf\nprelievo trimestre2:%lf\nprelievo trimestre3:%lf\nprelievo trimestre4:%lf\n",p1,p2,p3,p4);
  53. //richiesta e
  54. v1=versamentiTrimestre(conto,n,0,91);
  55. v2=versamentiTrimestre(conto,n,92,182);
  56. v3=versamentiTrimestre(conto,n,183,274);
  57. v4=versamentiTrimestre(conto,n,274,365);
  58. printf("versmento trimeste1:%lf\nversmento trimeste2:%lf\nversmento trimeste3:%lf\nversmento trimeste4:%lf\n",v1,v2,v3,v4);
  59. //richiesta f
  60. saldoT1=saldotrimestre(conto,n,saldoI, 0, 91);
  61. saldoT2=saldotrimestre(conto,n,saldoT1,92, 182 );
  62. saldoT3=saldotrimestre(conto,n,saldoT2,183,274);
  63. saldoT4=saldotrimestre(conto,n,saldoT3,275,365);
  64. printf("saldo trimestre1:%lf\nsaldo trimestre2:%lf\nsaldo trimestre3:%lf\nsaldo trimestre4:%lf\n",saldoT1,saldoT2,saldoT3,saldoT4);
  65. //richiesta g
  66. saldoNegativo(conto,n,saldoI);
  67. return 0;
  68. }
  69.  
  70. struct conto *letturaFile(FILE*f,int *n, double *saldoI,int *totM){
  71. int nConv;
  72. int size=10;
  73. int countRiga=0;
  74. char buffer[100];
  75. struct conto *c1,*c2;
  76. *n=0;
  77.  
  78. c2=malloc(size*sizeof(struct conto));
  79.  
  80. while(fgets(buffer,sizeof(buffer),f)){
  81.  
  82. if(countRiga>1){
  83. c1=c2 + *n;
  84. nConv=sscanf(buffer,"%d\t%lf\t",&c1->data,&c1->movimenti);
  85. (*n)++;
  86. }else{
  87. if(countRiga==0){
  88. nConv=sscanf(buffer,"%lf\t",saldoI);
  89. }else{
  90. nConv=sscanf(buffer,"%d\t",totM);
  91. }
  92. }
  93. countRiga++;
  94.  
  95.  
  96. if(*n>=size){
  97. size=2*size;
  98. c2=realloc(c2,size*sizeof(struct conto));
  99. }
  100. }
  101. c2=realloc(c2,*n*sizeof(struct conto));
  102. return c2;
  103. }
  104.  
  105. void stampaStruttura(struct conto *c,int n){
  106. int i;
  107. for(i=0;i<n;i++){
  108. printf( "%d %lf\n",c[i].data,c[i].movimenti);
  109. }
  110. }
  111. double saldoFinale(struct conto *c,int n,double saldoI){
  112.  
  113. int i;
  114. double count=saldoI;
  115. for(i=0;i<n;i++){
  116. count+=c[i].movimenti;
  117. }
  118. return count;
  119. }
  120. double prelieviTrimestre(struct conto *c,int n, int trimestreInizio, int trimestreFine ){
  121. int i;
  122. double count=0;
  123. for(i=0;i<n;i++){
  124. if(c[i].data>trimestreInizio && c[i].data<=trimestreFine ){
  125. if(c[i].movimenti<0){
  126. count+=c[i].movimenti;
  127. }
  128. }
  129. }
  130. return count;
  131. }
  132. double versamentiTrimestre(struct conto *c,int n,int trimestreInizio,int trimestreFine){
  133. int i;
  134. double count=0;
  135. for(i=0;i<n;i++){
  136. if(c[i].data<trimestreInizio && c[i].data<=trimestreFine){
  137. if(c[i].movimenti>0){
  138. count+=c[i].movimenti;
  139. }
  140. }
  141. }
  142. return count;
  143. }
  144.  
  145.  
  146. double saldotrimestre(struct conto *c,int n,double saldoTrimestre,int inizio,int fine){
  147.  
  148. int i;
  149. double count=saldoTrimestre;
  150. for(i=0;i<n;i++){
  151. if(c[i].data>inizio && c[i].data<=fine){
  152. count+=c[i].movimenti;
  153. }
  154. }
  155. return count;
  156. }
  157.  
  158. void saldoNegativo(struct conto *c,int n,double saldoI){
  159. int i;
  160. double negativo=0;
  161. int giorno ;
  162. double count=0;
  163. for(i=0;i<n;i++){
  164. if(c[i].movimenti<0){
  165. count+=c[i].movimenti;
  166. if((saldoI+count)<0){
  167. giorno=c[i].data;
  168. negativo=c[i].movimenti;
  169. printf("giorno:%d\nsaldo negativo:%lf\n",giorno,negativo);
  170. }
  171. }
  172. }
  173. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement