Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* traccia SIMULAZIONE 20 dicembre 2018
- *
- * Un file di testo contiene l’elenco dei clienti di una banca che possiedono azioni. Si suppone che esistano al massimo 6
- * aziende quotate in borsa e quindi ogni riga del file contiene 7 numeri interi non negativi che sono, rispettivamente,
- * il numero identicativo del cliente e la quantità posseduta di azioni delle 6 aziende quotate in ordine.
- * A titolo di esempio, si supponga che il file contenga i seguenti dati:
- 23 0 0 100 200 0 3
- 9 0 100 0 200 86 5
- 97 0 0 10 94 0 10
- * Un secondo file contiene le operazioni (una per ogni riga) che occorre effettuare sul cliente per ogni azione rappresentate come segue:
- * – il numero identicativo del cliente (1 . . . 10000)
- * – il numero identicativo dell’azienda (1 . . . 6)
- * – l’operazione da svolgere (A per acquisto, V per vendita, G per assegnazione gratuita)
- * – il numero di azioni coinvolte (se l’operazione è G allora il numero seguente è la percentuale di azioni
- * assegnate gratuitamente al cliente in base a quante già possedute, in tutti gli altri casi è un numero assoluto di azioni).
- * Il numero di operazioni non è noto a priori ed è costituito dal numero di righe presenti nel file.
- * A titolo di esempio, si supponga che il file contenga i seguenti dati:
- 9 1 A 50
- 23 3 V 12
- * Si desidera scrivere un programma che letti i dati dei clienti dal primo file aggiorni tali dati sulla base delle operazioni
- * specificate nel secondo file. Alla fine dell'aggiornamento il programma salva i dati aggornati in un terzo file.
- */
- #include <stdio.h>
- #include <stdlib.h>
- #define MAX_CLN 10000
- #define MAX_AZI 7
- int get_database(FILE *, int (*)[MAX_AZI]);
- void compute_operations(FILE *, int (*)[MAX_AZI], int);
- void put_database(FILE *, int (*)[MAX_AZI], int);
- main(){
- FILE * fda, * fop, *fou;
- int database[MAX_CLN][MAX_AZI], num_clients;
- ((fda=fopen("database.txt", "r"))!=NULL)?:(exit(1));
- ((fop=fopen("operations.txt", "r"))!=NULL)?:(exit(1));
- ((fou=fopen("output.txt", "w"))!=NULL)?:(exit(1));
- num_clients=get_database(fda, database);
- compute_operations(fop, database, num_clients);
- put_database(fou, database, num_clients);
- fclose(fda);
- fclose(fop);
- fclose(fou);
- return 0;
- }
- int get_database(FILE * fp, int (*array)[MAX_AZI]){
- int i=0, j;
- while(feof(fp)==0){
- for(j=0;j<MAX_AZI;j++)
- fscanf(fp, "%d ", &array[i][j]);
- i++;
- }
- return i;
- }
- void compute_operations(FILE * fp, int (*array)[MAX_AZI], int n){
- int get_index_from_id(int, int, int (*)[MAX_AZI]);
- int id, az, num, index;
- char op;
- while(feof(fp)==0){
- fscanf(fp, "%d %d %c %d", &id, &az, &op, &num);
- index=get_index_from_id(id, n, array);
- if(az>6){
- printf("Error: no such company with index %d\nIgnoring operation...\n", az);
- continue;
- }
- if(index==-1){
- printf("Ignoring operation...\n");
- continue;
- }
- switch(op){
- case 'A':
- array[index][az]+=num;
- break;
- case 'V':
- array[index][az]-=num;
- break;
- case 'G':
- array[index][az]*=(1+( (float) num/100));
- break;
- default:
- printf("Error: undefined operation (%c)\nIgnoring operation...\n", op);
- break;
- }
- }
- }
- int get_index_from_id(int id, int num, int (*array)[MAX_AZI]){
- int i;
- for(i=0;i<num;i++)
- if(array[i][0]==id)
- return i;
- printf("Error: no such client found in database with Client ID %d\n", id);
- return -1;
- }
- void put_database(FILE * fp, int (*array)[MAX_AZI], int n){
- int i, j;
- for(i=0;i<n;i++){
- for(j=0;j<MAX_AZI;j++)
- fprintf(fp, "%d\t", array[i][j]);
- fprintf(fp, "\n");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment