Dúvida: Estrutura Case em Pascal

Paulo Truta

Portugal@Home Member
Olá...
A prof. de linguagens de programação deu-me o trabalhinho para casa em que temos de fazer um programa em Pascal que diga qual o mês correspondente ao nº digitado (de 1 a 12).
Decidi usar a estruta case (Estou a usar o PascalZIM!)
fica aqui o código:
Código:
Program meses ;
 var mes: integer;
 Begin
   writeln('Este programa determina o nome de um mês quando o utilizador digita o número correspondente');
   writeln('Introduza o mês [Digite o número correspondente] de 1 a 12');
   readln(mes);
     case mes
      '1' writeln('O nº digitado corresponde ao mês de Janeiro');
      '2' writeln('O nº digitado corresponde ao mês de Fevereiro');
      '3' writeln('O nº digitado corresponde ao mês de Março');
      '4' writeln('O nº digitado corresponde ao mês de Abril');
      '5' writeln('O nº digitado corresponde ao mês de Maio');
      '6' writeln('O nº digitado corresponde ao mês de Junho');
      '7' writeln('O nº digitado corresponde ao mês de Julho');
      '8' writeln('O nº digitado corresponde ao mês de Agosto');
      '9' writeln('O nº digitado corresponde ao mês de Setembro');
     '10' writeln('O nº digitado corresponde ao mês de Outubro');
     '11' writeln('O nº digitado corresponde ao mês de Novembro');
     '12' writeln('O nº digitado corresponde ao mês de Dezembro');
     else writeln('Operação inválida!');
 End.

Esta estrutura a primeira vista parece certa, mas algo está mal e tem a ver com os '.
Agora tenho de apresentar isto na segunda e vou ter de me desenrascar de alguma maneira...

Alguém me pode 'lembrar' de como fazer isto? Cumps...:)
 
Estás a dizer que mes é integer e depois metes-lhe string ''. Penso que seja essa a razão pelo qual está a dar erro!!
 
E que tal, por outro lado, o mês ser uma string, e assim manténs os ''s? (Eu nem sabia que era assim que trabalhava um case em pascal. Uma pessoa está sempre a aprender :P )
 
Não falta aí os "dois pontos" em cada opção do case? Quero dizer, isto:

Código:
readln(mes);
     case mes
      [B]'1': writeln('O nº digitado corresponde ao mês de Janeiro');
      '2': writeln('O nº digitado corresponde ao mês de Fevereiro');
      '3': writeln('O nº digitado corresponde ao mês de Março');
      '4': writeln('O nº digitado corresponde ao mês de Abril');[/B]
      (...)
 
Eu também há muito tempo que não trabalho em pascal por isso não posso dizer ao certo como será o código mas é possível que leve os dois pontos.
 
A estrutura do Case está incorrecta.

Será

CASE mes of
'1': begin
writeln("Mes é janeiro");
end;


Fui repescar um antigo trabalho e aqui está o excerto:

Case opcao of {Associa as teclas as moedas e, quando inseridas, adiciona-as a cofre}
'q','Q': begin
guito:= guito+200 ; Ocofre[M2E].quant:=Ocofre[M2E].quant+1
end;


Dá novidades.
 
Estive a tirar ideias das respostas, e admito que quem me ajudou mais foi o methanex. Não estava correcto, mas ajudou imaneso... aqui fica o código já a funcar (Testado e confirmado)


Código:
Program meses ;
 var mes: integer;
 Begin
   writeln('Este programa determina o nome de um mês quando o utilizador digita o número correspondente');
   writeln('Introduza o mês [Digite o número correspondente] de 1 a 12');
   readln(mes);
     case mes of
      1: writeln('O nº digitado corresponde ao mês de Janeiro');
      2: writeln('O nº digitado corresponde ao mês de Fevereiro');
      3: writeln('O nº digitado corresponde ao mês de Março');
      4: writeln('O nº digitado corresponde ao mês de Abril');
      5: writeln('O nº digitado corresponde ao mês de Maio');
      6: writeln('O nº digitado corresponde ao mês de Junho');
      7: writeln('O nº digitado corresponde ao mês de Julho');
      8: writeln('O nº digitado corresponde ao mês de Agosto');
      9: writeln('O nº digitado corresponde ao mês de Setembro');
     10: writeln('O nº digitado corresponde ao mês de Outubro');
     11: writeln('O nº digitado corresponde ao mês de Novembro');
     12: writeln('O nº digitado corresponde ao mês de Dezembro');
     else writeln('Operação inválida!');
     End;
 End.
 
A estrutura do Case está incorrecta.

Será

CASE mes of
'1': begin
writeln("Mes é janeiro");
end;

já não me lembro bem porque já lá vão uns anos mas begin e end só tem que levar caso tenha mais que uma instrução em cada caso/condição/ciclo (sim porque também se aplica para ciclos e afins:P)

Eu não me recordo nada de Pascal..., mas não devia haver break?
Em C sim. Mas em pascal é:
Begin
instruções;
end;
;)

Abraço
 
tao e que tal assim?

Código:
Program meses ;
 var meses: array [1..12] of string = ['Janeiro','Fevereiro','Março','Abril','Maio','Junho','Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'];
 var mes: Integer;
 Begin
   writeln('Este programa determina o nome de um mês quando o utilizador digita o número correspondente');
   writeln('Introduza o mês [Digite o número correspondente] de 1 a 12');
   readln(mes);
   writeln('O nº digitado corresponde ao mês de ', meses[mes]);
 End.

Não sei é se já deste arrays.
(Não sei se a sintaxe está correcta, mas deve ser isto)
 
Quais anos quais quê Ricardo. Ano passado intrujão :P

Intrujão? Pascal foi no 10º (2 anos atrás) btw... quem és?XD

tao e que tal assim?

Código:
Program meses ;
 var meses: array [1..12] of string = ['Janeiro','Fevereiro','Março','Abril','Maio','Junho','Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'];
 var mes: Integer;
 Begin
   writeln('Este programa determina o nome de um mês quando o utilizador digita o número correspondente');
   writeln('Introduza o mês [Digite o número correspondente] de 1 a 12');
   readln(mes);
   writeln('O nº digitado corresponde ao mês de ', meses[mes]);
 End.

Não sei é se já deste arrays.
(Não sei se a sintaxe está correcta, mas deve ser isto)

penso que a sintaxe está correcta.. embora tenha ficado em dúvida na declaração do array.. não me recordo se são ( ou [... mas também isso ve-se depois:P

Abraço
 
Program meses ;
var mes: string;
Begin
writeln('Este programa determina o nome de um mês quando o utilizador digita o número correspondente');
writeln('Introduza o mês [Digite o número correspondente] de 1 a 12');
readln(mes);
case mes
'1' x:= writeln('O nº digitado corresponde ao mês de Janeiro');
'2' x:=writeln('O nº digitado corresponde ao mês de Fevereiro');
'3' x:=writeln('O nº digitado corresponde ao mês de Março');
'4' x:=writeln('O nº digitado corresponde ao mês de Abril');
'5' x:=writeln('O nº digitado corresponde ao mês de Maio');
'6' x:=writeln('O nº digitado corresponde ao mês de Junho');
'7' x:=writeln('O nº digitado corresponde ao mês de Julho');
'8' x:=writeln('O nº digitado corresponde ao mês de Agosto');
'9' x:=writeln('O nº digitado corresponde ao mês de Setembro');
'10' x:=writeln('O nº digitado corresponde ao mês de Outubro');
'11' x:=writeln('O nº digitado corresponde ao mês de Novembro');
'12' x:=writeln('O nº digitado corresponde ao mês de Dezembro');
else writeln('Operação inválida!');
End.





Não tenho aqui compilador mas tens de ter ali uma variavel não sei agora se tens de por mais alguma coisa eu vou instalar um compilador agora e depois já vejo...
 
Boas

No case não podes usar X:= pois a variável já esta no próprio Case.
Nesse caso fica '1' : <instrução>
eu so sei trabalhar com o pascal 7 mas não será qualquer coisa como

Case mes of
1 : <instrução>;
end

Cumps
 
Back
Topo