Salve signori, mi sto esercitando per migliorare lo stile del mio codice, tenuto in gran considerazione dal mio prof con il quale dovrò sostenere a breve un esame.
Vorrei sapere da voi se la funzione postata è leggibile, comprensibile anche se estrapolata dal contesto del codice e se il relativo pseudocodice rispetta gli standard e dove dovrei migliorare.
Funzione Fusione
Pseudo codice Funzione Fusione:codice:/* * fusione.c * * Created on: 03 feb 2017 * Author: nasio * Sommario: Copia il contentuto di due strutture in una terza e la stampa su file * scrivendo su file * Input: * struttura vecchi capi * struttura nuovi capi * struttura aggiornati capi * output: * file.txt PrezziAggiornati * intero errore **errore relativo a incongruenze fra record */ #include <stdio.h> #include <stdlib.h> #include "capi.h" int fusione(capi *vecchi, capi *nuovi, capi *aggiornati, int dim_v, int dim_a) { int i=0; int j=0; FILE *leggi; FILE *scrivi; int errore=0; //codice errore relativo ad incongruenze fra record if((leggi=fopen("capi.txt", "r"))==NULL) //controllo apertura file printf("impossibile aprire il file capi.txt\n"); while(i<dim_v) /*lettura da file della struttura vecchi*/ { fscanf(leggi, "%s", vecchi[i].mat); fscanf(leggi, "%s", vecchi[i].tipo); fscanf(leggi, "%s", vecchi[i].info); fscanf(leggi, "%f", &vecchi[i].prezzo); i++; } fclose(leggi); if((leggi=fopen("nuovi_prezzi.txt", "r"))==NULL) //controllo apertura file printf("impossibile aprire il file capi.txt\n"); while(j<dim_v) /*lettura da file della struttura nuovi*/ { fscanf(leggi, "%s", nuovi[i].mat); fscanf(leggi, "%f", &nuovi[i].prezzo); j++; } fclose(leggi); i=0; j=0; while(i<dim_v && j<dim_a){ if((strcmp(vecchi[i].mat, nuovi[i].mat)=0)){ //controllo della congruenza fra codici prodotto strcpy(aggiornati[i].mat, vecchi[i].mat); //copia dei record nella struttura aggionati da struttura vecchi strcpy(aggiornati[i].tipo, vecchi[i].tipo); strcpy(aggiornati[i].info, vecchi[i].info); aggiornati[i].prezzo=nuovi[j].prezzo; //copia del prezzo aggiornato nella struttura aggiornati dalla struttura nuovi i++; j++; }else{ printf("codice %s non trovato \n"); errore++; //indice relativo agli errori di icongruenza nella copia della struttura j++; } } i=0; if((scrivi=fopen("capi_aggiornati.txt", "w"))==NULL) //controllo apertura file printf("impossibile aprire il file capi_aggiornati.txt\n"); while(i<dim_v){ /*scrittura della struct aggiornata su file*/ fscanf(scrivi, "%s ", vecchi[i].mat); fscanf(scrivi, "%s ", vecchi[i].tipo); fscanf(scrivi, "%s ", vecchi[i].info); fscanf(scrivi, "%f\n", vecchi[i].prezzo); i++; } fclose(scrivi); return errore; //numero di errori trovati nella fusione delle strutture }
Sommario:
Copia il contentuto di due strutture in una terza e la stampa su file
dati in input:
struttura vecchi capi(char mat, char tipo, char info, float prezzo)
struttura nuovi capi(char mat, float prezzo)
struttura aggiornati capi(char mat, char tipo, char info, float prezzo)
intero dim_v **dimensione struttura nuovi
intero dim_a **dimensione struttura aggiornati
variabili di lavoro
intero i **contatore per ciclo di lettura/scrittura
intero j **contatore per ciclo di lettura/scrittura
FILE leggi **puntatore a file per lettura
FILE scrivi **puntatore a file per scrittura
dati di output
file.txt PrezziAggiornati
intero errore **errore relativo a incongruenze fra record
INIZIO
inizializzazione variabili di lavoro
inizializzare i=0;
inizializzare j=0;
inizializzare errore=0;
Aprire il file in lettura capi.txt
se il puntatore a file è uguale a NULL
stampare "Impossibile aprire il file
mentre i<dim_v
leggere da file
vecchi[i].mat;
vecchi[i].tipo
vecchi[i].info
vecchi[i].prezzo
incrementare i;
fine del ciclo
chiudere il file capi.txt
Aprire il file in lettura nuovi_prezzi.txt
se il puntatore a file è uguale a NULL
stampare "Impossibile aprire il file
mentre j<dim_a
leggere da file
nuovi[j].mat;
nuovi[j].tipo
nuovi[j].info
nuovi[j].prezzo
incrementare j;
fine del ciclo
chiudere il file nuovi_prezzi.txt
inizialiazzare i=0
inizialiazzare j=0
mentre i<dim_v e j<_dim_a
se vecchi[i].mat==aggiornati[j].mat
copiare vecchi[i].mat in aggiornati[i].mat
copiare vecchi[i].tipo in aggiornati[i].tipo
copiare vecchi[i].info in aggiornati[i].info
copiare nuovi[j].prezzo in aggiornati[i].prezzo
incrementare i
incrementare j
altrimenti
stampare "codice mat[j].mat non trovato"
incrementare j;
incrementare errore;
fine del ciclo
inizializzare i=0
Aprire il file in scrittura capi_aggiornati.txt
se il puntatore a file è uguale a NULL
stampare "Impossibile aprire il file
mentre i<dim_v
stampare su file
vecchi[i].mat;
vecchi[i].tipo
vecchi[i].info
vecchi[i].prezzo
incrementare i;
fine del ciclo
chiudere il file;
ritornare errori;
FINE
Grazie mille a chiunque risponderà![]()

Rispondi quotando