Ho bisogno di correzioni!!

di il
3 risposte

Ho bisogno di correzioni!!

Ragazzi..sto svolgendo questo programma in c++ e,praticamente,devo ordinare in ordine alfabetico gli studenti usando algoritmo x inserimento..lo faccio eseguire ma nn parte..sicuramente l'errore è nell'utilizzo dei puntatori..potete aiutarmi,please??

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct studente {
char *nome;
char *cognome;
unsigned matricola;
};
typedef struct studente Studente;
Studente array [3];
void ord_inser(Studente *array[],int n);
void main()
{
int n=3;
Studente array[3] = {{"Mario","Rossi",427},{"Elena","Ricci",976},{"Rita","Michelino",514}};
ord_inser(&array[3].cognome,n);
printf ("%s\t%s\t%d\n\n",array[3].cognome,array[3].nome,array[3].matricola);
}
//algoritmo x inserimento
void ord_inser(Studente *array[],int n)
{
int i,j;
char el_da_ins;
for(i=1;i<n;i++)
{
el_da_ins = *array->cognome;
j =i-1;
while(j>=0 &&el_da_ins < *array[j]->cognome)
{
*array[j+1]->cognome = *array[j]->cognome;
j--;
}
*array[j+1]->cognome = el_da_ins;
}
}

3 Risposte

  • Re: Ho bisogno di correzioni!!

    Direi che siamo sulla strada sbagliata...
    Devi eseguire un'allocazione dinamica oppure utilizzare un'altro array di puntatori allineato all'attuale sul quale puoi scambiare i puntatori.
    ord_inser deve fare un controllo su stringhe mediante funzione strcmp o strncmp e nella fase di scambio invertire i puntatori - non (solo) la stringa indice da ordinare -

    Saluti,
    Max

    PS Usa il tag code quando posti il codice - Aiuta chi vuole aiutarti -
  • Re: Ho bisogno di correzioni!!

    E come posso fare??nn puoi indirizzarmi scrivendo il codice??scusa se nn ho postato correttamente il codice..
  • Re: Ho bisogno di correzioni!!

    Debuggalo... sto vedendo zelig e sinceramente non mi va di scrivere....
    Almeno l'ordinamento fallo !!! (accidenti a me)
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    struct studente {
      char nome[16];
      char cognome[16];
      unsigned int matricola;
    };
    
    struct studente *add (char *nome,char *cognome, unsigned int matricola)
    {
      struct studente *new;
    
      new=(struct studente *) malloc (sizeof(struct studente));
      if (new)
      {
        strcpy (new->nome,nome);
        strcpy (new->cognome,cognome);
        new->matricola=matricola;
      }
      return (new);
    }
    
    void free_all (struct studente *pstudenti[],int n)
    {
      int i;
      for (i=0;i<n;i++)
      {
        if (pstudenti[i])      
          free (pstudenti[i]);
      }
    }
    
    
    void dsp (struct studente *pstudenti[],int n)
    {
      int i;
      
      for (i=0;i<n;i++)
        printf ("%16s %16s %3d\n",pstudenti[i]->nome,pstudenti[i]->cognome,pstudenti[i]->matricola);
    }
    
    int main ()
    {
      struct studente *pstudenti[50];
      int n_studenti=0;
    
      pstudenti[n_studenti++]=add ("Mario","Rossi",24);
      pstudenti[n_studenti++]=add ("Giovanni","Verdi",40);
      pstudenti[n_studenti++]=add ("Francesco","Bianchi",17);
    
      dsp (pstudenti,n_studenti);
    
      free_all (pstudenti,n_studenti);
     
      return 0;
    }
    
Devi accedere o registrarti per scrivere nel forum
3 risposte