Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Pascal - Riproduttore musicale
Forum - Pascal - Riproduttore musicale

Avatar
Loryea (Normal User)
Pro


Messaggi: 165
Iscritto: 02/09/2011

Segnala al moderatore
Postato alle 15:33
Venerdì, 07/10/2011
Salve, ho fatto un riproduttore di note musicali con pascal, ma l'IDE mi risponde con un errore. Ecco il codice:
Codice sorgente - presumibilmente Delphi

  1. Program Music;
  2. Uses crt;
  3. Var A,B,Hz,Durata:integer; C:Char;
  4. Begin
  5. Repeat
  6. Repeat
  7. Repeat
  8. clrscr;
  9. Writeln('Scegli cosa fare');
  10. Writeln;
  11. Writeln('[1] Traduttore note');
  12. Writeln('[2] Riproduzione note in Hz');
  13. Writeln('[3] Riproduzione note inglesi');
  14. Writeln('[4] Esci');
  15. Readln(A);
  16. Clrscr;
  17. Case A of
  18. 1:  Begin
  19.         Writeln('Italiano: DO   RE   MI   FA   SOL  LA   SI');
  20.         WRiteln('Inglese:  C    D    E    F    G    A    B');
  21.         Writeln('Francese: UT   RE   MI   FA   SOL  LA   SI');
  22.         WRiteln('Tedesco:  C    D    E    F    G    A    H');
  23.         Writeln('Hz:       262  294  330  349  392  400  494');
  24.         Writeln;
  25.         Writeln('[1] Ritorna al menù principale');
  26.         Writeln('[2] Esci');
  27.         Readln(b);
  28.         Until B=1;
  29.         If A=2 then
  30.                 halt;
  31.         end;
  32. 2:  Begin
  33.         Repeat
  34.         Writeln('Inserire gli Hz');
  35.         Readln(Hz);
  36.         Writeln('Inserisci la durata');
  37.         Readln(durata);
  38.         Delay(3000);
  39.         Sound(Hz);
  40.         Delay(durata);
  41.         Nosound;
  42.         Delay(3000);
  43.         Clrscr;
  44.         Writeln('[1] Ripeti');
  45.         Writeln('[2] Ritorna al menù principale');
  46.         Writeln('[3] Esci');
  47.         Readln(b);
  48.         Until B=1;
  49.         Until B=2;
  50.         If A=3 then
  51.                 halt;
  52.         end;
  53. 3:  Begin
  54.         Repeat
  55.         Writeln('Inserire la nota');
  56.         Readln(C);
  57.         Writeln('Inserisci la durata');
  58.         Readln(durata);
  59.         Case C of
  60.                 C: Nota:=262;
  61.                 D: Nota:=294;
  62.                 E: Nota:=330;
  63.                 F: Nota:=349;
  64.                 G: Nota:=392;
  65.                 A: Nota:=400;
  66.                 B: Nota:=494;
  67.         Delay(3000);
  68.         Sound(Nota);
  69.         Delay(durata);
  70.         Nosound;
  71.         Delay(3000);
  72.         Clrscr;
  73.         Writeln('[1] Ripeti');
  74.         Writeln('[2] Ritorna al menù principale');
  75.         Writeln('[3] Esci');
  76.         Readln(b);
  77.         Until B=1;
  78.         Until B=2;
  79.         If A=3 then
  80.                 halt;
  81.         end;
  82. 4: Halt;
  83. End.



Ecco l'errore:

music.pas(28,2) fatal: Syntax error, ";" expected but "UNTIL" found.

Sembra un errore semplice, ma non riesco a trovare il punto dove ho dimenticato il ";". La linea 28, é quella dove ho usato il primo "UNTIL".


PM
Avatar
gigisoft (Member)
Guru


Messaggi: 696
Iscritto: 11/10/2008

Up
4
Down
V
Segnala al moderatore
Postato alle 16:45
Venerdì, 07/10/2011
Salve,

l'errore sta nel fatto che hai intrecciato il Repeat ... Until con il Case (cosa impossibile in QUALUNQUE linguaggio);

hai solo due possibilita', o metti tutto il Case all'interno del Repeat ... Until, o metti tutto il Repeat ... Until all'interno di un'opzione del Case, dipende da quello che deve fare il programma, vedi tu.

P.S.
riguardo alla musica, mi pare di ricordare che il La centrale fosse a 440Hz e che la frequenza delle altre si calcolasse con la formula:

F = 440 * 2^(N/12)

dove N e' la distanza in Semitoni dal La centrale ( negativa se viene prima, positiva altrimenti )

Ciao. :k:

Luigi

Ultima modifica effettuata da gigisoft il 07/10/2011 alle 17:04
Grazie. P.S: Il calcolo non l'ho studiato, ma mi sono riferito alla tabella del sito di ProgMan92. Cimunque mi informerò. - Loryea - 07/10/11 17:31
Ché c'entra un problema con ";"? - Loryea - 07/10/11 17:39
PM
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Up
4
Down
V
Segnala al moderatore
Postato alle 15:49
Venerdì, 07/10/2011
Il corrispondente Repeat dov'è ?

Riga 7 - Loryea - 07/10/11 15:51
Ma il repeat non può stare fuori dall'opzione del Case dove sta la Until ... - nessuno - 07/10/11 15:57


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM