Ir ao conteúdo
  • Cadastre-se

Pascal/Delphi Calculadora em Pascal com o comando While


Posts recomendados

Estou tentando resolver um exercício de algoritmo que pede para fazer uma calculadora com o uso do comando While, porém meu código está apresentando alguns problemas e não estou conseguindo encontrar o erro. 

 

program calculadora;

var 
n1,n2,resultado: real;
op: string; 

begin
  
  while op <> '5' do
  begin
  
    writeln('1-adição');
    writeln('2-subtração');
    writeln('3-divisão');
    writeln('4-multiplicação');
    writeln('5-sair'); 
  
    writeln('Escolha uma opção de 1 a 5');
    readln(op);
  
    writeln('Valor 1: ');
    readln(n1); 
    
    writeln('Valor 2: ');
    readln(n2);
  
  
  //soma
  
    if (op='1') then
    resultado:= n1+n2
  
  //subtração 
  
    else if (op='2') then 
    resultado:= n1-n2
  
 // divisão 
 
    else if (op='3') then 
    resultado:= n1/n2
 
 //multiplicação 
 
    else if (op='4') then 
    resultado:= n1*n2 ;
 
    
//resultado
 
    writeln('resultado: ', resultado:0:2);
    writeln('Escolha uma opção de 1 a 5');
    readln(op);
    end; 
end.

 

Link para o comentário
Compartilhar em outros sites

Cara você fez certinho, só errou na logica do final.

 

program calculadora;
uses
    crt;

var 
	n1,n2,resultado: real;
	op: string; 

begin
  
  while op <> '5' do
  begin
  
    writeln('1-adição');
    writeln('2-subtração');
    writeln('3-divisão');
    writeln('4-multiplicação');
  
    writeln('Escolha uma opção de 1 a 5');
    readln(op);
  
    writeln('Valor 1: ');
    readln(n1); 
    
    writeln('Valor 2: ');
    readln(n2);
  
  
	//soma
  
    if (op='1') then
    resultado:= n1+n2
  
  	//subtração 
  
    else if (op='2') then 
    resultado:= n1-n2
  
 	// divisão 
 
    else if (op='3') then 
    resultado:= n1/n2
 
 	//multiplicação 
 
    else if (op='4') then 
    resultado:= n1*n2 ;
 
    
	//resultado
 
    writeln('resultado: ', resultado:0:2);
    writeln('Digite 5 para sair ou 0 para continuar.');
    readln(op);
    end; 
end.

 

Recomendo experimentar fazer com case of também.

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@joaoz1404 Você teria que fazer um loop que aceitasse sair só com a condição 0 ou 5.

 

Dessa maneira.

Spoiler

program calculadora;
uses
    crt;

var 
	n1,n2,resultado: real;
	op: string; 

begin
    while op <> '5' do
    begin
  
        writeln('1-adição');
        writeln('2-subtração');
        writeln('3-divisão');
        writeln('4-multiplicação');
  
        writeln('Escolha uma opção de 1 a 5');
        readln(op);
  
        writeln('Valor 1: ');
        readln(n1); 
    
        writeln('Valor 2: ');
        readln(n2);
  
  
	    //soma
  
        if (op='1') then
            resultado:= n1+n2
  
  	    //subtração 
  
        else if (op='2') then 
            resultado:= n1-n2
  
 	    // divisão 
 
        else if (op='3') then 
        resultado:= n1/n2
 
 	    //multiplicação 
 
        else if (op='4') then 
            resultado:= n1*n2 ;
 
    
	    //resultado
 
        writeln('resultado: ', resultado:0:2);
        { Repete enquanto op for difirente de 5 ou 0 }
        repeat
            writeln('Digite 5 para sair ou 0 para continuar.');
            readln(op);
            if (op<>'0') AND (op<>'5') then
            begin
                writeln('Digite uma opção valida!');
                writeln('Pressione enter para continuar.');
                readln;
            end;
        until (op = '0') OR (op = '5');
    end; 
    writeln('Tchau!');
end.

 

 

Vou deixar mais um exemplo pra você ir quebrando a cabeça.

Spoiler

program calculadora;
uses
    crt;

var 
	n1,n2,resultado: real;
	op: string; 
	

function Operacoes(n1, n2:real; op:string; var resultado:real):boolean;
begin
    Operacoes:=true;
    case op of
        '1':begin
            resultado:=n1+n2;
        end;
        
        '2':begin
            resultado:=n1-n2;
        end;
        
        '3':begin
            if n1 > 0 then
            begin
                resultado:=n1/n2;
            end
            else
            begin
                Operacoes:=false;
                resultado:=0;
            end;
        end;
        
        '4':begin
            resultado:=n1*n2;
        end;
    end;
end;

begin
    while op <> '5' do
    begin
        (* Checa se a opção é valida *)
        repeat
            writeln('1-adição');
            writeln('2-subtração');
            writeln('3-divisão');
            writeln('4-multiplicação');
  
            writeln('Escolha uma opção de 1 a 4');
            readln(op);
            if (op < '1') OR (op > '4') then
            begin
                writeln('Opção invalida.');
            end;
        until (op >= '1') AND (op <= '4');
  
        writeln('Valor 1: ');
        readln(n1); 
    
        writeln('Valor 2: ');
        readln(n2);
        
        
        { Faz as Operacoes }
        if Operacoes(n1, n2, op, resultado) then
        begin
	        //resultado
            writeln('resultado: ', resultado:0:2);
        end
        else
        begin
            writeln('Não foi possivel realizar a operação!');
            writeln('Tente novamente!');
        end;
        { Repete enquanto op for difirente de 5 ou 0 }
        repeat
            writeln('Digite 5 para sair ou 0 para continuar.');
            readln(op);
            if (op<>'0') AND (op<>'5') then
            begin
                writeln('Digite uma opção valida!');
                writeln('Pressione enter para continuar.');
                readln;
            end;
        until (op = '0') OR (op = '5');
    end; 
    writeln('Tchau!');
end.

 

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...