• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

sr._neves

Erro na construção de uma calculadora

17 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

1º - a variavel funcão não sei o que vais fazer com ela como real eu se calhar optava por char (vais usar '+', '-', '/', '*')

2º - no if tens funcao= ele com o igual está à espera que retorne um valor lógico e para o fazer precisa de 2 valores.

3ª - isso tudo com ifs  :hmm: não me parece bem

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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
...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.   

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Falta-te verificar o caso na divisão, quando o denominador é 0, dá erro. De resto não experimentei, mas olhando para o código parece estar bom :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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 :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Um pormenor off-topic: "Ensira" não existe, a forma correcta é "Insira". Se este é um trabalho para apresentar ao professor, fica melhor com português correcto.  :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.


0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

nao dava pa fazer de outra maneira? :P 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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? :P 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

È isso mesmo!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora