AIUTO X ESAME!!

di il
8 risposte

AIUTO X ESAME!!

Ciao raga!!
sono nuova di questo forum e spero mi aiutate a fare questo progetto.
a breve ho l'esame di programmazione e nn posso darlo se nn faccio questo progetto.
qualcuno può aiutarmi??o almeno indirizzarmi il modo x iniziare?grazie grazie..incollo testo progetto..

Algoritmo di analisi di un testo. L’algoritmo legge da tastiera un testo in italiano di
almeno 5 linee (80 caratteri per linea); poi costruisce e visualizza un array 1D dove
viene memorizzato, nella componente i-sima, il numero di volte in cui la i-sima
consonante dell’alfabeto è presente nel testo. L’algoritmo costruisce e visualizza
anche, un array di char in cui le consonanti dell’alfabeto sono ordinate (in ordine
crescente) base al loro numero di occorrenze nel testo. L’algoritmo determina se il
testo è un pangramma di consonanti, ovvero contiene, almeno una volta, tutte le
consonanti dell’alfabeto. Infine l’algoritmo visualizza, in ordine alfabetico, tutte le
parole che compaiono nel testo e che iniziano con le prime 5 consonanti più
frequenti

8 Risposte

  • Re: AIUTO X ESAME!!

    Ciao, ci sono tanti modi per risolvere questo problema. Ti posso dare uno spunto:

    1) per ogni carattere del vettore stringa attivi l'algoritmo che cerca le occorrenze del carattere, partendo dall'inizio del vettore fino alla fine.

    2) una volta ottenuto il numero di occorrenze del carattere inserisci il valore nella posizione i-esima.
    
    for (i = 0; i < n; i++){
    
       num = cercaOccorrenze(i, v, n);
       occorrenze[i] = num;
    
    }
    
    La funzione cerca puoi farla cosi`:
    
    int cerca(int currpos, char * v, int lenv){
       int i;
       int c = 0;
    
       for (i = 0; i < lenv; i++)
          if (v[currpos] == v[i])
             c++;
    
       return c;
    
    }
    
    dove, v e` il vettore dove ci sono i tuoi caratteri, occorrenze e` il vettore dove memorizzi il numero di occorrenze per ogni carattere e n e` la lunghezza del vettore stringa.

    Non so se devi anche tenere d'occhio l'efficienza dell'algoritmo. Questo non e` un granche` dal punto di vista della complessita` computazionale. Risolve il problema in O(n^2).

    Fammi sapere se hai ancora dei problemi
  • Re: AIUTO X ESAME!!

    Grazie grazie..io provo a d abbozzare qualcosa e poi allego il codice..
    grazie x l'aiuto..
  • Re: AIUTO X ESAME!!

    Ok, una volta fatto quello vediamo anche l'ordinamento
    ciao ciao
  • Re: AIUTO X ESAME!!

    Ciao..allora..ho fatto le function x calcolo occorrenze e x la determinazione del pangramma..però,il problema è ke nn riesco a visualizzarli in ordine crescente..mi aiuti??metto i codici..mi aiuti a modificarli e se è necessario a correggerli??grazie grazie..

    
    /*function x calcolo occorrenze*/
    int caratt (char testo[],char chiave[])
    {
    int m,conta=0,i;
    m=strlen(testo);
    conta =0;
    for (i=0;i<m;i++)
    {
        if (testo[i]==chiave[i])
        conta++;
    }	
    	return conta;
    }
    
    int pangramma(char testo[], int n)
    {
        int i, j=1, e_pangramma=0, una_volta=1;
       
        while(j<=26){//inizio while
        for(i=0;i<n;i++){//inizio for
           if(j==10){
              j+=2;}
           if(j==23||j==24||j==25){
              j++;}
           if(((testo[i]==96+j)||(testo[i]==64+j))&&una_volta==1){
              e_pangramma++;
              una_volta++;}}//fine for e ultimo if
           una_volta=1;
           j++;}//fine while
       
       if(e_pangramma==21)
           return  printf("Il testo e' un pangramma.\n");
    
        return printf("Il testo non e' un pangramma.\n");
    }
  • Re: AIUTO X ESAME!!

    Per ordinare qualcosa, devi inserire tutte le occorrenze che conti (fatte con la funzione caratt) in un vettore. Dopo, esegui un qsort per ordinare questo vettore.

    Ti posto un piccolo esempio di come si fa a ordinare un vettore di interi in ordine decrescente (che nel tuo caso sarà proprio quello delle occorrenze)

    Per prima cosa devi scrivere la funzione di comparazione:
    
    int confronta(const void * n1, const void * n2){
    	
    	int * num1 = (int *) n1;
    	int * num2 = (int *) n2;
    	
    	if (*num1 > *num2)
    		return -1;
    	else if (*num1 < *num2)
    		return 1;
    	else
    		return 0;
    	
    }
    
    Questa confronta i due valori e gli fari ritornare -1 se il primo numero è più grande del secondo, 1 viceversa o zero se sono uguali. In pratica il -1 significa di spostare verso l'inizio del vettore il valore n1, l'1 verso destra e lo zero invece di lasciarlo dove si trova.
    Questa funzione la passi come parametro alla funzione standard qsort che ti permette di ordinare:
    
    int main(){
    	
    	int i;
    	int occorrenze[5] = {1,2,3,4,5};
    	
    	qsort(v, 5, sizeof(int), confronta);
    	
    	for (i = 0; i < 5; i++)
    		printf("%d\n", v[i]);
    	
    	return 0;
    	
    }
    
    Aspetto notizie, spero positive ihih
  • Re: AIUTO X ESAME!!

    Raga..allora..sono quasi riuscita a finire il programma..mi funziona correttamente ma mi dà 5 warning..mi dite se devo correggerli o va bene così??e ni aiutate a ultimarlo??come faccio a visualizzare l’algoritmo, in ordine alfabetico, di tutte le parole che compaiono nel testo e che iniziano con le prime 5 consonanti più frequenti??aiuto aiuto..
    #include <stdio.h>
    #include <string.h>
    void ricerca_cons(char testo[], char cons[], int m, int contcons[]);
    int pangramma (int contcons[], int n);
    void ordina_cons (int contcons[], char cons[], int m);
    void main ()
    {
    	char testo[5][80]; //Array per l'inserimento del testo.
    	char cons[] = {'b','c','d','f','g','h','l','m','n','p','q','r','s','t','v','z'}; //Array delle consonanti.
    	int contcons[16]; //Array per il conteggio delle consonanti.
    	int i,pan;
    	puts("Inserisci testo da analizzare:");
    	gets(testo);
    	for (i=0; i<16; i++) //Azzero l'array per il conteggio delle consonanti.
        {
    		contcons[i] = 0;
    	}
    	ricerca_cons(testo, cons, 16, contcons); //Chiamo la funzione.
    	for (i=0; i<16; i++) 
        {
    		printf("La lettera %c e' presente %d volte\n", cons[i], contcons[i]); //Stampo il risultato.
    	}
    	ordina_cons (contcons, cons, 16); //Chiamo la funzione.
        printf("\nConsonanti in ordine crescente:\n");
        for (i=0; i<16; i++) 
        {
    		printf("%c = %d\n", cons[i],contcons[i]); //Stampo il risultato.
    	}
    	pan = pangramma (contcons, 16); //Assegno alla variabile 'pan' la funzione.
        if (pan==1)
           printf("\nIl testo non e' un pangramma di consonanti.\n");
        else if (pan!=1)
           printf("\nIl testo e' un pangramma di consonanti.\n"); 
    }
    
    
    void ricerca_cons(char testo[], char cons[], int m, int contcons[]) //Funzione per il conteggio delle consonanti.
    {
            int n, i, j;
            n = strlen(testo); //Assegno alla veriabile 'n' la lunghezza del mio testo.
    	for (i=0; i<n; i++) //Questo ciclo for mi scorre lettera per lettera tutto il testo.
        {
    		for (j=0; j<m; j++) //Questo ciclo for mi scorre lettera per lettera tutte le consonanti.
            {
    			if (cons[j] == testo[i]) //Se la j-sima lettera dell'array 'cons' è uguale alla i-sima lettera dell'array 'testo'..
                {
                    		contcons[j]++; //..incremento l'array 'contcons' di 1 alla j-sima posizione.
    			}
    		}
    	}
    }
    
    
    
    int pangramma (int contcons[], int n) //Funzione per verificare se il testo è un pangramma di consonanti.
    {
        int i;
        for (i=0; i<n; i++) //Questo ciclo for mi scorre l'array 'contcons'.
        {
            if (contcons[i]==0) //Se la i-sima posizione dell'array è uguale a 0..
               return 1; //..la funzione restituisce 1 e arresta il funzionamento.
        }
    }
    
    
    
    void ordina_cons (int contcons[], char cons[], int m) //Funzione per ordinamento delle consonanti in ordine crescente.
    {
        int i,j;
        int el_da_ins;
        char el_da_ins1;
    	for(i=1;i<m;i++)
    	{
    		el_da_ins=contcons[i]; //Assegno alla variabile 'el_da_ins' l'i-simo valore dell'array 'contcons'.
    		el_da_ins1=cons[i]; ////Assegno alla variabile 'el_da_ins1' l'i-simo valore dell'array 'cons'.
    		j=i-1;
    		while(j>=0 && el_da_ins<contcons[j])
    		{
    			contcons[j+1]=contcons[j]; //Assegno il valore della j-sima posizione alla j-sima posizione + 1.
    			cons[j+1]=cons[j]; //Applico la stessa operazione all'array 'cons'. 
    			j--;
    		}
    		contcons[j+1]=el_da_ins;
    		cons[j+1]=el_da_ins1;
    	}
    }
  • Re: AIUTO X ESAME!!

    ritita ha scritto:


    raga..allora..sono quasi riuscita a finire il programma..mi funziona correttamente ma mi dà 5 warning..mi dite se devo correggerli o va bene così??
    Mha... secondo te? Saranno un optional!...
  • Re: AIUTO X ESAME!!

    Corretti gli optional..inserisco il programma..mi aiutate a finirlo??please..
    #include <stdio.h>
    #include <string.h>
    void ricerca_cons(char testo[], char cons[], int m, int contcons[]);
    int pangramma (int contcons[], int n);
    void ordina_cons (int contcons[], char cons[], int m);
    
    int main ()
    {
    	char testo[80]; //Array per l'inserimento del testo.
    	char cons[] = {'b','c','d','f','g','h','l','m','n','p','q','r','s','t','v','z'}; //Array delle consonanti.
    	int contcons[16]; //Array per il conteggio delle consonanti.
    	int i,pan;
    	puts("Inserisci testo da analizzare:");
    	gets(testo);
    	for (i=0; i<16; i++) //Azzero l'array per il conteggio delle consonanti.
        {
    		contcons[i] = 0;
    	}
    	ricerca_cons(testo, cons, 16, contcons); //Chiamo la funzione.
    	for (i=0; i<16; i++) 
        {
    		printf("La lettera %c e' presente %d volte\n", cons[i], contcons[i]); //Stampo il risultato.
    	}
    	ordina_cons (contcons, cons, 16); //Chiamo la funzione.
        printf("\nConsonanti in ordine crescente:\n");
        for (i=0; i<16; i++) 
        {
    		printf("%c = %d\n", cons[i],contcons[i]); //Stampo il risultato.
    	}
    	pan = pangramma (contcons, 16); //Assegno alla variabile 'pan' la funzione.
        if (pan==1)
           printf("\nIl testo non e' un pangramma di consonanti.\n");
        else if (pan!=1)
           printf("\nIl testo e' un pangramma di consonanti.\n"); 
           
        return 0;
    }
    
    
    void ricerca_cons(char testo[], char cons[], int m, int contcons[]) //Funzione per il conteggio delle consonanti.
    {
            int n, i, j;
            n = strlen(testo); //Assegno alla veriabile 'n' la lunghezza del mio testo.
    	for (i=0; i<n; i++) //Questo ciclo for mi scorre lettera per lettera tutto il testo.
        {
    		for (j=0; j<m; j++) //Questo ciclo for mi scorre lettera per lettera tutte le consonanti.
            {
    			if (cons[j] == testo[i]) //Se la j-sima lettera dell'array 'cons' è uguale alla i-sima lettera dell'array 'testo'..
                {
                    		contcons[j]++; //..incremento l'array 'contcons' di 1 alla j-sima posizione.
    			}
    		}
    	}
    }
    
    
    
    int pangramma (int contcons[], int n) //Funzione per verificare se il testo è un pangramma di consonanti.
    {
        int i;
        for (i=0; i<n; i++) //Questo ciclo for mi scorre l'array 'contcons'.
        {
            if (contcons[i]==0) //Se la i-sima posizione dell'array è uguale a 0..
               return 1; //..la funzione restituisce 1 e arresta il funzionamento.
        }
        return 0;
    }
    
    
    
    void ordina_cons (int contcons[], char cons[], int m) //Funzione per ordinamento delle consonanti in ordine crescente.
    {
        int i,j;
        int el_da_ins;
        char el_da_ins1;
    	for(i=1;i<m;i++)
    	{
    		el_da_ins=contcons[i]; //Assegno alla variabile 'el_da_ins' l'i-simo valore dell'array 'contcons'.
    		el_da_ins1=cons[i]; ////Assegno alla variabile 'el_da_ins1' l'i-simo valore dell'array 'cons'.
    		j=i-1;
    		while(j>=0 && el_da_ins<contcons[j])
    		{
    			contcons[j+1]=contcons[j]; //Assegno il valore della j-sima posizione alla j-sima posizione + 1.
    			cons[j+1]=cons[j]; //Applico la stessa operazione all'array 'cons'. 
    			j--;
    		}
    		contcons[j+1]=el_da_ins;
    		cons[j+1]=el_da_ins1;
    	}
    }
Devi accedere o registrarti per scrivere nel forum
8 risposte