Ir ao conteúdo
  • Cadastre-se

Duvida pascal


doors.paulo

Posts recomendados

Bom pessoal, é o seguinte.

Tenho que fazer um trabalho em pascal em que existem duas bibliotecas externas, uma com as functions e uma com as procedures que chamam as functions.

Quando eu mando compilar a biblioteca com as functions, da tudo certo, compila OK o arquivo .TPU

Já o arquivo com as procedures, fica dando "identifier expected ".

O que DIABOS eu faço com isso???

XD

Bibli_01 (compila OK)


Unit bibli;

interface

uses crt;

Function Ex01F01 (N1, N2 : Real) : Real;
Function Ex02F01(num: integer): integer;
Function Ex03F01 (num : integer) : integer;
Procedure Ex04F01 (nome:string; sx:char; sal, idade:real);
Function Ex05F02 (nome: string; sexo: char): string;
Function Ex05F01 (nome: string; salario: real): string;






implementation

Function Ex01F01 (N1, N2 : Real) : Real;
Begin
If N1>N2 then
Ex01F01:=N1
else
Ex01F01:=N2;
end;



Function Ex02F01(num: integer): integer;
var cont: integer;

Begin

cont:= num;
repeat
cont:=cont-1;
num:= num*cont;
until(cont=1);
Ex02F01:=num;

End;




Function Ex03F01 (num : integer) : integer;
begin
if (num mod 2 = 0) then
Ex03F01:=0
else
Ex03F01:=1;
end;



Procedure Ex04F01 (nome:string; sx:char; sal, idade:real);

Begin
Writeln ('O nome é: ', nome);
Writeln ('O salário é: ', sal:2:0);
Writeln ('A idade é: ', idade:2:0);
Writeln ('O sexo é: ', sx);
If idade>21 then
Writeln ('A pessoa é maior de idade.')
else
Writeln('A pessoa é menor de idade.');

End;





Function Ex05F02 (nome: string; sexo: char): string;
begin
writeln(nome);
begin
if ((sexo = 'M') or (sexo = 'm')) then
Ex05F02:='masculino'
else
Ex05F02:='feminino';
end;
end;




Function Ex05F01 (nome: string; salario: real): string;
var
idade: integer;
sexo: char;
begin
writeln('Entre com a Idade: ');
readln(idade);
writeln('Entre com o sexo (M/F): ');
readln(sexo);
Ex05F01:=(Ex05F02(nome, sexo));
end;
end.

Conexao (aqui da o erro "identifier expected ").


unit conexao;

Interface

uses crt, Bibli_01;

Procedure Exercicio01 (N1, N2 : Real);
Procedure Exercicio02 (num, result: integer);
Procedure Exercicio03 (num, resultado : integer) ;
Procedure Exercicio04 (nome:string; sx:char; sal:real; idade,cont:integer );
Procedure Exercicio05 (nome, result: string; salario: real;) ;





Implementation

Procedure Exercicio01 (N1, N2 : Real) ;
begin

Writeln ('Entre com o primeiro valor: ');
Readln (N1);
Writeln ('Entre com o segundo valor: ');
Readln (N2);
Writeln ('O maior número é: ',Ex01F01 (N1, N2):0:2);

end;





Procedure Exercicio02 (num, result: integer);
Begin
Writeln('Digite o numero desejado: ');
readln(num);
result:=(Ex02F01(num));
writeln('O fatorial do numero ',num,' é: ',result,'.');
Writeln ('Fim do algoritmo.');
readkey;
End;





Procedure Exercicio03 (num, resultado : integer) ;
Begin

Writeln ('Entre com um número: ');
readln (num);
resultado := (Ex03F01 (num));
if (resultado=1) then
Writeln ('O número ', num, ' é impar.')
else
Writeln ('O número ', num, ' é par.');

End;





Procedure Exercicio04 (nome:string; sx:char; sal:real; idade,cont:integer );
Begin

Repeat
Writeln ('Entre com o nome: ');
Readln (nome);
Writeln ('Entre com o salário: ');
Readln (sal);
Writeln ('Entre com a idade: ');
Readln (idade);
Writeln ('Entre com o sexo: ');
Readln (sx);
Ex04F01(nome, sx, sal, idade);
cont:=cont+1;
Writeln(' ');
Until cont=3;
End;





Procedure Exercicio05 (nome, result: string; salario: real;) ;
Begin

writeln('Entre com o nome: ');
readln(nome);
writeln('Entre com o salário: ');
readln(salario);
result:=(Ex05F01(nome, salario));
writeln(result);
writeln ('Fim de algoritmo');
readkey;
End;


End.
 

Ai depois só vou colocar uma estrutura case e chamar as procedures.

Quem puder me ajudar, ficarei muito grato :)

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Bom pessoal, é o seguinte.

Tenho que fazer um trabalho em pascal em que existem duas bibliotecas externas, uma com as functions e uma com as procedures que chamam as functions.

Quando eu mando compilar a biblioteca com as functions, da tudo certo, compila OK o arquivo .TPU

Já o arquivo com as procedures, fica dando "identifier expected ".

O que DIABOS eu faço com isso???

XD

Bibli_01 (compila OK)


Unit bibli;

interface

uses crt;

Function Ex01F01 (N1, N2 : Real) : Real;
Function Ex02F01(num: integer): integer;
Function Ex03F01 (num : integer) : integer;
Procedure Ex04F01 (nome:string; sx:char; sal, idade:real);
Function Ex05F02 (nome: string; sexo: char): string;
Function Ex05F01 (nome: string; salario: real): string;






implementation

Function Ex01F01 (N1, N2 : Real) : Real;
Begin
If N1>N2 then
Ex01F01:=N1
else
Ex01F01:=N2;
end;



Function Ex02F01(num: integer): integer;
var cont: integer;

Begin

cont:= num;
repeat
cont:=cont-1;
num:= num*cont;
until(cont=1);
Ex02F01:=num;

End;




Function Ex03F01 (num : integer) : integer;
begin
if (num mod 2 = 0) then
Ex03F01:=0
else
Ex03F01:=1;
end;



Procedure Ex04F01 (nome:string; sx:char; sal, idade:real);

Begin
Writeln ('O nome é: ', nome);
Writeln ('O salário é: ', sal:2:0);
Writeln ('A idade é: ', idade:2:0);
Writeln ('O sexo é: ', sx);
If idade>21 then
Writeln ('A pessoa é maior de idade.')
else
Writeln('A pessoa é menor de idade.');

End;





Function Ex05F02 (nome: string; sexo: char): string;
begin
writeln(nome);
begin
if ((sexo = 'M') or (sexo = 'm')) then
Ex05F02:='masculino'
else
Ex05F02:='feminino';
end;
end;




Function Ex05F01 (nome: string; salario: real): string;
var
idade: integer;
sexo: char;
begin
writeln('Entre com a Idade: ');
readln(idade);
writeln('Entre com o sexo (M/F): ');
readln(sexo);
Ex05F01:=(Ex05F02(nome, sexo));
end;
end.

Conexao (aqui da o erro "identifier expected ").


unit conexao;

Interface

uses crt, Bibli_01;

Procedure Exercicio01 (N1, N2 : Real);
Procedure Exercicio02 (num, result: integer);
Procedure Exercicio03 (num, resultado : integer) ;
Procedure Exercicio04 (nome:string; sx:char; sal:real; idade,cont:integer );
Procedure Exercicio05 (nome, result: string; salario: real;) ;





Implementation

Procedure Exercicio01 (N1, N2 : Real) ;
begin

Writeln ('Entre com o primeiro valor: ');
Readln (N1);
Writeln ('Entre com o segundo valor: ');
Readln (N2);
Writeln ('O maior número é: ',Ex01F01 (N1, N2):0:2);

end;





Procedure Exercicio02 (num, result: integer);
Begin
Writeln('Digite o numero desejado: ');
readln(num);
result:=(Ex02F01(num));
writeln('O fatorial do numero ',num,' é: ',result,'.');
Writeln ('Fim do algoritmo.');
readkey;
End;





Procedure Exercicio03 (num, resultado : integer) ;
Begin

Writeln ('Entre com um número: ');
readln (num);
resultado := (Ex03F01 (num));
if (resultado=1) then
Writeln ('O número ', num, ' é impar.')
else
Writeln ('O número ', num, ' é par.');

End;





Procedure Exercicio04 (nome:string; sx:char; sal:real; idade,cont:integer );
Begin

Repeat
Writeln ('Entre com o nome: ');
Readln (nome);
Writeln ('Entre com o salário: ');
Readln (sal);
Writeln ('Entre com a idade: ');
Readln (idade);
Writeln ('Entre com o sexo: ');
Readln (sx);
Ex04F01(nome, sx, sal, idade);
cont:=cont+1;
Writeln(' ');
Until cont=3;
End;





Procedure Exercicio05 (nome, result: string; salario: real;) ;
Begin

writeln('Entre com o nome: ');
readln(nome);
writeln('Entre com o salário: ');
readln(salario);
result:=(Ex05F01(nome, salario));
writeln(result);
writeln ('Fim de algoritmo');
readkey;
End;


End.
 

Ai depois só vou colocar uma estrutura case e chamar as procedures.

Quem puder me ajudar, ficarei muito grato :)

Olá,

doors.paulo, dei uma olhada nos seus códigos... foram basicamente dois detalhes:

1) A unit chama-se "bibli_01", logo deveria ter no código "Unit bibli_01". (é regra: o nome deve ficar igual ao do arquivo)

2) E tem um ";" a mais nessa assinatura:

 Procedure Exercicio05 (nome, result: string;  salario: real;);

Depois desse "real" não tem ";"

***

Aqui não raparei no erro em si, mas "identifier expected" deve está relacionado a questão de não poder achar a unit, pois estava com "bibli" dentro do código, logo sendo diferente de "bibli_01".

Só frisando: o nome dentro do código deve ficar igual ao nome do arquivo ".pas", ou seja, o objeto que vai ser gerado, senho ".o", ".ppu", ".tpu" etc, deve preservar "o nome original".

Isso basicamente significa que não se pode renomear o objeto da unit, ex.: A CRT só vai funcionar se o código gerado estiver com o nome CRT.

PS: POR CURIOSIDADE..

Só para complementar, no caso a CRT também é uma unit como essa que você criou, mas o interessante é que na maioria dos compiladores ela já vem acoplada dentro de outro arquivo, ou seja, é como se existisse uma "unit mãe" que é pré-apontada, caso você declare alguma unit que tenha dentro dela, ela a combinará com o seu código, caso não ela tenta procurar na pasta onde foi definida a estar...

No Turbo Pascal por exemplo, se não me engano, a unit System é pré-garregada automaticamente, ou seja, é como se todo programa já tivesse declarado "uses System"... :). Futucando nesse TP a uns anos atrás, lembro que consegui mexer na lista dessas units, removendo alguma ou inserindo outra... Outra unit básica do Turbo Pascal é a "DOS".

Nos compiladores mais novos tem também a SysUtils (ou algo assim).

Abraços

Link para o comentário
Compartilhar em outros sites

  • 4 semanas depois...

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!