Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // esame 170714
- #include <stdlib.h>
- #include <stdio.h>
- #include <math.h>
- #include <string.h>
- struct piano{
- int h;
- int nStanza;
- int altezzaStanza[10];
- int lunghezzaStanza[10];
- };
- struct edificio{
- struct piano v[10];
- int numPiani;
- };
- struct piano *letturaFile(FILE *f,int *n,struct edificio *e);
- void stampaStruct(struct piano *p,int n);
- void funzioneRiempiStructEdificio(struct piano *p, int np,struct edificio *e);
- int funzioneAreaPiano(struct piano p );
- int funzioneVolume(struct piano p);
- int volumeEdificio(struct edificio e);
- int main (int argc,char *argv[]){
- int n,area,volume,volumeE;
- FILE *f;
- struct piano *piano;
- struct edificio edificio;
- if(argc!=2){
- printf("paramentri errati\n");
- return 1;
- }
- f=fopen(argv[1],"r");
- if(f==NULL){
- printf("file non trovato\n");
- return 1;
- }
- // funzione lettura e stampa
- piano=letturaFile(f,&n,&edificio);
- fclose(f);
- stampaStruct(piano,n);
- funzioneRiempiStructEdificio(piano,n,&edificio);
- area=funzioneAreaPiano(piano[0]);
- printf("area:%d\n",area);
- volume=funzioneVolume(piano[0]);
- printf("volume:%d\n",volume);
- volumeE=volumeEdificio(edificio);
- printf("volume edificio:%d\n",volumeE);
- return 0;
- }
- struct piano *letturaFile(FILE *f,int *n, struct edificio *e){
- int nConv;
- int size=10;
- int i1,i2;
- int i=0;// con i conto il n di stanze
- char buffer[100];
- int countRiga=0;
- struct piano *p1,*p2;
- *n=0;
- p2=malloc(size*sizeof(struct piano));
- while(fgets(buffer,sizeof(buffer),f)){
- p1=p2 +*n;
- if(countRiga==0){
- sscanf(buffer,"%d",&e->numPiani);
- }else {
- nConv=sscanf(buffer,"%d %d",&i1,&i2);
- if(i1>10){ // per far capire che non รจ la riga che riguarda la stanza.le stanze sono 10, quindi i>10 oro controllo le grndezze del piano
- p1->lunghezzaStanza[i]=i1;
- p1->altezzaStanza[i]=i2;
- i++;
- if(i==p1->nStanza){
- (*n)++;
- if(*n>=size){
- size=2*size;
- p2=realloc(p2,size*sizeof(struct piano));
- }
- }
- }else{
- i=0;
- p1->nStanza=i1;
- p1->h=i2;
- }
- }
- countRiga++;
- }
- p2=realloc(p2,*n*sizeof(struct piano));
- return p2;
- }
- void stampaStruct(struct piano *p,int n){
- int i,j;
- for(i=0;i<n;i++){
- printf("PIANO %d ALTEZZA PIANO: %d NUMERO STANZE: %d\n", i+1, p[i].h, p[i].nStanza);
- for(j=0;j<p[i].nStanza;j++){
- printf("%d %d\n ",p[i].altezzaStanza[j],p[i].lunghezzaStanza[j]);
- }
- }
- }
- void funzioneRiempiStructEdificio(struct piano *p, int np,struct edificio *e){
- int i;
- for(i=0;i<np;i++){
- e->v[i]=p[i];
- }
- }
- int funzioneAreaPiano(struct piano p ){ // cosi gli passo solo i valori
- int i;
- int area=0;
- for(i=0;i<p.nStanza;i++){
- area+=p.altezzaStanza[i] *p.lunghezzaStanza[i];
- }
- return area;
- }
- int funzioneVolume(struct piano p){
- int area,volume;
- area=funzioneAreaPiano(p);
- volume=area*p.h;
- return volume;
- }
- int volumeEdificio(struct edificio e){
- int i;
- int volume=0;
- for(i=0;i<e.numPiani;i++){
- volume+=funzioneVolume(e.v[i]);
- }
- return volume;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement