Jump to content

[Resolvido] Parâmetros


epolozero
 Share

Recommended Posts

Como se define um parâmetro como opcional, por exemplo:

  procedure fundo(cor:byte);//MUDA A COR DE FUNDO 

O que queria que acontecesse era ao chamar o procedimento sem argumentos(fundo()😉 a cor mudasse para a padrão, por exemplo 4(vermelho).

Link to comment
Share on other sites

Indicas-lhe o valor padrão, assim:

procedure fundo (cor:byte=4);

Nota que alguns compiladores mais "rosqueiros" não suportam isto!

Edited by nunopicado
  • Vote 1

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Não funciona no meu(freepascal) 😞

Qual versão?

O FreePascal actual suporta isso de raíz...

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Não é assim tão antiga...

Não me lembro se nessa já dava, mas acho que sim.

Ser em linux é indiferente neste caso.

Dá-te algum erro?

@pwseo: Testa lá isso, o faxobor!

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Fatal: Syntax error, ")" expected but "=" found

Já sei o que é.

Essa funcionalidade faz parte do Object Pascal. No IDE base do FreePascal, ele vem predefinido com o dialecto FreePascal, que tem desactivadas as extensões OOP.

Faz assim:

Vai a Options --> Compiler e em Compiler Mode escolhe a segunda opção: Object Pascal Extension On

Depois já dá! 😉

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Já sei o que é.

Essa funcionalidade faz parte do Object Pascal. No IDE base do FreePascal, ele vem predefinido com o dialecto FreePascal, que tem desactivadas as extensões OOP.

Faz assim:

Vai a Options --> Compiler e em Compiler Mode escolhe a segunda opção: Object Pascal Extension On

Depois já dá! 😉

Nao estou a conseguir alterar as definições do compilador, na ide do free pascal consigo, mas como eu uso o Geany(ide) tenho que alterar as configuraçoes.

Já estive a procura na internet e apareceu isto ( -Mobjfpc FPC mode with Object Pascal support) , mas nao estou a conseguir

FONTE: http://www.freepascal.org/docs-html/user/userap1.html

Edited by epolozero
Link to comment
Share on other sites

Sim, é essa opção, tens de a definir nas opções do FPC.

Se o IDE tiver onde adicionar parametros, podes por lá.

Se não tiver, experimenta editar o ficheiro fpc.cfg, na pasta do compilador, e adiciona lá.

Possivelmente, até basta tirar o # que lá está a comentar a linha.

Em alternativa, podes, no próprio código do programa meter o seguinte:

program xpto;

{$mode objfpc}  // mete esta linha logo no inicio do programa

.
.
.

Com este método, tens de por isto em todos os programas que usem aquela opção...

  • Vote 1

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

@nunopicado, estava a ler agora o tópico todo e estava a ver que não chegavas à compiler directive 😄

Não se usa, em Free Pascal, opções do IDE. Não considero, pessoalmente, uma boa prática. Além disso, isto não é o Delphi com um IDE vindo de outra galáxia.

Usa-se sempre código para que seja o compilador a tratar das coisas. Assim o código torna-se, aliás, muito mais portável. Uma boa implementação de Pascal deve ter implementado um número mínimo de compiler directives, e o modo de compilação faz parte da lista. 😉

Sempre que se pretende ir além do Pascal "clássico" (mas não Standard) entramos no âmbito do Object Pascal, e para tal deve-se usar a directiva {$mode objfpc}.

Não é má prática usar com regularidade esta directiva quando se programa em Free Pascal - o "bom Pascal" tem imensas coisas de Object Pascal 😛

Edited by thoga31

Knowledge is free!

Link to comment
Share on other sites

Sim, é essa opção, tens de a definir nas opções do FPC.

Se o IDE tiver onde adicionar parametros, podes por lá.

Se não tiver, experimenta editar o ficheiro fpc.cfg, na pasta do compilador, e adiciona lá.

Possivelmente, até basta tirar o # que lá está a comentar a linha.

Em alternativa, podes, no próprio código do programa meter o seguinte:

program xpto;

{$mode objfpc}  // mete esta linha logo no inicio do programa

.
.
.

Com este método, tens de por isto em todos os programas que usem aquela opção...

É isso mesmo, nem sei como agradecer,hehe 👍 muito obrigado

Link to comment
Share on other sites

@nunopicado, estava a ler agora o tópico todo e estava a ver que não chegavas à compiler directive 😄

Não se usa, em Free Pascal, opções do IDE. Não considero, pessoalmente, uma boa prática. Além disso, isto não é o Delphi com um IDE vindo de outra galáxia.

Usa-se sempre código para que seja o compilador a tratar das coisas. Assim o código torna-se, aliás, muito mais portável. Uma boa implementação de Pascal deve ter implementado um número mínimo de compiler directives, e o modo de compilação faz parte da lista. 😉

Chegar chegava, mas não é o que mais aprecio... 🙂

Em Delphi, claro, posso definir defaults por projecto. Aqui não é o caso, excepto no código.

Mas pessoalmente, coisas que uso sempre, ou quase, prefiro de longe meter nas definições gerais. Este é uma delas.

Actualmente, é impensável para mim não usar Object Pascal. 😄

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

O default do Free Pascal é o uso do Extended Pascal. Pessoalmente considero que um bom código Pascal é aquele que não se baseia em bolas de cristal. Um código teu funciona aí, mas alguém com definições diferentes pode apanhar problemas, e toca de os detectar e andar a alterar o código ou as definições do seu IDE/compilador - pode ser uma directiva ou um mar delas que faltam, fora o resto.

Portanto, eu aprecio imenso fazer códigos que garantidamente qualquer pessoa possa pegar fazendo o mínimo dos mínimos de alterações para que funcione - se possível, zero alterações. Daí usar sempre explicitamente compiler directives. Os bons compiladores reconhecem, e a portabilidade é garantida. A portabilidade torna-se tal que é possível implementar códigos "híbridos" que podem ser compilados em Windows e em Linux sem qualquer alteração.

Por exemplo, a minha Tabela Periódica feita em Pascal é "híbrida". Implementei em Windows e depois gerei o executável para Linux sem alterar uma linha de código As funcionalidades diferentes para os dois sistemas estam ambas implementadas no mesmo código. Acho que é simplesmente genial. Não são assim tantas as linguagens que fornecem esta margem de manobra, e se ela existe, uso-a explicitamente. 🙂

Edited by thoga31

Knowledge is free!

Link to comment
Share on other sites

Não é assim tão linear, Thoga, sabes disso.

A portabilidade que falas é entre plataformas. Quando dizes "Os bons compiladores reconhecem", basicamente, estás a falar de FreePascal apenas.

Muitas Compiler Directives são exclusivas desse compilador, pelo que, se o teu código for para outro compilador, que não o FreePascal, estás na mesma.

Aqui a vantagem é simplesmente entre instalações diferentes do mesmo compilador, e não entre compiladores diferentes.

Também não é facto que o default do FreePascal seja ObjFPC. Para fazer o teste há pouco, fiz o download do FPC "simples" (como sabes, uso o Lazarus como IDE do FPC), instalei, e criei um código básico, apenas com um procedimento com um parÂmetro com valor default.

Falhou, com o erro indicado pelo epolozero.

Alterei a opção de compilador no menu, e siga, está a trabalhar.

Dito isto, sem dúvida que o FreePascal tem um mérito importante na portabilidade entre plataformas. Não faz milagres, mas não anda longe, a sua capacidade de trabalhar em multi-plataforma com uma mesma code-base.

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Uma nota: tu compilaste o programa com o Free Pascal usando definições no IDE dele. Eu, sem usar essas definições, consigo compilar usando o mesmo compilador e a mesma versão?

Por alguma razão eu aviso nos meus artigos para a Revista qual o compilador e qual a versão onde testei os meus códigos. Apesar de ser altamente portável entre compiladores (tendo as suas limitações), há que advertir desse facto. Portanto, para quem usa Free Pascal, pode usar o código sem ter de seguir uma lista de instruções "Configure o seu FPC".

Eu uso as ferramentas quanto mais não seja para compatibilidade dentro do próprio FPC. E pessoalmente não me aventuro muito por utilidades demasiado FPC-only, pelo que uso à vontade as compiler directives - todas as que uso vais encontrar em quase todos os bons compiladores. 😉

Edited by thoga31

Knowledge is free!

Link to comment
Share on other sites

Tirando a última frase, concordo... Ainda que não o faça geralmente, o teu método é mais portátil, logo que o compilador seja FPC.

Na última frase é que não estás a ver bem a coisa...

A própria Compiler Directive que aqui se referiu para o problema dos defaults é exclusiva do FPC. E usas em "todos" os teus programas, ou perto disso, estou errado?

Creio que ambos concordamos que o Delphi é um excelente compilador Pascal, OOP, Delphi. Mas se pegar num dos teus programas, não irá correr sem ajustes.

Mas se o tivesses configurado directamente no compilador, já estaria mais perto de funcionar.

Por isso é que digo, não uses a expressão "bons compiladores" para este caso, porque embora hajam algumas partilhadas entre compiladores, as compiler directives são referentes ao... compiler.

Usa antes a expressão "FPC"... 😄 porque é só mesmo aí que dá vantagem (no caso concreto).

Edited by nunopicado

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

{$H+}, {$I+}, etc. O Delphi não tem?

Tem... Mas não era dessa que estávamos a falar, pois não? 🙂

Essas fazem parte do "standard" do Pascal, pelo que "todos" os compiladores as devem implementar. Mas muitas outras, como o caso da {$M objfpc} não existe.

E vice-versa, claro, tanto quanto sei, o FPC não tem a {$APPTYPE CONSOLE}

Como nota de rodapé, as "standard" não tenho reserva alguma em usar.

Edited by nunopicado

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Tem... Mas não era dessa que estávamos a falar, pois não? 🙂

Eu estava a falar no geral e nas mais comuns que vêm desde os primórdios dos tempos pascalianos. Eu referi a do modo "objfpc" na sequência do problema do tópico, mas a partir daí falei no geral.

Knowledge is free!

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.