Oppure

Loading
07/10/11 13:33
Loryea
Salve, ho fatto un riproduttore di note musicali con pascal, ma l'IDE mi risponde con un errore. Ecco il codice:
Program Music; 
Uses crt;
Var A,B,Hz,Durata:integer; C:Char;
Begin
Repeat
Repeat
Repeat
clrscr;
Writeln('Scegli cosa fare');
Writeln;
Writeln('[1] Traduttore note');
Writeln('[2] Riproduzione note in Hz');
Writeln('[3] Riproduzione note inglesi');
Writeln('[4] Esci');
Readln(A);
Clrscr;
Case A of
1:  Begin
	Writeln('Italiano: DO   RE   MI   FA   SOL  LA   SI');
	WRiteln('Inglese:  C    D    E    F    G    A    B');
	Writeln('Francese: UT   RE   MI   FA   SOL  LA   SI');
	WRiteln('Tedesco:  C    D    E    F    G    A    H');
	Writeln('Hz:       262  294  330  349  392  400  494');
	Writeln;
	Writeln('[1] Ritorna al menù principale');
	Writeln('[2] Esci');
	Readln(b);
	Until B=1;
	If A=2 then
		halt;
	end;
2:  Begin
	Repeat
	Writeln('Inserire gli Hz');
	Readln(Hz);
	Writeln('Inserisci la durata');
	Readln(durata);
	Delay(3000);
	Sound(Hz);
	Delay(durata);
	Nosound;
	Delay(3000);
	Clrscr;
	Writeln('[1] Ripeti');
	Writeln('[2] Ritorna al menù principale');
	Writeln('[3] Esci');
	Readln(b);
	Until B=1;
	Until B=2;
	If A=3 then
		halt;
	end;
3:  Begin
	Repeat
	Writeln('Inserire la nota');
	Readln(C);
	Writeln('Inserisci la durata');
	Readln(durata);
	Case C of
		C: Nota:=262;
		D: Nota:=294;
		E: Nota:=330;
		F: Nota:=349;
		G: Nota:=392;
		A: Nota:=400;
		B: Nota:=494;
	Delay(3000);
	Sound(Nota);
	Delay(durata);
	Nosound;
	Delay(3000);
	Clrscr;
	Writeln('[1] Ripeti');
	Writeln('[2] Ritorna al menù principale');
	Writeln('[3] Esci');
	Readln(b);
	Until B=1;
	Until B=2;
	If A=3 then
		halt;
	end;
4: Halt;
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".

aaa
07/10/11 13:49
nessuno
Il corrispondente Repeat dov'è ?
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à.
07/10/11 14:45
gigisoft
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 07/10/11 15:04
aaa