Discussione Aiuto Pre-Esame Linguaggio (C)

Daniele1100000

Utente Gold
13 Agosto 2009
640
106
54
318
Salve domani ho l'esame di Programmazione I

e potrebbe uscire una traccia del genere:

/* 1) Inserimento e stampa in forma tabellare per provincia dei dati mensili sul morbillo
2)Visualizzare il valore medio mensile
3)Ordinamento regioni decrescenti annuali
4)Caricamento dati da file
5)Regione e mese con maggior numero di casi di morbillo

regioni = Lombardia piemonte puglia e veneto
*/


Per quanto riguarda il punto 1 ed il punto 4 sono riuscito a farli.

Per risolvere il punto 3 ho pensato di creare un array contenete la somma dei valori dei casi di morbillo per regione e poi fare il confronto e spostare tutta la struct.
il problema è che crasha quando faccio l'ordinamento, utilizzando come condizione la [j] in valore max morbillo se faccio tutto con la ordina senza senso togliendo giustamente i primi campi.

non riesco a risolvere questo problema.

qui calcolo il valore massimo per regione dove poi richiamo la funzione
Codice:
bool valori_massimi(data utente[]){
    
int i;

int j;

int k;

int scelta_ord;

int valore_max_morbillo[STRUCT];

data temp;

int min;

for(i=0;    i<STRUCT;        i++){
    
for(j=0;    j<MESI;            j++){
    
valore_max_morbillo[i]+=utente[i].morbillo[j];
    
    
                                }

                                }


for(k=0;    k<STRUCT;        k++)    {
    

printf("\n\nI valori totali del morbillo sono\n |%d|\n",valore_max_morbillo[k]);

                                    }



scanf("%d",&scelta_ord);


if(scelta_ord==1)            {


ordinamento(utente,valore_max_morbillo);                                                                                                                      //<<<


printf("Ordinamento effettuato\n");

                            }




}

qui effettuo l'ordinamento dove dopo crasha e sicuramente qui crasha ho provato in white box

Codice:
bool ordinamento(data utente[],int valore_max_morbillo[]){
    
int i;

int j;

int k;

data temp;

for(i=0;    i<STRUCT-1;            i++){



for(j=0;    j<MESI-1;            j++){        
    


if(valore_max_morbillo[i]>valore_max_morbillo[j])    {

//Ordinamento

temp=utente[j];

utente[j]=utente[j+1];

utente[j+1]=temp;

                                                    }







                                                    }
    
    


                                    }


Mentre per il punto 5 avevo pensato di inserire in un array tutti gli elementi cosi da confrontarli e fare l'algoritmo di minimo/massimo e dopo confrontarlo con tutti i campi dei dati del morbillo, inserendo un confronto nell'indice i del primo for,cosi quando apriamo questa condizione uso k=i cosi dopo nella stampa inserisco nel campo della struct k cosi da stampare mese regione e caso più alto di morbillo, ma nell'array di 48 posizioni quando provo ad inserire tutti i valori dei casi di morbillo, nella stampa di verifica me ne stampa solo 8.

Codice:
bool regione_maggior_morbillo(data utente[]){
    
int i;

int j;

int k;

int x;

int max;

int morbil[MORBILLI_TOTALI];


for(i=0;    i<STRUCT;    i++)        {
    

    


for(j=0;    j<MESI;        j++)        {    



morbil[j]=utente[i].morbillo[j];





                                    }



                                    }


for(k=0;    k<MORBILLI_TOTALI;        k++)        {    
    
    


printf("| %d |",morbil[k]);




                                                }





    
    
}


cordiali saluti e grazie in anticipo sono un 2giorni che ci perdo la testa






















a per sicurezza posto intero codice.


Codice:
[/I]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>

#define DIM 50
#define MESI 12
#define STRUCT 4
#define MORBILLI_TOTALI 12*4

/* 1) Inserimento e stampa in forma tabellare per provincia dei dati mensili sul morbillo
   2)Visualizzare il valore medio mensile
   3)Ordinamento regioni decrescenti annuali
   4)Caricamento dati da file
   5)Regione e mese con maggior numero di casi di morbillo 
   
   regioni = Lombardia piemonte puglia e veneto
*/

typedef struct{
    
char regione[DIM];    
    
char mese[DIM][MESI];    
    
int morbillo[MESI];    
    
    
    
}data;   
   
   
bool inserimento_morbilli(data utente[]);

bool regioni_mesi(data utente[]);

void stampa_dati(data utente[]);
 
bool valori_massimi(data utente[]); 
   
bool caricamento_file(data utente[]);   

bool ordinamento(data utente[],int valore_max_morbillo[]);
   
bool regione_maggior_morbillo(data utente[]);



int main(){
    
data utente[STRUCT];    

regioni_mesi(utente);
    
int scelta;


do{


printf("Premi [1] per stampare in forma tabellare i dati inerenti al morbillo\n");
printf("Premi [2] per effettuare l'ordinamento basandoci sulla regione con minori casi di morbillo\n");
printf("Premi [3] per caricare i dati da file\n");
printf("Premi [4] per vedere quale è il caso di morbillo piu' alto\n");


scanf("%d",&scelta);

switch(scelta){
    
case 1:

inserimento_morbilli(utente);    
    


break;

case 2:



valori_massimi(utente);



break;

case 3: 



caricamento_file(utente);





break;


case 4:
    
regione_maggior_morbillo(utente);

break;    


default:

    
printf("Hai effettuato una scelta errata riprova \n");

system("pause");

system("cls");

break;    
    
    
    
}

    
}while(scelta!=0);



}
    
    
    
    
    
    
    





bool inserimento_morbilli(data utente[]){



//Puglia


utente[0].morbillo[0]=20;



utente[0].morbillo[1]=0;



utente[0].morbillo[2]=0;



utente[0].morbillo[3]=0;



utente[0].morbillo[4]=2;



utente[0].morbillo[5]=0;



utente[0].morbillo[6]=4;



utente[0].morbillo[7]=0;



utente[0].morbillo[8]=0;



utente[0].morbillo[9]=18;



utente[0].morbillo[10]=7;



utente[0].morbillo[11]=1;

//Tot

//Lombardia







utente[1].morbillo[0]=0;



utente[1].morbillo[1]=15;



utente[1].morbillo[2]=2;



utente[1].morbillo[3]=12;



utente[1].morbillo[4]=20;



utente[1].morbillo[5]=2;



utente[1].morbillo[6]=3;



utente[1].morbillo[7]=6;



utente[1].morbillo[8]=4;



utente[1].morbillo[9]=0;



utente[1].morbillo[10]=4;



utente[1].morbillo[11]=5;







//Veneto







utente[2].morbillo[0]=0;



utente[2].morbillo[1]=0;



utente[2].morbillo[2]=3;



utente[2].morbillo[3]=2;



utente[2].morbillo[4]=18;



utente[2].morbillo[5]=17;



utente[2].morbillo[6]=14;



utente[2].morbillo[7]=16;



utente[2].morbillo[8]=20;



utente[2].morbillo[9]=5;



utente[2].morbillo[10]=9;



utente[2].morbillo[11]=8;












utente[3].morbillo[0]=7;



utente[3].morbillo[1]=2;



utente[3].morbillo[2]=2;



utente[3].morbillo[3]=14;



utente[3].morbillo[4]=3;



utente[3].morbillo[5]=2;



utente[3].morbillo[6]=2;



utente[3].morbillo[7]=1;



utente[3].morbillo[8]=1;



utente[3].morbillo[9]=1;



utente[3].morbillo[10]=1;



utente[3].morbillo[11]=0;







stampa_dati(utente);




}


void stampa_dati(data utente[]){
    
    
int i;

int j;

printf("|%-20s|%-20s|%-20s|\n","Regione","Mese","Morbillo");
printf("---------------------------------------------------\n");

    for(i=0;    i<STRUCT;    i++){
printf("|%-20s|------------------------------------------",utente[i].regione);    

    for(j=0;    j<MESI;        j++){
    
    
printf("\n                     |%-20s|%-20d|\n",utente[i].mese[j],utente[i].morbillo[j]);    
    
    
    
        
                                }    
    
    
    
                                }    
    
    
    
}


bool valori_massimi(data utente[]){
    
int i;

int j;

int k;

int scelta_ord;

int valore_max_morbillo[STRUCT];

data temp;

int min;

for(i=0;    i<STRUCT;        i++){
    
for(j=0;    j<MESI;            j++){
    
valore_max_morbillo[i]+=utente[i].morbillo[j];
    
    
                                }

                                }


for(k=0;    k<STRUCT;        k++)    {
    

printf("\n\nI valori totali del morbillo sono\n |%d|\n",valore_max_morbillo[k]);

                                    }



scanf("%d",&scelta_ord);


if(scelta_ord==1)            {


ordinamento(utente,valore_max_morbillo);


printf("Ordinamento effettuato\n");

                            }




}



bool caricamento_file(data utente[]){
    

int i;

int j;    
    
FILE*fp;

fp=fopen("dati.txt","r");


    if(fp==NULL){
    
printf("Errore il file non e'stato aperto correttamente \n");

exit(1);    
    
                }
    

else            {
    
    
for(i=0;    i<STRUCT    ;    i++)    {    
    
    
    


    
for(j=0;    j<MESI;            j++)    {
    
    
fscanf(fp,"%d",&utente[i].morbillo[j]);    
    
    

    
    
                                    }    
    
        
        
                                    }    
    

printf("Dati caricati da File\n\n");

printf("|%-20s|%-20s|%-20s|\n","Regioni","Mesi","Casi Morbillo");
printf("---------------------------------------------------------\n");



for(i=0;    i<STRUCT;    i++)        {

printf("|%-20s|\n",utente[i].regione);        
    
    
for(j=0;    j<MESI;        j++)        {


printf("                     |%-20s|%-20d|\n",utente[i].mese[j],utente[i].morbillo[j]);
    

    
    
    
    
                                    }    
    
    
    
    
    
                                      }
        

    
                }    
    
    
    
        
}


bool regioni_mesi(data utente[]){
    
strcpy(utente[0].regione,"Puglia");



strcpy(utente[0].mese[0],"Gennaio");



strcpy(utente[0].mese[1],"Febbraio");



strcpy(utente[0].mese[2],"Marzo");



strcpy(utente[0].mese[3],"Aprile");



strcpy(utente[0].mese[4],"Maggio");



strcpy(utente[0].mese[5],"Giugno");



strcpy(utente[0].mese[6],"Luglio");



strcpy(utente[0].mese[7],"Agosto");



strcpy(utente[0].mese[8],"Settembre");



strcpy(utente[0].mese[9],"Ottobre");



strcpy(utente[0].mese[10],"Novembre");



strcpy(utente[0].mese[11],"Dicembre");




//Lombardia

strcpy(utente[1].regione,"Lombardia");



strcpy(utente[1].mese[0],"Gennaio");



strcpy(utente[1].mese[1],"Febbraio");



strcpy(utente[1].mese[2],"Marzo");



strcpy(utente[1].mese[3],"Aprile");



strcpy(utente[1].mese[4],"Maggio");



strcpy(utente[1].mese[5],"Giugno");



strcpy(utente[1].mese[6],"Luglio");



strcpy(utente[1].mese[7],"Agosto");



strcpy(utente[1].mese[8],"Settembre");



strcpy(utente[1].mese[9],"Ottobre");



strcpy(utente[1].mese[10],"Novembre");



strcpy(utente[1].mese[11],"Dicembre");









//Veneto

strcpy(utente[2].regione,"Veneto");



strcpy(utente[2].mese[0],"Gennaio");



strcpy(utente[2].mese[1],"Febbraio");



strcpy(utente[2].mese[2],"Marzo");



strcpy(utente[2].mese[3],"Aprile");



strcpy(utente[2].mese[4],"Maggio");



strcpy(utente[2].mese[5],"Giugno");



strcpy(utente[2].mese[6],"Luglio");



strcpy(utente[2].mese[7],"Agosto");



strcpy(utente[2].mese[8],"Settembre");



strcpy(utente[2].mese[9],"Ottobre");



strcpy(utente[2].mese[10],"Novembre");



strcpy(utente[2].mese[11],"Dicembre");








strcpy(utente[3].regione,"Piemonte");



strcpy(utente[3].mese[0],"Gennaio");



strcpy(utente[3].mese[1],"Febbraio");



strcpy(utente[3].mese[2],"Marzo");



strcpy(utente[3].mese[3],"Aprile");



strcpy(utente[3].mese[4],"Maggio");



strcpy(utente[3].mese[5],"Giugno");



strcpy(utente[3].mese[6],"Luglio");



strcpy(utente[3].mese[7],"Agosto");



strcpy(utente[3].mese[8],"Settembre");


strcpy(utente[3].mese[9],"Ottobre");


strcpy(utente[3].mese[10],"Novembre");



strcpy(utente[3].mese[11],"Dicembre");



}

bool regione_maggior_morbillo(data utente[]){
    
int i;

int j;

int k;

int x;

int max;

int morbil[MORBILLI_TOTALI];


for(i=0;    i<STRUCT;    i++)        {
    

    


for(j=0;    j<MESI;        j++)        {    



morbil[j]=utente[i].morbillo[j];





                                    }



                                    }


for(k=0;    k<MORBILLI_TOTALI;        k++)        {    
    
    


printf("| %d |",morbil[k]);




                                                }





    
    
}




bool ordinamento(data utente[],int valore_max_morbillo[]){
    
int i;

int j;

int k;

data temp;

for(i=0;    i<STRUCT-1;            i++){



for(j=0;    j<MESI-1;            j++){        
    


if(valore_max_morbillo[i]>valore_max_morbillo[j])    {

//Ordinamento

temp=utente[j];

utente[j]=utente[j+1];

utente[j+1]=temp;

                                                    }







                                                    }
    
    


                                    }





                                    

    
    
    
    
    
    
    
    
    
    
    
}





[I][/CODE[/I]
 
almeno che qualcuno potesse trovare la soluzione anche a parole <.<

pseudocodice? Flow chart? Tu come programmi, a testa bassa e appena trovi un errore lo risolvi?
Questo ti serva di esperienza nel mondo lavorativo, le persone si passano prima il "progetto cartaceo" e poi il codice effettivo. Esistono migliaia di modi per risolvere il problema, posta il tuo pseudocodice perchè nessuno si metterò mai a leggere un codice per intero direttamente (pensa se hai davanti un firmware e te lo devi leggere senza nemmeno un manuale).
 
  • Mi piace
Reazioni: -bAd- e 0xbro
pseudocodice? Flow chart? Tu come programmi, a testa bassa e appena trovi un errore lo risolvi?
Questo ti serva di esperienza nel mondo lavorativo, le persone si passano prima il "progetto cartaceo" e poi il codice effettivo. Esistono migliaia di modi per risolvere il problema, posta il tuo pseudocodice perchè nessuno si metterò mai a leggere un codice per intero direttamente (pensa se hai davanti un firmware e te lo devi leggere senza nemmeno un manuale).
In realtà so 2 giorni che cerco di risolverlo,volevo solo sapere se voi con più esperienza di me notavate subito un errore.
P.s non ho mai visto sul forum postare flow chart.