Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [c] problema esecuzione programma

    ragazzi ho un problema
    ho fatto questo esercizo e me lo compila
    però quando lo invio dopo l'inserimento scelgo l'opzione nel case
    e mi si apre una finestra di errore di windows
    help me please!
    codice:
    #include <stdio.h>
    #include <stdlib.h>
     
    struct indirizzo {
     char strada[20];
     char CAP[5];
     char civico[3]; };
    
    struct data {
    	short giorno;
    	char mese[10];
    	char anno[4];};
    
    typedef struct indirizzo ind;
    typedef struct data Data;
    
    struct studente {
    	char nome[10];
    	char cognome[15];
    	char matricola[10];
    	char luognasc[25];
    	ind indirizzo;
    	Data datanascita;
    	short presenze[20];
    };
     
    typedef struct studente stud;
    stud student[30];
    stud max_I(stud a, stud  b);
    int max_(int a,int b);
    stud massimo_a_ricDI(stud a[],int n);
    void stampa(stud *);
    void inserimento(stud *);
    void ricerca(stud *);
    
    
    void stampa(stud *student)
    {short i;
    //stampa dei dati e presenze totali
    printf("dati degli studenti");
    for (i=0;i<3;i++)
    	{fflush(stdin);
     	 printf("%s %s %s %s \n %s %s %s \n %d %s %s\n",student[i].cognome,student[i].nome,student[i].matricola,
    		student[i].luognasc,student[i].indirizzo.strada,student[i].indirizzo.civico,student[i].indirizzo.CAP,
    		student[i].datanascita.giorno,student[i].datanascita.mese,student[i].datanascita.anno);
    	 printf(" presenze totali su 20 giorni %d \n",3-student[i].presenze[0]);
    	}
    }
    
    void ricerca(stud *student)
    {short j;char nome[10],cognome[15];
    //ricercadi uno studente dato nome e cognome
    printf("inserisci cognome e nome dello studente da ricercare");
    scanf("%s" "%s",&cognome,&nome);	
    	while ((student[j].cognome!=cognome || student[j].nome!=nome)&&(j<3))//controollare la condizione
    	{j=j+1;}
     //if cognome e nome trovati
    	printf("%s %s %s %s \n %s %s %s \n %d %s %s\n",student[j].cognome,student[j].nome,student[j].matricola,
    	 student[j].luognasc,student[j].indirizzo.strada,student[j].indirizzo.civico,student[j].indirizzo.CAP,
    		student[j].datanascita.giorno,student[j].datanascita.mese,student[j].datanascita.anno);
    	 printf(" assenze 20 giorni %d \n",student[j].presenze[0]);
    }
    
    
    
    stud max_I(stud a, stud  b) {
    
       if (a.presenze[0] > b.presenze[0])
          return a;   
       else
          return b;
    }
    
    
    stud massimo_a_ricDI(stud a[],int n)
    {
     int mediano; 
      /* soluzione del caso base  */
     if(n == 1)
        return a[0];
      else
        {
        /* autoattivazioni */
        mediano = (n-1)/2;
        return max_I(massimo_a_ricDI(a,mediano+1),massimo_a_ricDI(a+mediano+1,n-mediano-1));
        }
    }
    
    
    
    void inserimento(stud *student)
    {short i,j,h;
    for (i=0;i<2;i++)
    {fflush(stdin);
    printf("inserisci nome studente n %d\n ",i+1);
    scanf("%s",&student[i].nome);fflush(stdin);
    printf("inserisci cognome studente  %s\n ",student[i].nome);
    scanf ("%s",&student[i].cognome);fflush(stdin);
    /*printf("inserisci matricola studente  %s\n ",student[i].cognome);
    scanf("%s",&student[i].matricola);fflush(stdin);
    printf("inserisci luogo di nascita studente  %s\n ",student[i].cognome);
    scanf("%s",&student[i].luognasc);fflush(stdin);
    printf("inserisci indirizzo(strada,civico,CAP) lasciando uno spazio, studente %s\n",student[i].cognome);
    scanf("%s" "%s" "%s",&student[i].indirizzo.strada,&student[i].indirizzo.civico,&student[i].indirizzo.CAP);
    printf("inserisci data nascita (gg mese(parola) anno) lasciando uno spazio, studente %s\n",student [i].cognome);
    scanf("%d" "%s" "%s",&student[i].datanascita.giorno,&student[i].datanascita.mese,&student[i].datanascita.anno);
    //finora carichiamo i dati degli studenti*/
    }
    for (h=1;h<3;h++)
    	{student[h].presenze[0]=0;
         for (j=0;j<2;j++)
    		{fflush(stdin);
    			printf("lo studente %s %s e \npresente nel %d giorno\n",student[j].cognome,student[j].nome,h);
    			printf("\nimmettere 0 per presente e 1 per assente\n");
    			do{
    			fflush(stdin);printf("ripeti ");
    			scanf("%d",&student[j].presenze[h]);
    			}while ((student[j].presenze[h]!=0) && (student[j].presenze[h]!=1));
    			student[j].presenze[0]=student[j].presenze[0]+student[j].presenze[h];//conta il numero di assenze
    		}
    	}
    
    }
    
    void main()
    {short i=0,j=3;stud h;
    inserimento(student);
    printf("premi 1 per Stampare i dati e le presenze totali di tutti gli studenti\n");
    printf("premi 2 per Dato un nome e un cognome stampare i dati e le assenze totali dello studente\n");
    printf("premi 3 per Stampare il nome e il cognome dello studente che ha fatto più assenze\n");
    scanf("%d",i);
    switch(i){
      case 1:
        stampa(student);break;
      case 2:
        ricerca(student);break;
      case 3:
    	  h=massimo_a_ricDI(student,j);
      default:
        printf("errore");break;
    }
    }

  2. #2
    Che errore ti da ? Dovresti specificare il compilatore usato e il tipo di errore, in quanto si è capito che compili in ambiente Windows . Saluti

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    scanf("%d", &i);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    e ho provato a fare molte modifiche quindi ci stanno alcuni errori nel codice
    allora uso il visual c del pacchetto visual studio 6
    l'errore non dipende dal c ma proprio da windows in pratica esce la finestra di termina programma con le opzioni debug,invia segnalazione non inviare segnalazione, come se l'errore fosse del programma che uso

  5. #5
    Originariamente inviato da oregon
    scanf("%d", &i);
    si risolto cmq mi potete dare una mano con una funzione?
    si tratta ddi

    codice:
    stud max_I(stud a, stud  b) {
    
       if (a.presenze[0] > b.presenze[0])
          return a;   
       else
          return b;
    }
    
    
    stud massimo_a_ricDI(stud a[],int n)
    {
     int mediano; 
      /* soluzione del caso base  */
     if(n == 1)
        return a[0];
      else
        {
        /* autoattivazioni */
        mediano = (n-1)/2;
        return max_I(massimo_a_ricDI(a,mediano+1),massimo_a_ricDI(a+mediano+1,n-mediano-1));
        }
    }
    in pratica devo fare un confronto tra gli array della struct del campo .presenze[0]
    devo vedere qualè il piu grande come valore (short) e devo usare un algoritmo ricorsivo come sopra citato,ora mi servirebbe solo l'indice dell'array di quello piu grande ma sono un po confuso

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Ciao simo' (ci si rivede anche qui)

    sei sicuro che la traccia richieda proprio l'indice dello studente col massimo valore di presenze[0] ? A me sembra un po' difficile da realizzarsi come cosa, leggendo il codice.

    Al massimo, potresti far restituire alla funzione la struttura e poi cercare quest'ultima all'interno dell'array (confrontando dei campi chiave che identifichino univocamente la struttura, sperando che ce ne siano) per poi memorizzare l'indice dell'elemento che corrisponde...

    Oppure semplicemente c'è da cambiare qualcosa a monte...
    every day above ground is a good one

  7. #7
    devo stampare tutti i dati di quello che ha il valore massimo nel campo student.presenza[0]

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Ma quindi non ti chiede esplicitamente di determinare l'indice... o sbaglio?
    every day above ground is a good one

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.