Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    11

    [C] Ordinamento di un array già fornito nel programma

    Buonasera ragazzi, come da titolo sto cercando di creare un programma che ordina un array di stringhe(da me gia inserite).
    Premetto che non � un esercizio datoci da svolgere dal professore.
    L'algoritmo di ordinamento a cui mi ispiro � quello del bubblesort.
    Il programma in se non da alcun errore quando provo a compilarlo per� quando lo eseguo sperando che riordini tutto fallisce restituendomi tutti i nomi nell'ordine in cui sono inseriti nel programma. Ormai sono gia diversi giorni(e soprattutto ore) che ci lavoro sopra senza giungere a nulla, complice anche il fatto che il mio professore universitario si spiega come un libro stracciato.
    Sareste disposti a dirmi il codice in che punto non funziona come dovrebbe?
    Il linguaggio di programmazione utilizzato � il C


    codice:
    #include<stdio.h>
    #include<stdlib.h>
    int main(void)
    {
     int x=4,v,z,c,;
     char *s[x];
     s[0]="luca";
     s[1]="marco";
     s[2]="ciccio";
     s[3]="aaaa";
        {
         for(v=1; v<3; v++)
            {
             for(z=0; z<3; z++)
                {
                 c=strcmp(s[v],s[z]);
                    {
                     if(c==-1)
                        {
                         s[v]=s[z];
                         s[z]=s[v];
                        }
                     if(c==1)
                        {
                         s[z]=s[v];
                         s[v]=s[z];
                        }
                    }
                }
            }
        }
        for(v=0; v<4; v++)
            {
             printf("%s\n",s[v]);
            }
    }
    Ultima modifica di LeleFT; 24-02-2017 a 09:57 Motivo: Aggiunti i tag CODE

  2. #2
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Ad occhio:

    1. Uno dei due cicli deve andare fino a 4, altrimenti ti perdi il confronto dell'ultimo elemento

    2. Se devi fare uno swap, ti serve un elemento di appoggio.
    codice:
      s[v] = s[z];
      s[z] = s[v];
    Alla fine sia s[v] che s[z] avranno lo stesso valore (s[z]). Quindi
    codice:
       char *tmp;
       ...
       tmp = s[v];
       s[v] = s[z];
       s[z] = tmp;
    3. La strcmp(s1,s2) restituisce un numero < 0 se s1 e minore di s2, >0 se s1 è maggiore di s2, 0 se sono uguali. Di conseguenza non ha senso fare il confronto con +/-1
    codice:
      if(c > 0){
          ... 
      }
      if(c < 0){
         ...  
      }
    4. Non serve verificare se una stringa è minore E maggiore dell'altra. Ti basta solo un if(c ... 0). Se metti la condizione c < 0 ordinerai l'array in modo crescente. Con c > 0 decrescente

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    11
    Guarda non so come ringraziarti, finalmente ne sono venuto a capo dopo giorni.
    Se a qualcuno dovesse servire il codice e' questo:

    codice:
    #include<stdio.h>#include<stdlib.h>
    int main(void)
    {
     char *tmp;//l'elemento di appoggio è necessario altrimenti tutti i nomi si sarebbero resi uguali
     int x=4,v,z,d=0,c;
     char *s[x];
     s[0]="zucca";
     s[1]="luca";
     s[2]="ciccio";
     s[3]="marco";
          {
        {
         for(v=1; v<4; v++)
            {
             for(z=0; z<3; z++)
                {
                 c=strcmp(s[v],s[z]);
                    {
                     if(c>0)
                        {//d++;    //il contatore mi è servito per controllare se
                         tmp=s[v]; //il programma entrava effettivamente nel 
                         s[v]=s[z];//ciclo dentro l'if per effettuare le 
                         s[z]=tmp; //sostituzioni
                        }
                    }
                }
            }
        }
            for(z=0; z<4; z++)
            {
             printf("%s\n",s[z]);
            }
                //printf("%d\n", d);
          }
    }

    P.S. inoltre grazie a leleFT per aver modificato in una maniera piu comprensibile il mio messaggio iniziale

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.