necrolord Posted April 30, 2008 at 07:21 PM Report Share #182706 Posted April 30, 2008 at 07:21 PM Boas a todos. Tenho um programa para fazer que tem de fazer o seguinte: -pede o nome, ano, turma, numero do aluno e guarda num vector de registos. -pede a nota de todas as disciplinas e calcula a média e guarda no mesmo vector de registos. E agora vem a parte em que eu preciso de ajuda: Temos de mostrar os dados por ordem crescente do número, o que com 4 alunos era fácil de fazer com um ciclo de if's mas se aumentarmos o alunos para 30 já fica um pouco mais confuso 😛 A minha professora disse para procurar por listas, por isso peço a alguém mais experiente no pascal do que eu que me dê umas luzes. program new; uses crt; type r=record nome:string[40]; nu:integer; turma:char; ano:integer; media:real; end; var b:^r; a:array [1..4] of r; c,maior,menor:integer; procedure media; var port,mat,ef,fq,ai,arq,tic,psi,ing:integer; begin write('Introduza a sua nota de Portuguˆs: '); readln(port); write('Introduza a sua nota de Matem tica: '); readln(Mat); write('Introduza a sua nota de Fisica e Quimica: '); Readln(fq); write('Introduza a sua nota de Area de Integra‡Æo: '); readln(ai); write('Introduza a sua nota de Arquitectura de Computadores: '); readln(arq); write('Introduza a sua nota de Tecnologias da Informa‡Æo e Comunica‡Æo: '); readln(tic); write('Introduza a sua nota de Programa‡Æo de Sistemas Inform ticos: '); readln(psi); write('Introduza a sua nota de Inglˆs: '); readln(ing); write('Introduza a sua nota de Educa‡Æo F¡sica: '); readln(EF); b^.media:=(Port+mat+ef+fq+ai+arq+tic+psi+ing)/9; end; begin clrscr; new(b); for c:=1 to 4 do begin write('Introduza o nome: '); readln(b^.nome); write('Introduza o ano: '); readln(b^.ano); write('Introduza a sua turma: '); readln(b^.turma); Write('Introduza o seu n£mero: '); readln(b^.nu); media; a[c]:=b^; Clrscr; end; maior:=0; menor:=30; for c:=1 to 4 do begin b^:=a[c]; Writeln('Aluno ',b^.nome); Writeln('N£mero ',b^.ano); Writeln('Turma ',b^.turma); Writeln('N£mero ',b^.nu); Writeln('Com uma m‚dia de ',b^.media:6:2,' valores'); Readln; Clrscr; end; readln; dispose(b); end. Falta apenas ordenar os dados por ordem crescente do número. Já agora.. está-me a dar erro no new, pois pede-me um ponto final à frente do New, o que eu acho muito estranho Bem agradeço a quem me conseguir ajudar. Link to comment Share on other sites More sharing options...
turkis Posted May 2, 2008 at 03:28 PM Report Share #183026 Posted May 2, 2008 at 03:28 PM boas... como isso é trabalho de escola, não te vou dar código...mas dou-te esta dica para ordenar vectores, existem procedimentos já inventados para isso. um deles, fácil de entender, é o bubblesort, que é o que eu uso. procedure BOLHA (V:vetor; N:integer); // vector=vector a ordenar; n= comprimento do vector var I, AUX, FIM : integer; TROCOU : boolean; begin FIM := N; // definir o fim da procura repeat TROCOU := false; //re-marca-se a posicao da flag como false for I:=1 to FIM-1 do //procurar no vector ate a penultima posicao if V > V[i+1] then //se a posicao actual for maior que a seguinte begin // Troca-se AUX := V; // os V := V[i+1]; // valores V[i+1] := AUX; // das posicoes TROCOU := true; // Marca-se a flag como True end; FIM := FIM-1; // re-define-se o fim da procura until not TROCOU; // se nao houve troca, e porque ja esta tudo organizado end; como o nome o indica, isto vai pegar em cada posição do vector, e faze-la "subir" como se fosse uma bolha é claro que só isto não te serve de nada...agora puxa um bocado pela cabeça....mais não posso fazer 🙂 EDIT isto não é próprio do Pascal, é um algorítmo universal 😉 guarda isto na cabeça, pois é uma coisa básica para programação Link to comment Share on other sites More sharing options...
necrolord Posted May 2, 2008 at 05:41 PM Author Report Share #183061 Posted May 2, 2008 at 05:41 PM Muito obrigado. Era mesmo esse tipo de ajuda, que eu pretendia, sem dar o código 🙂 Antes de ver este post andei aqui às voltas e cheguei a uma solução parecida a essa. O que eu fiz foi o seguinte. Pegando num algoritmo que testava todos os casos, se o que ele testava fosse maior trocava as posições no vector. Para por isto a funcionar no programa o que fiz foi criar um vector com 2 linhas. Na primeira linha inseria o número do aluno e na segunda a posição onde ele tinha sido escrito. Depois com a ajuda de um ciclo de for mostrei os números por ordem nas determinadas posições. código final: program dfjhsjsg; uses crt; type r=record nome:string[40]; nu:integer; turma:char; ano:integer; media:real; end; var b:^r; a:array [1..4] of r; d:array [1..4,1..4] of integer; c,l,z,x:integer; procedure media; var port,mat,ef,fq,ai,arq,tic,psi,ing:integer; begin write('Introduza a sua nota de Inglˆs: '); readln(ing); write('Introduza a sua nota de Portuguˆs: '); readln(port); write('Introduza a sua nota de Matem tica: '); readln(Mat); write('Introduza a sua nota de Educa‡Æo F¡sica: '); readln(EF); write('Introduza a sua nota de Fisica e Quimica: '); Readln(fq); write('Introduza a sua nota de Area de Integra‡Æo: '); readln(ai); write('Introduza a sua nota de Arquitectura de Computadores: '); readln(arq); write('Introduza a sua nota de Programa‡Æo de Sistemas Inform ticos: '); readln(psi); write('Introduza a sua nota de Tecnologias da Informa‡Æo e Comunica‡Æo: '); readln(tic); b^.media:=(Port+mat+ef+fq+ai+arq+tic+psi+ing)/9; end; begin new(b); clrscr; for c:=1 to 4 do begin write('Introduza o nome: '); readln(b^.nome); write('Introduza o ano: '); readln(b^.ano); write('Introduza a sua turma: '); readln(b^.turma); Write('Introduza o seu n£mero: '); readln(b^.nu); media; d[1,c]:=b^.nu; d[2,c]:=c; a[c]:=b^; Clrscr; end; for c:=1 to 4 do for l:=1 to 4 do begin if d[1,c]<d[1,l] then begin z:=d[1,c]; x:=d[2,c]; d[1,c]:=d[1,l]; d[2,c]:=d[2,l]; d[1,l]:=z; d[2,l]:=x; end; end; for c:=1 to 4 do begin b^:=a[d[2,c]]; Writeln('Aluno ',b^.nome); Writeln('Ano ',b^.ano); Writeln('Turma ',b^.turma); Writeln('N£mero ',b^.nu); Writeln('Com uma m‚dia de ',b^.media:6:2,' valores'); Readln; Clrscr; end; readln; dispose(b); end. Obrigado pelo algoritmo, é mais uma coisa que fico a saber 😉 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