[c] ragazzi potete spiegarmi questa funzione ?

di il
7 risposte

[c] ragazzi potete spiegarmi questa funzione ?

Dal libro di testo ho letto questa funzione ma non capisco il suo meccanismo me la potete spiegare?
/* Sviluppare una function C che, dati come parametri di input un array di char e il suo
size, determina e restituisce come parametro di output l’array (di size 21) del numero
delle occorrenze delle 21 lettere dell’alfabeto italiano (anche se in realtà l'alfabeto
italiano contiene le lettere "straniere" da oramai centinaia di anni) (per es. il
numero di occorrenze della lettera a è il numero di volte in cui la lettera a compare
nel testo)
*/

void LettersOccurrence(char vet[], unsigned int n, unsigned int occurrence[21])
{
	char tmp;
	int i;
	
	for (i = 0; i < n; i++)
	{
		tmp = toLower(vet[i]);
		if((tmp >= 97) && (tmp <= 105))
			occurrence[tmp-97]++;
		else if ((tmp >= 108) && (tmp <= 118))
			occurrences[tmp-99]++;
		else if (tmp == 122)
			occurrences[tmp-102]++;
	}
	
	return;
}

7 Risposte

  • Re: [c] ragazzi potete spiegarmi questa funzione ?

    Semplicemente ogni carattere ascii non è altro che un numero identificato da un byte.
    Quindi il carattere a sarà 97.Avende escluso le cosidette lettere inglesi l'algoritmo si complica perchè non potremmo semplicemente usare il carattere z per la fine ma dovremmo escludere i caratteri in mezzo non necessari.
    Ora se noi togliamo 97 da ogni carattere avremo un indice base 0 che potrà essere utilizzato per muoversi dentro al vettore che contiene tutto l'alfabeto.

    Il codice piu comprensibile potrebbe essere:
    
    void LettersOccurrence(char vet[], unsigned int n, unsigned int occurrence[21])
    {
       char tmp;
       int i;
       
       for (i = 0; i < n; i++)
       {
          tmp = toLower(vet[i]);
          if( tmp == 'x' || tmp == 'y' || tmp == 'j' || tmp == 'k' || tmp == 'w'  )
                continue;
    
          if ( tmp >= 'a' && tmp <= 'z')
             ++occurrences[tmp - 'a'];
       }
    }
    
  • Re: [c] ragazzi potete spiegarmi questa funzione ?

    Ciao innanzitutto ti ringrazio per la tua disponibilità , il codice da te scritto è stato semplice e chiaro , utilizzando il tuo stesso codice potrei svolgere anche questi funzioni?
    /* Sviluppare una function C che, dati come parametri di input un array di char e il suo
    size, determina e restituisce come parametro di output l'array occorrenze (di size 21)
    del numero delle occorrenze dell'evento a precede ognuna delle 21 lettere
    dell'alfabeto italiano (cioè occorrenze[0] è¨ il numero di volte in cui accade chea
    precede a, cioè¨ che nel testo compare aa, occorrenze[1]è il numero di volte in cui
    accade che a precede b, cioè che nel testo compare ab, occorrenze[2]è¨ il numero
    di volte in cui accade che a precede c, cioè che nel testo compare ac, ...).
    */
    /* Sviluppare una function C che, dati come parametri di input un array di char e il suo
    size, determina e restituisce come parametro di un dato logico che indica se il testo
    nell'array èun pangramma, ovvero è un testo che contiene, almeno una volta, tutte
    le 21 lettere dell'alfabeto italiano.
    */




    ovviamente modificandolo con le dovute condizioni.
  • Re: [c] ragazzi potete spiegarmi questa funzione ?

    Mmmm.....sopratturro per il secondo devi implementare altre cose,comunque prova poi vedremo...
  • Re: [c] ragazzi potete spiegarmi questa funzione ?

    vbextreme ha scritto:


    mmmm.....sopratturro per il secondo devi implementare altre cose,comunque prova poi vedremo...
    Sviluppare una function C che, dati come parametri di input un array di char e il suo
    size, determina e restituisce come parametro di output l'array occorrenze (di size 21)
    del numero delle occorrenze dell'evento a precede ognuna delle 21 lettere
    dell'alfabeto italiano (cioè occorrenze[0] è¨ il numero di volte in cui accade chea
    precede a, cioè¨ che nel testo compare aa, occorrenze[1]è il numero di volte in cui
    accade che a precede b, cioè che nel testo compare ab, occorrenze[2]è¨ il numero
    di volte in cui accade che a precede c, cioè che nel testo compare ac, ...).

    provata cosi:
    
    void occurencepre(char vet[], unsigned int n, unsigned int occurrence[21])
    {
       char tmp;
       int i;
       for(vet=strstr(vet,"a");vet!=NULL;vet=strstr(vet+2),"a"){
    
          tmp = toLower(vet[i]);
          if( tmp == 'x' || tmp == 'y' || tmp == 'j' || tmp == 'k' || tmp == 'w'  )
                continue;
    
          if ( tmp >= 'a' && tmp <= 'z')
             ++occurrences[tmp - 'a'];
       }
    }
    
  • Re: [c] ragazzi potete spiegarmi questa funzione ?

    Usando la strstr l'hai complicato inutilmente.
    Analizziamo l'esercizio:
    Devi contare le ripetizioni delle lettere dopo la "a"
    Quindi fase uno del ciclo se la lettera è diversa da "a" salti alla sucessiva lettera.
    Se è uguale ad a allora sommi esattamente come hai fatto prima ma alla lettera sucessiva incrementando l'indice.
    Prova.
  • Re: [c] ragazzi potete spiegarmi questa funzione ?

    vbextreme ha scritto:


    Usando la strstr l'hai complicato inutilmente.
    Analizziamo l'esercizio:
    Devi contare le ripetizioni delle lettere dopo la "a"
    Quindi fase uno del ciclo se la lettera è diversa da "a" salti alla sucessiva lettera.
    Se è uguale ad a allora sommi esattamente come hai fatto prima ma alla lettera sucessiva incrementando l'indice.
    Prova.


    Ciao potresti dirmi come fare , da poco ho iniziato la programmazione c non so ancora intervenire nei punti specifici
  • Re: [c] ragazzi potete spiegarmi questa funzione ?

    Invece che sbattere la testa sul muro prova ad usare la testa in qualche altro modo.
    Poi posta il codice e ne riparliamo.
Devi accedere o registrarti per scrivere nel forum
7 risposte