Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [C++]Problema programma vettori...

    Ciao a tutti.
    Voorei chiedervi una cosa...
    io devo fare un programma che calcola la tonalità di una scala dato il numero di diesis in chiave...
    il codice fino ad ora è questo:
    codice:
    #include <stdio.h>
    #include <iostream.h>
    
    int main()
    {
        int risposta,ndc;
        char scala[7] = {'Do', 'Re','Mi', 'Fa', 'Sol', 'La', 'Si'};
        char tonal;
        
        
        
        cout << "=======================================" << endl;
        cout << "         !!!Creato da S1M0K!!!                                " << endl;
        cout << "=======================================" << endl;
        cout << "1)Calcola la tonalità" << endl;
        cout << "2)Calcola i diesis in chiave" << endl;
        cout << "3)Calcola relativa minore" << endl;
        cout << "4)Esecuzione scale completa" << endl;
        cout << "5)Uscita" << endl;
        
        switch (risposta){
        
               case 1:
                    goto tonalita;
                    break;
               case 2:
                    
                    break;
               case 3:
                    
                    break;
               case 4:
                    
                    break;
               case 5:
                    cout << "Ciao Ciao!!!" << endl;
                    system("PAUSE");
                    break;                    
               default:
                    cout << "Ciao Ciao!!!" << endl;
                    system("PAUSE");
                    break; }
    
    tonalita:
             cout << "Inserisci il numero dei diesis in chiave: ";
             cin >> ndc; 
             tonal = scala[ndc + 1];
             cout << "la tonalità è " << tonal << endl;
             
    system("PAUSE");
    return 0;
    }
    Il problema è che se eseguo il programma il risultato al posto di essere una nota dichiarata nel vettore scala è una lettera soltanto...
    sapete dirmi dov'è l'errore???
    grazie in anticipo...
    Datemi un terminale e vi installerò il mondo

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Mi meraviglio che il compilatore non ti segnali errori... questa inizializzazione

    codice:
    char scala[7] = {'Do', 'Re','Mi', 'Fa', 'Sol', 'La', 'Si'};
    non è corretta perché gli apici singoli individuano caratteri singoli... devi utilizzare delle stringhe oppure se hai bisogno dei caratteri singoli ricorri alla notazione anglosassone per le note.
    every day above ground is a good one

  3. #3
    prova a fare:

    codice:
    char scala[] = {"Do", "Re","Mi", "Fa", "Sol", "La", "Si"};
    Alla batteria dai retta ballA

  4. #4
    Hai dichiarato scala come vettore di caratteri e tonal come singolo carattere, difficilmente potrai ottenere più di un carattere per volta...

    P.S.: c'è gente che quando vede dei goto stacca la testa dell'autore del codice a morsi. Io non sono a questi livelli, ma ci vado vicino; per cui, fai sparire quel goto e separa il codice delle varie funzionalità del programma in funzioni separate.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Originariamente inviato da gianvituzzi
    prova a fare:

    codice:
    char scala[] = {"Do", "Re","Mi", "Fa", "Sol", "La", "Si"};
    Direi

    codice:
    const char *scala[] = {"Do", "Re","Mi", "Fa", "Sol", "La", "Si"};
    P.S.: c'è gente che quando vede dei goto stacca la testa dell'autore del codice a morsi. Io non sono a questi livelli, ma ci vado vicino; per cui, fai sparire quel goto e separa il codice delle varie funzionalità del programma in funzioni separate.
    Neanche io sono a quei livelli ma concordo, tra l'altro in quel caso è pure inutile... anche i vecchi header file con estensione .h sarebbero da eliminare :)
    every day above ground is a good one

  6. #6
    Azz, mi erano sfuggiti...

    @s1m0k96: sostituisci anche iostream.h con iostream e aggiungi subito dopo
    codice:
    using namespace std;
    Inoltre non c'è motivo per includere stdio.h. Parlando di good pratices, poi, sarebbe meglio evitare quella chiamata a system (che peraltro necessiterebbe dell'inclusione di <cstdlib>), rimpiazzandola con
    codice:
    cout<<"Premi Invio per continuare... ";
    cin.sync();
    cin.ignore();
    .
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Grazie mille a tutti...
    scusate per gli errori ma sono alle prime armi...
    comunque volevo chiedervi una cosa,come si possono sostituire i goto???
    potete postarmi tipo un codice di esempio???
    grazie mille a tutti

    P.S. mi segnala un errore a questa riga di codice:
    codice:
     tonal = scala[ndc] + 1;
    invalid conversion from 'cons char*' to 'char'
    como mai?
    Datemi un terminale e vi installerò il mondo

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    La modifica che ti suggerivamo era soltanto per utilizzare un vettore con "do", "re", "mi"... per il resto non è affatto detto che il programma funzioni, devi rivedere il resto. Io sinceramente non ho ben capito cosa tu voglia fare, ma a leggere il codice credo ti basti sostituire

    codice:
             cout << "Inserisci il numero dei diesis in chiave: ";
             cin >> ndc; 
             tonal = scala[ndc + 1];
             cout << "la tonalità è " << tonal << endl;
    semplicemente con

    codice:
             cout << "Inserisci il numero dei diesis in chiave: ";
             cin >> ndc; 
             cout << "la tonalità è " <<  scala[ndc + 1] << endl;
    Per quanto riguarda goto, in quel caso puoi semplicemente non usarlo, visto che è inutile. In generale non c'è una maniera standard per rimpiazzarli, dipende dai casi, basta conoscere bene come funzionano i cicli iterativi e i costrutti condizionali.

    Tra l'altro, dopo quel menù iniziale ci va un'istruzione di input su risposta, altrimenti non ha molto senso.
    every day above ground is a good one

  9. #9
    Cavolo il prog si avvia ma nn mi da il giusto risultato...
    in pratica io volevo fare un prog che dati i diesis in chiave (es. 2[fa,do]) lui calcola la tonalità aumentando di uno ma nn nella scala dei # ma nella scala delle note normali (do,re,mi,fa,...)
    e quindi dovrebbe venire re ma nn viene!!!
    Datemi un terminale e vi installerò il mondo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.