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

Calculadora em pascal

Discussão em 'Programação' iniciada por miguelsantostb, 25 de Agosto de 2012. (Respostas: 7; Visualizações: 1405)

  1. Olá. Comecei há uns dias a iniciar-me em pascal e hoje decidi fazer uma calculadora de equações de 1º grau e o programador que utilizei, o freepascal continua a dar um erro de sintaxe dizendo que não pus um ponto-e-vírgula no final de um comando, mas o ponto-e-vírgula está lá. Aqui vai o código:
    program Calculadoraequacoes;
    Var X,A,B,C :Real;
    fim :char;


    Begin
    Writeln('As equações estão no formato AX+B=C');
    Writeln('Por favor digite o valor da A');
    Readln(A);
    Writeln('Por favor digite o valor de B');
    Readln(B);
    Writeln('Por favor digite o valor de C');
    Readln(C);
    X:=(C+B)/A;
    Writeln('O X é igual a:', X);
    Writeln('Deseja sair?');
    Readln(fim);
    Until fim:=('Sim')or('sim')or('Ok')or('ok')
    End.

    Agradeço que me deem um empurrãozinho, por favor.
    Obrigado.
     
  2. Ryu^

    Ryu^ Power Member

    No until acho que estás a atribuir, a condição não devia ser com = e não com := para comparar?
    Isso e não te falta o Repeat para iniciar o ciclo until?
    já agora, recomendo que metas identação para se perceber melhor o código. E quando postas mete como código para não perder a identação.
    Ah e o ; também falta depois da condição do until.

    Edit:
    Bem tive a sacar o IDE e completei o código:

    Código:
    program Calculadoraequacoes;
    Var X,A,B,C :Real;
    Var fim :char;
    
    
    Begin
      Repeat
         Writeln('As equações estão no formato AX+B=C');
         Writeln('Por favor digite o valor da A');
         Readln(A);
         Writeln('Por favor digite o valor de B');
         Readln(B);
         Writeln('Por favor digite o valor de C');
         Readln(C);
         X:=(C+B)/A;
         Writeln('O X é igual a:', X);
         Writeln('Deseja sair?');
         Readln(fim);
       Until (fim='S')or(fim='s');
    End.
    
    Nota: os operadores de condições só trabalham com boolean (true ou false). E ao fazeres uma operação de = ou diferente é que dá o resultado, por isso tem que estar entre ().

    :char => uma letra, :string => várias letras. Por isso é que mudei a condição para 's' ou 'S'
     
    Última edição: 25 de Agosto de 2012
  3. Obrigado pela resposta. Como disse são os meus primeiros programas, agora vou tentar uma que englobe as várias calculadoras que escrevi.
    Mais uma vez obrigado.
     
  4. Olá. Agora tentei fazer uma calculadora que englobasse todas as operações básicas, e fiz também download de um IDE e continua a dar-me um erro aqui:
    Código:
    repeat;                    writeln('Deseja sair?');
                        readln(fim);
                        until (fim='S')or(fim='s');
                    End;
           [B]Else (OP='B')or(OP='b'){É nesta zona que dá o erro}[/B]
           Then
                    Begin
                        writeln('Que números quer subtrair?Pode subtrair até quatro se não quiser todos introduza 0 nos restantes campos');
                        writeln('Introduza A');
                        readln(A);
                        writeln('Introduza B');
                        readln(B);
    Diz que na zona a negrito falta um ponto-e-vírgula, no entanto está lá um...
    Obrigado
     
  5. Ryu^

    Ryu^ Power Member

    O Else não leva condições visto que é o código que é corrido quando o If falha.
    Se quiseres meter mais uma condição caso a primeira falhe então tens que meter mais um if:

    Código:
    IF condição THEN
      ..
    ELSE
      IF condição THEN
        ..
      ELSE
        ..
    
    Também não leva o Then.
    http://pt.wikibooks.org/wiki/Pascal/Estrutura_Condicional -> exemplos
     
  6. Olá. Obrigado pela resposta. No tutorial que vi não davam exemplos com mais do que uma condição... O meu maior problema são os erros, que não dizem o verdadeiro problema...Obrigado mais uma vez.
     
  7. Olá. Corrigi esse erro, mas continua a dar este erro:
    Calcient.pas(31,8) Fatal: Syntax error, ";" expected but "ELSE" found

    Aqui está o código inteiro:
    Código:
    program calculadorasimples;var SS,SSU,SM,SD,A,B,C,D :real;
    var fim,OP :char;
    
    
        Begin
             Repeat;
                writeln('Por favor escolha uma opção:');
                writeln('(A) Soma');
                writeln('(B)Subtração');
                writeln('(C)Multiplicação');
                writeln('(D)Divisão');
                readln(OP);
             Until (OP='A')or(OP='a')or(OP='B')or(OP='b')or(OP='C')or(OP='c')or(OP='D')or(OP='d');
          If (OP='A')or(OP='a') Then
                   Begin
                        writeln('Que números quer somar?Pode somar até quatro se não quiser todos introduza 0 nos restantes campos');
                        writeln('Introduza A');
                        readln(A);
                        writeln('Introduza B');
                        readln(B);
                        writeln('Introduza C');
                        readln(C);
                        writeln('Introduza D');
                        readln(D);
                        SS:=A+B+C+D;
                        repeat;
                        writeln('Deseja sair?');
                        readln(fim);
                        until (fim='S')or(fim='s');
                    End;
           Else
           If (OP='B')or(OP='b') Then
               Begin
                 writeln('Que números quer subtrair?Pode subtrair até quatro se não quiser todos introduza 0 nos restantes campos');
                 writeln('Introduza A');
                 readln(A);
                 writeln('Introduza B');
                 readln(B);
                 writeln('Introduza C');
                 readln(C);
                 writeln('Introduza D');
                 readln(D);
                 SSU:=A-B-C-D;
                 repeat;
                 writeln('Deseja sair?');
                 readln(fim);
                 until (fim='S')or(fim='s');
             End;
          Else
          If (OP='C')or(OP='c') Then
                Begin
                     writeln('Que números quer multiplicar ?Pode multiplicar até quatro se não quiser todos introduza 1 nos restantes campos');
                        writeln('Introduza A');
                        readln(A);
                        writeln('Introduza B');
                        readln(B);
                        writeln('Introduza C');
                        readln(C);
                        writeln('Introduza D');
                        readln(D);
                        SM:=A*B*C*D;
                        repeat;
                        writeln('Deseja sair?');
                        readln(fim);
                        until (fim='S')or(fim='s');
                    End;
           Else
           If (OP='D')or(OP='d') Then
                    Begin
                        writeln('Que números quer dividir?Pode dividir até quatro se não quiser todos introduza 1 nos restantes campos');
                        writeln('Introduza A');
                        readln(A);
                        writeln('Introduza B');
                        readln(B);
                        writeln('Introduza C');
                        readln(C);
                        writeln('Introduza D');
                        readln(D);
                        SD:=A/B/C/D;
                        repeat;
                        writeln('Deseja sair?');
                        readln(fim);
                        until (fim='S')or(fim='s');
                    End;
           Else writeln('Opção não e válida')
    End.
    O meu grande problema é que o ponto-e-vírgula está lá...
    Obrigado.
     
  8. Diogo_Ramalho

    Diogo_Ramalho Power Member

    Se olhares para a sintaxe do If then else, consegues ver que o End não tem ;


    PS: Para ser mais preciso o End de dentro dos IFs não tem ; quando na linha seguinte se encontra um ELSE. Ou seja, o ultimo End tem de ter ponto e virgula
     
    Última edição: 27 de Agosto de 2012

Partilhar esta Página