EyeLook Posted March 18, 2015 at 07:05 PM Report Share #579752 Posted March 18, 2015 at 07:05 PM (edited) 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 March 18, 2015 at 07:53 PM by EyeLook GeSHi Link to comment Share on other sites More sharing options...
Solution thoga31 Posted March 18, 2015 at 07:25 PM Solution Report Share #579757 Posted March 18, 2015 at 07:25 PM 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. 1 Report Knowledge is free! Link to comment Share on other sites More sharing options...
EyeLook Posted March 18, 2015 at 07:47 PM Author Report Share #579764 Posted March 18, 2015 at 07:47 PM (edited) 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 March 18, 2015 at 07:51 PM by EyeLook Link to comment Share on other sites More sharing options...
thoga31 Posted March 18, 2015 at 08:18 PM Report Share #579766 Posted March 18, 2015 at 08:18 PM 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. 1 Report Knowledge is free! Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now