Problema con un programma c.

di il
13 risposte

Problema con un programma c.

Qualcuno mi potrebbe aiutare con il seguente programma?

-Scrivere un programma usando il costrutto funzionale che ciede in input una stringa e che conta quante volte la sillaba 'la' è presente in essa..

13 Risposte

  • Re: Problema con un programma c.

    Prova a scrivere qualcosa tu e vediamo dove hai problemi.
  • Re: Problema con un programma c.

    Oregon il problema è che non so fare quasi nulla... arrivo a definire le variabili ma poi non riesco mai a trovare un modo per scrivere risolvere il problema.
  • Re: Problema con un programma c.

    Il problema è che qui non si fanno gli esercizi (hai letto il regolamento?).

    E poi, la prima parte (inserimento di una stringa) non la sai fare neanche?
  • Re: Problema con un programma c.

    Nono la so inserire la stringa so anche utilizzare tutti i cicli o strutture selettive, il problema e che non so mai quale usare o quando usarla..
    Qui non so come scrivere il fatto di contare la sillaba 'la' nella parola.

    Mi basterebbe anche un avvio o un metodo di risoluzione.
  • Re: Problema con un programma c.

    Quindi comincia a scrivere il codice fino all'input della stringa.

    Poi, dato che la stringa è un vettore di char, cerca dal primo elemento al penultimo la stringa 'la'.
    Tanto per cominciare, prova a visualizzare la stringa a gruppi di due caratteri con un ciclo.

    Se non provi a scrivere il ciclo for, non si arriva a soluzione.
  • Re: Problema con un programma c.

    Ci lavoro un po su.. grazie mille.
  • Re: Problema con un programma c.

    Mi viene. sei un grande grazie infinite.
  • Re: Problema con un programma c.

    Io il programma l'ho scritto e funziona, solo che l'ho scritto senza funzioni. Riscrivendolo con una funzione la var cont non si incremente. Perchè?
    #include <stdio.h>
    #define N 25
    
    int la_sill(char str[N], int i);
    
    int main ()
    { 
    int cont;
    int i;
    char par[N];
    cont=0;
    printf ("inserisci stringa da analizzare.\n");
    scanf ("%s" , &par);
    cont = la_sill(par, i );
    
    printf ("la sillaba \'la\' compare nella stringa %d volte. \n", cont);	
    }
    
    
    
    
    int la_sill(char str[N],  int i)
    {
    	int cont;
    	cont=0;
    	
    	for  (i=0; i<=N-1; i++)
    	{
    		if (str[i] == 'l' && str[i+1] == 'a')
    		cont++;
    		return cont;
    		
    	}
    }
  • Re: Problema con un programma c.

    Return cont;

    deve stare fuori dalla for
  • Re: Problema con un programma c.

    Perfetto.errore di distrazione. ancora grazie.
  • Re: Problema con un programma c.

    Io farei qualche altra considerazione.
    A cosa serve int i? In realtà non la usi mai, non hai bisogno di passarla come parametro se ti serve nel ciclo for, puoi dichiararla normalmente dentro la funzione.
    Poi un altro consiglio per quando devi scorrere una stringa in C. Siccome in realtà si tratta solo di un array di caratteri terminato dal carattere '\0' puoi fare semplicemente così:
    
    int la_sill(const char *str)
    {
        int i;
        int cont;
        cont=0;
        for  (i=0; str[i] != '\0'; i++)
        {
            if (str[i] == 'l' && str[i+1] == 'a')
                cont++;      
        }
    
        return cont;
    }
    
    Semplicemente scorri la stringa con un ciclo for sino a quando non incontri il carattere che ti dice che la stringa è terminata, non hai bisogno di usare esplicitamente la dimensione della stringa e se tu volessi farlo sarebbe buona pratica passarla comunque come parametro della funzione.
    Ah, manca anche il return alla fine del main.
  • Re: Problema con un programma c.

    Un paio di osservazioni:
    - invece di dichiarare la variabile in un rigo e assegnargli un valore al rigo successivo, puoi anche ricorrere ad una dichiarazione con inizializzazione:
    int cont = 0;
    - una volta che hai trovato una sillaba (quindi str='l' e str[i+1]='a') già sai che il carattere successivo non può essere l'inizio di un'altra sillaba, quindi all'interno dell'if oltre ad incrementare cont puoi incrementare anche i (di una sola unità ovviamente in quanto alla fine del ciclo la variabile i sarà incrementata ancora).

    Approfondendo quanto già fatto notare da IfNotFalseTrue.
    Una stringa è terminata dal carattere \0, quindi la stringa inserita dall'utente potrà contenere al massimo N-1 caratteri. Ipotizziamo per il momento che la parola inserita sia costituita esattamente da 24 caratteri. Il 24simo carattere non lo consideriamo perchè già sappiamo che il successivo è \0 e quindi l'ultimo carattere che andremo a considerare è il 23esimo. Tenendo conto di quanto appena detto e che gli indici di un array partono da 0, la giusta condizione da inserire nel for dovrebbe essere i<N-2, sei d'accordo?
    Nel tuo caso invece con i<=N-1 vai a considerare:
    - il carattere di indice 24 (ossia \0) e inoltre con l'istruzione str[i+1] accedi ad un'area di memoria che non compete alla stringa;
    - il carattere di indice 23, inutilmente in quanto già sappiamo che str[24]='\0'.

    Finora abbiamo ipotizzato che la parola inserita dall'utente sia esattamente di 24 caratteri, ma se invece fosse più corta il tuo programma potrebbe anche restituire un risultato diverso da quello che ti aspetteresti... per esempio inserisci lago e il programma ti dice che la sillaba si ripete 7 volte!
    Infatti i caratteri che vanno dal sesto (il quinto è \0) al penultimo assumeranno valori (pseudo)casuali e quindi con un po' di fortuna (o sfortuna, dipende dai punti di vista) tali caratteri potrebbero anche essere una sequenza di lalalalala...
    Quindi o adotti la soluzione che ti è stata proposta nel post precedente, oppure consideri la lunghezza della parola inserita dall'utente utilizzando la funzione strlen.
  • Re: Problema con un programma c.

    Ho riscritto il codice così e sembra scorrere tutto liscio.
    grazie comunque per gli aiuti.


    #include <stdio.h>
    #define N 25
    
    
    int sill(char str[N]);
    
    
    int main ()
    {
    	char stringa[N];
    	int conta = 0;
    	
    	printf ("inserire stringa: \n");
    	scanf ("%s" , &stringa);
    
    	
    	conta = sill(stringa);
    	printf ("la sillaba \'la\' e\' stata inserita %d volte/a.\n" , conta);
        return 0;
    }
    
    
    
    
    int sill(char str[N])
    {
    	int cont, indice;
    	cont = 0;
    	
    	for (indice = 0; str[indice] != '\0'; indice++)
    	{
    		if (str[indice] == 'l' && str[indice+1] == 'a')
    		{
    			cont++;
    		}
    	}
    return cont;	
    }
    [color=#BFBF00][/color]
Devi accedere o registrarti per scrivere nel forum
13 risposte