Zero vocali

di il
20 risposte

Zero vocali

Salve , ho scritto questo codice

#include<iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
using namespace std;
#define MAX_DIM 20

typedef struct Elenco{
   char info[MAX_DIM];
   struct Elenco *next;
   } Elenco;
typedef Elenco * puntElenco;

puntElenco inserisci(puntElenco L, char*word){
   puntElenco q;
   q=(puntElenco)malloc(sizeof(Elenco)); //crea un elenco allocandolo sulla memoria dinamica
   strcpy(q->info,word);
   q->next=L;  //lega al resto della lista
   return(q);  //ritorna al nuovo puntatore della lista
}

                       //definizione funzione di inserimento in lista
puntElenco InserisciElementoInLista(puntElenco L,char*parola){
   puntElenco q=L, prec;
   int PosTrovata=0;
   if(q==NULL){        // lista vuota
      q=inserisci(L,parola);
      return(q);
   }

                     //lista con una parola con inseriemnto in testa
   if(strcmp(q->info,parola)>=0){
      q=inserisci(L,parola);
      return q;
   }
                    //lista con almeno una parola più inserimento dopo la prima parola
   while (q!=NULL && (PosTrovata==0))
   {
      if(strcmp(q->info,parola)<0)
      {
         prec=q;
         q=q->next;
      }
      else
         PosTrovata=1;
   }
   prec->next=inserisci(q,parola);
   return (L);
}
             //definizione funzione di visualizzazione lista
void VisualizzaLista(puntElenco L){
   puntElenco q=L;
   cout<<"\nLista parole:\n\n";
   while(q!=NULL){
      cout<<q->info;
      q=q->next;
   }
   cout<<"\n";
}

void ContaVocaliParola(char parola[], int *pvocali){
  char c;
  int count=0;
  while((c= toupper(parola[count]))!= '\0') {
  if (c== 'A' || c== 'E' || c== 'I' || c== 'O' || c== 'U' )
    ++ *pvocali;
    count++;
}
}
void ContaVocaliLista(puntElenco L){
int i=0;
puntElenco q=L;
cout<<"le vocali sono:\n\n";
while(q!=NULL){

                ContaVocaliParola(q->info, &i);
                q=q->next;
                }
                cout<<"\n";
                }


int main (){
   puntElenco el_parole=NULL;
   el_parole = NULL;
   int scelta,a=1;
   int vocali=0;
   int max=0;
   char word[MAX_DIM]={'\0'},lunga[MAX_DIM]={'\0'};

   do{
        //creazione MENU
         cout<<"SCELTA OPERAZIONE \n";
         cout<<"\nPREMI 1:-----------INSERISCI PAROLA---------------------\n";
         cout<<"PREMI 2:-----------VISUALIZZA LISTA-----------------\n";
         cout<<"PREMI 3:----------VISUALIZZA VOCALI IN LISTA-----------\n";
         cout<<"PREMI 4:----------------USCITA-----------------\n";
         cout<<"\nScelta: ";
         cin>>scelta;

         if(scelta==1){
            cout<<"Digita la parola da inserire: ";
            cin>>word;
            el_parole=InserisciElementoInLista(el_parole,word);
         }
            //definizione delle possibili scelte
         if(scelta==2) VisualizzaLista(el_parole);

         if(scelta==3) ContaVocaliLista(el_parole);

          if(scelta==4) a=0;

         if(scelta!= 1 && scelta!= 2 && scelta!= 3 &&  scelta!=4) cout<<"\nScelta non valida\n\n";

      } while(a!=0);

      return 0;
   }
in output funziona quasi tutto tranne la numero 3, ovvero inserisco tipo cane e come vocali mi restituisce i : e spazio bianco.Come mai?? Grazie

20 Risposte

  • Re: Zero vocali

    Mi sembra che nel codice controlli solo le vocali maiuscole ...
  • Re: Zero vocali

    Secondo me il fatto delle maiuscole non c'entra, anche perché c'è comunque la funzione toupper.

    Invece, guardando questo pezzo di codice,
    
    void ContaVocaliParola(char parola[], int *pvocali)
    {
        char c;
        int count=0;
        while((c= toupper(parola[count]))!= '\0')
        {
            if (c== 'A' || c== 'E' || c== 'I' || c== 'O' || c== 'U' )
                ++ (*pvocali);
            count++;
        }
    }
    void ContaVocaliLista(puntElenco L)
    {
        int i=0;
        puntElenco q=L;
        cout<<"le vocali sono:\n\n";
        while(q!=NULL)
        {
    
            ContaVocaliParola(q->info, &i);
            q=q->next;
        }
        cout<<"\n";
    }
    
    ho notato che non fa niente, nel senso che non visualizza niente! Se, ad esempio, provi a stampare il numero delle vocali, vedi che il codice funziona correttamente.
  • Re: Zero vocali

    minomic ha scritto:


    Secondo me il fatto delle maiuscole non c'entra, anche perché c'è comunque la funzione toupper.
    Corretto ... non avevo visto il toupper ...
  • Re: Zero vocali

    minomic ha scritto:


    Secondo me il fatto delle maiuscole non c'entra, anche perché c'è comunque la funzione toupper.

    Invece, guardando questo pezzo di codice,
    
    void ContaVocaliParola(char parola[], int *pvocali)
    {
        char c;
        int count=0;
        while((c= toupper(parola[count]))!= '\0')
        {
            if (c== 'A' || c== 'E' || c== 'I' || c== 'O' || c== 'U' )
                ++ (*pvocali);
            count++;
        }
    }
    void ContaVocaliLista(puntElenco L)
    {
        int i=0;
        puntElenco q=L;
        cout<<"le vocali sono:\n\n";
        while(q!=NULL)
        {
    
            ContaVocaliParola(q->info, &i);
            q=q->next;
        }
        cout<<"\n";
    }
    
    ho notato che non fa niente, nel senso che non visualizza niente! Se, ad esempio, provi a stampare il numero delle vocali, vedi che il codice funziona correttamente.
    quindi come potrei risolvere ?
  • Re: Zero vocali

    birkhoff92 ha scritto:


    quindi come potrei risolvere ?
    Scusa ... mi sembra ovvio ... forse non hai letto bene ...

    C'è questa linea

    cout<<"le vocali sono:\n\n";

    ma manca la cout per visualizzare il contatore delle vocali ...
  • Re: Zero vocali

    oregon ha scritto:


    birkhoff92 ha scritto:


    quindi come potrei risolvere ?
    Scusa ... mi sembra ovvio ... forse non hai letto bene ...

    C'è questa linea

    cout<<"le vocali sono:\n\n";

    ma manca la cout per visualizzare il contatore delle vocali ...
    Giusto grazie mille per la dritta. Il problema ora però è che mi dice sempre 0. Tipo cane mi dice zero vocali
  • Re: Zero vocali

    Veramente a me dice, giustamente, 2.
    
    void ContaVocaliLista(puntElenco L)
    {
        int i=0;
        puntElenco q=L;
        cout<<"le vocali sono:\n\n";
        while(q!=NULL)
        {
            ContaVocaliParola(q->info, &i);
            cout << i << endl;
            q=q->next;
        }
        cout<<"\n";
    }
  • Re: Zero vocali

    birkhoff92 ha scritto:


    mi dice zero vocali
    Manca il codice che hai usato ...
  • Re: Zero vocali

    void ContaVocaliLista(puntElenco L)
    {
        int i=0;
        puntElenco q=L;
        cout<<"le vocali sono:\n\n";
        while(q!=NULL)
        {
            ContaVocaliParola(q->info, &i);
            cout << i << endl;
            q=q->next;
        }
        cout<<"\n";
    }
    questo

    https://fbcdn-sphotos-h-a.akamaihd.net/hphotos-ak-xpa1/v/t35.0-12/10542395_272011976339576_1418049822_o.jpg?oh=db133cb046f5e6e3de2dc43ffed79b86&oe=53C6AEBF&__gda__=1405547615_b81f9ebb4bc8e3fc61b1765f7669e293
  • Re: Zero vocali

    Ma è uguale a quello che ho postato io... E questo è l'output che ottengo:

  • Re: Zero vocali

    Inserisco solo una parola in lista

    cane

    e mi fornisce

    2
  • Re: Zero vocali

    oregon ha scritto:


    Inserisco solo una parola in lista

    cane

    e mi fornisce

    2
    https://fbcdn-sphotos-h-a.akamaihd.net/hphotos-ak-xpa1/v/t35.0-12/10542395_272011976339576_1418049822_o.jpg?oh=db133cb046f5e6e3de2dc43ffed79b86&oe=53C6AEBF&__gda__=1405547615_b81f9ebb4bc8e3fc61b1765f7669e293
  • Re: Zero vocali

    Prova a fare copia-incolla di questo codice, senza modificare nulla:
    #include<iostream>
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <ctype.h>
    using namespace std;
    #define MAX_DIM 20
    
    typedef struct Elenco
    {
        char info[MAX_DIM];
        struct Elenco *next;
    } Elenco;
    typedef Elenco * puntElenco;
    
    puntElenco inserisci(puntElenco L, char*word)
    {
        puntElenco q;
        q=(puntElenco)malloc(sizeof(Elenco)); //crea un elenco allocandolo sulla memoria dinamica
        strcpy(q->info,word);
        q->next=L;  //lega al resto della lista
        return(q);  //ritorna al nuovo puntatore della lista
    }
    
    //definizione funzione di inserimento in lista
    puntElenco InserisciElementoInLista(puntElenco L,char*parola)
    {
        puntElenco q=L, prec;
        int PosTrovata=0;
        if(q==NULL)         // lista vuota
        {
            q=inserisci(L,parola);
            return(q);
        }
    
        //lista con una parola con inseriemnto in testa
        if(strcmp(q->info,parola)>=0)
        {
            q=inserisci(L,parola);
            return q;
        }
        //lista con almeno una parola più inserimento dopo la prima parola
        while (q!=NULL && (PosTrovata==0))
        {
            if(strcmp(q->info,parola)<0)
            {
                prec=q;
                q=q->next;
            }
            else
                PosTrovata=1;
        }
        prec->next=inserisci(q,parola);
        return (L);
    }
    //definizione funzione di visualizzazione lista
    void VisualizzaLista(puntElenco L)
    {
        puntElenco q=L;
        cout<<"\nLista parole:\n\n";
        while(q!=NULL)
        {
            cout<<q->info;
            q=q->next;
        }
        cout<<"\n";
    }
    
    void ContaVocaliParola(char parola[], int *pvocali)
    {
        char c;
        int count=0;
        while((c= toupper(parola[count]))!= '\0')
        {
            if (c== 'A' || c== 'E' || c== 'I' || c== 'O' || c== 'U' )
                ++ (*pvocali);
            count++;
        }
    }
    
    void ContaVocaliLista(puntElenco L)
    {
        int i=0;
        puntElenco q=L;
        cout<<"le vocali sono:\n\n";
        while(q!=NULL)
        {
            ContaVocaliParola(q->info, &i);
            cout << i << endl;
            q=q->next;
        }
        cout<<"\n";
    }
    
    
    int main ()
    {
        puntElenco el_parole=NULL;
        el_parole = NULL;
        int scelta,a=1;
        int vocali=0;
        int max=0;
        char word[MAX_DIM]= {'\0'},lunga[MAX_DIM]= {'\0'};
    
        do
        {
            //creazione MENU
            cout<<"SCELTA OPERAZIONE \n";
            cout<<"\nPREMI 1:-----------INSERISCI PAROLA---------------------\n";
            cout<<"PREMI 2:-----------VISUALIZZA LISTA-----------------\n";
            cout<<"PREMI 3:----------VISUALIZZA VOCALI IN LISTA-----------\n";
            cout<<"PREMI 4:----------------USCITA-----------------\n";
            cout<<"\nScelta: ";
            cin>>scelta;
    
            if(scelta==1)
            {
                cout<<"Digita la parola da inserire: ";
                cin>>word;
                el_parole=InserisciElementoInLista(el_parole,word);
            }
            //definizione delle possibili scelte
            if(scelta==2) VisualizzaLista(el_parole);
    
            if(scelta==3) ContaVocaliLista(el_parole);
    
            if(scelta==4) a=0;
    
            if(scelta!= 1 && scelta!= 2 && scelta!= 3 &&  scelta!=4) cout<<"\nScelta non valida\n\n";
    
        }
        while(a!=0);
    
        return 0;
    }
    
  • Re: Zero vocali

    minomic ha scritto:


    Prova a fare copia-incolla di questo codice, senza modificare nulla:
    #include<iostream>
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <ctype.h>
    using namespace std;
    #define MAX_DIM 20
    
    typedef struct Elenco
    {
        char info[MAX_DIM];
        struct Elenco *next;
    } Elenco;
    typedef Elenco * puntElenco;
    
    puntElenco inserisci(puntElenco L, char*word)
    {
        puntElenco q;
        q=(puntElenco)malloc(sizeof(Elenco)); //crea un elenco allocandolo sulla memoria dinamica
        strcpy(q->info,word);
        q->next=L;  //lega al resto della lista
        return(q);  //ritorna al nuovo puntatore della lista
    }
    
    //definizione funzione di inserimento in lista
    puntElenco InserisciElementoInLista(puntElenco L,char*parola)
    {
        puntElenco q=L, prec;
        int PosTrovata=0;
        if(q==NULL)         // lista vuota
        {
            q=inserisci(L,parola);
            return(q);
        }
    
        //lista con una parola con inseriemnto in testa
        if(strcmp(q->info,parola)>=0)
        {
            q=inserisci(L,parola);
            return q;
        }
        //lista con almeno una parola più inserimento dopo la prima parola
        while (q!=NULL && (PosTrovata==0))
        {
            if(strcmp(q->info,parola)<0)
            {
                prec=q;
                q=q->next;
            }
            else
                PosTrovata=1;
        }
        prec->next=inserisci(q,parola);
        return (L);
    }
    //definizione funzione di visualizzazione lista
    void VisualizzaLista(puntElenco L)
    {
        puntElenco q=L;
        cout<<"\nLista parole:\n\n";
        while(q!=NULL)
        {
            cout<<q->info;
            q=q->next;
        }
        cout<<"\n";
    }
    
    void ContaVocaliParola(char parola[], int *pvocali)
    {
        char c;
        int count=0;
        while((c= toupper(parola[count]))!= '\0')
        {
            if (c== 'A' || c== 'E' || c== 'I' || c== 'O' || c== 'U' )
                ++ (*pvocali);
            count++;
        }
    }
    
    void ContaVocaliLista(puntElenco L)
    {
        int i=0;
        puntElenco q=L;
        cout<<"le vocali sono:\n\n";
        while(q!=NULL)
        {
            ContaVocaliParola(q->info, &i);
            cout << i << endl;
            q=q->next;
        }
        cout<<"\n";
    }
    
    
    int main ()
    {
        puntElenco el_parole=NULL;
        el_parole = NULL;
        int scelta,a=1;
        int vocali=0;
        int max=0;
        char word[MAX_DIM]= {'\0'},lunga[MAX_DIM]= {'\0'};
    
        do
        {
            //creazione MENU
            cout<<"SCELTA OPERAZIONE \n";
            cout<<"\nPREMI 1:-----------INSERISCI PAROLA---------------------\n";
            cout<<"PREMI 2:-----------VISUALIZZA LISTA-----------------\n";
            cout<<"PREMI 3:----------VISUALIZZA VOCALI IN LISTA-----------\n";
            cout<<"PREMI 4:----------------USCITA-----------------\n";
            cout<<"\nScelta: ";
            cin>>scelta;
    
            if(scelta==1)
            {
                cout<<"Digita la parola da inserire: ";
                cin>>word;
                el_parole=InserisciElementoInLista(el_parole,word);
            }
            //definizione delle possibili scelte
            if(scelta==2) VisualizzaLista(el_parole);
    
            if(scelta==3) ContaVocaliLista(el_parole);
    
            if(scelta==4) a=0;
    
            if(scelta!= 1 && scelta!= 2 && scelta!= 3 &&  scelta!=4) cout<<"\nScelta non valida\n\n";
    
        }
        while(a!=0);
    
        return 0;
    }
    
    sempre zero (( ora in consolle mi esce anche questo:''g++ -o contarevocali.exe main.o
    c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot open output file contarevocali.exe: Permission denied
    collect2.exe: error: ld returned 1 exit status''
Devi accedere o registrarti per scrivere nel forum
20 risposte