Problema programma in C

di il
7 risposte

Problema programma in C

Salve ragazzi... sono disperato perchè non riesco a capire i problemi di questo codice.. ho provato di tutto ve lo giuro.. chiedo cortesemente a voi di aiutarmi in qualche modo.. grazie a tutti..

I problemi sono più di uno: 1)non mi visualizza il numero di pazienti per ogni patologia, o meglio il programma parte ma mi da risultati sbagliati nelle variabili che stampa. 2)il controllo per stamparmi a video il paziente che il medico non vede da piu tempo è errato, perchè anche qui mi da un risultato sbagliato. 3) dopo l'ultima procedura che mi stampa a video la tabella dei pazienti il programma crasha, ovviamente la tabella ha i risultati sbagliati.


/*SCRIVERE UN PORGR PER LA GESTIONE DI UNA TABELLA DEI PAZIENTI DI UN MEDICO. PER OGNI CARDIOLOGO:
	NOME, COGNOME, CF, DATA DI NASCITA, ETA', PATOLOGIA(FEBBRE, TUBERCOLOSI, NESSUNA PATOLOGIA), DATA ULTIMA VISITA.
	IN OUTPUT:
		- LA TABELLA AGGIORNATA;
		-PER OGNI PATOLOGIA IL NUMERO DI PAZIENTI;
		-IL PAZIENTE CHE NON VEDE DA PIU TEMPO;
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define max 100

typedef struct {
	char nome[10];
	char cognome[10];
	char CF[13];
	char patologia[15];
	int data_nascita;
	int eta;
	int ultima_visita;
}PAZIENTE;

PAZIENTE INSERIMENTO_DATI(int num_paz);						
void OPERAZIONE_STAMPA(int num_paz);
void STAMPA_ULTVISITA();

int main ()
{
	PAZIENTE paz[max], t;
	int i, num_paz;
	int paz_feb, paz_tub, paz_nex;
	int j;
	char febbre[]="febbre";
	char tubercolosi[]="tubercolosi";
	
	printf("inserisci il numero di pazienti--->");
	scanf("%d", &num_paz);
	paz[max] = INSERIMENTO_DATI(num_paz);
	/* visualizzare il numero di pazienti per ogni patologia*/
	paz_feb=0;
	paz_tub=0;
	paz_nex=0;
	for(i=0; i<num_paz; i++)
	{

		if (paz[i].patologia==febbre)
		{
			++paz_feb;


		}
		else if (paz[i].patologia==tubercolosi)
		{
			++paz_tub;


		}
		else
		{
			++paz_nex;

		}
	}

printf("FEBBRE:  %d\nTUBERCOLOSI:  %d\nNESSUNA:  %d\n", paz_feb, paz_tub, paz_nex);

/*stampare a video il paziente che non vede da piu tempo*/
for (i=0; i<num_paz; ++i)
{
	for(j=i+1; j<num_paz; ++j)
	{
		if (paz[j].ultima_visita < paz[i].ultima_visita)
		{
			t=paz[j];
			paz[j]=paz[i];
			paz[i]=t;
		}
	}
}




STAMPA_ULTVISITA();
system ("pause");
system ("cls");

/*stampare la tabella*/
OPERAZIONE_STAMPA(num_paz);
system ("pause");
return 0;
}




/* funzioni e procedure*/



PAZIENTE INSERIMENTO_DATI(int num_paz) {

int i;
PAZIENTE paz;
for (i=0; i<num_paz; i++)
{
printf("\ninserisci i dati del %d paziente\n",i+1);

printf("NOME-->");
scanf("%s", paz.nome);
printf("COGNOME--->");
scanf("%s", paz.cognome);
printf("CODICE FISCALE--->");
scanf("%s", paz.CF);
printf("PATOLOGIA--->");
scanf("%s", paz.patologia);
printf("DATA DI NASCITA-->");
scanf("%d", &paz.data_nascita);
printf("ETA' DEL PAZIENTE-->");
scanf("%d", &paz.eta);
printf("DATA ULTIMA VISITA-->");
scanf("%d", &paz.ultima_visita);
system("cls");
}
return paz;
}


void OPERAZIONE_STAMPA (int num_paz)
{
	int i;
	PAZIENTE paz;
	for (i=0; i<num_paz; ++i)
	{
		printf(" i dati del %d paziente sono:\n", i+1);
		printf("NOME--> %s", paz.nome);
		printf("COGNOME--> %s", paz.cognome);
		printf("CODICE FISCALE--> %s", paz.CF);
		printf("PATOLOGIA--> %s", paz.patologia);
		printf("DATA DI NASCITA--> %d", paz.data_nascita);
		printf("ETA DEL PAZIENTE--> %d", paz.eta);
		printf("DATA ULTIMA VISITA--> %d", paz.ultima_visita);
		
	}
	
	
}

void STAMPA_ULTVISITA(){
	
	PAZIENTE paz;
	int i;
	for (i=0; i<1; ++i){
		printf("\nNOME--> %s", paz.nome);
		printf("\nCOGNOME--> %s", paz.cognome);
		printf("\nCODICE FISCALE--> %s", paz.CF);
		printf("\nPATOLOGIA--> %s", paz.patologia);
		printf("\nDATA DI NASCITA--> %d", paz.data_nascita);
		printf("\nETA DEL PAZIENTE--> %d", paz.eta);
		printf("\nDATA ULTIMA VISITA--> %d", paz.ultima_visita);
	}
}

7 Risposte

  • Re: Problema programma in C

    Magari se spieghi qual è il malfunzionamento così ci eviti di fare da beta-tester!
    E racchiudi il codice nei tag Code
  • Re: Problema programma in C

    Chiedo scusa, ho appena corretto, attendo vostri consigli.. grazie
  • Re: Problema programma in C

    Questa funzione non può essere utilizzata per caricare un array:
    PAZIENTE INSERIMENTO_DATI(int num_paz)
    Perchè ti ritorna un singolo paziente mentre da quello che ho capito tu vorresti caricarli tutti; dovrebbe invece avere come parametri in input l'array di pazienti e ritornarti magari solo un int che ti dice se il caricamento è andato a buon fine (magari per ora ritorna sempre 1, ovvero Ok).
    Allora, come prima cosa, semplificherei il problema: prova a fare solo il caricamento e la stampa.
  • Re: Problema programma in C

    Nom ho capito molto bene.. in pratica invece di int num_paz cosa dovrei metterci?
  • Re: Problema programma in C

    marco_scalzo ha scritto:


    cosa dovrei metterci?
    Risposta avuta:

    come parametri in input l'array di pazienti
  • Re: Problema programma in C

    Ho provato in questo modo ma non ci riesco.. ho bisogno di un grosso aiuto ragazzi..

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define max 100
    
    typedef struct {
    	char nome[10];
    	char cognome[10];
    	char CF[13];
    	char patologia[15];
    	int data_nascita;
    	int eta;
    	int ultima_visita;
    }PAZIENTE;
    
    PAZIENTE INSERIMENTO_DATI(PAZIENTE paz, int num_paz);						
    void OPERAZIONE_STAMPA(PAZIENTE paz,int num_paz);
    void STAMPA_ULTVISITA();
    
    int main ()
    {
    	PAZIENTE paz[max], t;
    	int i, num_paz;
    	int paz_feb, paz_tub, paz_nex;
    	int j;
    	printf("inserisci il numero di pazienti--->");
    	scanf("%d", &num_paz);
    	paz[max] = INSERIMENTO_DATI(paz[max],num_paz);
    
    /*stampare la tabella*/
    OPERAZIONE_STAMPA(paz[max],num_paz);
    system ("pause");
    return 0;
    }
    
    
    
    
    /* funzioni e procedure*/
    
    
    
    PAZIENTE INSERIMENTO_DATI(PAZIENTE paz,int num_paz) {
    
    int i;
    for (i=0; i<num_paz; i++)
    {
    printf("\ninserisci i dati del %d paziente\n",i+1);
    
    printf("NOME-->");
    scanf("%s", paz.nome);
    printf("COGNOME--->");
    scanf("%s", paz.cognome);
    printf("CODICE FISCALE--->");
    scanf("%s", paz.CF);
    printf("PATOLOGIA--->");
    scanf("%s", paz.patologia);
    printf("DATA DI NASCITA-->");
    scanf("%d", &paz.data_nascita);
    printf("ETA' DEL PAZIENTE-->");
    scanf("%d", &paz.eta);
    printf("DATA ULTIMA VISITA-->");
    scanf("%d", &paz.ultima_visita);
    system("cls");
    }
    return paz;
    }
    
    
    void OPERAZIONE_STAMPA (PAZIENTE paz,int num_paz)
    {
    	int i;
    	for (i=0; i<num_paz; ++i)
    	{
    		printf("\ni dati del %d paziente sono:\n", i+1);
    		printf("\nNOME--> %s", paz.nome);
    		printf("\nCOGNOME--> %s", paz.cognome);
    		printf("\nCODICE FISCALE--> %s", paz.CF);
    		printf("\nPATOLOGIA--> %s", paz.patologia);
    		printf("\nDATA DI NASCITA--> %d", paz.data_nascita);
    		printf("\nETA DEL PAZIENTE--> %d", paz.eta);
    		printf("\nDATA ULTIMA VISITA--> %d", paz.ultima_visita);
    		
    	}
    	
    	
    }
    
  • Re: Problema programma in C

    Ciao Marco,
    ho un po' modificato il tuo codice, credo c'erano un po' di errori concettuali. Il seguente dovrebbe soddisfare le specifiche da te richieste, ovviamente è facilmente midificabile ed adattabile, mi sono attenuto al tuo algoritmo.

    Ciao.

    /*SCRIVERE UN PORGR PER LA GESTIONE DI UNA TABELLA DEI PAZIENTI DI UN MEDICO. PER OGNI CARDIOLOGO:
    NOME, COGNOME, CF, DATA DI NASCITA, ETA', PATOLOGIA(FEBBRE, TUBERCOLOSI, NESSUNA PATOLOGIA), DATA ULTIMA VISITA.
    IN OUTPUT:
    - LA TABELLA AGGIORNATA;
    -PER OGNI PATOLOGIA IL NUMERO DI PAZIENTI;
    -IL PAZIENTE CHE NON VEDE DA PIU TEMPO;
    */
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define max 100

    typedef struct {
    char nome[20];
    char cognome[20];
    char CF[20];
    char patologia[20];
    int data_nascita;
    int eta;
    int ultima_visita;
    }PAZIENTE;

    int INSERIMENTO_DATI(PAZIENTE paziente[],int num_paz);
    void OPERAZIONE_STAMPA(PAZIENTE paziente[],int num_paz);
    void STAMPA_ULTVISITA();

    int main ()
    {
    PAZIENTE paz[max], t;
    int i, num_paz;
    int paz_feb, paz_tub, paz_nex;
    int j;
    char febbre[]="febbre";
    char tubercolosi[]="tubercolosi";
    int esito = 0;

    printf("inserisci il numero di pazienti--->");
    scanf("%d", &num_paz);
    printf("\n il numero inserito è: %d \n\n",num_paz);
    esito = INSERIMENTO_DATI(paz,num_paz);
    if (esito>0)
    printf("\n inseriti %d pazienti \n\n",num_paz);
    else{
    printf("\n la INSERIMENTO_DATI ha dato errore o non vi sono pazienti \n\n");
    return 0;
    }
    /* visualizzare il numero di pazienti per ogni patologia*/
    paz_feb=0;
    paz_tub=0;
    paz_nex=0;
    for(i=0; i<num_paz; i++)
    {
    if (strcmp(paz.patologia,"febbre")==0)
    {
    ++paz_feb;
    }
    else if (strcmp(paz.patologia,"tubercolosi")==0)
    {
    ++paz_tub;
    }
    else
    {
    ++paz_nex;
    }
    }

    printf("FEBBRE: %d\nTUBERCOLOSI: %d\nNESSUNA: %d\n\n", paz_feb, paz_tub, paz_nex);

    /*stampare a video il paziente che non vede da piu tempo*/
    for (i=0; i<num_paz; ++i)
    {
    for(j=i+1; j<num_paz; ++j)
    {
    if (paz[j].ultima_visita < paz.ultima_visita)
    {
    printf(" paz[j].ultima_visita = %d paz.ultima_visita = %d \n", paz[j].ultima_visita, paz.ultima_visita);
    t=paz[j];
    paz[j]=paz;
    paz=t;
    }
    }
    }

    printf("\n\n");




    //STAMPA_ULTVISITA();
    //system ("pause");
    //system ("cls");

    /*stampare la tabella*/
    OPERAZIONE_STAMPA(paz,num_paz);
    system ("pause");
    return 0;
    }




    /* funzioni e procedure*/



    int INSERIMENTO_DATI(PAZIENTE paziente[],int num_paz) {

    int i;
    int s=0;
    char stringa[20];
    //PAZIENTE t[num_paz];
    for (i=0; i<num_paz; i++)
    {
    printf("\ninserisci i dati del %d paziente\n",i+1);

    printf("NOME-->");
    scanf("%s", &stringa);
    strcpy(paziente.nome,stringa);
    strcpy(stringa,"");
    printf("COGNOME--->");
    scanf("%s", &stringa);
    strcpy(paziente.cognome,stringa);
    strcpy(stringa,"");
    printf("CODICE FISCALE--->");
    scanf("%s", &stringa);
    strcpy(paziente.CF,stringa);
    strcpy(stringa,"");
    printf("PATOLOGIA--->");
    scanf("%s", &stringa);
    strcpy(paziente[i].patologia,stringa);
    strcpy(stringa,"");
    printf("DATA DI NASCITA-->");
    scanf("%d", &paziente[i].data_nascita);
    printf("ETA' DEL PAZIENTE-->");
    scanf("%d", &paziente[i].eta);
    printf("DATA ULTIMA VISITA-->");
    scanf("%d", &paziente[i].ultima_visita);
    //system("cls");
    s=i+1;
    }
    //paziente = &t[0];
    return s;
    }


    void OPERAZIONE_STAMPA (PAZIENTE paziente[],int num_paz)
    {
    int i;
    for (i=0; i<num_paz; ++i)
    {
    printf(" i dati del %d paziente sono:\n", i+1);
    printf("NOME--> %s\n", paziente[i].nome);
    printf("COGNOME--> %s\n", paziente[i].cognome);
    printf("CODICE FISCALE--> %s\n", paziente[i].CF);
    printf("PATOLOGIA--> %s\n", paziente[i].patologia);
    printf("DATA DI NASCITA--> %d\n", paziente[i].data_nascita);
    printf("ETA DEL PAZIENTE--> %d\n", paziente[i].eta);
    printf("DATA ULTIMA VISITA--> %d\n\n\n", paziente[i].ultima_visita);

    }


    }

    void STAMPA_ULTVISITA(){

    PAZIENTE paz;
    int i;
    for (i=0; i<1; ++i){
    printf("\nNOME--> %s\n", paz.nome);
    printf("\nCOGNOME--> %s\n", paz.cognome);
    printf("\nCODICE FISCALE--> %s\n", paz.CF);
    printf("\nPATOLOGIA--> %s\n", paz.patologia);
    printf("\nDATA DI NASCITA--> %d\n", paz.data_nascita);
    printf("\nETA DEL PAZIENTE--> %d\n", paz.eta);
    printf("\nDATA ULTIMA VISITA--> %d\n", paz.ultima_visita);
    }
    }
Devi accedere o registrarti per scrivere nel forum
7 risposte