Menu

 
Reply to this topicStart new topic
> [Ajuda] Pascal
V
sharkcmlm
post May 4 2008, 09:02 PM
Post #1




Grupo: Membro
Posts: 6
Registado: 12-November 06
Membro nº: 5,192



oi.. precisava da ajuda de alguem neste programa PASCAL. é um trabalho para a escola que estou a desenvolver mas ta mau . ele nao funciona se alguem me ajudar agradeço.. toda a ajuda é bem vinda.. tambem estou aberto a sugestoes.. valeu.

unit Alunos1;

interface

uses crt;

type disciplina=record
mat:string[15];
port:string[15];
ing:string[15];
fq:string[15];
psi:string[15];
ac:string[15];
ai:string[15];
rc:string[15];
tic:string[15];
ef:string[15];end;

type aluno=record
num:integer;
nome:string[20];
d:disciplina;end;

type alunos=array[1..30] of aluno;

function menu:byte;
function inserir(var alu:alunos;n:integer):integer;
procedure modificar(var alu:alunos;n:byte);
procedure eliminar(var alu:alunos);
function media_curso(var alu:alunos;n:byte):real;
function media_aluno(var alu:alunos):real;
procedure mostrar_todos(alu:alunos;n:byte);
function media_maluno(var alu:alunos;n:byte):real;
procedure mostrar_msup(var alu:alunos;n:byte);
procedure mostrar_minf(var alu:alunos;n:byte);

implementation

function menu:byte;
var op:integer;
begin
clrscr;
writeln('---MENU---');
writeln('1->Mntroduzir Aluno');
writeln('2->Modificar Notas');
writeln('3->Eliminar Aluno');
writeln('4->Calcular media do curso');
writeln('5->Calcular media de um Aluno');
writeln('6->Mostrar todos os Alunos');
writeln('7->Mostrar o melhor Aluno');
writeln('8->Mostrar os Alunos com uma media superior a um valor introduzido pelo utilizador');
writeln('9->Mostrar os Alunos com uma media inferior a um valor introduzido pelo utilizador');
writeln('10->opcoes');
writeln('11->sair');readln(op);
if op<=11 then begin
menu:=op end else begin
writeln('Valor invalido, Escolha uma opcao entre 1 e 11');end;
end;

function inserir(var alu:alunos;n:integer):integer;
{inserir um novo aluno e as respectivas notas}
var qa,i:integer;
begin
clrscr;
write('quantos Alunos deseja inserir?');readln(qa);
for i:=1 to qa do begin
writeln('insira os dados do Aluno');
with alunos[n+i] do begin
num:=n+i;
write('nome');readln(nome);
writeln('insira a nota para a disciplina de..');
writeln('matematica');readln(d.mat);
writeln('portugues');readln(d.port);
writeln('ingles');readln(d.ing);
writeln('Fisico Quimica');readln(d.fq);
writeln('PSI');readln(d.psi);
writeln('Arquitectura de Computadores');readln(d.ac);
writeln('Area deIntegracao');readln(d.ai);
writeln('Redes de Computadores');readln(d.rc);
writeln('TIC');readln(d.tic);
writeln('Educacao Fisica');readln(d.ef);end;end;
inserir:=n+qa;
end;

procedure modificar(var alu:alunos;n:byte);
{alterar a nota de um aluno}
var nu:integer;yn:string;
begin
writeln('Modificacao das Notas');
writeln('Numero do Aluno?');readln(nu);
writeln('Tem a certeza que pretende eliminar este Aluno?(n.',num,')');
writeln('(y/n)');readln(yn);upcase(yn);
if yn:='Y' then begin
if nu<n then begin
writeln('Aluno nao Existente');end else
writeln(alunos[nu].nome);
writeln(alunos[nu].d);
writeln('insira a nota para a disciplina de..');
writeln('matematica');readln(d.mat);
writeln('portugues');readln(d.port);
writeln('ingles');readln(d.ing);
writeln('Fisico Quimica');readln(d.fq);
writeln('PSI');readln(d.psi);
writeln('Arquitectura de Computadores');readln(d.ac);
writeln('Area deIntegracao');readln(d.ai);
writeln('Redes de Computadores');readln(d.rc);
writeln('TIC');readln(d.tic);
writeln('Educacao Fisica');readln(d.ef);end else
Writeln(' Volte sempre');
end;

procedure eliminar(var alu:alunos);
{eliminar um aluno}
var nu:integer;yn:string;
begin
writeln('---Eliminar Aluno---');
writeln('Numero do Aluno a eliminar?');readln(nu);
writeln('Tem a certeza que deseja eliminar este Aluno?');
writeln('(y/n)');readln(yn);upcase(yn);
if yn='Y' then begin
alunos[nu].nome:='ELIMINADO';
with alunos[nu] do begin
{quando eliminado, as notas ficam a 0}
d.mat:=0;
d.port:=0;
d.ing:=0;
d.psi:=0;
d.ac:=0;
d.ai:=0;
d.rc:=0;
d.tic:=0;
d.ef:=0;end;end else
writeln('Fica para a proxima');end;
end;
function media_curso(var alu:alunos;n:byte):real;
{media do curso}
var cont:integer;
md,md1:real;
begin
cont:=0;
writeln('media do curso');;
for i:=1 to n do begin
if aluno[i].d <>0 then begin
{nao quero calcular os alunos eliminados, isto é, com notas de 0}
with aluno[i] do begin
with d do begin
md:=(mat+port+ing+fq+psi+ac+ai+rc+tic+ef)/10;
cont:=cont+1
md1:=md1+md;end;end;end;
md1:=md1/cont;
writeln('Media do curso e de: ',md1);
media_curso:=md1;end;

function media_aluno(var alu:alunos):real;
{calcular a media de um aluno escolhido pelo utilizador}
var md:real; nu:integer;
begin
writeln('media de um aluno');
writeln('insira o numero do aluno');readln(nu);
with aluno[nu] do begin
with d do begin
md:=(mat+port+ing+fq+psi+ac+ai+rc+tic+ef)/10;
writeln('A media do aluno e: ',md);end;
media_aluno:=md;end;

procedure mostrar_todos(alu:alunos;n:byte);
{listar todos os alunos}
var i:integer;
begin
wrriteln('Lista de todos os alunos');
for i:=1 to n do begin
with vect[i] do begin
writeln(num);
writeln(nome);
writeln('disciplinas');
with d do begin
writeln('Matematica ',mat);
writeln('Portugues ',port);
writeln('Ingles ',ing);
writeln('Fisico Quimica ',fq);
writeln('PSI ',psi);
writeln('Arquitectura de Computadores ',ac);
writeln('Area de Integracao ',ai);
writeln('Redes de Computadores ',rc);
writeln('TIC ',tic);
writeln('Educacao Fisica ',ef);
writeln;end;end;end;end;

function media_maluno(var alu:alunos;n:byte):real;
{media do melhor aluno}
var md,md1:real;
i:integer;
begin
writeln('Media do melhor Aluno');
md1:=0;
for i:=1 to n do begin
if aluno[i].d <>0 then begin
{nao quero calcular os alunos eliminados, isto é, com notas de 0}
with aluno[i] do begin
with d do begin
md:=(mat+port+ing+fq+psi+ac+ai+rc+tic+ef)/10;
if md<md1>mu do begin
with aluno[i] do begin
writeln(num);
writeln(nome);
writeln('disciplinas');
with d do begin
writeln('Matematica ',mat);
writeln('Portugues ',port);
writeln('Ingles ',ing);
writeln('Fisico Quimica ',fq);
writeln('PSI ',psi);
writeln('Arquitectura de Computadores ',ac);
writeln('Area de Integracao ',ai);
writeln('Redes de Computadores ',rc);
writeln('TIC ',tic);
writeln('Educacao Fisica ',ef);
writeln('media:',md);
writeln;end;end;end;end;end;end;

procedure mostrar_minf(var alu:alunos;n:byte);
{apresentar todos os alunos com uma media inferior a um valor introduzido pelo utilizador}
var i:integer;
md,mu:real;
begin
writeln('insira a media a compara');readln(mu);
writeln('Lista dos alunos com uma media superior a: ',mu);
for i:=1 to n do begin
with aluno[i] do begin
with d do begin
md:=(mat+port+ing+fq+psi+ac+ai+rc+tic+ef)/10;
if md<mu>=1) and (op<=11) do begin
case op of
1:begin
na:=inserir(va,na);
raadln;end;
2:begin
clrscr;
modificar(va,na);
readln;end;
3:begin
clrscr;
eliminar(va);
readln;end;
4:begin
clrscr;
md1:=media_curso(va,na):real;
readln;end;
5:begin
clrscr;
md:=media_aluno(va):real;
readln;end;
6:begin
clrscr;
mostrar_todos(va,na);
readln;end;
7:begin
clrscr;
md1:=media_maluno(va,na):real;
readln;end;
8:begin
clrscr;
mostrar_msup(va,na);
readln;end;
9:begin
clrscr;
mostrar_minf(va,na);
readln;end;end;
end.

Tag adicionada.
Título modificado.
lycosman
Go to the top of the page
 
+Quote Post
Moreira90
post May 5 2008, 07:07 PM
Post #2




Grupo: Membro
Posts: 35
Registado: 25-April 08
Membro nº: 25,559



vou ver se posso fazer alguma coiso por si

diga me so qual e o objectivo do trabalho???
Go to the top of the page
 
+Quote Post
sharkcmlm
post May 5 2008, 10:02 PM
Post #3




Grupo: Membro
Posts: 6
Registado: 12-November 06
Membro nº: 5,192



inserir os dados de um aluno e fazer as diversas opcoes..
Obrigado biggrin.gif

o programa ta mal ai.. e' assim:

program Modulo5;
uses alunos,crt;
var op,na:integer
begin
na:=0;
op:=menu;
clrscr;
while (op>=1) and (op<=11) do begin
case op of
1:begin
na:=inserir(va,na);
raadln;end;
2:begin
clrscr;
modificar(va,na);
readln;end;
3:begin
clrscr;
eliminar(va);
readln;end;
4:begin
clrscr;
md1:=media_curso(va,na):real;
readln;end;
5:begin
clrscr;
md:=media_aluno(va):real;
readln;end;
6:begin
clrscr;
mostrar_todos(va,na);
readln;end;
7:begin
clrscr;
md1:=media_maluno(va,na):real;
readln;end;
8:begin
clrscr;
mostrar_msup(va,na);
readln;end;
9:begin
clrscr;
mostrar_minf(va,na);
readln;end;end;
end.
Go to the top of the page
 
+Quote Post
arkangath
post May 19 2008, 02:44 PM
Post #4




Grupo: Membro
Posts: 183
Registado: 20-June 07
De: Dublin, Irlanda
Membro nº: 13,557



Ora bem, já lá vao dez anos desde que programei em pascal. Mas se eu me lembro correctamente, os parametros das funções em pascal nao sao por referencia,sao por cópia. Por isso:

function inserir(var alu:alunos;n:integer):integer;

recebe "alu" como uma COPIA do (e nao uma referencia para) array dos alunos. A função funciona,e adiciona o novo aluno ao array "alu", mas quando a função termina a copia desaparece, e o original, continua inalterado. É aqui que os pointers entram. Os pointers funcionam como referencias, ou seja, estaras a adicionar um aluno ao array inicial e nao a uma copia. Como funcionam pointers em pascal, nao sei, mas podes tentar usar variaveis globais (o que é uma solução feia e ineficiente).

Podes tentar fazer a funçao receber os dados do utilizador (dados relativos ao aluno) e retornar um aluno que subsequentemente será adicionado pelo programa geral. Uma função do estilo "criarNovoAluno() : aluno".

Por ultimo (nao sei sefunciona em Pascal), podes tentar receber um array (que será uma copia) alterar a copia e retornar essa copia (com o novo aluno). Depois no programa inicial fazes algo do género "arrayDeAlunos=adicionarAluno(arrayDeAlunos)".

Uma vez mais, já lá vao 10 anos que eu usei o Turbo Pascal 7.1 da Borland. Posso estar errado.


--------------------
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic

 

Publicidade
who's online
Versão Simples
Skin by IPB Customize
Horário: 5th December 2008 - 01:31 AM