Jump to content

Recommended Posts

Posted

arrays dinamicos?!?

Arrays sem número de items declarado... Define-se durante o programa, conforme necessário!

TP, que me lembre, não tinha disto, ou tinha?

"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.

Posted (edited)

arrays dinamicos?!?

http://ideone.com/cguNbM 😉

program dynarray;

type TIntArray = array of integer;

procedure WriteArray(arr : TIntArray);
var elem : integer;
begin
  for elem in arr do
     Write(elem,', ');
  WriteLn;
end;

var lista : TIntArray;
   i : integer;
begin
  SetLength(lista, 5);
  for i := Low(lista) to High(lista) do
     lista[i] := (i+1)*3;
  WriteArray(lista);

  SetLength(lista, 8);
  for i := Low(lista) to High(lista) do
     lista[i] := (i+1)*5;
  WriteArray(lista);

  SetLength(lista, 3);
  WriteArray(lista);
end.

Output:

3, 6, 9, 12, 15, 
5, 10, 15, 20, 25, 30, 35, 40, 
5, 10, 15, 

É, de certa forma, uma forma segura, simples mas não tão eficiente de ter uma lista ligada simples acessível por índice. Os arrays unidimensionais já não têm limite fixo.

Uma coisa fixe que se pode fazer é uma jagged array:

type TJaggedArray = array of array of TTipo;

Imaginem lidar com isto. Aprendi este conceito em Visual Basic .NET e com os arrays dinâmicos posso aplicá-lo em Pascal. 🙂

Edited by thoga31

Knowledge is free!

Posted

Não sabia desse conceito, daí as minhas interrogações.

Muito procurei em BP por arrays dinâmicos á uns anos atrás, folgo saber desta evolução!

Também notei um uso sintáxico diferente do FOR...

Posted (edited)

Também notei um uso sintáxico diferente do FOR...

@passarito, eu sei que tu amas o TP/BP, mas sinceramente podias fazer uma pequena actualização que em nada te obriga a abandoná-los de vez. Há tanta coisa nova e tão fixe no Pascal moderno que seria interessante aprender... 🙂

Há meia dúzia de versões atrás que o Free Pascal implementou uma nova estrutura de repetição, a terceira versão do for.

Tu antes precisavas de um iterador para percorrer determinados elementos, e sinceramente isso podia-se tornar algo chato, principalmente quando não precisavas do iterador para mais nada.

Mais, antes, que eu tenha conhecimento, não se podia percorrer os elementos de um set com uma estrutura de repetição.

Agora temos uma estrutura for que itera os elementos de um conjunto de elementos:

for elemento in conjunto do begin
  // Percorre cada "elemento" do "conjunto"
end;

conjunto pode ser do tipo string, set, array, TStringList, entre outros.

elemento deve ter o mesmo tipo de dados que um elemento individual do conjunto. Portanto, se

var conjunto1 : array of integer;
   conjunto2 : set of byte;
   conjunto3 : string;
   conjunto4 : TStringList;

então

var elemento1 : integer;
   elemento2 : byte;
   elemento3 : char;
   elemento4 : string;

Caso precises mesmo do iterador, então a estrutura for-in de nada serve. Por exemplo, como preencher um array dinâmico com o dobro do índice+1?

for i:=Low(lista) to High(lista) do
  lista[i] := (i+1)*2;

Caso precisemos apenas de escrever os elementos deste array, basta isto:

for elem in lista do
  write(elem, ', ');

😉

Edited by thoga31
  • Vote 1

Knowledge is free!

Posted

O Thoga tem razão...

Também eu era/sou fã do TP/BP, e de tudo o que a implementaçao da Borland contribuiu para que o Pascal deixasse de ser uma linguagem apenas para ensino, para se tornar na linguagem poderosa que é hoje.

Mas a verdade é que eles fizeram tão bem o trabalho de o dinamizar que mesmo quando pararam a inércia fez com que a evolução continuasse...

Hoje, com o FreePascal, o Pascal é uma linguagem que nada deve a nenhuma outra.

É verdade que há coisas do BP que não chegaram a ser implementadas no FreePascal, mas regra geral, são funcionalidades obsoletas ou que deixaram de ser suportadas pelos S. O.

E para que vem do BP, até o IDE é igual! 😉

"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.

Posted

É verdade que há coisas do BP que não chegaram a ser implementadas no FreePascal, mas regra geral, são funcionalidades obsoletas ou que deixaram de ser suportadas pelos S. O.

Lembro-me de termos debatido uma vez a unit graph, e o @passarito queria mostrar os objectos a mudar de cor bastando fazer um SetRGBPallete. No entanto, este tipo de funcionalidades existiam no tempo do DOS, mas os OS's modernos não permitem este nível de acesso ao hardware, pelo menos tão facilmente. O Windows ainda permite que a graph seja executada, mas no Linux temos de mudar umas quantas configurações do sistema para que possa ser executado. A minha solução passa por programar para Windows e correr o programa com o wine no Linux, e assim já tenho a graph a funcionar.

  • Vote 1

Knowledge is free!

Posted

E há outras... Por exemplo, a unit DOS não tem boa parte dos métodos implementados. Mas lá está, são aqueles que o SO não permite correr, logo não fazia sentido o pessoal do FPC perder tempo com isso. Criaram só "dummy's", para não dar erro, mas que não fazem nada.

Em BP eu tinha um código que costumava usar, que me permitia aceder à memória da praca gráfica, ficando com todos os caracteres presentes no ecrã à distância de um record (que incluia um campo char com o caracter lá escrito, e mais alguns com as caracteristicas, como cor de texto e de fundo).

Esse código no FPC não funciona... Mas se compilar em BP, e correr no Win8, também não funciona.

Por isso...

"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.

Posted

Tal e qual...

Acesso directo a um endereço físico de memória.

Coisas de uma linguagem fraca...

Tal como era possível aceder directamente a IRQ's e registos do CPU...

"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.

Posted

Boas,

antes de tudo, acho que alguem devia dividir isto, pois além de não ter haver com o assunto do tópico, é algo bastante importante para os utilizadores de Pascal.

@passarito, eu sei que tu amas o TP/BP, mas sinceramente podias fazer uma pequena actualização que em nada te obriga a abandoná-los de vez. Há tanta coisa nova e tão fixe no Pascal moderno que seria interessante aprender... 🙂

O Thoga tem razão...

Também eu era/sou fã do TP/BP, e de tudo o que a implementaçao da Borland contribuiu para que o Pascal deixasse de ser uma linguagem apenas para ensino, para se tornar na linguagem poderosa que é hoje.

Há aqui qualquer coisa que não bate certo.

A minha defesa do TP/BP sempre se deveu a que o editor de texto, interpretador, compilador e um help como deve de ser estarem completamente integrados. Foi através deste help e respectivos exemplos que evolui na programação!

Não tenho absolutamente nada contra a evolução da linguagem, antes pelo contrário.

Se não estou a par dessas evoluções, não é por ser contra, ou por o BP não as ter.

Penso que o problema se deve a hão haver um local onde se encontre um manual completo.

Estou-me a lembrar das dificuldades do @Rodrigojpf no Lazarus e na OOP

Epá, falta qualquer coisa para se conseguir dar o salto... mas o quê?

Posted

É possível, pelo menos no Lazarus, instalar os ficheiros de ajuda no IDE. (creio que no FPC também).

No fundo, é isso que falta nos requisitos que indicaste, aquando da instalação.

Também eu aprendi com os help files. Aliás, na altura, era o que tinhamos, não havia net, e se estivesse à espera de aprender na escola, não passava de calcular as áreas de sólidos.

Mas hoje em dia, com a net, o teu ponto de aprendizagem é muito mais amplo. Eu diria quase que o índice do teu help file é o Google.

Mas mais concretamente, o help online do FPC pode ser encontrado aqui: http://www.freepascal.org/docs.var

"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.

Posted

O Free Pascal Compiler instala a documentação se assim o quisermos. Já não me lembro como é o instalador do Windows, mas no Linux ele perguntar aquilo que queremos ou não instalar durante o processo de instalação, e a última pergunta é acerca da documentação. Ela também está disponível online, e apesar de não ser um tutorial todo XPTO, foi lá que aprendi imensas coisas, inclusive records variantes, as bases do Object Pascal e operator overloading (a presente edição da Revista tem um artigo acerca deste assunto para quem estiver curioso 😄 ).

Sim, talvez não haja aquela integração como existe no TP ou no BP, mas a documentação existe. Eu aprendi imenso aos bocados ("pica daqui, pica dali") e trabalhei para juntar tudo em uso diário na programação. Hoje só sei aquilo que sei de Object Pascal porque pesquisei imenso em muitos sítios, em especial no site do Free Pascal.

Knowledge is free!

Posted

Ela também está disponível online, e apesar de não ser um tutorial todo XPTO, foi lá que aprendi imensas coisas,

[...]

Sim, talvez não haja aquela integração como existe no TP ou no BP, mas a documentação existe. Eu aprendi imenso aos bocados ("pica daqui, pica dali") e trabalhei para juntar tudo em uso diário na programação. Hoje só sei aquilo que sei de Object Pascal porque pesquisei imenso em muitos sítios, em especial no site do Free Pascal.

Exatamente, digam o que disserem, não há nada como um bom manual!

Por outro lado, a integração é essencial, pois quando se está a desenvolvel algo quer-se uma luz logo ali na hora e não andar a googlar pela net! Isso será mais para problemas mais complexos.

Posted

Tem que se lhe diga, claro...

Como tudo o que vem da net, tem de ser filtrado.

Temos de dar especial atenção à fonte, e idealmente, usar as fontes oficiais (FPC/Embarcadero)

O conceito de pesquisa também muda. Não procuras o que faz um comando, procuras antes qual comando faz o que precisas.

Mas, limadas as arestas, e ultrapassados os defeitos, o potencial é muito maior. Muitas fontes, até interactivas, como aqui o fórum, e outros como ele, que podem ajudar a desenvolver uma solução em menos tempos do que antigamente conseguíamos.

É disto mesmo que estou a falar!

Disto, o que procuravas? Ou isto, o que não te serve? 😄

Exatamente, digam o que disserem, não há nada como um bom manual!

Por outro lado, a integração é essencial, pois quando se está a desenvolvel algo quer-se uma luz logo ali na hora e não andar a googlar pela net! Isso será mais para problemas mais complexos.

É relativo. Para teres uma ideia, no Delphi nem sequer instalo os help files, que também são opcionais hoje em dia. Torna-se mais rápido ir directo ao google.

Acho que também vai um bocado do hábito. Ao inicio fez-me confusão não ter o help, e poder carregar no F1 logo na hora.

Mas hoje em dia, não me faz diferença alguma.

Qualquer dia o sistema operativo vai trazer o atalho F1 ligado ao Google... (ou ao Bing, se a Microsoft insistir muito hehehe)

"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.

Posted

Qualquer dia o sistema operativo vai trazer o atalho F1 ligado ao Google... (ou ao Bing, se a Microsoft insistir muito hehehe)

No Linux temos o comando man que nos mostra a informação online formatada acerca de um determinado comando (regra geral de C). Aprende-se muita coisa lá 😉

Há 20 anos atrás, não havia nada como um bom manual. Hoje em dia, não há nada como um bom uso de Internet. Isto é uma visão pessoal.

Venho à net e vou à documentação do Free Pascal, para começar, tem vários recursos organizados de várias formas. Posso procurar por comando ou por funcionalidade que pretendo. Temos o índice do RTL, temos a Wiki, temos os manuais em HTML e em PDF, entre outros. No site do Free Pascal, recursos é o que não falta. Com tanta variedade, é à escolha do freguês.

Por outro lado, num manual não podemos procurar noutro sítio se não entendermos ali determinada coisa. Precisamos de ir ver outro manual. Ora, já lá vai o tempo em que dava uso ao cartão da biblioteca municipal, mas nesse tempo eu era um jovem sem Net em casa. Hoje em dia, se me der na "real gana", pego no próprio telemóvel e pesquiso algo que me lembre em qualquer lugar, dentro ou fora de casa.

Mais, como diz o @nunopicado, temos recursos interactivos. Eu aprendi imenso aqui no fórum. Foi cá que me conseguiram explicar apontadores, por exemplo, uma vez que nem na Net e muito menos no livro que tenho cá em casa me esclareciam devidamente acerca do assunto. Era tudo "tá-dáaa!" e pronto, está feito. Não sou o génio da lamparina, thank you.

A integração e muito boa, é certo, mas em termos de documentação sou mais flexível. E falo eu, pessoa que por acaso aprendeu as bases de Python só com a documentação que o IDLE traz consigo.

Knowledge is free!

Posted

É relativo. Para teres uma ideia, no Delphi nem sequer instalo os help files, que também são opcionais hoje em dia. Torna-se mais rápido ir directo ao google.

Não, não é relativo!

Repara, quando adquirias o DOS vinha com um manual com cerca de 200 a 300 paginas, já não me lembro bem, tudo muito bem documentado. O que era e não era necessario estava lá.

À medida que os Sistemas Operativos foram sendo mais complexos a documentação diminuiu.

Mais, aprendi a enviar dados codificados para as impressoras através dos manuais destas. Algo que nem era necessáriamente obrigatório, mas os manuais tinham lá os códigos de impressão, hoje em dia tens o quê?...o manual de instalação?

Mas isto passa-se em todos os produtos, não é só nos da informática. Quanto menos informação se tiver melhor, menos problemas as pessoas nos dão.

Informação relevante, paga-se, e muitas vezes será só para os profissionais da area em questão!

Aqui já estou a divagar um pouco, mas o principio é o mesmo.

Posted (edited)

Sim, esse ponto de vista está correcto. Cada vez mais a informação inclusa é informação obtusa.

Mas nesta área específica, temos a vantagem de existirem inúmeras fontes de informação, e não apenas as oficiais, que diga-se, embora não instalem de origem essa documentação mais completa, é possível ainda assim fazê-lo.

Quanto ao "é relativo", tem simplesmente a ver com o hábito de trabalho de cada um. Isso sim, é relativo.

O que há 20 anos me parecia impensável (um IDE sem help integrado), hoje em dia é uma opção que eu nem instalo.

O crescimento da internet permitiu-me mudar esse hábito, ainda que não lhe reconheça apenas méritos. Há defeitos também a lidar, e cabe-nos a nós filtrar a informação que lemos, por vezes testar aqui, e testar ali, até termos uma informação concreta.

Mas aqui já sou eu a divagar também... Porque uma coisa é pesquisar sobre um método de fazer isto ou aquilo, onde aparecem centemas ou milhares de resultados potencialmente diferentes, outra é quereres saber o que faz uma ou outra keyword, onde o help o compilador, integrado ou na net, te resolvem a dúvida.

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.

Posted

Posso dizer que esta conversa/discução sobre evolução, pontos de vista, formas de trabalhar, etc. sem extremismos e vou sublinhar sem extremismos

é de uma utilidade enorme.

Às vezes discute-se sobre usar ou não usar o goto, a forma de abordar um problema, a aplicação de um repeat, while ou outra coisa qualquer que tem a sua importancia, mas alguns assuntos que flutuam à volta da programação também o são.

  • Vote 1

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
×
×
  • 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.