Jump to content

Mostrar alunos por número


EyeLook
 Share

Go to solution Solved by thoga31,

Recommended Posts

Olá estou aqui outra vez, pois preciso da vossa ajuda.

Desta vez o exercício consiste em pedir informações de alunos (nome,numero,turma e nota), ordenar por ordem alfabética (usei o BubbleSort do outro tópico xD) e de seguida mostrar o aluno que eu quiser associando ao número. Aí é que buguei.

Já tenho o código todo só falta essa parte.

Program PortugalAProgramar;
uses crt;
Type
registo = record
numero: integer;
nome: string;
turma: char;
nota: integer;
end;
var
alunos: array [1..5] of registo;
i: integer;
n: integer;
resp:char;
temp: registo;
num:registo;
begin
clrscr;
for i:=1 to 3 do
begin
	writeln (i,' Aluno');
	with alunos[i] do
	begin
	 write ('Nome: '); readln (nome);
	 write ('Numero: '); readln (numero);
	 write ('Turma: '); readln (turma);
	 write ('Nota: '); readln (nota);
	end;
	writeln;
end;

for i:=1 to 3 - 1 do
	for n:= i+1 to 3 do
	begin
		if (alunos[i].nome > alunos[n].nome) then
		begin
			temp:= alunos[i];
			alunos[i] := alunos[n];
			alunos[n] := temp;
		end;
	end;

clrscr;

for i:=1 to 3 do
begin
	writeln (i,' Aluno');
	with alunos[i] do
	begin
	writeln ('Nome: ',nome);
	writeln ('Numero: ',numero);
	writeln ('Turma: ',turma);
	writeln ('Nota: ',nota);
	end;
	writeln;
end;

readln;
clrscr;

repeat
write ('Numero do aluno a consultar: '); readln(whutttt);
writeln;
writeln (i,' Aluno');
writeln ('Nome: ',alunos[whuutututu].nome);
writeln ('Numero: ',alunos[wtf].numero);
writeln ('Turma: ',alunos[hehehe].turma);
writeln ('Nota: ',alunos[hihih].nota);

writeln;
write ('Deseja consultar outro aluno? (S/N) '); readln(resp);
clrscr;
until UpCase(resp)='N';
clrscr;
readln;
end.

Novamente. Pedir dados. mostrar por ordem alfabética. de seguida pedir o numero do aluno e mostrar a informação ligada a esse número.

Preciso disso hoje ehehehe 😉

Edited by EyeLook
GeSHi
Link to comment
Share on other sites

  • Solution

Em primeiro lugar, e não leves a mal, pedia-te para mudares o título do tópico. Para quem vem visitar o P@P e está a procurar por ajuda em determinados assuntos, o título "Pascal Ex. Again -.-" nada diz acerca do assunto do tópico em questão. Duvido que, nas composições para Português, dês como título "Monte de palavras outra vez" a uma composição 😉

Em segundo lugar, eu e o Nuno não somos os únicos por estas andanças que percebe de Pascal - somos apenas, porventura, aqueles que estão por aqui mais regularmente. Portanto, para outra pessoa que venha ler o tópico e saiba ajudar, poderá não ser um bom incentivo ler o parêntesis. Gosto de saber que consegui e soube ajudar, mas não sou o único 🙂

Acerca da tua dúvida.

O array alunos contém informações acerca do aluno, entre eles o número. Admitindo que não há dois alunos com o mesmo número (apesar de não controlares isso no input), podes fazer uma pesquisa linear e mostrar as informações quando o número do aluno pedido coincidir com um número de aluno existente no array.

Vou dar duas opções, mas aconselho a usares a primeira uma vez que, muito provavelmente, não aprendeste a usar parte da segunda.

write('Numero? ');
readln(num);

// opção 1
i := 1;
while (i < 3) do begin
  if alunos[i].numero = num then begin
     // Mostrar informações do aluno de índice "i"
     i := 3;  // Força a condição do "while" a ser False (i = 4 > 3 pois vou fazer "Inc(i)"), pelo que saímos do ciclo
  end;
  Inc(i);
end;


// opção 2
for i := 1 to 3 do
  if alunos[i].numero = num then begin
     // Mostrar informações do aluno de índice "i"
     break;
  end;

O meu conselho é criares um procedimento - caso já tenhas aprendido a fazê-los - para mostrar as informações de um aluno visto que necessitas de fazer isto em mais do que um sítio. Assim evitas de andar a copiar e a colar código igual vezes sem conta - imagina que um aluno tinha 100 informações: andavas a copiar e a colar 100 linhas de cada vez que precisasses? 😉

procedure MostrarAluno(aluno : registo; i : word);
begin
  writeln(i, ' aluno:');
  writeln('Nome: ', aluno[i].nome);
  // etc...
  writeln;
end;


// Exemplo de uso:
for i:=1 to 3 do
  MostrarAluno(alunos, i);

// Em vez de:
for i:=1 to 3 do
begin
  writeln (i,' Aluno');
  with alunos[i] do
  begin
     writeln ('Nome: ',nome);
     writeln ('Numero: ',numero);
     writeln ('Turma: ',turma);
     writeln ('Nota: ',nota);
  end;
  writeln;
end;

Se tiveres alguma dúvida acerca disto, apita 😉

Cumprimentos.

  • Vote 1

Knowledge is free!

Link to comment
Share on other sites

Olá sim quanto ao título só tu podes mudar. No outro tópico tinha BubbleShort e alguém me corrigiu o título para BubbleSort.

Percebo o que dizes sobre os parênteses ehehe

Quanto aos "pormenores" (se assim se pode chamar), sim tenho que os mudar (validar várias coisas sem ser isso do número...)

Usei a 2º opção pois parecia mais simples para mim. A 1º nunca dei aquilo do inc portanto não vou utilizar. Na 2º não dei o break mas percebe-se que é para parar.

Quanto aos procedures sim! Eu queria fazer só que já dei isso à tanto tempo que me esqueci!

Falando no código, ele funcionou, claro! Muito obrigado, toma um "Laique" Love you hihi

Depois vou por aí alguns exercícios com resolução para o pessoal 😉

edit: desculpa a demora a responder, mas hoje à tarde deve ter acontecido algo, porque a net está suuuuuper lenta. este fórum é o único site que abre

Edited by EyeLook
Link to comment
Share on other sites

Olá sim quanto ao título só tu podes mudar. No outro tópico tinha BubbleShort e alguém me corrigiu o título para BubbleSort.

Percebo o que dizes sobre os parênteses ehehe

Se editares o primeiro post do tópico, terás acesso ao título 😉

Acerca das duas opções, o Inc(i) é precisamente a mesma coisa que i := i + 1. Já te ensinaram o break? Não convém usares coisas que nunca deste, e o Inc é substituível - o break não (tecnicamente sim, mas isso são terrenos pantanosos).

E não demoraste a responder - 22 minutos é um tempo muito bom para a média.

  • Vote 1

Knowledge is free!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.