Pagina 1 di 7 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 63
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    337

    [C] ordine alfabetico stringhe

    ho il seguente codice, come faccio a mettere il tutto in ordine alfabetico?

    so che devo usare la strcmp, ma non riesco a implementare il codice...

    codice:
    
    # include <stdio.h>
    #include <string.h>
    int i;
    	
    typedef struct  {
    char nome[30];
    char cognome[30];
    } nominativo ;
    
    
    struct personanew {
    	nominativo name;
    
    };
    struct personanew numero_utenti[99];
     
    int main (){
    
    strcpy (numero_utenti[0].name.nome , "rossella");
     strcpy (numero_utenti[1].name.nome , "anna");
     strcpy (numero_utenti[2].name.nome , "massimo");
     strcpy (numero_utenti[3].name.nome , "antonio");
     strcpy (numero_utenti[4].name.nome , "luca");
     strcpy (numero_utenti[5].name.nome , "matteo");
     strcpy (numero_utenti[6].name.nome , "gloria"); 
    
     etc...
     etc...
    
    
      
    }

  2. #2
    la strcmp() prende come parametro due stringhe (o un puntatore ad una stringa) e restituisce un numero <0 se la prima precede lessicograficamente la seconda, >0 se e' vero il contrario e 0 se sono uguali

    l'unica cosa da sapere e' il tipo di algoritmo di ordinamento che vuoi utilizzare
    bubblesort, mergesort, insertionsort o altri

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    337
    ma io non conosco degli algoritmi specifici, ho provato così, ma non mi funziona
    codice:
    for (i=0; i<10; i++)
       if(strcmp(numero_utenti[i].name.nome, numero_utenti[i+1].name.nome)>0)
       {
          strcpy ( stringa1 , numero_utenti[i].name.nome);
          
          
          strcpy (numero_utenti[i].name.nome, numero_utenti[i+1].name.nome);
    	  
    
          strcpy ( numero_utenti[i+1].name.nome, stringa1);
    
       }
    il mio intento era di prendere ad esempio il primo nome vedere se è maggiore del secondo, se è maggiore lo scambio col secondo e così via, ma non mi funge l'algoritmo

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Attento ... non puoi scrivere "codice a caso" ...

    Per ordinare degli elementi di un vettore, per prima cosa, devi stabilire quale "algoritmo" vuoi usare ...

    Tu ... quale stai usando?

    Se non hai mai sentito parlare di tali algoritmi, allora ti devi fermare un attimo e studiarli ... solo dopo potrai provare a scrivere il codice adatto per l'ordinamento ...

  5. #5
    l'algoritmo piu' semplice ma con complessita' piu' alta e' il bubblesort

    e' in sostanza un doppio ciclo:

    due variabili di controllo i e j

    i = 0
    for (i... fino a n){

    for (j = i ...fino a n){
    qui dentro fai i confronti e fai sostituzioni
    se a>b lo scambi

    }
    }// qualcosa del genere



    cerca su wikipedia gli algoritmi di ordinamento

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    337
    in pratica il mio professore me ne ah insegnato solo 1 di algoritmo, non so se abbia un nome specifico


    se considero un elenco

    cane
    albero
    toro
    sole
    etc


    per ordinarlo mi ha detto:
    prendi il primo elemento (cane) , fai la strcmp con il secondo (albero); se cane > albero, allora scambi albero con cane, poi fai lo stesso con toro e albero e così via.
    alla fine si dovrebbe orrenere il risultato corretto, se non sbaglio,

    solo che c'è qualcosa che sbaglio

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    No ... cosi' non basta ...

    Dopo che hai finito i confronti del primo con tutti gli altri, devi fare lo stesso con il secondo e cosi' via ...

    Leggi questo

    http://it.wikipedia.org/wiki/Bubble_sort

    e in particolare, l'implementazione in C ...

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    337
    si è questo l'algoritmo che mi ha fatto vedere il professore (non mi aveva detto il nome)

    ma non capisco la parte fra partentesi tonde (nt array[], int elemN)

    la posso cancellare, le funzioni non le ho fatte ?

    codice:
    void BubbleSort(int array[], int elemN)
     {
       int i, tmp;
       int alto=elemN;
     
       while (alto > 0)
         { 
             for (i=0; i<alto-1; i++)
             {
               if (array[i]>array[i+1]) /* scambiare il '>' con '<' per ottenere un ordinamento decrescente */
               { 
                 tmp = array[i]; 
                 array[i] = array[i+1]; 
                 array[i+1] = tmp;
               } 
             }
         alto--; 
         }
     }

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Beh ... puoi utilizzare l'algoritmo senza la funzione, ma devi fare attenzione ad adattarlo al tuo problema (tu hai un array di strutture ...).

  10. #10
    e' perche' quella scritta su wiki e' una funzione di bubblesort

    a te serve solo l'algoritmo
    dove elemeN e' il numero di elementi da ordinare
    e array[] e' la lista di codesti elementi

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 © 2025 vBulletin Solutions, Inc. All rights reserved.