Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 30
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    62

    conteggio vocali in lista

    Ciao ragazzi..
    ho un problema con un programma..
    sono riuscita a fare la prima parte che mi richiede di inserire una parola in una lista linkata ordinata ogni qual volta viene ricevuta in input.
    Il problema è che devo contare il numero di vocali presenti in lista.
    Vi posto il mio codice
    codice:
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #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;
       printf("\nLista parole:\n\n");
       while(q!=NULL){
          printf("%s\n",q->info);
          q=q->next;
       }
       printf("\n");
    }
    
    void ContaNumeroVocaliInLista(char word[], int *pvocali){
       
       char c; 
       int count; 
       for(count=0;count<MAX_DIM;++count){
                                          if (c== 'a' && c== 'A' || c== 'e' && c== 'E' ||
                                          c== 'i' && c== 'I' || c== 'o' && c== 'O' || c== 'u' && c== 'U' )
                                          ++ *pvocali;
                                          }
                                          return;
                                          }
    
    int main (){
       puntElenco el_parole=NULL;
       el_parole = NULL;
       int scelta,a=1;
       int vocali=0;
       char word[MAX_DIM]={'\0'},lunga[MAX_DIM]={'\0'};
       
       do{
            //creazione MENU
             printf("SCELTA OPERAZIONE \n");
             printf("\nPREMI 1:-----------INSERISCI PAROLA---------------------\n");
             printf("PREMI 2:-----------VISUALIZZA LISTA-----------------\n");
             printf("PREMI 3:----------VISUALIZZA VOCALI IN LISTA-----------\n");
             printf("PREMI 4:----------------USCITA-----------------\n");
             printf("\nScelta: ");
             scanf("%d",&scelta);
                 
             if(scelta==1){
                printf("Digita la parola da inserire: ");
                scanf("%s",word);   
                el_parole=InserisciElementoInLista(el_parole,word);
             }
                //definizione delle possibili scelte               
             if(scelta==2) VisualizzaLista(el_parole);
                   
             if(scelta==3){
                           ContaNumeroVocaliInLista(word, &vocali);
                           printf("Le vocali presenti in lista sono: %d ", vocali);
                           
                           }
             if(scelta==4) a=0;
                 
             if(scelta!= 1 && scelta!= 2 && scelta!= 3 && scelta!=4) printf("\nScelta non valida\n\n");
                 
          } while(a!=0);
          
          return 0;
       }
    mi rendo conto che la funzione ContaNumeroVocaliInLista non passa la lista, passa solo l'array di char..ma non so passare la lista..
    mi potete dare una mano?

  2. #2
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    Non sai nemmeno come si fa il passaggio di parametri in C? Non ti pare il caso di fare un passo indietro?

    Comunque:

    codice:
    int conta_vocali (Elenco* lista)
    {...}

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    62
    non capisco..
    potresti darmi un consiglio più preciso?
    ti ringrazio

  4. #4

    Moderazione

    Ho aggiunto io il tag del linguaggio di riferimento nel titolo, in futuro ricordatene tu fin da subito.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    62
    ok..grazie..scusate

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Scusa ... la funzione

    VisualizzaLista

    l'hai scritta tu? Cosa hai passato a questa funzione?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    Originariamente inviato da milu
    non capisco..
    potresti darmi un consiglio più preciso?
    ti ringrazio
    Hai chiesto come fare per passare una lista, ora scrivi una funzione con questo prototipo:

    codice:
    int conta_vocali (Elenco* lista);
    E con un puntatore scorri tutta la lista per contare le vocali in ogni stringa.
    Spero che tu sappia come scorrere la lista

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    62
    ho risolto il problema..
    codice:
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <ctype.h>
    #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;
       printf("\nLista parole:\n\n");
       while(q!=NULL){
          printf("%s\n",q->info);
          q=q->next;
       }
       printf("\n");
    }
                 //analizza i caratteri della parola, incrementando il numero di vocali 
    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++;
    }
    }
                     //scorre la lista e definisce il numero vocali presenti in essa
    void ContaNumeroVocaliInLista(puntElenco L){
     int i=0;
     puntElenco q=L;
     while(q!=NULL){ 
                    ContaVocaliParola(q->info, &i);
                    q=q->next;
                    }
                    printf("Le vocali sono %d\n",i) ;
                    }                      
    
    
    int main (){
       puntElenco el_parole=NULL;
       el_parole = NULL;
       int scelta,a=1;
       int vocali;
       char word[MAX_DIM]={'\0'},lunga[MAX_DIM]={'\0'};
       
       do{
            //creazione MENU
             printf("SCELTA OPERAZIONE \n");
             printf("\nPREMI 1:-----------INSERISCI PAROLA---------------------\n");
             printf("PREMI 2:-----------VISUALIZZA LISTA-----------------\n");
             printf("PREMI 3:----------VISUALIZZA VOCALI IN LISTA-----------\n");
             printf("PREMI 4:----------------USCITA-----------------\n");
             printf("\nScelta: ");
             scanf("%d",&scelta);
                 
             if(scelta==1){
                printf("Digita la parola da inserire: ");
                scanf("%s",word);   
                el_parole=InserisciElementoInLista(el_parole,word);
             }
                //definizione delle possibili scelte               
             if(scelta==2) VisualizzaLista(el_parole);
                   
             if(scelta==3) ContaNumeroVocaliLista(el_parole);
                           
             if(scelta==4) a=0;
                 
             if(scelta!= 1 && scelta!= 2 && scelta!= 3 &&  scelta!=4) printf("\nScelta non valida\n\n");
                 
          } while(a!=0);
          
          return 0;
       }

    non capisco perchè però dovete dubitare..volevo un input niente di più..
    ora vorrei chiedervi un'altra cosa..in questa lista devo trovare la parola più lunga..immagino di dover scorrere la lista ancora una volta,ma come faccio a definire le condizioni per trovare la parola più lunga?

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da milu
    volevo un input niente di più..
    E l'hai avuto ... c'era già una funzione che accettava la lista e quindi non si capiva perché facessi una domanda del genere ...

    Per la parola più lunga, scorrendo la lista, memorizza in una variabile la lunghezza corrente e la parola corrente e confrontala con la prossima ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    62
    potresti farmi capire meglio non so farlo..

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.