Esercizio su vettori in C

di il
61 risposte

Esercizio su vettori in C

Buongiorno, ho un problema, non riesco a risolvere questo problema:
Si scriva un programma che visualizzi un istogramma delle frequenze dei diversi caratteri contenuti nel testo di ingresso.
Questo è quello che sono riuscito a fare in base a quello che ho imparato:

#include <stdio.h>
// conta la frquenza dei diversi caratteri contenuti nel testo d' ingresso
main()
{
	int c, i;//carattere in input
	int frequenza[10];// vettore di frequenze
	int v[10];

	for (i = 0;i < 10;++i)
	{
		frequenza[i] = 0;
	}

	while ((c = getchar()) != EOF)
	{
		v[i] = c;
		for (i = 0; i < 10; ++i)
		{
			if (v[i] == v[i + 1]) printf("*");
		}
	}
}
Devo per forza usare getchar() e anche i vettori possibilmente.

61 Risposte

  • Re: Esercizio su vettori in C

    Guarda che sei fuori strada.

    Le lettere sono 26 non 10 e l'input lo devi fare su un vettore di char di lunghezza adeguata.
  • Re: Esercizio su vettori in C

    Ok grazie
  • Re: Esercizio su vettori in C

    Ma con vettore di char intendi vettore di caratteri? Perché se si volevo non usarlo possibilmente
  • Re: Esercizio su vettori in C

    Perché i vettori di caratteri è un argomento successivo a quello che sto facendo sul mio libro
  • Re: Esercizio su vettori in C

    Puoi anchenon usarlo. Usasolamente il vettore di 26 int senza memorizzare i char.
  • Re: Esercizio su vettori in C

    Ok grazie, lo faccio.
  • Re: Esercizio su vettori in C

    Scusa ma e' un esercizio sui vettori ?

    In questo caso ti si chiede:
    1) scrivere in input un testo qualsiasi, magari metti un controllo che ti permetta di non andare oltre un numero di caratteri, altrimenti un utente potrebbe scriverci dentro la divina commedia.
    2) contare quante volte gli stessi caratteri si ripetono all'interno del testo appena scritto. Ovviamente potresti utilizzare una variabile diversa per ogni lettera dell'alfabeto, ma questo metodo credo sia poco ortodosso (diciamo cosi...), quindi come effettui il conteggio e dove lo memorizzi per essere rappresentato successivamente ? Potresti usare un vettore, meglio ancora una matrice... vabbe' fai tu.
    3) il testo dovra' essere ripassato tutto, contando le singole lettere, e memorizzando in un vettore, volta per volta, la somma delle lettere uguali all'interno del vettore, con un bel ciclo che si fermera' alla fine del testo.
    4) ripassi con un ciclo il vettore, e cella dopo cella del vettore disegni gli asterischi corrispondenti al numero delle lettere del testo, sempre tutto in un altro ciclo.

    Questo e' un metodo semplice, perche' potresti farlo anche con un unico ciclo, ma perche' no... anche senza vettore... tutto dipende dalla complessita' e dalla tua preparazione.
    Puoi provare diverse soluzione e sperimentare, ovvio.

    Alla fine dovresti ottenere qualcosa del genere:
    
    -----------------------------------------------------------------
    INSERISCI UN TESTO: ciao il mio nome e giorgio
    
              *         *
              *         *
              *         *
              *         *         *         *    *
         *    *    *    *    *    *    *    *    *    * 
         c    i    a    o    l    m    n    e    g    r
    -----------------------------------------------------------------
    
  • Re: Esercizio su vettori in C

    Ramcrack...non è necessario memorizzare e ripassare il testo.i caratteri si possono contare senza memorizzati. Si usa un vettore di 26 int per le sole lettere o di 256 int per comodità per tutti i caratteri ascii
  • Re: Esercizio su vettori in C

    Ok grazie mille appena ho un attimo di tempo mi ci metto e poi vi dico cosa ho fatto
  • Re: Esercizio su vettori in C

    Si è un esercizio sui vettori o almeno fa parte di quell' argomento sul mio libro
  • Re: Esercizio su vettori in C

    oregon ha scritto:


    Guarda che sei fuori strada.

    Le lettere sono 26 non 10 e l'input lo devi fare su un vettore di char di lunghezza adeguata.
    Quindi tipo cosi l 'input su un vettore di char? Però come indice cosa metto al' elemento del vettore c in input?:
    while((c[indice] = getchar()) !)= EOF){...}
  • Re: Esercizio su vettori in C

    oregon ha scritto:


    Ramcrack...non è necessario memorizzare e ripassare il testo.i caratteri si possono contare senza memorizzati. Si usa un vettore di 26 int per le sole lettere o di 256 int per comodità per tutti i caratteri ascii
    Ovviamente le soluzioni possono essere tante... quella scritta da me, e' stata la prima che mi e' venuta in mente di getto, mentre scrivevo sul thread.
    Anzi un esercizietto come questo, offre spunti per diverse soluzioni perfezionabili.
  • Re: Esercizio su vettori in C

    SuperManPC ha scritto:


    oregon ha scritto:


    Guarda che sei fuori strada.

    Le lettere sono 26 non 10 e l'input lo devi fare su un vettore di char di lunghezza adeguata.
    Quindi tipo cosi l 'input su un vettore di char? Però come indice cosa metto al' elemento del vettore c in input?:
    while((c[indice] = getchar()) !)= EOF){...}
    Ho provato a seguire il tuo consiglio oregon, però non so come fare per l' indice dell' elemento c che è uguale a getchar():
    
    #include <stdio.h>
    // conta la frquenza dei diversi caratteri contenuti nel testo d' ingresso
    main()
    {
    	int c[26], i;//carattere in input
    	int frequenza[26];// vettore di frequenze
    	int v[26];
    
    	for (i = 0;i < 26;++i)
    	{
    		frequenza[i] = 0;
    	}
    
    	while ((c[indice] = getchar()) != EOF)//qua non so che indice mettere a c[]
    	{
    		v[i] = c;
    		for (i = 0; i < 26; ++i)
    		{
    			if (v[i] == v[i + 1]) printf("*");
    		}
    	}
    }
    
  • Re: Esercizio su vettori in C

    Ti serve solo il vettore frequenza. Il vettore v non ti serve e tutto quello che hai messo nella while è sbagliato. Devi mettere una if che controlli che c sia una lettera minuscola e poi usi c come indice del vettore frequenza togliendo il codice ascii di 'a'.

    Se vi danno questi esercizi è evidente che dovete sapere cosa sia il codice ascii quindi non lo chiedere
Devi accedere o registrarti per scrivere nel forum
61 risposte