1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Dúvida: Estrutura Case em Pascal

Discussão em 'Programação' iniciada por Paulo Truta, 3 de Novembro de 2007. (Respostas: 17; Visualizações: 20737)

  1. Paulo Truta

    Paulo Truta [email protected] 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...:)
     
  2. Yumon

    Yumon Power Member

    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!!
     
  3. Paulo Truta

    Paulo Truta [email protected] Member

    Mas eu se tirar os ' ele diz que o 1 não é esperado...
     
  4. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    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 )
     
  5. OdracirPT

    OdracirPT Power Member

    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]
          (...)
     
  6. Yumon

    Yumon Power Member

    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.
     
  7. tuning

    tuning Power Member

    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.
     
  8. HecKel

    HecKel The WORM

    Eu não me recordo nada de Pascal..., mas não devia haver break?
     
  9. tuning

    tuning Power Member

    Nunca usei, só em C.

    Aqui os procedimentos nao devem necessitar.
     
  10. Paulo Truta

    Paulo Truta [email protected] Member

    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.
     
  11. TheRieper

    TheRieper Power Member

    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)

    Em C sim. Mas em pascal é:
    Begin
    instruções;
    end;
    ;)

    Abraço
     
  12. MurderGod

    MurderGod Power Member

    Quais anos quais quê Ricardo. Ano passado intrujão :P
     
  13. r3pek

    r3pek Power Member

    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)
     
  14. TheRieper

    TheRieper Power Member

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

    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
     
  15. Jammin @

    Jammin @ Power Member

    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...
     
  16. Rikazzold

    Rikazzold Power Member

    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
     
  17. Jammin @

    Jammin @ Power Member

    podes inserir uma nova variavel... do que me lembro :S
     

Partilhar esta Página