Jump to content

Erro na construção de uma calculadora


sr._neves

Recommended Posts

program exercicio8;
uses crt;
Var num1, num2, funsao:real;
Begin
     clrscr;
     write ('Ensira o 1º número:   ');
     readln (num1);
     write ('ensira o 2º número:    ');
     readln (num2);
     Write ('Qual a operação que deseja fazer:   ');
     readln (funsao);
     If funsao=
     then
     begin
         num1*num2;
     end;
     If funsao=
     then
         num1-num2;
     If funsao=
     then
         num1+num2;
     if funsao=
     Then
         num1/num2;
     readln;


End.    

Quando eu tento meter no " IF funsao=* " ele da erro e fiz que não posso usar o " * " assim !

Estou a iniciar em pascal e não sei o que fazer

Link to comment
Share on other sites

Para além do que o rkixa te disse considera mais estas linhas:

- Apenas necessitas dos "begin" "end" no inicio e fim de programa, e em procedimentos/funções (não as que tens actualmente).

- Tens que meter os caracteres de soma, subtracção, etc entre aspas.

- Os resultados devem ser colocados nalgum lado. Da maneira que estás a fazer, ele não altera nada, e acho que não mostra no ecrã (para mostrar, tens de usar uma instrução de escrita, como o writeln)

Tens alguns erros de aprendizagem da sintaxe do Pascal. Revê os teus apontamentos, e ainda esta página:

http://en.wikibooks.org/wiki/Pascal_Programming/Syntax_and_functions

Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Link to comment
Share on other sites

Para além do que o rkixa te disse considera mais estas linhas:

- Apenas necessitas dos "begin" "end" no inicio e fim de programa, e em procedimentos/funções (não as que tens actualmente).

- Tens que meter os caracteres de soma, subtracção, etc entre aspas.

- Os resultados devem ser colocados nalgum lado. Da maneira que estás a fazer, ele não altera nada, e acho que não mostra no ecrã (para mostrar, tens de usar uma instrução de escrita, como o writeln)

Tens alguns erros de aprendizagem da sintaxe do Pascal. Revê os teus apontamentos, e ainda esta página:

http://en.wikibooks.org/wiki/Pascal_Programming/Syntax_and_functions

Obrigado por tudo mas:

1º se quiser usar "flores" meter coisas a cores e assim tenho de usar um begin e end; para a função If saber onde a "Flor" tem de parar.

2º O programa não está acabado por isso e que ainda não mostra os resultados, culpa minha não ter mencionado isso.

já agora, quando falas em aspas são as plicas ( ' ' ) ou aspas (" ") mesmo ?

Cumprimentos

Link to comment
Share on other sites

Tens razão quanto ao caso dos if's. Já não programo em Pascal há bastante tempo, e confesso que li isso a correr, apesar de estar escrito como dizes, na página que te indiquei.

Quanto às aspas, era plicas que queria dizer, tal como tens no teu programa. Como disse o rkixa, tens de alterar o tipo de dados da "funsao" para receber um caractere, que será a tua operação. Depois já podes fazer as comparações no if.

if funsao = '*' then
...

Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Link to comment
Share on other sites

Tens razão quanto ao caso dos if's. Já não programo em Pascal há bastante tempo, e confesso que li isso a correr, apesar de estar escrito como dizes, na página que te indiquei.

Quanto às aspas, era plicas que queria dizer, tal como tens no teu programa. Como disse o rkixa, tens de alterar o tipo de dados da "funsao" para receber um caractere, que será a tua operação. Depois já podes fazer as comparações no if.

if funsao = '*' then
...

Obrigado por todas as dicas já consegui por a minha amostra de calculadora a funcionar

program exercicio8;
uses crt;
Var num1, num2,resultado:real;
    funsao:char;
Begin
     clrscr;
     write ('Ensira o primeiro numero:   ');
     readln (num1);
     write ('ensira o segundo numero:    ');
     readln (num2);
     Write ('Qual a função que deseja utilizar:   ');
     readln (funsao); 
     If funsao= '*'
     then
         resultado:=num1*num2;
     If funsao='-'
     then
         resultado:=num1-num2;
     If funsao= '+'
     then
         resultado:=num1+num2;
     if funsao= '/'
     Then
         resultado:=num1/num2;

     Writeln ('O resultado e :   ',resultado:5:0);
     readln (resultado);
     readln;
End.   
Link to comment
Share on other sites

Depois de todas as alterações o programa ja está a bombar com umas funcionalidades melhores 🙂

Mas ainda tem aquele BUG da divisão por 0 !

program exercicio8;
uses crt;
Var num1, num2,resultado:real;
    funsao:char;
Begin
     clrscr;
     write ('Ensira o primeiro numero:   ');
     readln (num1);
     write ('ensira o segundo numero:    ');
     readln (num2);
     Write ('Qual a função que deseja utilizar:   ');
     readln (funsao); 
     If funsao= '*'
     then
         resultado:=num1*num2;
     If funsao='-'
     then
         resultado:=num1-num2;
     If funsao= '+'
     then
         resultado:=num1+num2;
     if funsao= '/'
     Then
         resultado:=num1/num2;

     Writeln ('O resultado e :   ',resultado:5:0);
     readln (resultado);
     readln;
End.

Obrigado por todas as dicas 😄

Link to comment
Share on other sites

Basta colocares outra condição if dentro do operador da divisão, e verificar se num2 é 0: se for, dizes que não é possível dividir por zero, caso não seja 0, prossegues com a operação normalmente.

Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Link to comment
Share on other sites

Boa tarde eu começei a programar em pascal há uns dias e meti o teu programa a funcionar sem problemas incluindo o bug do dividir por 0 aqui tens o código espero ter ajudado

program exercicio8;

uses wincrt;

Var num1, num2,resultado:real;

    funsao:char;

Begin

    clrscr;

    write ('insira o primeiro numero:  ');

    readln (num1);

    write ('insira o segundo numero:    ');

    readln (num2);

    Write ('Qual a função que deseja utilizar:  ');

    readln (funsao);

    begin

          If funsao= '*'

          then

              resultado:=num1*num2;

    end;

    Begin

          If funsao='-'

          then

              resultado:=num1-num2;

    end;

    begin     

                If funsao= '+'

                then

                    resultado:=num1+num2;

    begin

         

          if num2=0 then writeln('É impossivel dividir por 0');

          if num2=0 then exit;

          if funsao= '/'

          Then

              resultado:=num1/num2;

    end;

                             

    Writeln ('O resultado e :  ',resultado:5:0);

    readln (resultado);

    readln;

End;

End.

Link to comment
Share on other sites

Depois de mais algumas aulas, cá está uma maneira muito mais simples de conseguir alcançar o objectivo:

program exercicio12;
uses crt;
var operador:char;
    num1,num2,resultado:real;
Begin
        clrscr;
        writeln ('---------------------------------------------');
        writeln ('---------------------------------------------');
        write ('Ensira o primeiro numero:   ');
        readln (num1);
        write ('Ensira o segundo numero:   ');
        readln (num2);
        write ('Ensira o operador que deseja utilizar:   ');
        readln (operador);
        Case operador of
             '*':Begin
                        resultado:=num1*num2;
                        writeln ('O resultado é:   ',resultado:5:2);
                 end;
             '-':begin
                        resultado:=num1-num2;
                        writeln('O resultado é:   ',resultado:5:2);
                 end;
             '+':begin
                        resultado:=num1+num2;
                        writeln('O resultado é:   ',resultado:5:2);
                 end;
             '/':begin

                        If num2=0
                        then
                        begin
                                writeln('Impossivel divir por 0');
                                readln;
                        end
                        else
                        begin
                                resultado:=num1/num2;
                                writeln('O resultado é:   ',resultado:5:2);
                        end;
                 end;
             else
                        Writeln('Inválido');
                        readln;
             end;
             writeln ('---------------------------------------------');
             writeln ('---------------------------------------------');
             writeln ('sr._neves');
             readln;

end.


Link to comment
Share on other sites

nao dava pa fazer de outra maneira? 😛 eu tb fiz uma para a escola uma beca mais simples ainda vout mostrar o codigo nao tem é a parte daquele erro do 0 mas nao faz mal xD

program exercicio12;

uses winCrt;

var valor1,valor2:real;

    operador: char;

begin

    writeln('Introduza os 2 valores');

    readln(valor1,valor2);

    writeln ('|-----------------------------------|');

    writeln ('|        Escolha de Operador        |');

    writeln ('|-----------------------------------|');

    writeln ('|[1] - Soma                        |');

    writeln ('|[2] - Subtração                    |');

    writeln ('|[3] - Multiplicação                |');

    writeln ('|[4] - Divisão Inteira              |');

    writeln ('|-----------------------------------|');

    writeln ('Insira a sua escolha:');

  readln (operador);

  case operador of

    '1': writeln('A soma é: ',valor1+valor2:8:2);

    '2': writeln('A subtração é: ',valor1-valor2:8:5);

    '3': writeln('A multiplicação é: ',valor1*valor2:8:5);

    '4': writeln('A divisão é: ',valor1 / valor2:8:5);

end;

end.

Link to comment
Share on other sites

  • 3 weeks later...

boas! eu comecei pascal a uma semana e sou mto noob nisto... podiam dizer para que servem estes numeros:

nao dava pa fazer de outra maneira? 😛 eu tb fiz uma para a escola uma beca mais simples ainda vout mostrar o codigo nao tem é a parte daquele erro do 0 mas nao faz mal xD

program exercicio12;

uses winCrt;

var valor1,valor2:real;

    operador: char;

begin

    writeln('Introduza os 2 valores');

    readln(valor1,valor2);

    writeln ('|-----------------------------------|');

    writeln ('|        Escolha de Operador        |');

    writeln ('|-----------------------------------|');

    writeln ('|[1] - Soma                        |');

    writeln ('|[2] - Subtração                    |');

    writeln ('|[3] - Multiplicação                |');

    writeln ('|[4] - Divisão Inteira              |');

    writeln ('|-----------------------------------|');

    writeln ('Insira a sua escolha:');

  readln (operador);

  case operador of

    '1': writeln('A soma é: ',valor1+valor2:8:2);

    '2': writeln('A subtração é: ',valor1-valor2:8:5);

    '3': writeln('A multiplicação é: ',valor1*valor2:8:5);

    '4': writeln('A divisão é: ',valor1 / valor2:8:5);

end;

end.

Link to comment
Share on other sites

Se a memória não me falha, servem para formatar a apresentação do número, isto é 8:2, acho que vai ter 8 casas no máximo à esquerda da virgula, e 2 casas decimais no máximo.

Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.