Mazamin

Traccia Simulazione 20/12/2018 Azioni

Dec 20th, 2018
213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.97 KB | None | 0 0
  1. /* traccia SIMULAZIONE 20 dicembre 2018
  2.  *
  3.  * Un file di testo contiene l’elenco dei clienti di una banca che possiedono azioni. Si suppone che esistano al massimo 6
  4.  * aziende quotate in borsa e quindi ogni riga del file contiene 7 numeri interi non negativi che sono, rispettivamente,
  5.  * il numero identicativo del cliente e la quantità posseduta di azioni delle 6 aziende quotate in ordine.
  6.  * A titolo di esempio, si supponga che il file contenga i seguenti dati:
  7.    23   0   0 100 200   0   3
  8.    9    0 100   0 200   86  5
  9.    97   0   0  10  94   0  10
  10.  * Un secondo file contiene le operazioni (una per ogni riga) che occorre effettuare sul cliente per ogni azione rappresentate come segue:
  11.  *   – il numero identicativo del cliente (1 . . . 10000)
  12.  *   – il numero identicativo dell’azienda (1 . . . 6)
  13.  *   – l’operazione da svolgere (A per acquisto, V per vendita, G per assegnazione gratuita)
  14.  *   – il numero di azioni coinvolte (se l’operazione è G allora il numero seguente è la percentuale di azioni
  15.  *     assegnate gratuitamente al cliente in base a quante già possedute, in tutti gli altri casi è un numero assoluto di azioni).
  16.  * Il numero di operazioni non è noto a priori ed è costituito dal numero di righe presenti nel file.
  17.  * A titolo di esempio, si supponga che il file contenga i seguenti dati:
  18.    9 1 A 50
  19.    23 3 V 12            
  20.  * Si desidera scrivere un programma che letti i dati dei clienti dal primo file aggiorni tali dati sulla base delle operazioni
  21.  * specificate nel secondo file. Alla fine dell'aggiornamento il programma salva i dati aggornati in un terzo file.
  22.  */
  23.  
  24. #include <stdio.h>
  25. #include <stdlib.h>
  26. #define MAX_CLN 10000
  27. #define MAX_AZI 7
  28.  
  29. int get_database(FILE *, int (*)[MAX_AZI]);
  30. void compute_operations(FILE *, int (*)[MAX_AZI], int);
  31. void put_database(FILE *, int (*)[MAX_AZI], int);
  32.  
  33. main(){
  34.     FILE * fda, * fop, *fou;
  35.     int database[MAX_CLN][MAX_AZI], num_clients;
  36.     ((fda=fopen("database.txt", "r"))!=NULL)?:(exit(1));
  37.     ((fop=fopen("operations.txt", "r"))!=NULL)?:(exit(1));
  38.     ((fou=fopen("output.txt", "w"))!=NULL)?:(exit(1));
  39.     num_clients=get_database(fda, database);
  40.     compute_operations(fop, database, num_clients);
  41.     put_database(fou, database, num_clients);
  42.     fclose(fda);
  43.     fclose(fop);
  44.     fclose(fou);
  45.     return 0;
  46. }
  47.  
  48. int get_database(FILE * fp, int (*array)[MAX_AZI]){
  49.     int i=0, j;
  50.     while(feof(fp)==0){
  51.         for(j=0;j<MAX_AZI;j++)
  52.             fscanf(fp, "%d ", &array[i][j]);
  53.         i++;
  54.     }
  55.     return i;
  56. }
  57.  
  58. void compute_operations(FILE * fp, int (*array)[MAX_AZI], int n){
  59.     int get_index_from_id(int, int, int (*)[MAX_AZI]);
  60.     int id, az, num, index;
  61.     char op;
  62.     while(feof(fp)==0){
  63.         fscanf(fp, "%d %d %c %d", &id, &az, &op, &num);
  64.         index=get_index_from_id(id, n, array);
  65.         if(az>6){
  66.             printf("Error: no such company with index %d\nIgnoring operation...\n", az);
  67.             continue;
  68.         }
  69.         if(index==-1){
  70.             printf("Ignoring operation...\n");
  71.             continue;
  72.         }
  73.         switch(op){
  74.             case 'A':
  75.                 array[index][az]+=num;
  76.                 break;
  77.             case 'V':
  78.                 array[index][az]-=num;
  79.                 break;
  80.             case 'G':
  81.                 array[index][az]*=(1+( (float) num/100));
  82.                 break;
  83.             default:
  84.                 printf("Error: undefined operation (%c)\nIgnoring operation...\n", op);
  85.                 break;
  86.         }
  87.     }
  88. }
  89.  
  90. int get_index_from_id(int id, int num, int (*array)[MAX_AZI]){
  91.     int i;
  92.     for(i=0;i<num;i++)
  93.         if(array[i][0]==id)
  94.             return i;
  95.     printf("Error: no such client found in database with Client ID %d\n", id);
  96.     return -1;
  97. }
  98.  
  99. void put_database(FILE * fp, int (*array)[MAX_AZI], int n){
  100.     int i, j;
  101.     for(i=0;i<n;i++){
  102.         for(j=0;j<MAX_AZI;j++)
  103.             fprintf(fp, "%d\t", array[i][j]);
  104.         fprintf(fp, "\n");
  105.     }
  106. }
Advertisement
Add Comment
Please, Sign In to add comment