Programmino in C++

di il
11 risposte

Programmino in C++

Ho l'impressione " anche se funziona " che sia possibile migliorare il tutto . L'unica cosa che non riesco a fare è come verificare e stampare la vocale che compare con maggior frequenza . Il codice che ho scritto è il seguente, comprensivo del testo dell'esercizio ( in grassetto ho evidenziato quello che non so fare ) :


/* in un array di 100 elementi è memorizzata una frase.
ogni lettera di una frase è contenuta in un elemento dell'array .
scrivere un programma che permette di :
memorizzare la frase nell'array;
stampare la frase al contrario;
stampare il numero di parole memorizzate nell'array ( le parole sono separate dal carattere " spazio " );
stampare quante volte compare ciascuna vocale e quale vocale compare con frequenza maggiore . */
#include<iostream>
#include<string>
using namespace std;
int main(){
char frase[100],vocale;
int k,i,cp=0,cv,j,voca,voce,voci,voco,vocu,vmax;
int vetvoc[100];
cout<<"Inserisci frase"<<endl;
cin.getline(frase,100);
cout<<"\n";
k=strlen(frase);
cout<<"Numero caratteri della frase = "<<k<<endl;
cout<<"\n";
for(i=k-1;i>=0;i--)
cout<<frase[i];
cout<<"\n";
for(i=0;i<=k;i++)
if(frase[i]==' ' || frase[i]=='\0')
cp=cp+1;
cout<<"\n";
cout<<"Numero parole = "<<cp<<endl;
cout<<"\n";
voca=voce=voci=voco=vocu=vmax=0;
for(i=0;i<=k;i++){
switch(frase[i]){
     case 'a':; case 'A' :
     voca++;
     break;
     case 'e':; case 'E':
     voce++;
     break;
     case 'i':; case 'I':
     voci++;
     break;
     case 'o':; case 'O':
     voco++;
     break;
     case 'u':; case 'U':
     vocu++;
     break;
     }
     }
cout<<"numero complessivo di vocali a ="<<"\t"<<voca<<endl;
cout<<"\n";
cout<<"numero complessivo di vocali e ="<<"\t"<<voce<<endl;
cout<<"\n";
cout<<"numero complessivo di vocali i ="<<"\t"<<voci<<endl;
cout<<"\n";
cout<<"numero complessivo di vocali o ="<<"\t"<<voco<<endl;
cout<<"\n";
cout<<"numero complessivo di vocali u ="<<"\t"<<vocu<<endl;
cout<<"\n";
     
system("pause");
}

qualcuno può aiutarmi ?

11 Risposte

  • Re: Programmino in C++

    Inizia dai code tags. Fai modifica messaggio, il 5 pulsante partendo da sinistra ti permette di formattare il tuo codice. Così com'è non si capisce un tubo.

    Hints
    
    main.cpp:11:15: error: ‘strlen’ was not declared in this scope
    main.cpp:54:15: error: ‘system’ was not declared in this scope
    main.cpp:5:17: warning: unused variable ‘vocale’ [-Wunused-variable]
    main.cpp:6:14: warning: unused variable ‘cv’ [-Wunused-variable]
    main.cpp:6:17: warning: unused variable ‘j’ [-Wunused-variable]
    main.cpp:7:5: warning: unused variable ‘vetvoc’ [-Wunused-variable]
    
  • Re: Programmino in C++

    Controlla i vari case
    
    case 'i':; case 'I':
    
    se vuoi verificare dei case in cascata devi togliere il ;
    
    case 'i':
    case 'I':
    
    ecc per tutti gli altri case. Metti a posto anche gli errori che ti ho evidenziato prima.
  • Re: Programmino in C++

    skynet ha scritto:


    Controlla i vari case
    
    case 'i':; case 'I':
    
    se vuoi verificare dei case in cascata devi togliere il ;
    
    case 'i':
    case 'I':
    
    ecc per tutti gli altri case. Metti a posto anche gli errori che ti ho evidenziato prima.
    il punto è che non capisco come fare la verifica che mi manca . Potresti spiegarmelo ?

    Per gli altri errori, Il compilatore ( Dev C++ ) non mi segnala niente e funziona tutto correttamente .

    Grazie per la pazienza e la disponibilità
  • Re: Programmino in C++

    case 'a':; case 'A' :
    Come vedi dopo case 'a': c'è il punto e virgola. questo fa si quel case non venga considerato per la raccolta dati. Devi togliere il punto e virgola cosi i due case 'a' e 'A' stanno in cascata e possono lavorare.
    Per favore togli quel compilatore vecchio più di me e metti qualcosa di decente del tipo Code::Blocks.
    Per forza che non ti da errori, neanche lui sa che ci sono sti errori. strlen sta su <string.h> e tu hai incluso <string> che è un header C++ che serve per la classe std::srting e non ha niente a che fare con le funzioni in C.
  • Re: Programmino in C++

    Devi trovare il maggiore di 5 numeri.
    Se avessi usato un array avresti potuto fare un loop e aggiornare via via il maggiore.
    Avendo 5 variabili tocca fare un po di confronti.
    Ciao.
  • Re: Programmino in C++

    skynet ha scritto:


    case 'a':; case 'A' :
    Come vedi dopo case 'a': c'è il punto e virgola. questo fa si quel case non venga considerato per la raccolta dati. Devi togliere il punto e virgola cosi i due case 'a' e 'A' stanno in cascata e possono lavorare.
    Per favore togli quel compilatore vecchio più di me e metti qualcosa di decente del tipo Code::Blocks.
    Per forza che non ti da errori, neanche lui sa che ci sono sti errori. strlen sta su <string.h> e tu hai incluso <string> che è un header C++ che serve per la classe std::srting e non ha niente a che fare con le funzioni in C.
    purtroppo non sono così avanzato come te e certe cose ancora non le comprendo . Per il momento devo usare questo compilatore e non per mia scelta .
    Oltre a togliere il " ; " non so quale sia il codice che devo scrivere per l'ultima verifica, proprio non mi viene in mente .

    Grazie comunque per i consigli, che apprezzo e terrò di conto per il futuro .
  • Re: Programmino in C++

    Supponiamo di avere un vettore di questo tipo: (seguendo il consiglio di infoartenovo)
    vettore di interi col nome vocali di 5 caselle.
    Le vocali sono
    'a', 'e', 'i', 'o','u'
    le caselle del vettore vocali allora possiamo per definizione usarli per incrementare il numero di una certa voale, mi spiego meglio
    v[0] conterrà il numero delle volte che 'a' compare nella frase
    v[1] conterrà il numero delle volte che 'e' compare nella frase
    .....
    e cosi via.

    Alla fine non ti resta altro che fare una scansione di questo vettore per vedere qualle numero è più alto. Così avrai trovato la vocale con più frequenza.
  • Re: Programmino in C++

    skynet ha scritto:


    Supponiamo di avere un vettore di questo tipo: (seguendo il consiglio di infoartenovo)
    vettore di interi col nome vocali di 5 caselle.
    Le vocali sono
    'a', 'e', 'i', 'o','u'
    le caselle del vettore vocali allora possiamo per definizione usarli per incrementare il numero di una certa voale, mi spiego meglio
    v[0] conterrà il numero delle volte che 'a' compare nella frase
    v[1] conterrà il numero delle volte che 'e' compare nella frase
    .....
    e cosi via.

    Alla fine non ti resta altro che fare una scansione di questo vettore per vedere qualle numero è più alto. Così avrai trovato la vocale con più frequenza.
    Grazie per l'impegno, ma la colpa è mia che proprio non ci arrivo . Non vedo dove devo mettere le mani e cosa aggiungere nel codice che ho scritto, oltre a togliere lo switch case, ovviamente .
  • Re: Programmino in C++

    Controlla adesso questo e vedi le modifiche.
    
    #include<iostream>
    #include<string.h>
    
    #define MAX_LEN 100
    
    using namespace std;
    
    int main()
    {
        char frase[MAX_LEN+1];
        cout<<"Inserisci frase"<<endl;
        cin.getline(frase,100);
        cout<<"\n";
        int length = strlen(frase);
        cout<<"Numero caratteri della frase = " << length << endl;
        cout<<"\n";
    
        for(int i = length-1; i>=0;i--)
            cout << frase[i];
        cout<<"\n";
    
        int numeroParole = 0;
        for(int i = 0; i < length; i++)
        {
             if(frase[i] == ' ')
                numeroParole++;
        }
        numeroParole++; //aggiunta per l'ultima parola
        cout<<"\n";
        cout<<"Numero parole = "<< numeroParole << endl;
        cout<<"\n";
        // 'a','e','i','o','u'
        int v[5] = {0};
    
    
        for(int i = 0; i < length; i++)
        {
            switch(frase[i])
            {
                case 'a':
                case 'A':
                    v[0]++;
                break;
                case 'e':
                case 'E':
                    v[1]++;
                break;
                case 'i':
                case 'I':
                    v[2]++;
                break;
                case 'o':
                case 'O':
                    v[3]++;
                break;
                case 'u':
                case 'U':
                    v[4]++;
                break;
            }
        }
    
        cout<<"numero complessivo di vocali a ="<<"\t"<<v[0]<<endl;
        cout<<"\n";
        cout<<"numero complessivo di vocali e ="<<"\t"<<v[1]<<endl;
        cout<<"\n";
        cout<<"numero complessivo di vocali i ="<<"\t"<<v[2]<<endl;
        cout<<"\n";
        cout<<"numero complessivo di vocali o ="<<"\t"<<v[3]<<endl;
        cout<<"\n";
        cout<<"numero complessivo di vocali u ="<<"\t"<<v[4]<<endl;
        cout<<"\n";
    
        int max = 0;
        for(int i = 0; i < 4; i++)
        {
            if(v[i] > v[max])
                max = i;
        }
        switch(max)
        {
            case 0: cout << "La vocale 'a' ha la frequenza maggiore" << endl; break;
            case 1: cout << "La vocale 'e' ha la frequenza maggiore" << endl; break;
            case 2: cout << "La vocale 'i' ha la frequenza maggiore" << endl; break;
            case 3: cout << "La vocale 'o' ha la frequenza maggiore" << endl; break;
            case 4: cout << "La vocale 'u' ha la frequenza maggiore" << endl; break;
        }
        cin.get();
    }
    
  • Re: Programmino in C++

    skynet ha scritto:


    Controlla adesso questo e vedi le modifiche.
    
    #include<iostream>
    #include<string.h>
    
    #define MAX_LEN 100
    
    using namespace std;
    
    int main()
    {
        char frase[MAX_LEN+1];
        cout<<"Inserisci frase"<<endl;
        cin.getline(frase,100);
        cout<<"\n";
        int length = strlen(frase);
        cout<<"Numero caratteri della frase = " << length << endl;
        cout<<"\n";
    
        for(int i = length-1; i>=0;i--)
            cout << frase[i];
        cout<<"\n";
    
        int numeroParole = 0;
        for(int i = 0; i < length; i++)
        {
             if(frase[i] == ' ')
                numeroParole++;
        }
        numeroParole++; //aggiunta per l'ultima parola
        cout<<"\n";
        cout<<"Numero parole = "<< numeroParole << endl;
        cout<<"\n";
        // 'a','e','i','o','u'
        int v[5] = {0};
    
    
        for(int i = 0; i < length; i++)
        {
            switch(frase[i])
            {
                case 'a':
                case 'A':
                    v[0]++;
                break;
                case 'e':
                case 'E':
                    v[1]++;
                break;
                case 'i':
                case 'I':
                    v[2]++;
                break;
                case 'o':
                case 'O':
                    v[3]++;
                break;
                case 'u':
                case 'U':
                    v[4]++;
                break;
            }
        }
    
        cout<<"numero complessivo di vocali a ="<<"\t"<<v[0]<<endl;
        cout<<"\n";
        cout<<"numero complessivo di vocali e ="<<"\t"<<v[1]<<endl;
        cout<<"\n";
        cout<<"numero complessivo di vocali i ="<<"\t"<<v[2]<<endl;
        cout<<"\n";
        cout<<"numero complessivo di vocali o ="<<"\t"<<v[3]<<endl;
        cout<<"\n";
        cout<<"numero complessivo di vocali u ="<<"\t"<<v[4]<<endl;
        cout<<"\n";
    
        int max = 0;
        for(int i = 0; i < 4; i++)
        {
            if(v[i] > v[max])
                max = i;
        }
        switch(max)
        {
            case 0: cout << "La vocale 'a' ha la frequenza maggiore" << endl; break;
            case 1: cout << "La vocale 'e' ha la frequenza maggiore" << endl; break;
            case 2: cout << "La vocale 'i' ha la frequenza maggiore" << endl; break;
            case 3: cout << "La vocale 'o' ha la frequenza maggiore" << endl; break;
            case 4: cout << "La vocale 'u' ha la frequenza maggiore" << endl; break;
        }
        cin.get();
    }
    
    viste le mie attuali competenze in merito, non sarei mai arrivato a questa soluzione .
    Grazie mille .
    Se passi da Firenze, ti assicuro lezioni di tennis gratuite .
  • Re: Programmino in C++

    Thnx, per l'offerta lo terrò a mente.
Devi accedere o registrarti per scrivere nel forum
11 risposte