Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1

    Ordinamento file

    Ho un file esistente su cui ci sono cognome nome matricola degli studenti.
    Inserisco i dati in uno struct.Inserisco i voti e aggiorno lo struct.
    Il problema e che devo poi ordinare per voto,ma non lo so fare.
    riporto il programma:

    codice:
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #define max 50
    struct classe
    {
    	char cognome[20],nome[20];
    	int matricola,voto;
    };
    int inseriscidati(FILE*,struct classe*);
    void inseriscivoti(FILE*,struct classe*,int);
    void ordinanum(FILE*,struct classe*,int);
    void main()
    {
    	int n;
    	struct classe elettrica[max];
    	FILE*fp1,*fp2;
    	fp1=fopen("studenti.txt","r+");
    	fp2=fopen("num.txt","w+");
    	if(fp1==NULL)
    		printf("il file non esiste!");
    	else
    	{
    		n=inseriscidati(fp1,elettrica);
    		rewind(fp1);
    		inseriscivoti(fp1,elettrica,n);
    		ordinanum(fp2,elettrica,n);
    	
    	
    	
    	
    	
    	}
    }
    int inseriscidati(FILE*fp1,struct classe*elettrica)
    {
    	int n=0;
    	while(fscanf(fp1,"%s %s %d",elettrica[n].cognome,elettrica[n].nome,&elettrica[n].matricola)!=EOF)
    		n++;
    	return n;
    }
    void inseriscivoti(FILE*fp1,struct classe*elettrica,int n)
    {
    	int i;
    	printf("inserire voti alla classe:\n");
    	for(i=0;i<n;i++)
    	{
    		printf("inserisci voto di %s %s = ",elettrica[i].cognome,elettrica[i].nome);
    		scanf("%d",&elettrica[i].voto);
    		fprintf(fp1,"%s %s %d %d \n",elettrica[i].cognome,elettrica[i].nome,elettrica[i].matricola,elettrica[i].voto);
    	}
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Conosci un algoritmo di ordinamento?

    Ad esempio, il bubble sort ... dai un'occhiata attenta a

    http://it.wikipedia.org/wiki/Bubble_sort
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Nei dati strutturati ho cognome nome matricola e voto.
    Riesco ad ordinare i voti,ma non riesco poi a riportare per ogni voto ordinato il relativo nome cognome e matricola.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Se riesci ad ordinare i voti vuol dire che hai una parte del tuo codice che li scambia ... in quel momento devi scambiare anche i dati relativi ai nomi e cognomi.

    Se ci mostri il codice che hai usato per ordinare i voti ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Originariamente inviato da oregon

    Se ci mostri il codice che hai usato per ordinare i voti ...
    Magari con in tag "code"....


    Ciao

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    Originariamente inviato da MdE2005
    Magari con in tag "code"....
    E seguendo attentamente quello che viene richiesto dal Regolamento interno: linguaggio nel titolo, posting del codice e richieste appropriate.

    Aggiorno io la discussione.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Codice usato per ordinare i voti...il problema resta associare nomi,cognomi,matricola ai voti.
    Grazie

    codice:
    void ordinanum(FILE*fp3,struct classe*elettrica,int n)
    {   
    	
    	int i,j,imin,temp;
    	for(i=0;i<n-1;i++)
    	{
    		imin=i;
    		for(j=i+1;j<n;j++)
    		{
    			if(elettrica[j].voto<elettrica[imin].voto)
    				imin=j;
    			temp=elettrica[i].voto;
    			elettrica[i].voto=elettrica[imin].voto;
    			elettrica[imin].voto=temp;
    		}
    	}
    	printf("promossi inordine crescente:");
    	for(i=0;i<n;i++)
    		fprintf(fp3,"%d \n %d \n",elettrica[i].matricola,elettrica[i].voto);
    }

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Quando fai lo scambio, non farlo solo dell'elemento voto della struttura ma di tutti gli elementi.

    Ovvero, non scambiare solo elettrica[i].voto con elettrica[imin].voto ma tutto elettrica[i] con elettrica[imin]

    Tra l'altro, non dovresti eseguire sempre lo scambio ma solo quando serve.


    P.S. Come ti hanno già ricordato, devi usare i tag CODE altrimenti il codice non si comprende appieno ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    scusa ma non so cosa sono i tag cod.ho rimodulato cosi il programma ma non esegue perfettamente l'ordinamento.grazie



    codice:
    void ordinanum(FILE*fp3,struct classe*elettrica,int n)
    {
    
       int i,j,imin,temp;
       for(i=0;i<n-1;i++)
       {
          imin=i;
          for(j=i+1;j<n;j++)
          {
             if(elettrica[imin].voto<elettrica[j].voto)
             imin=j;
             temp=elettrica[i].voto;
             elettrica[i]=elettrica[imin];
             elettrica[imin].voto=temp;
          }
       }
       printf("promossi inordine crescente:");
       for(i=0;i<n;i++)
          fprintf(fp3,"%s %s %d %d \n",elettrica[i].cognome,elettrica[i].nome,elettrica[i].matricola,elettrica[i].voto);
    }

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da giuseppep
    scusa ma non so cosa sono i tag cod.

    Consigliati con il moderatore.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.