esercizio di scuola
  • In diretta da GamesVillage.it
    • News
    • -
    • In Evidenza
    • -
    • Recensioni
    • -
    • RetroGaming
    • -
    • Anteprime
    • -
    • Video
    • -
    • Cinema

Pag 1 di 2 12 UltimoUltimo
Visualizzazione risultati da 1 a 15 di 19

Discussione: esercizio di scuola

Cambio titolo
  1. #1
    janky
    Ospite

    esercizio di scuola

    Tra gli esercizi che mi hanno dato di informatica c'era questo:
    "Realizzare un programma che per N volte consecutive chiede di digitare da tastiera un carattere alfabetico a piacere. In output il programma conta quante 'a', 'b', 'c'...ecc sono state digitate"

    come faccio a a contare quante sono le a, le b, le c.... ?

  2. #2
    ...ros1k... L'avatar di <TheShop>Evoc Thurner
    Registrato il
    10-03
    Località
    La Spezia
    Messaggi
    7.557
    ti scrivo l'algoritmo, poi te lo implementi te


    INIZIO

    INTERO A,B,C,D,E.......
    INTERO I
    CARATTERE LETTERA


    FOR I=0; I<N, I=I+1

    LEGGE DA TASTIERA: LETTERA

    SE LETTERA = 'a'
    A=A+1

    E COSI' VIA

    SI POTREBERO USARE DEGLI ARRAY MA SE NON LI SAI USARE LASCIA PERDERE!

  3. #3
    janky
    Ospite
    lo devo fare in c++ e con gli array, cmq

    non ho capito bene in pratica devo fare 21 if? uno per ogni lettera?

  4. #4
    Utente L'avatar di devilheart
    Registrato il
    01-03
    Messaggi
    28.310
    forse ho un'idea:
    all'inizio dichiari un vettore di 26 elementi, uno x lettere e alla posizionie 0 ci sarà il numero di 'a' immesse. dopo l'acquisizione della lettera togli 97 al valore acquisito xchè 97 è il codice ascii della 'a'. ora se la lettera immessa era una 'b' il valore risultante sarà 1 e quella è la posizione da incrementare. il listato dovrebbe essere + o - questo:

    #include <iostream.h>

    void main(){
    char lettera;
    int dati[26];
    int n,tmp;
    for (int i=0;i<26;i++) dati[i]=0;
    cin>>n;
    for (int i=0;i<n;i++)
    {
    cin>>lettera;
    tmp=lettera;
    tmp-=97;
    dati[tmp]++;
    };
    }

  5. #5
    Utente
    Registrato il
    12-02
    Località
    Venezia
    Messaggi
    110
    Codice:
    #include <iostream>
    #include <cctype>
    
    int main(void)
    {
    	const int NumLettere = 26;
    	int lettere[NumLettere] = {0};
    	int n;
    
    	std::cin >> n;
    	for (int i = 0; i < n; ++i) {
    		char lettera;
    
    		std::cin >> lettera;
    		lettere[tolower(lettera) - 'a']++;
    	}
    	for (int i = 0; i < NumLettere; ++i)
    		std::cout << static_cast<char>('a' + i) << " : " 
                              << lettere[i] << std::endl;
    }
    man is your friend

  6. #6
    ...ros1k... L'avatar di <TheShop>Evoc Thurner
    Registrato il
    10-03
    Località
    La Spezia
    Messaggi
    7.557
    Inviato da 3y34|v|31337
    Codice:
    #include <iostream>
    #include <cctype>
    
    int main(void)
    {
    	const int NumLettere = 26;
    	int lettere[NumLettere] = {0};
    	int n;
    
    	std::cin >> n;
    	for (int i = 0; i < n; ++i) {
    		char lettera;
    
    		std::cin >> lettera;
    		lettere[tolower(lettera) - 'a']++;
    	}
    	for (int i = 0; i < NumLettere; ++i)
    		std::cout << static_cast<char>('a' + i) << " : " 
                              << lettere[i] << std::endl;
    }
    lo commenti?

  7. #7
    Utente
    Registrato il
    12-02
    Località
    Venezia
    Messaggi
    110
    Inviato da <TheShop>Evoc Thurner
    lo commenti?
    Ma come, non e' autoesplicativo? )

    L'algoritmo e' quello indicato da devilheart, con qualche modifica.
    Se mi dici cosa non ti e' chiaro, provo a spiegartelo...
    man is your friend

  8. #8
    Utente L'avatar di Phoenix
    Registrato il
    10-02
    Località
    Midwich Street
    Messaggi
    6.699
    Inviato da 3y34|v|31337
    Codice:
    #include <iostream>
    #include <cctype>
    
    int main(void)
    {
    	const int NumLettere = 26;
    	int lettere[NumLettere] = {0};
    	int n;
    
    	std::cin >> n;
    	for (int i = 0; i < n; ++i) {
    		char lettera;
    
    		std::cin >> lettera;
    		lettere[tolower(lettera) - 'a']++;
    	}
    	for (int i = 0; i < NumLettere; ++i)
    		std::cout << static_cast<char>('a' + i) << " : " 
                              << lettere[i] << std::endl;
    }
    Secondo me se gli porta il tuo listato intuiscono lievemente che non l'ha fatto lui )
    Credo che i prof (se da come ho intuito è agli inizi-inizi) vogliano vedere un programma fatto con switch-case...


    He who is not bold enough to be stared at from across the abyss
    is not bold enough to stare into it himself.

  9. #9
    Rivoluzionario L'avatar di Gendo Ikari
    Registrato il
    03-03
    Località
    Neo Tokyo 3
    Messaggi
    6.197
    Io ci metterei un array con tante variabili numero quanti sono i caratteri ascii.
    Ogni volta che un tasto viene premuto somma 1 al variabile nell'array corrispondente al carattere ascii.
    Mi spiegherò, un po' in Delphi un po' a parole.

    Lettere :array[0-127] of integer

    quando premi un tasto prendi il suo codice ascii e lo metti nella variabile, ad esempio, NumeroAscii. Poi fa:

    Lettere[NumeroAscii] := Lettere[NumeroAscii] +1;

    Per sapere il numero Ascii del tasto premuto, mi sembra logico che lo dia la stessa funzione di pressione.
    In Delphi si ottiene con il KEyPRessed, mi sembra, in C non so, ma ci sarà un analogo.
    Viva l'Itaglia!

  10. #10
    janky
    Ospite
    cosa vuol dire sto passaggio?:
    Codice:
    lettere[tolower(lettera) - 'a']++;
    Phoenix, farlo con switch-case???

    e come diavolo fai??

  11. #11
    Utente L'avatar di Phoenix
    Registrato il
    10-02
    Località
    Midwich Street
    Messaggi
    6.699
    Inviato da janky
    cosa vuol dire sto passaggio?:
    Codice:
    lettere[tolower(lettera) - 'a']++;
    Phoenix, farlo con switch-case???

    e come diavolo fai??
    Con lo switch-case fai un case per ogni lettera:
    Codice:
    case 'a':
    case 'A':
            contaA++;
            break;
    una roba del genere...


    He who is not bold enough to be stared at from across the abyss
    is not bold enough to stare into it himself.

  12. #12
    Utente
    Registrato il
    12-02
    Località
    Venezia
    Messaggi
    110
    Inviato da Phoenix
    Secondo me se gli porta il tuo listato intuiscono lievemente che non l'ha fatto lui )
    Ottimo! Io volevo dargli dei suggerimenti, mica fargli i compiti per casa...
    man is your friend

  13. #13
    Utente
    Registrato il
    12-02
    Località
    Venezia
    Messaggi
    110
    Inviato da janky
    cosa vuol dire sto passaggio?:
    Codice:
    lettere[tolower(lettera) - 'a']++;
    Mi assicuro che lettera sia minuscola (tolower() e' una funzione della libreria standard, e' dichiarata in <cctype> o <ctype.h>), sottraggo il valore numerico di 'a', ottengo un valore intero tra 0 (se lettera e' uguale ad 'a') a 25 (se lettera e' uguale a 'z'). Uso questo valore come indice per l'array lettere, e incremento di uno l'elemento corrispondente.
    man is your friend

  14. #14
    janky
    Ospite
    invece static_cast cos'è?

  15. #15
    Utente
    Registrato il
    12-02
    Località
    Venezia
    Messaggi
    110
    Inviato da janky
    invece static_cast cos'è?
    E' un cast nuovo stile del C++.
    Codice:
    static_cast<char>(qualcosa)
    e' una versione riveduta e corretta di
    Codice:
    (char)qualcosa
    man is your friend

Pag 1 di 2 12 UltimoUltimo

Regole di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •