Semplificare ordinamento alfabetico di 3 lettere

di il
5 risposte

Semplificare ordinamento alfabetico di 3 lettere

Salve, ho un programma con il quale l'utente inserirà 3 lettere (a,b,c) e verranno messe in ordine alfabetico. Ho inserito il convertitore da maiuscole a minuscole, così da portarle allo stesso "piano". Ed ho impedito l'inserimento di "caratteri speciali".
Ora mi chiedo, c'è un modo per semplificare il tutto? Per richiedere meno memoria al computer, insomma, se si puo' fare meglio, anche rendendo possibile l'inserimento di una sequenza ben piu lunga di lettere, senza utilizzare mille variabili... ed un bel while semplice semplice

Ecco il codice per intero:
/*
Esercizio 1.18
Realizzare un programma che legge da input tre caratteri, e li stampa in ordine alfabetico.



*/

 #include <iostream>
#include <cmath>
#include <cstdlib>
#include <time.h>
#include <conio.h>
#include <windows.h>
#include <stdio.h>
#include <math.h>

using namespace std;

 char a,b,c;
 char continua[2];

int main ()
 {
         
      cout<<"Inserisci 3 lettere, distinguile con un'accapo, io te le metterò in ordine alfabetico\n";
      
      do{
      cin>>a;cin>>b;cin>>c;
      
      if(((a>=65)&&(a<=90)||(a>=97)&&(a<=122))&&((b>=65)&&(b<=90)||(b>=97)&&(b<=122))&&((c>=65)&&(c<=90)||(c>=97)&&(c<=122)))
      {
      
      //Convertitore lettere maiuscole in minuscole
      if((a>=65)&&(a<=90))
      a+=32;
      if((b>=65)&&(b<=90))
      b+=32;
      if((c>=65)&&(c<=90))
      c+=32;
      //Il convertitore ha lavorato :)
      
      //Condizione per l'ordinamento alfabetico delle 3 lettere
      if((a<b)&&(a<c)&&(b<c))  //Se a è minore tra tutti e tre i numeri  
      cout<<a<<b<<c<<endl;
      else if((a>b)&&(a>c)&&(b>c))  //Se a è maggiore tra tutti e b minore di c
      cout<<c<<b<<a<<endl;
      else if((a>b)&&(a>c)&&(b>c))  //Se a è maggiore tra tutti e b maggiore di c
      cout<<b<<c<<a<<endl;
      else if((a<b)&&(a>c))   //Se a è minore di b ma maggiore di c     
      cout<<c<<a<<b<<endl;
      else if((a>b)&&(a<c))   //Se a è maggiore di b e minore di c
      cout<<b<<a<<c<<endl;
      else                    //Altrimenti (se a è minore di b e c e b è maggiore di c)
      cout<<a<<c<<b<<endl;
      
         
         
         }
         
         else
         cout<<"Solo lettere, non caratteri speciali!\n";
         
         cout<<"Vuoi ripetere?(y/n)\n";
         cin>>continua;
         cin.clear();
         }while(strcmp (continua,"y")==0); 
         //cin.get();
               return 1;
         
         
         
         
         
         
          
          
          
      system("pause");
             return 0;
             
}

5 Risposte

  • Re: Semplificare ordinamento alfabetico di 3 lettere

    Ciao, puoi scriverti una funzione (abbastanza semplice) che effettui l'ordinamento di un array di numeri con un algoritmo qualsiasi (ti consiglio bubble sort per semplicità) e poi puoi ricondurre il problema dell'ordinamento di tre caratteri all'ordinamento di tre numeri, ovvero il loro codice ASCII.
  • Re: Semplificare ordinamento alfabetico di 3 lettere

    Ok ho capito. Invece potrebbe esserci un terzo metodo? Oltre al mio e quello riguardante la funzione.
    P.S: mi ero dimenticato di ringraziarti per la risposta
  • Re: Semplificare ordinamento alfabetico di 3 lettere

    C++ ancora non l'ho studiato.
    Ho cercato di aiutarti in questo modo. Credo che tu riesca a trasformarlo in C++ tranquillamente (è C).
    
    void ordina (char lettere[], short int n)
    {
        short int i, j;
        char temp;
    
        for(i=n-1;i>=0;i--)
        {
            j = i-1;
            while(j >= 0)
            {
                if(lettere[i] < lettere[j])
                {
                    temp = lettere[i];
                    lettere[i]= lettere[j];
                    lettere[j] = temp;
                }
                j--;
            }
        }
    }
    
  • Re: Semplificare ordinamento alfabetico di 3 lettere

    Grazie, ma manca l'input dell'utente ehm. E poi il char lettere ha due parentesi quadre con nulla all'interno. Quindi dà errore al compilatore dicendo che lo storage non è specificato 0.o
    Quindi ho messo io il valore 4 ops, ed ho aggiunto un cin(input), ma mi fa inserire un solo carattere.
    Comunque ecco il programma in c++ ma senza le modifiche fatte da me(tanto comunque non avrebbe funzionato):
    /*
    Esercizio 1.18
    Realizzare un programma che legge da input tre caratteri, e li stampa in ordine alfabetico.
    */
    
     #include <iostream>
    #include <cmath>
    #include <cstdlib>
    #include <time.h>
    #include <conio.h>
    #include <windows.h>
    #include <stdio.h>
    #include <math.h>
    
    using namespace std;
    
    char lettere[4];
    short int n;
    short int i, j;
    char temp;
    
    int main ()
     {
    
        for(i=n-1;i>=0;i--)
        {
            j = i-1;
            while(j >= 0)
            {
                if(lettere[i] < lettere[j])
                {
                    temp = lettere[i];
                    lettere[i]= lettere[j];
                    lettere[j] = temp;
                }
                j--;
            }
        }
    
              
              
          system("pause");
                 return 0;
                 
    }
    
    
    Dimmi tu cosa/come fare perché comunque sono alle prime armi e non ho capito bene il ragionamento...
  • Re: Semplificare ordinamento alfabetico di 3 lettere

    Io ti ho fatto solo la funzione che puoi richiamare all'interno del main passandogli i giusti parametri.
    L'input devi crearlo tu.
    Se vuoi ti posso fare tutto il programma, ma prova a implementarlo da solo. E' già tutto fatto, mancano solo sciocchezze.
Devi accedere o registrarti per scrivere nel forum
5 risposte