Ir ao conteúdo
  • Cadastre-se

Pascal/Delphi Algorítimo com 2 funções


Posts recomendados

Oi pessoal,

tenho um exercício novo hoje, gostaria de um help/dica para realizá-lo:

 

 

Criar um algorítimo que tenha 2 funções:

A primeira deverá receber como parâmetro uma velocidade em metros por segundo (m/s) e retornar esta velocidade em quilômetros por hora (km/h).

A segunda deverá receber ccomo parâmetro uma velocidade em quilômetros por hora (km/h) e retornar esta velocidade em metros por segundo (m/s).

 

Obrigada :)

 

 

 

Link para o comentário
Compartilhar em outros sites

Em 30/06/2020 às 18:42, Simon Viegas disse:

 

Por favor, poste o que já conseguiu fazer e em qual parte está com dúvidas.

 

 

Acredito que tenha algo errado da linguagem, pois não consigo executar no programa... Conseguem me ajudar?

program converter km_m;
var
result,num: integer;
var calc: char;
begin
clrscr;
  writeln('qual conversao (km ou m) ?');
readln(calc);
writeln('informe o numero');
readln(num);
if calc = 'km' then
begin
result := num * 3.6;
end
else
begin
  result := num / 3.6;
end;
writeln('o resultado é ', result, calc)
end.

 


Tentei de outra maneira, fazendo direto no programa e saiu assim: 
O que acharam? Está bom/correto?
-------------------------------------------

Program conversaodemedidas ;
uses crt;
var
   m,km:real;
Begin
    writeln('Convertendo unidades de medidas');
    writeln('Transformar metros por segundo em quilometro por hora. Digite uma velocidade.');
        readln(m);
        
        km:= m*3.6;
      
        writeln();
    writeln();
        writeln('Resultado:');
        
        writeln(KM:3:2,  ' quilometros por hora');
    writeln();
begin
    writeln('Convertendo unidades de medidas');
    writeln('Transformar quilometro por hora em metros por segundo. Digite uma velocidade.');
    readln(km);
    m:= m/3.6;
        writeln();
    writeln();
        writeln('Resultado:');
        writeln(M:3:2,  ' metros por segundo');
    writeln();
    end
End.

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
Em 01/07/2020 às 19:59, Bárbara Müller disse:

O que acharam? Está bom/correto?

 

Segue o enunciado:
 

Em 29/06/2020 às 23:06, Bárbara Müller disse:

Criar um algorítimo que tenha 2 funções:

A primeira deverá receber como parâmetro uma velocidade em metros por segundo (m/s) e retornar esta velocidade em quilômetros por hora (km/h).

A segunda deverá receber como parâmetro uma velocidade em quilômetros por hora (km/h) e retornar esta velocidade em metros por segundo (m/s).

 

Cadê as funções? Então, se um exercício com uso de funções foi passado, é porque você já estudou sobre. Se tem dúvidas sobre function/procedure, dê uma pesquisa sobre o tema. Veja exemplos... se aprofunde no tema. Após, se tiver dúvidas sobre isso (funções), é só perguntar!!!

 

 

Segue um esboço:

{$CODEPAGE UTF8} //uma forma de tentar conseguir imprimir palavras acentuadas
program conversaodemedidas;
{
Criar um algorítimo que tenha 2 funções:

A primeira deverá receber como parâmetro uma velocidade em metros por segundo
(m/s) e retornar esta velocidade em quilômetros por hora (km/h).

A segunda deverá receber ccomo parâmetro uma velocidade em quilômetros por hora
(km/h) e retornar esta velocidade em metros por segundo (m/s).
}
uses
  CRT;
   
function ms_para_kmh (ms: real): real;
  begin
  
  
  
  ms_para_kmh := 0;
  end;

function kmh_para_ms (kmh:real): real;
  begin
  
  
  
  kmh_para_ms := 0;
  end;

var
   ms, kmh:real;
  
begin

end.

 

Você iria implementar duas funções: uma para para cada conversão e no programa principal, você utilizaria elas... Lembrando: revise sobre o tema, e tira as suas dúvidas sobre o que é uma função... se não souber o que é isso, não adianta fazer qualquer outra coisa (pois o exercício trata-se disso).

 

Tente fazer qualquer outros exercícios com funções... apenas treine um pouco e entenda seu funcionamento...

 

No aguardo.

 

adicionado 8 minutos depois

Segue um exemplo qualquer utilizando funções:
 

program soma_dois_valores;
uses
  CRT;
   
function somaDoisValores (a, b: real): real;
  var
    soma: real;
  begin
  soma := a + b;
  
  somaDoisValores := soma;
  end;

var
   num1, num2: real;
   resultado: real;
  
begin
ClrScr;
writeln('Digite o primeiro valor');
readln(num1);
writeln('Digite o segundo valor');
readln(num2);
resultado := somaDoisValores(num1, num2);
writeln('A soma do primeiro valor + o segundo valor deu ', resultado:1:3);
ReadKey();
end.

 

Link para o comentário
Compartilhar em outros sites

@Simon Viegas

 

Não me atentei ao uso da função, muito obrigada por me atentar a isso! 

Olha só como está ficando... ainda preciso adicionar o 'writeln('>>>> Deseja Sair s/n <<<<');' rs

 

Program Pzim ;
Uses crt;
    function m2km(m:real):real;
    begin
    m2km:= (m*3.6); 
    end;
    
    function km2m(km:real):real;
    begin
    km2m := (km/3.6);
    end;
          
var 
    m,km: real;
Begin
     clrScr;
    writeln('Convertendo unidades de medidas');
    writeln('Transformar metros por segundo em quilometro por hora. Digite uma velocidade:');
    readln(m);

    writeln();
    writeln();
    writeln('Resultado:');

    writeln(m2km(m):3:2,  ' Km/h');
    writeln(); 


    //trocando as unidades .
    writeln('-----------------------------------------------------------');
    writeln();
    writeln();
    writeln('Convertendo unidades de medidas - parte 2');
    writeln('Transformar quilometro por hora em metros por segundo. Digite uma velocidade:');
    readln(km);


    writeln();
    writeln();
    writeln('Resultado:');

    writeln(km2m(km):3:2,  '  m/s');
    writeln();
End.

 

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

~~~~ Finalizado ~~~~

 

Program Pzim ;
Uses crt;
    function m2km(m:real):real;
    begin
    m2km:= (m*3.6); 
    end;
    
    function km2m(km:real):real;
    begin
    km2m := (km/3.6);
    end;
          
var 
    m,km: real;
    sair:char;

begin
// atribuindo valor = N para variavel sair
sair := 'N'; 
while sair = 'N' do
Begin
     clrScr;
    writeln('Convertendo unidades de medidas');
    writeln('Transformar metros por segundo em quilometro por hora. Digite uma velocidade:');
    readln(m);
  

    writeln();
    writeln();
    writeln('Resultado:');

    writeln(m2km(m):3:2,  ' Km/h');
    writeln(); 


    //trocando as unidades .
    writeln('-----------------------------------------------------------');
    writeln();
    writeln();
    writeln('Convertendo unidades de medidas - parte 2');
    writeln('Transformar quilometro por hora em metros por segundo. Digite uma velocidade:');
    readln(km);


    writeln();
    writeln();
    writeln('Resultado:');

    writeln(km2m(km):3:2,  '  m/s');
    writeln();
    
    writeln ('Deseja sair? Responda com S/N use a letra maiuscula. ');
    readln (sair);
end;
   
End.

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Alguns pontos:

  • Condição para repetição

Sendo objetivo... teu código só está repetindo se digitar "N" (maiúsculo), uma forma de ajustar seria:

while UpCase(sair) = 'N' do

 

 

 

  • Dê uma trato na identação

Basicamente as assinaturas das funções ficariam mais a esquerda.

No meu padrão, todo código identaria assim:

program Pzim;
  
function m2km(m:real):real;
  begin
  m2km := m*3.6; 
  end;

function km2m(km:real):real;
  begin
  km2m := (km/3.6);
  end;

var 
  m, km: real;
  opcao: char;

begin
sair := 'n'; 
while UpCase(sair) = 'N' do
  begin
  ClrScr;
  writeln(' *** CONVERSÃO DE UNIDADES ***');
  writeln('');
  writeln(' 1 - ms/s para km/h');
  writeln(' 2 - km/h para ms/s');
  writeln('');
  write  ('==> '); ReadKey();
  readln(opcao);

  writeln('Convertendo unidades de medidas');
  writeln('Transformar metros por segundo em quilometro por hora. Digite uma velocidade:');
  readln(m);
  writeln();
  writeln();
  writeln('Resultado:');
  writeln(m2km(m):3:2,  ' Km/h');
  writeln(); 
  
  //trocando as unidades
  writeln('-----------------------------------------------------------');
  writeln();
  writeln();
  writeln('Convertendo unidades de medidas - parte 2');
  writeln('Transformar quilometro por hora em metros por segundo. Digite uma velocidade:');
  readln(km);
  writeln();
  writeln();
  writeln('Resultado:');
  writeln(km2m(km):3:2,  '  m/s');
  writeln();
  writeln ('Deseja sair? Responda com S/N use a letra maiuscula. ');
  readln(sair);
  end;
end.

 

Eu sou acostumado a deixar as linhas dentro do begin/end começando no mesmo dente. Outro padrão seria assim:

program Pzim;
  
function m2km(m:real):real;
begin
  m2km := m*3.6; 
end;

function km2m(km:real):real;
begin
  km2m := (km/3.6);
end;

var 
  m, km: real;
  opcao: char;

begin
  sair := 'n'; 
  while UpCase(sair) = 'N' do
  begin
    ClrScr;
    writeln(' *** CONVERSÃO DE UNIDADES ***');
    writeln('');
    writeln(' 1 - ms/s para km/h');
    writeln(' 2 - km/h para ms/s');
    writeln('');
    write  ('==> '); ReadKey();
    readln(opcao);

    writeln('Convertendo unidades de medidas');
    writeln('Transformar metros por segundo em quilometro por hora. Digite uma velocidade:');
    readln(m);
    writeln();
    writeln();
    writeln('Resultado:');
    writeln(m2km(m):3:2,  ' Km/h');
    writeln(); 
    
    //trocando as unidades
    writeln('-----------------------------------------------------------');
    writeln();
    writeln();
    writeln('Convertendo unidades de medidas - parte 2');
    writeln('Transformar quilometro por hora em metros por segundo. Digite uma velocidade:');
    readln(km);
    writeln();
    writeln();
    writeln('Resultado:');
    writeln(km2m(km):3:2,  '  m/s');
    writeln();
    writeln ('Deseja sair? Responda com S/N use a letra maiuscula. ');
    readln(sair);
  end;
end.

 

 

 

  • Sugiro ajustar as nomenclaturas das funções.

"Metros por segundo" (m/s) não deveria ser associado a "metros" (m). O primeiro é uma medida de velocidade, o segundo de comprimento. Veja:

function m2km(m:real):real;
  begin
  m2km := (m*3.6); 
  end;

Poderiam-se ler essa função assim: meters to kilometers. O nome da função dar a entender que está "convertendo de metros para quilômetros", e não de "metros por segundo para quilômetros por hora". Entendo que todo o contexto deixa claro que é uma coisa e não outra, mas acho que seria menos intuitivo.

 

Exemplo:

function ms2kmh (ms:real): real;
  begin
  ms2kmh := ms*3.6; 
  end;

 

É apenas um detalhe, talvez tanto faz.

 

 

 

 

  • Experimente inserir um menu no programa

Em vez de sempre executar uma opção e depois a outra. Poderia inserir um menu e perguntar qual opção deseja executar. Algo como:

image.png

 

 

Por aí vai.

 

No aguardo.

 

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