Esercizio sui record

di il
11 risposte

Esercizio sui record

Salve a tutti, sono disperato , ci sto sbattendo la testa ma non mi viene nulla in mente

io ho questo programma:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct rubrica
{
char nome[15];
char cognome[15];
int telefono;
};
main()
{
struct rubrica telefonica[3];
int i;

for(i=1;i<4;i++){
printf("inserisci %d^ nome :",i);
scanf(" %s",&telefonica.nome);

printf("inserisci il %d^ cognome :",i);
scanf(" %s",&telefonica.cognome);


printf("inserisci il %d^ numero di telefono:",i);
scanf(" %d",&telefonica.telefono);
printf("\n");
}



system("PAUSE");
return 0;
}

molto semplicemente crea una rubrica telefonica , quello che vuole l esercizio è che tutti i contatti debbano essere ordinati tramite il cognome in apposite sezioni, per esempio nella sezione "a" ci andranno tutti in contatti aventi l iniziale del cognome corrispondente alla lettera "a" e cosi via..perfavore se potete farmi capire come si fa, magari solo una spintarella, non voglio che mi diciate tutto, solo per darmi un input perche a me non viene nulla in testa, grazie mille e buona serata

11 Risposte

  • Re: Esercizio sui record

    Se devi ordinare per cognome, significa che devi analizzare tutti i cognomi e trovare il modo di decidere se il cognome A viene prima o dopo il cognome B.
    Una possibile soluzione è quella di utilizzare la funzione strcmp(str1, str2), che ritorna 0 se le due stringhe sono uguali, < 0 oppure > 0 se la str1 viene alfabeticamente prima o dopo str2.

    P.s.: utilizza i tag
     per inserire codice sul forum.
    
     f28
  • Re: Esercizio sui record

    tuixte ha scritto:


    Se devi ordinare per cognome, significa che devi analizzare tutti i cognomi e trovare il modo di decidere se il cognome A viene prima o dopo il cognome B.
    Una possibile soluzione è quella di utilizzare la funzione strcmp(str1, str2), che ritorna 0 se le due stringhe sono uguali, < 0 oppure > 0 se la str1 viene alfabeticamente prima o dopo str2.

    P.s.: utilizza i tag
     per inserire codice sul forum.
    
     f28[/quote]
    si per la funzione strcmp ci sto, l ho fatta gia altre volte, ma poi non so come inserire quel cognome nella corrispondente sezione
    
    ps: non so cosa sia il tag scusami
  • Re: Esercizio sui record

    str1 = "Rossi";
    str2 = "Bagli";
    if(strcmp(str1, str2) > 0)
        inverti();
    Il codice all'interno dell'if viene eseguito se str2 è alfabeticamente inferiore a str1.
    Nel tuo caso, sarebbe:
    if(strcmp(telefonica[i].cognome, telefonica[j].cognome) > 0)
        inverti(telefonica, i, j);
    ipotizzando che inverti sia una funzione che scambia il record i-esimo con quello j-esimo.
    Ora continua tu.
  • Re: Esercizio sui record

    tuixte ha scritto:


    str1 = "Rossi";
    str2 = "Bagli";
    if(strcmp(str1, str2) > 0)
        inverti();
    Il codice all'interno dell'if viene eseguito se str2 è alfabeticamente inferiore a str1.
    Nel tuo caso, sarebbe:
    if(strcmp(telefonica[i].cognome, telefonica[j].cognome) > 0)
        inverti(telefonica, i, j);
    ipotizzando che inverti sia una funzione che scambia il record i-esimo con quello j-esimo.
    Ora continua tu.
    ma "inverti" è una funzione? comunque mi sei stato molto d aiuto grazie mille
    edit:
    inverti non e una funzione, ed e proprio li che ho difficolta...forse ci sto arrivando a trovare un modo..
  • Re: Esercizio sui record

    E' una funzione con un nome che ho inventato.. sta a te scrivere il codice che corrisponderebbe a quella funzione.
    Puoi utilizzare questo metodo di confronto per scrivere un algoritmo di ordinamento.. puoi anche utilizzare un semplicissimo bubble-sort.

    ILROLL ha scritto:


    non so cosa sia il tag scusami
    E' difficile leggere del codice sul forum, se inserito come normale testo all'interno del post.
    Pertanto, puoi scrivere: [ code ]il tuo codice va qui[ code ] (senza spazi), per ottenere una visualizzazione del codice più pulita, come quella nel mio post. In alternativa, ti basta cliccare sul pulsante Code in alto, sopra la casella di testo in cui scrivi le tue risposte.
  • Re: Esercizio sui record

    tuixte ha scritto:


    E' una funzione con un nome che ho inventato.. sta a te scrivere il codice che corrisponderebbe a quella funzione.
    Puoi utilizzare questo metodo di confronto per scrivere un algoritmo di ordinamento.. puoi anche utilizzare un semplicissimo bubble-sort.

    ILROLL ha scritto:


    non so cosa sia il tag scusami
    E' difficile leggere del codice sul forum, se inserito come normale testo all'interno del post.
    Pertanto, puoi scrivere: [ code ]il tuo codice va qui[ code ] (senza spazi), per ottenere una visualizzazione del codice più pulita, come quella nel mio post. In alternativa, ti basta cliccare sul pulsante Code in alto, sopra la casella di testo in cui scrivi le tue risposte.
    mamma mia...pensa che mi trovi cosi tanto in difficolta per il semplice fatto che oggi il professore ce l ha dato da fare senza spiegarci un minimo ( come ogni volta), ora vedo cosa posso fare con il bubble sort...per me questi programmi sono di una difficolta immensa , manco l abbiamo fatto il bubble sort per le stringhe...
  • Re: Esercizio sui record

    Non pensare ad un bubblesort per le stringhe.. pensa ad un bubblesort per numeri interi. Semplicemente, piuttosto che utilizzare la condizione
    if(a > b)
    utilizzi
    if(strcmp(str1, str2) > 0)
  • Re: Esercizio sui record

    tuixte ha scritto:


    Non pensare ad un bubblesort per le stringhe.. pensa ad un bubblesort per numeri interi. Semplicemente, piuttosto che utilizzare la condizione
    if(a > b)
    utilizzi
    if(strcmp(str1, str2) > 0)

    ecco che mi e uscito fuori :
     
    int inverti;
    int j;
    
    for(i=1;i<4;i++){
                     for(j=1;j<3-i;j++){
                     
                                      if(strcmp(telefonica[i].cognome,telefonica[i+1].cognome)>0){
                                     inverti=telefonica[i].cognome;
                                     telefonica[i].cognome=telefonica[i+1];
                                     telefonica[i+1]=inverti;
                                      
    
    ovviamente non esce... f19
  • Re: Esercizio sui record

    Non so quale piede tu abbia appoggiato per prima a terra questa mattina ma era sicuramente il piede sbagliato.
    Uno Dev-c++ è una ciofeca, dimenticalo o affliggiti!
    Due gli indici nel c partono sempre e comunque da 0 e finiscono a COUNT-1 tu hai un buffer overflow, e sicurente lo sai bene anche se non l'hai accennato.

    Ora dopo che da bravo studente ti sarai riportato sulla retta via capirai che hai un vettore di n elementi, se tu lo inizi a scorrere e man mano che incontri una lettera lo posizioni nella classe hai già i 3/4 del lavoro fatto.
    Solo dopo puoi elaborare qualche algoritmo che ti permetta di inserirlo ordinato nella classe, anche se non sembra citato nell' esercizio e dunque deduco non serva nessun algoritmo di sorting.

    in bocca al lupo
  • Re: Esercizio sui record

    vbextreme ha scritto:


    Non so quale piede tu abbia appoggiato per prima a terra questa mattina ma era sicuramente il piede sbagliato.
    Uno Dev-c++ è una ciofeca, dimenticalo o affliggiti!
    Due gli indici nel c partono sempre e comunque da 0 e finiscono a COUNT-1 tu hai un buffer overflow, e sicurente lo sai bene anche se non l'hai accennato.

    Ora dopo che da bravo studente ti sarai riportato sulla retta via capirai che hai un vettore di n elementi, se tu lo inizi a scorrere e man mano che incontri una lettera lo posizioni nella classe hai già i 3/4 del lavoro fatto.
    Solo dopo puoi elaborare qualche algoritmo che ti permetta di inserirlo ordinato nella classe, anche se non sembra citato nell' esercizio e dunque deduco non serva nessun algoritmo di sorting.

    in bocca al lupo
    quindi tu dici di fare piu operazioni contemporaneamente ? controllo e ordino , controllo e ordino tutto assieme , ma non so come farlo, pultroppo mi obbligano ad usare il c anche se vorrei aprire i miei orizzonti ad altri compilatori, questo programma e un caso perso per me, quasi sempre tendo a non arrendermi, ma qui non ho proprio il concetto in mente, bho, non so che fare
  • Re: Esercizio sui record

    Uno scarica code::blocks
    due sistema gli indici
    tre se vuoi puoi fare tutto in un passaggio, prendi l'input e lo metti nella sezione giusta
    
    struct sezione
    {
        count;
        cognome[MAXVETTORE][MAXCOGNOME];
    }
    
    struct sezione sezioni['z'-'a'];
    
    ...
    ...
    ...
    for ...
    {
        fgets(cognome....)
        char indice = cognome[0];
        strcpy( sezioni[indice].cognome[sezioni[indice].count++], cognome);
    }
    
    
    ecco che hai svolto tutto l esercizio, e se vuoi la ciliegina premi le meningi
Devi accedere o registrarti per scrivere nel forum
11 risposte