Logo Hardware.com.br
Danielcpp
Danielcpp Novo Membro Registrado
5 Mensagens 0 Curtidas

Pascal - Function Com Passagem de Parametro

#1 Por Danielcpp 08/04/2010 - 22:44
Ola Meu Nome é Daniel Marcos,estou cursando o ensino médio tecnico de informatica, e meu professor apareceu com um problema simples que eu nao vi em lugar nenhum funcionando e ele deu errado na minha prova mesmo eu dizendo a ele que eu compilei o programa assim e nao funcionava, bom vou mostrar a condificaçao é bem simples!.

a) Uma Sub Rotina que receba os dados dos funcionarios;
b) Uma Sub Rotina que calculase 7% de desconto e 30 reais de bonificaçao
pra calcular o salario liquido.

ps*o salario inicial é o bruto

[CODE=rich]program reg_sub;
uses crt;
type reg=record
cod:integer;
setor:string[20];
salario:real;
end;
var
i:integer;
empregado:array[1..100] of reg;
salarioliq:real;


procedure entrada;
begin
for i:= 1 to 100 do
begin
writeln('Digite O Codigo Do Funcionario ',i,'.');
readln(empregado[i].cod);
writeln('Digite O Setor Do Funcionario ',empregado[i].cod,'.');
readln(empregado[i].setor);
writeln('Digite O Salario Do Funcionario ',empregado[i].cod,'.');
readln(empregado[i].salario);
end;
end;

function cal(salario:real):real;
var
rec:real;
begin
rec:=salario*0.07;
cal:=salario-rec+30;
end;

begin
clrscr;
entrada;
for i:= 1 to 100 do
begin
salarioliq:=cal(empregado[i].salario);
writeln('O Salario liquido Do Funcionario ',empregado[i].cod{i},'e de ',salarioliq,'.');
end;
end.[/CODE]

Bom O problema esta na Function, essa codificaçao a cima é a que ele deu errado na prova que esta funcional e correta pelomenos ao meu ver, bom ele disse que na function a passagem de parametro tinha que ser assim

[CODE=rich]function "cal(empregado[i].salario:real):real;"
var
rec:real;
begin
rec:=salario*0.07;
cal:=salario-rec+30;
end;[/CODE]


e o compilador intende aquela passagem de parametro ali como duas variaveis eu teria que declarar o empregado como registro. assim.
[CODE=rich]function cal(empregado:reg;salario:real):real;[/CODE]

bom mesmo jeito o programa acima que eu fiz esta funcional que realizando
a terefa que era pedida no exercicio


resumindo qeria saber se realmente eu estou completamente enganado ou ele nao tem a menor capacidade de me dar aula de programaçao!,

lembrando a eu só consegui usar empregado[i].salario no programa principal na hora de receber a function para ela rodar...

[CODE=rich]begin
clrscr;
entrada;
for i:= 1 to 100 do
begin
salarioliq:=cal(empregado[i].salario);
writeln('O Salario liquido Do Funcionario ',empregado[i].cod{i},'e de ',salarioliq,'.');
end;[/CODE]
TerraSkilll
TerraSkilll Zumbi Moderador
4K Mensagens 1.2K Curtidas
#2 Por TerraSkilll
09/04/2010 - 09:25
Danielcpp
Pergunta: seu professor passou o programa pronto na prova ou depois dela?
Pela sintaxe dele

[code=rich]function cal(empregado.salario:real):real;
var
rec:real;
begin
rec:=salario*0.07;
cal:=salario-rec+30;
end;[/code]acho que ele quis passar um registro específico para a função, por isso adicionou o [i] em empregado. Isso não funciona em Pascal, pois o compilador não sabe o que é o i . Não creio que ele seja [I]incapaz de dar aula
, pois às vezes é um erro somente. E mesmo que ele repetisse o erro (ou outros), poderia ser somente o caso de ele não conhecer tão bem a linguagem (acontece muito: o cara manja de C mas apanha em qualquer outra linguagem). Não dá pra crucificar o cara só por isso.

Mais uma coisa: se essa função é só pra exibir o salário líquido, poderia sem simplificada:

[code=rich]function cal(salario:real):real;
begin
cal := salario-(salario*0.07)+30;
end;[/code]E a chamada da função também:
[code=rich]
begin
clrscr;
entrada;
for i:= 1 to 100 do
begin
salarioliq:=cal(empregado.salario);
writeln('O Salario liquido Do Funcionario ',empregado[i].cod{i},'e de ',[I]cal(empregado.salario)
,'.');
end;
end.
[/code]
Contribua para um fórum melhor: pense antes de postar.
"It isn't a contest. Just enjoy the ride." -> Seth Vidal
Hardware.com.br no Youtube!
Danielcpp
Danielcpp Novo Membro Registrado
5 Mensagens 0 Curtidas
#3 Por Danielcpp
09/04/2010 - 15:51
valeu Pela AJuda mais a grande questao é a function

na hora que ele corregiu minha prova, a minha function estava assim

[code=rich] function cal(salario:real)[/code][code=rich]:real;
var
rec:real;
begin
rec:=salario*0.07;
cal:=salario-rec+30;
end;[/code]ele falou que estava errado pois eu teria que que colocar empregado[i].salario assim

[code=rich]function cal(empregado[i].salario:real):real;
var
rec:real;
begin
rec:=salario*0.07;
cal:=salario-rec+30;
end;[/code]
EU disse a ele que o pascal nao iria reconhecer o "i" e iria pedir para declarar o parametro empregados como se fosse outra variavel qualquer , e como sempre disse que ele era o dono da verdade e que meu compilador estava maluco, me deixando sem chances de argumentar com ele. isso é o que mais me deixa indignado!!!

A nota ja foi lançada mesmo, a unica coisa que eu queria era ter a chance de provar pra ele que essa ideia dele esta errada, nao quero ser melhor que ninguem só quero o que é meu.

enquanto o lance do cara ser bom em C, +D eu estudo bastante C++, eu tenho alguns livros e estudo muito, principalmente a parte de densenvolvimento de jogos com Direct X e a Windows API, esse mesmo professor da aula de C para a outra turma, olhei o caderno de um amigo o cara simplesmente ensina uma coisa super basica de C e errada... mas isso nao vem ao caso... só me ajuda, ele ja vem me perseguindo a um tempo!
screenblack
screenblack Super Participante Registrado
360 Mensagens 18 Curtidas
#4 Por screenblack
09/04/2010 - 16:02
Ao meu ver, a função é do tipo bem simples. recebe apenas um valor, processa e retorna o resultado.
Sem motivo algum de passar o array apontando para o campo.
Concordo com vocês, o "[i]" na assinatura da função não teria como ser interpretado, até porque nesse momento não existe um valor pra 'i', pois ficou no escopo anterior.

Danielcpp, concordo com você em relação a essa implementação.
"Se BEBER, não compile o KERNEL. Se compilar o KERNEL, não BEBA." By: A.A.
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal