Ir ao conteúdo
  • Cadastre-se

Pascal/Delphi Alguém poderia me ajudar com esse exercício de Pascal?


Posts recomendados

@KXSY basicamente nada cara, fiz um esboço mas nem compilando ele está.

 
Program atividade_09 ;
var
S, N : char;

function mediaaluno(media : integer): string;
var media: real;
begin
  Writeln('Entre com as suas quatro notas');
  Readln(n1,n2,n3,n4);
  Writeln(n1, n2, n3, n4);
  media:= (n1 + n2 + n3 + n4)/4
  writeln('Sua media é de', media);
 end.

 

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

@odair020 Vou te ensinar uma coisa quase universal de todas as linguagens da programação, quando nós declaramos a palavra program em pascal, isso instrui ao compilador que a partir dali tudo aquilo e um procedimento.

program MeuPrograma;	(* Isso e um procedimento principal *)
uses 
  crt;
  
(* procedimento dentro do procedimento principal *)
procedure MostraNumero;
begin
  writeln('33');
end;    (* Todo procedimento interno ao procedimento principal deve terminar com ; *)
  
begin   (*Começo do nosso procedimento *)
  writeln('Oi.');
  MostraNumero;
  readln;
end.    (*Fim do nosso procedimento *)

nós declaramos procedimentos dentro do procedimento principal, então MostraNumero ali e interno de MeuPrograma.

 

20 minutos atrás, odair020 disse:

@KXSY basicamente nada cara, fiz um esboço mas nem compilando ele está

adicionado 0 minutos depois

Program atividade_09 ;
var
S, N : char;

function mediaaluno(media : integer): string;
var media: real;
begin
  Writeln('Entre com as suas quatro notas');
  Readln(n1,n2,n3,n4);
  Writeln(n1, n2, n3, n4);
  media:= (n1 + n2 + n3 + n4)/4
  writeln('Sua media é de', media);
 end.

  

a dica básica aqui e declare 4 variáveis leia as quatro e depois tire a media.

 

23 minutos atrás, odair020 disse:

media:= (n1 + n2 + n3 + n4)/4

seu raciocínio está certo só falta acerta na logica.

Tente fazer algo assim funcionar primeiro.

program MeuProgram;
uses
  crt;
  
var
 n1,n2,n3,n4,media:integer;
 
begin
  writeln('Digite uma nota');
  readln(n1);
  {....}
  writeln('Digite uma outra nota');
  readln(n4);
  (*Aqui você tira a media *)
  writeln('A nota media e:',media);
  readln();
end.

Depois eu ajudo você a colocar em uma função.

Link para o comentário
Compartilhar em outros sites

@KXSY só não saquei muito  bem como implantar cerrinho no código

adicionado 8 minutos depois
Program exercicio9 ;
var
 n1,n2,n3,n4,media : integer;
 
 begin
 writeln('Digite a primeira nota');
 Readln(n1);
 writeln('Digite a segunda nota');
 readln(n2);
 writeln('Digite a terceira nota');
 readln(n3);
 writeln('Digite a quarta nota');
 readln(n4);
 media:=(n1+n2+n3+n4)/4;
 writeln('A media do aluno e:',media);
 readln();
 end.

ficou assim agora mas no calculo está dando erro

adicionado 12 minutos depois

modifiquei aqui, a primeira parte foi, troquei o tipo da variavel da media pra real

Link para o comentário
Compartilhar em outros sites

Tá aí

program MeuProgram;
uses
  crt;
  
var
 n1,n2,n3,n4:integer;
 media:real;
 
begin
  writeln('Digite uma nota');
  readln(n1);
  writeln('Digite uma outra nota');
  readln(n2);
  writeln('Digite uma outra nota');
  readln(n3);
  writeln('Digite uma outra nota');
  readln(n4);
  media:=(n1+n2+n3+n4)/4;
  writeln('A media das notas e:',media:2:2);
  readln();
end.

Não é a resposta, mais sim a metade do problema.

Link para o comentário
Compartilhar em outros sites

tenta seguir o meu código

program MeuPrograma;
uses 
  Crt;
  
var
  n1,n2,resultado:integer;

(* Cria um procedimento simples *)  
procedure MeuProcedimento(n1,n2,n3:integer);
begin
  writeln('Numeros passados ',n1,' ',n2,' ',n3);
  readln;
end;

(* Cria uma função simples *)
function MinhaFuncao(n1,n2:integer):integer;
begin
  writeln(n1,'+',n2,'=',n1+n2);
  MinhaFuncao:=n1+n2;
end;

begin
  writeln('Digite dois numeros.');
  readln(n1,n2);
  MeuProcedimento(n1,n2,(n1+n2)*n2);
  writeln;  { Salta uma linha }
  resultado:=MinhaFuncao(n1,n2);
  writeln('Para reforçar o resultado foi ',resultado);
  readln;
end.

ApostilaPascal.pdf

Lê essa apostila ai, na pagina 47.

execute nesse site que fica mais fácil de entender  https://www.onlinegdb.com/

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

@KXSY vou tentar aqui

 

adicionado 10 minutos depois
1 minuto atrás, odair020 disse:

@KXSY vou tentar aqui

 

Program exercicio9 ;
 uses
   Crt;
   
   
var
 n1,n2,n3,n4: integer;
 media: real;
 
 function notaaluno(n1,n2,n3,n4:integer): integer;
 begin
 writeln('Digite a primeira nota');
 Readln(n1);
 writeln('Digite a segunda nota');
 readln(n2);
 writeln('Digite a terceira nota');
 readln(n3);
 writeln('Digite a quarta nota');
 readln(n4);
 media:=(n1 + n2 + n3 + n4)/4;
 writeln('A media do aluno e:',media);
 readln();
 end;
 
 procedure mediaaluno(n1,n2,n3,n4:integer): integer;
 begin

algo parecido com isso?

Link para o comentário
Compartilhar em outros sites

Program teste1 ;
var
not1, not2, not3, not4 : real;
opcao : char;
retorno : string;
procedure medialuno( media : real);
begin
  if(media >= 6.0) then
  writeln('Você foi aprovado!')
  else
  writeln('Sentimos muito mas você foi reprovado');
end;
function calcmedia (n1, n2, n3, n4 : real) : real;
var
med: real;
retorno1 : real;
begin
  writeln('ENTRE COM A PRIMEIRA NOTA');
  readln(n1);
  writeln('ENTRE COM A SEGUNDA NOTA');
  readln(n2);
  writeln('ENTRE COM A TERCEIRA NOTA');
  readln(n3);
  writeln('ENTRE COM A QUARTA NOTA');
  readln(n4);
  med:=(n1+n2+n3+n4)/4;
  writeln('A média do aluno é:',med);
  retorno1 := (med)
end;
Begin
  repeat
    retorno := calcmedia (not1, not2, not3, not4);
    writeln('Deseja realizar outro calculo de media?(S/N)');
    readln(opcao);
  until(opcao = 'N') or (opcao = 'n');
End.

fiz algumas alterações e o código ficou assim, porém ainda não consegui deixá-lo em perfeito funcionamento

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá.

 

@odair020, alguns pontos:

 

1#

Prefira nomenclaturas mais objetivas para o métodos. Ex.: CalculaMedia() e VerificaAprovacao();

 

 

 

2#

Seguindo o enunciado, essa function que calcula a nota NÃO receberá parâmetros. Todas as variáveis necessárias serão locais mesmo. As notas não precisam ser declaradas como globais.

 

o recomendado é assim: todas as variáveis que o método utilizar, OU vem pelo parâmetro, OU são declaradas localmente (inclui ambos, é claro. Assim como podem não utilizar variáveis...), ou seja, NÃO* é interessante utilizar variáveis globais dentro das funções.

 


De global basicamente seria:

var
  opcao :char;

 

 

 

3#

Para retornar o valor da function, usa-se a própria funcion. Ex.:

 CalculaMedia := mediaNotas;

Ou seja: a função, além de fazer o que tem que fazer, também funciona meio como uma "variável". Quando ela terminar, nela mesma vai ter o valor que foi atribuído...

 

Lá no programa principal você "pega" essa resposta e utiliza como quiser. Ex.:

VerificaAprovacao(CalculaMedia()); //a função é invocada, vai retornar um valor, que vai ser utilizado como pâmetro na procedure

 

Ou pode utilizar uma variável para receber esse valor:

var
  opcao      :char;
  mediaNotas :real;
mediaNotas := CalculaMedia(); //a função é executada, retorna um valor e depois será atribuído a variável
VerificaAprovacao(mediaNotas); //aqui normal: invoca a procedimento passando por parâmetro a variável

Obs. 1: essa variável mediaNotas não é a mesma mediaNotas que está dentro da function. São variáveis distintas. Apenas deixei com o mesmo nome propositalmente para demonstrar que pode. Uma é global e outra local. Como estão com o mesmo nome, lá na função o Pascal vai utilizar a "mais próxima", que no caso é a local.

 

Obs. 2: de fato as variáveis não precisam ter o mesmo nome, como citado, apenas utilizei para demonstrar que pode. Poderia ser assim:

media := CalculaMedia();
VerificaAprovacao(media);

Dá na mesma. Apenas acharia interessante ser igual, pois elas, para o nossa abstração do contexto, representam a mesma coisa, logo faria sentido ter a mesma nomenclatura.

 

 

 

4#

Só para ficar claro: um procedure e function são basicamente a mesma coisa. A diferença nelas está em que a function "além de ser como uma procedure", também sempre retornará algo em si mesma.

 

 

***

 

Por aí vai.

 

Qualquer dúvida é só perguntar.

 

No aguardo.

Link para o comentário
Compartilhar em outros sites

@Simon Viegas

Program teste1 ;
var
not1, not2, not3, not4 : real;
opcao : char;
retorno : real;
procedure medialuno( media : real);
begin
  if(media >= 6.0) then
  writeln('Você foi aprovado!')
  else
  writeln('Sentimos muito mas você foi reprovado');
end;
function calcmedia (n1, n2, n3, n4 : real) : real;
var
med: real;
retorno1 : real;
begin
  writeln('ENTRE COM A PRIMEIRA NOTA');
  readln(n1);
  writeln('ENTRE COM A SEGUNDA NOTA');
  readln(n2);
  writeln('ENTRE COM A TERCEIRA NOTA');
  readln(n3);
  writeln('ENTRE COM A QUARTA NOTA');
  readln(n4);
  med:=(n1+n2+n3+n4)/4;
  writeln('A média do aluno é:',med);
  calcmedia:=(med);
end;
Begin
  repeat
    retorno := calcmedia (not1, not2, not3, not4);
    medialuno(retorno);
    writeln('Deseja realizar outro calculo de media?(S/N)');
    readln(opcao);
  until(opcao = 'N') or (opcao = 'n');
End.

Fiz algumas alterações e ficou assim agora, só gostaria de saber como deixar com menos zeros na resposta final

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

  • Membro VIP

Estou analisando seu código... já já respondo.

adicionado 14 minutos depois

@odair020, uma dica bacana. Releia o enunciado e veja se seu código está seguindo TODAS as orientações.

 

Veja, o que está descrito lá é chamado de "enunciado". Isso é como um "contrato entre você, o Programador, e um cliente". Você deve seguir exatamente o que está sendo pedido. Sacou?

 

 

Vamos analisar os pontos que sugeri:

 

21 horas atrás, Simon Viegas disse:

1#

Prefira nomenclaturas mais objetivas para o métodos. Ex.: CalculaMedia() e VerificaAprovacao()

 

🆗 Você ainda deixou os nomes dos métodos estranhos. Eu ainda acho que deveria usar nomenclaturas melhores, mas tudo bem.

 

 

 

***

 

21 horas atrás, Simon Viegas disse:

2#

Seguindo o enunciado, essa function que calcula a nota NÃO receberá parâmetros. Todas as variáveis necessárias serão locais mesmo. As notas não precisam ser declaradas como globais.

 

o recomendado é assim: todas as variáveis que o método utilizar, OU vem pelo parâmetro, OU são declaradas localmente (inclui ambos, é claro. Assim como podem não utilizar variáveis...), ou seja, NÃO* é interessante utilizar variáveis globais dentro das funções.

 


De global basicamente seria:


var
  opcao :char;

 

📛 Aqui está errado! A function NÃO RECEBE PARÂMETROS. As variáveis que vai utilizar devem ser declaradas dentro da função (variáveis locais).

 

Lembre-se de remover essa variáveis lá da var global, pois não vão ser mais necessárias.

 

 

 

***

 

21 horas atrás, Simon Viegas disse:

3#

Para retornar o valor da function, usa-se a própria funcion.

 

🆗 Agora está certo. A própria função recebe o valor.

📛 Mas ainda está errando por ter deixado a variável retorno1. Simplesmente apague essa variável.

📛 Está faltando imprimir as 4 notas. Isso é exigido pelo enunciado.

 

 

 

***

 

Corrige aí e posta o novo código.

 

No aguardo.

 

  • Curtir 1
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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!