Ainda não fazes parte da comunidade WebTuga!? Clica aqui e Regista-te já!

EntrarUtilizadorSenha
Ligar-me automaticamente em cada visita    
Pesquisar
Pesquisar
Membros
Membros
Registar
Registar
Ligar e ver Mensagens Privadas
Ligar e ver Mensagens Privadas

Fórum WebTuga

Ganhe Prémios Fantásticos - Passatempos.com.pt
Índice do Fórum WebTuga » Programação

Novo Tópico   Responder a Mensagem   

[Ajuda] Pascal
Ver mensagem anterior :: Ver mensagem seguinte  
Autor Mensagem
sharkcmlm
member
member



Registrado em: 12 Nov 2006

Especificação:

Mensagens: 6

MensagemColocada: Dom Mai 04, 2008 9:02 pm    Assunto: [Ajuda] Pascal Responder com Citação

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
Voltar ao topo
Moreira90
member
member


Idade: 19
Registrado em: 25 Abr 2008

Especificação:

Mensagens: 34

MensagemColocada: Seg Mai 05, 2008 7:07 pm    Assunto: Responder com Citação

vou ver se posso fazer alguma coiso por si

diga me so qual e o objectivo do trabalho???
Voltar ao topo
sharkcmlm
member
member



Registrado em: 12 Nov 2006

Especificação:

Mensagens: 6

MensagemColocada: Seg Mai 05, 2008 10:02 pm    Assunto: Responder com Citação

inserir os dados de um aluno e fazer as diversas opcoes..
Obrigado Very Happy

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.
Voltar ao topo
arkangath
Special user
Special user


Idade: 21
Registrado em: 20 Jun 2007

Especificação:

Mensagens: 183
Local/Origem: Dublin, Irlanda

MensagemColocada: Seg Mai 19, 2008 2:44 pm    Assunto: Responder com Citação

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.
Voltar ao topo
Mostrar os tópicos anteriores:   
Novo Tópico   Responder a Mensagem    Índice do Fórum WebTuga » Programação Todos os tempos são GMT
Página 1 de 1

 
Ir para:  
Neste fórum, você Não pode colocar mensagens novas
Não pode responder a mensagens
Não pode editar as suas mensagens
Não pode remover as suas mensagens
Você Não pode votar neste fórum

Artigos relacionados
 Tópicos   Respostas   Autor   Vistos   Última Mensagem 
Não há mensagens novas [Pedido] Avatar e Assig. mudar o nome 4 Biqu3 722 Qua Nov 15, 2006 12:58 pm
.arktikBOY Ver a última mensagem
Este tópico está Bloqueado. Não pode editar mensagens ou responder [2D] [|][wip] "projecto mala" (ainda sem nome) 12 Caneco 1626 Dom Nov 12, 2006 8:09 pm
RaPtOr Ver a última mensagem
Não há mensagens novas Rooney recupera site com o seu nome 2 radikal-rider 794 Sáb Out 14, 2006 12:58 pm
radikal-rider Ver a última mensagem
Não há mensagens novas Qual será o nome do sucessor do Leopard? 15 cenourinha 2086 Sáb Set 09, 2006 5:04 pm
lycosman Ver a última mensagem
Não há mensagens novas Nome Fácil 3 r1c4rd0100 743 Qui Set 07, 2006 1:19 am
tiaguh Ver a última mensagem



who's online
WebTuga Footer
WebTuga Footer Powered by phpBB © 2001, 2002 phpBB Group
iCGstation v1.0 Template By Ray © 2003, 2004 iOptional

WebTuga Footer