Ir ao conteúdo
  • Cadastre-se
renatocrb

Exercícios em pascal

Recommended Posts

Olá pessoal boa noite preciso de uma ajuda com esses 2 exercícios em pascal por favor me ajudem. 

 

Implementação de dois programas em Pascal:

a. Faça um programa que leia um número inteiro positivo N e crie uma sub-rotina que receba como parâmetro esse valor N e retorne ao programa principal o valor de S obtido pelo seguinte cálculo:

 =1+1/1!⁄+1/2!⁄+1/3!⁄++1/!

 
b. Faça um programa que leia 10 números inteiros e positivos e implemente um procedimento que dado um número lido informe se ele é um número perfeito ou não. Sabe-se que um número é perfeito quando é igual à soma de seus divisores (exceto ele mesmo). Exemplo: os divisores de 6 são 1, 2 e 3, e 1+2+3 = 6. Logo, 6 é um número perfeito. Para cada um dos valores lidos, o procedimento implementado deve ser executado para informar se o número é ou não perfeito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@renatocrb

Qual é a dúvida?

Poste o código para que possamos tirar a dúvida.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estava Faltando as condições para fazer o exercício, mas agora já inclui.


Esse é o problema não sei fazer, estava precisando de uma Luz para tentar resolver outros exercícios que tenho aqui que se assemelham a esses que postei.

 

obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gente, boa tarde!

 

Preciso desenvolver dois programas em Pascal, porém só sei desenvolver em C. Alguém pode me ajudar?

 

1- Programa que leia um número inteiro positivo N e crie uma sub-rotina que receba como parâmetro esse valor N e retorne ao programa principal o valor de S obtido pelo seguinte cálculo: S = 1 + 1/ 1!  + 1 /2!  + 1/ 3!  + ⋯ + 1 / N!

 

2- Programa que leia 10 números inteiros e positivos e implemente um procedimento que dado um número lido informe se ele é um número perfeito ou não. Sabe-se que um número é perfeito quando é igual à soma de seus divisores (exceto ele mesmo).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá renatocrb e renatocrb.

 

Tentem fazer algo e postem aqui o que já conseguiram...

 

Então, para o 1), creio que a primeira coisa seria cria uma Function que calcule e retorne o valor fatorial de um número inteiro. Essa seria a base do programa. Seria até interessante apenas fazer um programa que faça isso, depois inseriria a rotina principal que faz o cálculo.

 

Para o 2), vocês poderiam criar uma Function que retorna os divisores do número e a partir dai efetuar os cálculos... etc

 

No aguardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá renatocrb e renatocrb.

 

Tentem fazer algo e postem aqui o que já conseguiram...

 

Então, para o 1), creio que a primeira coisa seria cria uma Function que calcule e retorne o valor fatorial de um número inteiro. Essa seria a base do programa. Seria até interessante apenas fazer um programa que faça isso, depois inseriria a rotina principal que faz o cálculo.

 

Para o 2), vocês poderiam criar uma Function que retorna os divisores do número e a partir dai efetuar os cálculos... etc

 

No aguardo

Veja onde que está errado.

 

Questão A

Program A ;varn,x,p:integer;s:real;Procedure calculo;varf,u:integer;p:real;beginf:=1;for u:=1 to x dobeginf:=f*uend;p:=1+1/f;s:=p+s;end;BeginWriteln('Informe o número');readln(n);for x:=1 to n dobegincalculo;end;writeln('O Resultado será ',s);Writeln('Pressione qualquer tecla para finalizar');readkey;End.

Questão B:

Program B ;varx,numero:integer;Procedure calculo;vary,np,nc:integer;begin np:=0; nc:=numero-1; for y:=1 to nc do begin If (numero mod y=0) thennp:=y+np;end;if (numero=np) thenwriteln('O numero ',numero,' é perfeito')elsewriteln('O numero ',numero,' não é perfeito');end;BeginWriteln('Esse programa irá mostrar se os numeros informados são perfeitos ou não.');Writeln('Insira apenas números inteiros e positivos');Writeln('Aperte qualquer tecla pra começar');readkey;Writeln('Informe os números'); for x:=1 to 10 do begin readln (numero); if numero<0 then writeln('Número inválido. Informe apenas inteiros positivos') else calculo; end; Writeln('Pressione qualquer tecla para finalizar'); readkey;End.

No aguardo!

Exercícios em Pascal.doc

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

 

1)

- Você precisa transformar a procedure em function; (a ÚNICA diferença é que a function retorna sempre um valor nela mesma, procedure não)

- O valor utilizado pela função deve ser passado por parâmetro, e não usando variável global.

- O trecho que calcula o fatorial pode ficar separado, ou seja, cria uma outra função para fazer esse cálculo. Daí, a function do cálculo, chama a function do fatorial.

Obs.1: A função do fatorial tem que ser criada antes (acima) da função do calculo, pois o Pascal vai aprendendo de "de cima para baixo";

Obs.2: No Pascal é possível criar uma sub-rotina, da sub-rotina, a função do fatorial pode ficar dentro da função do calculo (é fácil entender, é da mesma forma que você usou um var dentro da função, você também pode criar um function também, ou seja, essa função seria enxergada apenas por essa função - da mesma forma que as variáveis são enxergadas apenas nela também...)

 

2)

- acho que você deveria ler os 10 números de uma vez e depois efetuar as contas. Sugiro usar array.

- creio que aqui você também deva passar o valor para cálculo pela procedure, e não usando variável global. (ao passar o valor do array, passe a posição, e não o array todo);

- creio que ao ler um valor inválido (numero<0), você deve ler um novo número, e não apenas ignorá-lo. (você poderia usar um repeat, validando o valor)

 

***

 

Por ai vai

 

No aguardo.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia. 

Fiz o primeiro conforme o Simon Vegas falou. Ele retorna zero mesmo?

Program A ;uses crt;var n,x,p:integer;s:real;function calculo ( p:real):real;var f,u:integer;Beginf:=1;for u:= 1 to x dobeginf:=f*uend;p:=1+1/f;s:=p+s;end;beginwriteln('Informe o numero');readln(n);for x:= 1 to n dobeginwriteln('O Resultado sera',s);writeln('Precione qualquer tecla para finalizar');readkey;  end;End.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá andreza.gomes,

 

Seu mesmo código, só que endentado, para facilitar a leitura :

PROGRAM A;uses  CRT;var   n,x,p:integer;  s:real;function calculo (p:real):real;  var     f,u:integer;  begin  f:=1;  for u:= 1 to x do    begin    f:=f*u    end;  p:=1+1/f;  s:=p+s;  end;BEGINwriteln('Informe o numero');readln(n);for x:= 1 to n do  begin  writeln('O Resultado sera',s);  writeln('Precione qualquer tecla para finalizar');  readkey;  end;END.

Você criou a function e nenhum momento está utilizando ela.

 

Deve funcionar assim: você chama o procedimento, passando o parâmetro que ele precisa, e utiliza o valor retornado por ela, ou seja, a function funciona como uma variável, que retorna um valor nela mesma. Outra coisa, você declarou que a function retorna um real, mas onde está retornando esse valor?

 

Então, a conta é "S = 1 + 1/fatorial(1)  + 1 /fatorial(2)  + 1/fatorial(3)  + ⋯ + 1 /fatorial(N)", correto? para organizar, cria uma function que calcula o fatorial... Cria outra function que faz essa conta, e que vai utilizar a function fatorial para calcular o fatorial...

 

Fiz um exemplo de cálculo de fatorial e com um programa utilizando ela. Tentem entender como funciona uma function e criem um programa que faz o cálculo de S.
 

PROGRAM exemplo;uses  CRT;function fatorial(n:integer):integer;  var     i,             //para controlar o for    fat :integer;  //usado no cálculo e resultado do fatorial  begin  fat:=N; //inicializa a variável (primeiro valor)  for i:=N-1 downto 1 do // *1    fat:=fat*i; //ele mesmo vezes o próximo valor  fatorial:=fat; //retorna o valor na function  end;//*1 = vai de "próximo" até o "1" [ex.: N=4.  N*(3*2*1)]//claro que não precisa multiplicar por 1, mas deixei apenas para ficar didático  var  num: integer;  BEGINClrScr;writeln('Digite o valor de N');readln(num);writeln('Fatorial de ',num,'=',fatorial(num)); //*2ReadKey;//*2 veja, está chamado fatorial, passando o valor que ele precisa no num. A própria function retorna o valor, ou seja, fatorial funciona também como uma variável.END.

...

 

O princípio da soma S é a mesma coisa... será um laço de repetição que vai somando cada pedaço da conta...

No aguardo.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz novamente, acho que agora consegui. Porém tentei colocar algum comando para o usuário ter a opção de sair e não encontrei.
 

program numerointeiro;uses crt;    function fatorial ( numero: integer ):integer;      var f: integer;          begin         f := numero;         while (numero>1) do                      begin                       numero:=numero-1;             f := f * numero;                         end;                    fatorial := f;       end;              function soma (numero: integer): real;      var s: real;      var denominador: integer;            begin          s:=1;            for denominador:= 1 to numero do          begin            s:=s+(1/fatorial(denominador));          end;            soma:=s;          end; var    resultado:real;   numero: integer;               begin   ClrScr;     writeln ('Por favor informe o um número inteiro positivo:');  readln(numero);                     while numero <=0 do                begin        writeln(' O número digitado não é um inteiro positivo:');       writeln ('Por favor informe o um número inteiro positivo:');       readln(numero);             end;            resultado:=soma(numero);       writeln( 'O somatório dos fatoriais é:');      writeln (resultado);               //exit;            End.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá. Comecei a responder ontem... mas durante a composição, o meu PC travou e não tá ligando mais... rs

 

Vou tentar resumir:

 

Creio que o código está certo, faço apenas alguns comentários:

 

1) Evite esses espaços entre as linhas, deixa o código muito "sujo";

 

2) Por que usou while, em vez de for no fatorial?

Não está errado, apenas sugiro uma reflexão (supondo que "deveria" ser for). Então, existem basicamente 3 estruturas de repetição: while, for e repeat. Tudo que dá para fazer em um, dá para fazer em outro (resumindo: só precisaria existir um, correto?). A questão é que um é mais adequado/prático para cada contexto... Daí, precisa analisar qual seria o mais propício e/ou qual justificativa para usar um outro. (cada um tem suas qualidades e limitações, e que é justamente o que estou colocando em discussão). Sugiro que também converse com seu orientador sobre isso...

 

3) Sobre o "sair", qual contexto se refere? uma desistência?

Se for, poderia usar por exemplo o "0"... daí, se o valor informado for esse, não continua... para tratar, usa um if...

O comando exit e halt também pode ser usados... mas tem que ver se não dá uma quebra na lógica, ou seja, talvez seja mais correto fazer o programa "pula o que não quer", e não simplesmente fechar...

 

 

Qualquer coisa é só postar;

 

No aguardo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gente boa tarde!

 

Estou tentando fazer alguns exercícios em pascal, mas não compila. Alguém me ajuda?

 

1)     Um comerciante deseja fazer o levantamento do lucro das mercadorias que ele comercializa. Para isto, mandou digitar uma linha para cada mercadoria com nome, preço de compra e preço de venda das mesmas. Fazer um programa em Pascal que determine e escreva quantas mercadorias proporcionam:

 

10%<- lucro<10%

lucro<-20%

lucroo >20%

 

 

 

Determine e escreva o valor total de compra e de venda de todas as mercadorias, assim como o lucro total. Observação: Você deve adotar um flag

program LucroMercadorias;uses crt;const Max = 100; { numero maximo de mercadorias }type RgProduto = record                   Nome     : string;                   PrcCompra: real;                   PrcVenda : real;                 end;var n, i, LucroA, LucroB, LucroC: integer;      TtCompra, TtVenda, TtLucro: real;                Lucro, PCemLucro: real;                       Continuar: Char;                         Produto: array[1..Max] of RgProduto;begin  { Digitar os dados do produto: Nome, Preco de compra e venda. }  n := 0;  repeat    n := n + 1;    clrscr;    writeln('Produto no. ', n:2);    writeln('-------------');    write('Informe o nome do produto: ');    readln(Produto[n].Nome);    write('Informe o preco de compra: ');    readln(Produto[n].PrcCompra);    write('Informe o preco de venda.: ');    readln(Produto[n].PrcVenda);    writeln;    repeat      write('Continuar (s/n).: ');      readln(Continuar);    until Continuar in ['S', 's', 'N', 'n'];  until (n = Max) or (Continuar in ['N', 'n']);  { inicializa as variaveis antes do inicio do processamento }  LucroA := 0;    TtCompra := 0;  LucroB := 0;    TtVenda  := 0;  LucroC := 0;    TtLucro  := 0;  for i := 1 to n do  begin    Lucro := Produto[i].PrcVenda - Produto[i].PrcCompra;    PCemLucro := Lucro / Produto[i].PrcCompra * 100;    if PCemLucro < 10       then inc(LucroA)    else if PCemLucro <= 20            then inc(LucroB)         else inc(LucroC);    TtCompra := TtCompra + Produto[i].PrcCompra;    TtVenda  := TtVenda  + Produto[i].PrcVenda;    TtLucro  := TtLucro  + Lucro;  end;  { exibe (ou imprime) os resultados }  clrscr;  writeln('.....Lucro....    Qtd.');  writeln('----------------------');  writeln('       Ate 10%    ', LucroA:3);  writeln('de 10% ate 20%    ', LucroB:3);  writeln('  acima de 20%    ', LucroC:3);  writeln;  writeln('Total dos precos de compra....: ', TtCompra:8:2);  writeln('Total dos precos de venda.....: ', TtVenda :8:2);  writeln('Total do lucro das mercadorias: ', TtLucro :8:2);  writeln;  write('Pressione [Enter] para prosseguir.');  readln;end.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá. andreza.gomes, como se trata de um outra dúvida, por favor, crie um NOVO TÓPICO para ela, ok? e aguarde ajuda lá.

 

Abraços

OK! Vou criá-la.

Simon, bom dia!

 

Não estou conseguindo criar novos tópicos. Você tem o link?

 

Desde já agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

OK! Vou criá-la.

Simon, bom dia!

 

Não estou conseguindo criar novos tópicos. Você tem o link?

 

Desde já agradeço.

 

Vamos conversar por mensagens privadas. Eu enviei uma mensagem ("Enviar Mensagem") para você , por favor, responda a mensagem. Qualquer coisa envia uma mensagem para mim pelo meu perfil.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×