C, come contare le posizioni in un array

di il
23 risposte

C, come contare le posizioni in un array

Salve ragazzi, come posso far contare alla funzione "contapazienti" quanti pazienti ha assegnato un medico?
non mi interessa la somma dentro al campo assegnazione, ma mi interessa che la funzione conti il numero di pazienti assegnati a quel medico....
int contapazienti(char matricola[MAXCHAR],int numeropazienti){
int i;
int conta=0;
for(i=0;i<numeropazienti;i++){
    if(strcmp(matricola,pazienti[i].assegnazione)==0){
       ?
    }
}
return conta;

}
ecco intanto il codice che ho scritto..
grazie

23 Risposte

  • Re: C, come contare le posizioni in un array

    Detto cosi è difficle dirlo.
    almeno dacci tutti i dati del problema.

    numeropazienti cosa indica? non indica lo stesso di contapazienti?
  • Re: C, come contare le posizioni in un array

    Numeropazienti è il numero di pazienti in un array
  • Re: C, come contare le posizioni in un array

    Un medico di base massimo 2 pazienti può' avere....come posso fare?
  • Re: C, come contare le posizioni in un array

    Quindi?

    che deve fare il programma e che dati hai.?

    ad esempio
    dato un array di 50 pazienti, contare quanti pazienti ha un determinato medico??

    c'è un testo completo dfel problema?
  • Re: C, come contare le posizioni in un array

    Esatto.....
  • Re: C, come contare le posizioni in un array

    In parole povere, finché non descrivi le strutture dati e che significato hanno i vari elementi, nessuno potrà darti nessuna indicazione sensata. Capito?
  • Re: C, come contare le posizioni in un array

    #include <stdio.h>
    #include <stdlib.h>
    #define MAXCHAR 18
    void inseriscinuovomedico(int *numeromedici);
    void inseriscinuovopaziente(int *numeropazienti);
    void assegnazionemedicopaziente(int numeromedici,int numeropazienti);
    int contapazienti(char matricola[MAXCHAR],int numeropazienti);
    int esistenzapaziente(char codice_fiscale[MAXCHAR],int numeropazienti);
    void visualizzazionemedici(int numeromedici);
    void visualizzazionepazienti(int numeropazienti);
    
    struct medico{
    char nome[MAXCHAR];
    char cognome[MAXCHAR];
    char matricola[MAXCHAR];
    
    }medici[50];
    struct paziente{
    char nome[MAXCHAR];
    char cognome[MAXCHAR];
    char codice_fiscale[MAXCHAR];
    char assegnazione[MAXCHAR];
    
    }pazienti[50];
    void mainmenu();
    int main()
    {
            mainmenu();
            return 0;
    }
    void mainmenu(){
    int numeromedici=0;
    int numeropazienti=0;
    int azione;
    do {
            printf("Gestione medici \n\n");
            printf("1 - Inserisci nuovo medico\n");
            printf("2 - Inserisci nuovo paziente\n");
            printf("3 - Assegna medico a paziente\n");
            printf("4 - Visualizza Medici\n");
            printf("5 - Visualizzazione Paziente\n");
            printf("0 - Esci\n");
            printf("Inserisci la scelta -> ");
            scanf("%d", &azione);
    
            //Controllo scelta
            switch(azione) {
            case 0:
                printf("Arrivederci!");
                break;
            case 1:
                system("cls");
                inseriscinuovomedico(&numeromedici);
                break;
            case 2:
                system("cls");
                inseriscinuovopaziente(&numeropazienti);
                break;
            case 3:
                system("cls");
                assegnazionemedicopaziente(numeromedici,numeropazienti);
                break;
            case 4:
                system("cls");
                 visualizzazionemedici(numeromedici);
                break;
            case 5:
                system("cls");
                visualizzazionepazienti(numeropazienti);
                break;
            default:
                printf("Azione non valida");
            }
        } while (azione != 0);
    
    
    }
    void inseriscinuovomedico(int *numeromedici){
    fflush(stdin);
    printf("inserisci cognome ");
    gets(medici[*numeromedici].cognome);
    printf("inserisci nome ");
    gets(medici[*numeromedici].nome);
    printf("inserisci matricola ");
    gets(medici[*numeromedici].matricola);
    
    printf("medico inserito correttamente");
    *numeromedici+=1;
    system("PAUSE");
    system("cls");
    
    
    
    }
    void inseriscinuovopaziente(int *numeropazienti){
    
    
    fflush(stdin);
    printf("inserisci cognome ");
    gets(pazienti[*numeropazienti].cognome);
    printf("inserisci nome ");
    gets(pazienti[*numeropazienti].nome);
    printf("inserisci codice fiscale ");
    gets(pazienti[*numeropazienti].codice_fiscale);
    
    printf("paziente inserito correttamente");
    *numeropazienti+=1;
    system("PAUSE");
    system("cls");
    
    
    }
    void assegnazionemedicopaziente(int numeromedici,int numeropazienti){
    char matricola[MAXCHAR];
    char codice_fiscale[MAXCHAR];
    int i;
    char azione;
    int indicepaziente;
    fflush(stdin);
    printf("inserisci matricola medico ");
    gets(matricola);
    printf("inserisci codice fiscale paziente  ");
    gets(codice_fiscale);
    for(i=0;i<numeromedici;i++){
        if(strcmp(matricola,medici[i].matricola)==0){
            printf("COGNOME MEDICO:%s,NOME MEDICO:%s",medici[i].cognome,medici[i].nome);
        }
    }
    for(i=0;i<numeropazienti;i++){
        if(strcmp(codice_fiscale,pazienti[i].codice_fiscale)==0){
            printf("\nCOGNOME PAZIENTE:%s,NOME PAZIENTE:%s",pazienti[i].cognome,pazienti[i].nome);
        }
    }
    indicepaziente=esistenzapaziente(codice_fiscale,numeropazienti);
    printf("confermi i dati?Y o n? ");
    scanf("%c",&azione);
    if(azione=='y'){
        if(contapazienti(matricola,numeropazienti)<=2){
           if(strlen(pazienti[indicepaziente].assegnazione)==0){
            strcpy(pazienti[indicepaziente].assegnazione,matricola);
            printf("assegnazione avvenuta correttamente!");
            system("PAUSE");
            system("cls");
            }else {
                        printf("Paziete ha gia' il medico");
                         system("PAUSE");
                        system("cls");
                    }
                    }else{
    
                     printf("Questo medico massimo 2 pazienti puo' curare");
                        system("PAUSE");
                        system("cls");
                    }
    
            }
    
        else if(azione=='n'||azione=='N'){
    
        printf("non hai confermato i dati");
        system("PAUSE");
        system("cls");
    
        }else{
        printf("carattere non ammesso");
        system("PAUSE");
        system("cls");
    
    
        }
    
    }
    int contapazienti(char matricola[MAXCHAR],int numeropazienti){
    int i;
    int conta=0;
    for(i=0;i<numeropazienti;i++){
        if(strcmp(matricola,pazienti[i].assegnazione)==0){
            conta=conta+numeropazienti;
        }
    }
    return conta;
    
    }
    int esistenzapaziente(char codice_fiscale[MAXCHAR],int numeropazienti){
    int i;
    for(i=0;i<numeropazienti;i++){
        if(strcmp(codice_fiscale,pazienti[i].codice_fiscale)==0){
                return i;
        }
    }
    
    return 0;
    
    }
    void visualizzazionemedici(int numeromedici){
    int i;
    for(i=0;i<numeromedici;i++)
        printf("NOME MEDICO:%s,COGNOME MEDICO:%s",medici[i].nome,medici[i].cognome);
    
        system("PAUSE");
        system("cls");
    }
    void visualizzazionepazienti(int numeropazienti){
    char codice[MAXCHAR];
    int i;
    fflush(stdin);
    printf("inserisci codice fiscale ");
    gets(codice);
    for(i=0;i<numeropazienti;i++){
        if(strcmp(codice,pazienti[i].codice_fiscale)==0){
            printf("COGNOME PAZIENTE:%s NOME PAZIENTE:%s",pazienti[i].cognome,pazienti[i].nome);
             system("PAUSE");
        system("cls");
        }
    }
    /*for(i=0;i<numeropazienti;i++){
        if(strcmp(,pazienti[i].assegnazione)==0){
            printf("COGNOME PAZIENTE:%s NOME PAZIENTE:%s");
             system("PAUSE");
        system("cls");
        }
    }*/
    
    }
    
  • Re: C, come contare le posizioni in un array

    Quindi non

    conta=conta+numeropazienti;

    ma

    conta++;
  • Re: C, come contare le posizioni in un array

    Non va......
  • Re: C, come contare le posizioni in un array

    COn un "non va" pensi di farci capire cosa succede?
  • Re: C, come contare le posizioni in un array

    Prima il primo medico massimo 2 e quindi ok...poi creavo un altro medico e quando andavo ad associare il secondo diceva che avevo superato 2 invece non era vero perché stavo inserendo il secondo paziente al secondo medico...
    con il codice da te corretto a un medico mi fa inserire anche 3 pazienti....
  • Re: C, come contare le posizioni in un array

    Dopo ogni medico devi reinizzializzare il contatore da 0
  • Re: C, come contare le posizioni in un array

    E come faccio?
  • Re: C, come contare le posizioni in un array

    Il contatore è già azzerato nella funzione con

    int conta=0;

    Non sono riuscito a replicare il tuo problema. L'unica cosa che ti posso dire è che se scrivi

    <=2

    allora ne puoi assegnare 3 senza problemi. Se vuoi assegnarne fino a 2 devi scrivere

    <2
Devi accedere o registrarti per scrivere nel forum
23 risposte