Jump to content
leatavsan

Projeto Simples em Pascal - Ajuda em Ideias

Recommended Posts

leatavsan

Boa tarde,

Pretendo criar um programa em Free Pascal em que use vários tipos de variáveis, estruturas de repetição, etc.

No projeto pretendo ter variaveis do tipo string, char, integer, real.

Pretendo usar a estrutura de seleção case

Pretendo utilizar as estruturas de repetição: for, while e/ou repeat

Pretendo ainda utilizar arrays (unidimensionais e/ou bidimensionais)

Precisava que alguém me desse ideias para projeto. Não quero códigos, nem nada do género. Apenas queria ideias. Alguém me pode ajudar nisso?

Desde já obrigado

Share this post


Link to post
Share on other sites
thoga31

Para que áreas preferias programar? ...Gestão? Matemática?...

Edited by thoga31

Knowledge is free!

Share this post


Link to post
Share on other sites
leatavsan

Para que áreas preferias programar? ...Gestão? Matemática?...

De momento estou completamente aberto a sugestões.

O projeto que pretendo fazer não é para demorar 1 hora e pronto. Pretendo que tenha alguma complexidade dentro do que descrevi em cima. A extensão do programa é irrelevante neste momento.

Relativamente à área, visto que ainda não tenho um tema, poderá ser qualquer uma

Edited by leatavsan

Share this post


Link to post
Share on other sites
HappyHippyHippo

máquina calculadora gráfica

existem muitas, mas se é para aprender, diverte-te


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
leatavsan

máquina calculadora gráfica

existem muitas, mas se é para aprender, diverte-te

era uma boa ideia, mas ainda não aprendi a utilizar as livrarias disponíveis. a única que já aprendi foi a livraria crt, por isso pretendo uma ideia um pouco diferente, mas obrigado na mesma

Share this post


Link to post
Share on other sites
nunopicado

Para te dar ideias, precisamos saber um pouco mais sobre o que já aprendeste.

Por exemplo, destes, o que já aprendeste?

Arrays

Records

Ficheiros


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

Share this post


Link to post
Share on other sites
leatavsan

Para te dar ideias, precisamos saber um pouco mais sobre o que já aprendeste.

Por exemplo, destes, o que já aprendeste?

Arrays

Records

Ficheiros

Além de tudo o que referi no início sei utilizar funções e procedimentos.

Edited by leatavsan

Share this post


Link to post
Share on other sites
nunopicado

Arrays

Records

Ficheiros

E destes três nada?


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

Share this post


Link to post
Share on other sites
nunopicado

Nesse caso, e visto que é um projecto para fazer "com calma", eu sugeria-te o seguinte:

Fazer uma agenda de contactos.

Isto requer:

* Variáveis de vários tipos (nome, idade, etc)

* case (controle de setas (teclas), por exemplo)

* Vários tipos de loop (repeat para o menu, for ou while para percorrer a lista, etc)

* procedimentos e funções

* records (ainda que não os tenhas já aprendido, são muito fáceis, e é fácil aprenderes - além de mostrares ao professor que tens vontade de aprender mais)

É necessário ainda para este projecto uma de duas coisas: Arrays ou Ficheiros

Com Arrays, toda a estrutura da agenda pode funcionar, mas nada é gravado em disco, ou seja, muito interessante a nível teórico, nem tanto a nível prático.

Com ficheiros, fica tudo gravado em disco, e se o fizeres com atenção, é um programa que pode ser depois usado na prática.

Sei que também não deste ficheiros. Estes já são um pouco mais complexos do que os records, mas não são difíceis se quiseres aprender.

Nesta linha de ideias podes fazer também outras coisas, base de dados de filmes/jogos/livros, calendário de jogos desportivos, tabela de notas escolares, calendário de testes, etc.

No fundo, pensa em algo que te desse jeito usar em casa, e depois procura implementar isso.

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.

Share this post


Link to post
Share on other sites
leatavsan

Obrigado pela sugestão,

relativamente ao record não sei a estrutura dele... E sei perfeitamente que todo o programa ficaria melhor com um record, para não ter que voltar a introduzir tudo sempre que abro o programa...

Seria uma boa ideia é estou a ponderar fazer isso. Mas para seguir com isto para a frente seria bom saber fazer record dos dados introduzidos.

Pode me dar algum site com um tutorial ou algo do género sobre record? Só para ficar com umas luzes em relação a isso

Share this post


Link to post
Share on other sites
nunopicado

Obrigado pela sugestão,

relativamente ao record não sei a estrutura dele... E sei perfeitamente que todo o programa ficaria melhor com um record, para não ter que voltar a introduzir tudo sempre que abro o programa...

Seria uma boa ideia é estou a ponderar fazer isso. Mas para seguir com isto para a frente seria bom saber fazer record dos dados introduzidos.

Pode me dar algum site com um tutorial ou algo do género sobre record? Só para ficar com umas luzes em relação a isso

Tens aqui mesmo no forum um excelente tutorial sobre Pascal, em que aprofunda esses detalhes: http://www.portugal-a-programar.pt/files/file/6-tutorial-de-pascal/

Em jeito de resumo, um record é uma forma de agrupar várias variáveis de tipos diferentes sob um mesmo identificador, ou uma mesma variável, se preferires.

Por exemplo:

var
  Pessoa: Record                // A variável Pessoa é do tipo Record, e tem 4 campos: Nome, Idade, Salario e Sexo
            Nome    : String;
            Idade   : Integer;
            Salario : Real;
            Sexo    : Char;
          end;

begin
 Pessoa.Nome    := 'Nuno Picado';
 Pessoa.Idade   := 38;
 Pessoa.Salario := 100000; // Era bom
 Pessoa.Sexo    := 'M';

Para aceder a cada campo, usa-se o nome da variável do tipo Record (Pessoa), e o caracter '.' (ponto) a separar do nome do campo, conforme o exemplo.

Isto quer dizer que a variável Pessoa vai reunir num só identificador todos os dados dessa pessoa, o que é muito útil em programas que trabalhem (ou simulem) com uma base de dados.

Uma variável destas, só por si, não chega para fazeres uma agenda. Só guarda o nome de uma pessoa.

Mas se for usada em conjunto com os arrays, podes numa só variável ter toda a base de dados, e assim consegues percorrer todas as informações de todas as pessoas facilmente.

Claro que, melhor que o array, é usar ficheiros, que assim fica tudo guardadinho no disco (no tutorial também lá está como trabalhar com ficheiros de texto. Para este caso, ficheiros tipados, ou seja, ficheiros que guardam directamente os records, são a melhor opção. Se optares por isso, podemos depois explicar-te o funcionamento).

Mas já agora, mais uma coisa.

Dei-te o exemplo de como definir um record directamente na variável.

Mas é comum teres de usar a mesma definição em mais do que um local, e não fazia sentido estares sempre a declarar todos os campos do record, até porque te podias esquecer de algo ao alterar num lado, e depois falhar do outro.

O melhor para isto é criares um tipo de dados, conforme o exemplo:

type
  TPessoa = Record                // A variável Pessoa é do tipo Record, e tem 4 campos: Nome, Idade, Salario e Sexo
              Nome    : String;
              Idade   : Integer;
              Salario : Real;
              Sexo    : Char;
            end;

var
  Pessoa: TPessoa;

begin
 Pessoa.Nome    := 'Nuno Picado';
 Pessoa.Idade   := 38;
 Pessoa.Salario := 100000; // Era bom
 Pessoa.Sexo    := 'M';

Assim, em qualquer lado onde precisares declarar uma variável para usar a mesma estrutura record, basta dizer que é do tipo TPessoa, e fica tudo certo. ;)


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

Share this post


Link to post
Share on other sites
leatavsan

muito obrigado :) fiquei bastante esclarecido, daqui por algum tempo talvez virei aqui para esclarecer alguma duvida :)

type
  TPessoa = Record                // A variável Pessoa é do tipo Record, e tem 4 campos: Nome, Idade, Salario e Sexo
              Nome    : String;
              Idade   : Integer;
              Salario : Real;
              Sexo    : Char;
            end;

var
  Pessoa: TPessoa;

begin
 Pessoa.Nome    := 'Nuno Picado';
 Pessoa.Idade   := 38;
 Pessoa.Salario := 100000; // Era bom
 Pessoa.Sexo    := 'M';

Por exemplo, além dessas variáveis por exemplo, se eu queria adicionar a data de nascimento em que a data de nascimento seria um record que teria as variáveis dia, e ano do tipo integer e mês do tipo string.

É possível fazer este record dentro do record TPessoa?

Share this post


Link to post
Share on other sites
nunopicado

Sim, podes encadear sem problemas.

Podes declarar um record dentro de outro, ou podes, de preferência, criar um tipo para a idade e usar depois dentro do tipo TPessoa.

type
  TData = Record
            Ano: Integer;
            Mes: Integer;
            Dia: Integer;
          end;
  TPessoa = Record
              Nome       : String;
              Nascimento : TData;
              Salario    : Real;
              Sexo       : Char;
            end;
var
  Pessoa: TPessoa;

begin
 Pessoa.Nome           := 'Nuno Picado';
 Pessoa.Nascimento.Dia := 27;
 Pessoa.Nascimento.Mes := 7;
 Pessoa.Nascimento.Ano := 1977;
 Pessoa.Salario        := 100000; // Era bom
 Pessoa.Sexo           := 'M';

A título de curiosidade, se passarmos de Pascal para Object Pascal, podes até meter funções e procedimentos dentro de um record, como este:

type
  TData = Record
            Ano: Integer;
            Mes: Integer;
            Dia: Integer;
          end;
  TPessoa = Record
              Nome       : String;
              Nascimento : TData;
              Salario    : Real;
              Sexo       : Char;
              function Idade: Integer;
            end;
var
  Pessoa: TPessoa;

function TPessoa.Idade: Integer;
begin
    // Calcula a idade da pessoa
end;

begin
 Pessoa.Nome           := 'Nuno Picado';
 Pessoa.Nascimento.Dia := 27;
 Pessoa.Nascimento.Mes := 7;
 Pessoa.Nascimento.Ano := 1977;
 Pessoa.Salario        := 100000; // Era bom
 Pessoa.Sexo           := 'M';

 WriteLn ('Olá ',Pessoa.Nome,'. Tens ',Pessoa.Idade,' anos.');

Ao usar o Pessoa.Idade, a função é calculada e retorna imediatamente o seu valor como se fosse mais um campo do Record.

Mas isto é mais à frente, não tens de te preocupar já com 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.

Share this post


Link to post
Share on other sites
leatavsan

muito obrigado pela ajuda! Tenho esclarecido bastantes dúvidas consigo! :)

só uma questão: Free-Pascal é uma linguagem, Object Pascal é outro tipo de linguagem? É que nunca tinha ouvido falar...

Share this post


Link to post
Share on other sites
nunopicado

só uma questão: Free-Pascal é uma linguagem, Object Pascal é outro tipo de linguagem? É que nunca tinha ouvido falar...

FreePascal não é uma linguagem. :)

FreePascal é um compilador que suporta as linguagens Pascal e Object Pascal.

Object Pascal é uma derivação (ou evolução) da linguagem Pascal que implementa o paradigma de programação orientada a objectos, além do tradicional paradigma funcional encontrado no Pascal.

Foi desenvolvida pela Apple entre 1985 e 1986 para programação para Mac, e mais tarde, em 1989, passou a estar disponível no Turbo Pascal 5.5, em MS-DOS.

Hoje em dia, muitas das linguagens mais populares usam este paradigma, o que faz com que no que respeita ao Pascal, o Object Pascal seja o 'standard', suportado pelos principais compiladores, como o Delphi e o FreePascal.

Tudo o que aprenderes em Pascal, ser-te-á útil quando e se deres o passo para Object Pascal, pelo que não tenhas medo de estares a perder tempo - não estás.

Simplesmente, há mais possibilidades no Object Pascal, que a seu tempo poderás desfrutar.

Uma delas é exactamente o uso de procedimentos e funções dentro de um record. Ao fazeres isso, estás efectivamente a usar o objecto 'Pessoa', que tem propriedades (campos do record) e pode fazer acções (métodos do record, no caso, a função Idade.

À medida que a tua curiosidade te chame para esse lado, vais passando por cá que há sempre quem te tente ajudar a esclarecer dúvidas. :)

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.

Share this post


Link to post
Share on other sites
nunopicado

A estrutura Record, tão simples que é, e é na verdade a base de toda a extensão Object Pascal. Quem diria? :)

Em Object Pascal, os objectos todos que cries pertencem sempre a uma classe de objectos. E uma classe declara-se exactamente como um Record.

Logo, é algo bastante útil de aprenderes! :)

Alguma dúvida, vai dizendo.


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

Share this post


Link to post
Share on other sites
leatavsan

A estrutura Record, tão simples que é, e é na verdade a base de toda a extensão Object Pascal. Quem diria? :)

Em Object Pascal, os objectos todos que cries pertencem sempre a uma classe de objectos. E uma classe declara-se exactamente como um Record.

Logo, é algo bastante útil de aprenderes! :)

Alguma dúvida, vai dizendo.

Está bem, muito obrigado pela ajuda até agora!! Vai-me dar bastante jeito, agora tenho que pôr mãos à obra! :thumbsup:

Share this post


Link to post
Share on other sites
nunopicado

Força nisso... ;)


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

Share this post


Link to post
Share on other sites
joao_o grande

A estrutura Record, tão simples que é, e é na verdade a base de toda a extensão Object Pascal. Quem diria? :)

E o objet pascal baseia-se só em records? Ou tbm trabalha a parte grafica por exemplo?

Edited by joao_o grande

Share this post


Link to post
Share on other sites
leatavsan

type
  TData = Record
            Ano: Integer;
            Mes: Integer;
            Dia: Integer;
          end;
  TPessoa = Record
              Nome       : String;
              Nascimento : TData;
              Salario    : Real;
              Sexo       : Char;
            end;
var
  Pessoa: TPessoa;

só uma dúvida que me ocorreu enquanto programava:

pretendo criar um array unidimensional para o record TPessoa, como faço?

TPessoa = array [1..30] of record;

fica deste género?

Share this post


Link to post
Share on other sites
nunopicado

E o objet pascal baseia-se só em records? Ou tbm trabalha a parte grafica por exemplo?

São coisas diferentes.

O paradigma Object Oriented Programming baseia-se na criação de objectos como contentores de elementos relativos a uma mesma estrutura.

Para definires um qualquer objecto, tens de dizer que ele é de um determinado tipo (como qualquer variável), e caso o tipo que precisas ainda não exista, tens de o criar.

E para o criar, usa-se uma estrutura semelhante aos records, chamada Class.

Um exemplo básico:

type
  TPessoa = Class  // Em vez de Record, usa-se a keywork Class
  Private
    // Declaração dos campos, à imagem de um record
    FNome       : String;
    FNascimento : TDateTime;  // TDateTime é um tipo existente tanto em Delphi como em FreePascal, específico para guardar data e hora.
    FSalario    : Real;
    FSexo       : Char;       
    function GetIdade: Integer;
  Public
    property Nome       : String    read FNome       write FNome;
    property Nascimento : TDateTime read FNascimento write FNascimento;
    property Sexo       : Char      read FSexo       write FSexo;
    property Idade      : Integer   read GetIdade;
  end;

A estrutura de sintaxe é semelhante, e dava até para ser igual, mas geralmente as classes são declaradas assim. Os campos ficam protegidos, e as propriedades fazem de intermediarias. As keywords read e write aqui servem para definir o que cada propriedade afecta, e pode referir-se a um campo ou uma função. A falta do write faz com que a propriedade só dê para ir lá buscar dados, se faltasse o read significa que só se podia lá gravar um valor, e não ler o que lá estava.

Programação orientada a objectos é muito mais do que isto. Isto é só a estrutura base.

Nada isto muda a capacidade ou não de trabalhar com a parte gráfica.

Pascal consegue trabalhar com gráficos, Object Pascal também, nada muda aí. Quando muito, pelo menos para quem está habituado a OOP, torna-se mais fácil.

só uma dúvida que me ocorreu enquanto programava:

pretendo criar um array unidimensional para o record TPessoa, como faço?

Fazes um array como de qualquer outro tipo:

type
  TData = Record
            Ano: Integer;
            Mes: Integer;
            Dia: Integer;
          end;
  TPessoa = Record
              Nome       : String;
              Nascimento : TData;
              Salario    : Real;
              Sexo       : Char;
            end;
var
  Pessoas: Array [1..30] of TPessoa;

Ou, como eu prefiro usar:

type
  TData = Record
            Ano: Integer;
            Mes: Integer;
            Dia: Integer;
          end;
  TPessoa = Record
              Nome       : String;
              Nascimento : TData;
              Salario    : Real;
              Sexo       : Char;
            end;
 TPessoas = Array [1..30] of TPessoa; // Aqui são pessoaS, no plural

var
  Pessoas: TPessoas;

Assim já sabes que TPessoa é apenas um registo, TPessoas são vários registos do tipo TPessoa

;)

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.

Share this post


Link to post
Share on other sites
leatavsan

qual é a diferença entre esses dois exemplos? se é que existem diferenças

já experimentei ambos e quando faço o readln(pessoa.nome) começa a dar erro... antes de colocar o array não dava erro... como é que faço o readln?

Share this post


Link to post
Share on other sites
nunopicado

qual é a diferença entre esses dois exemplos? se é que existem diferenças

É uma questão de organização. Ao criares um array estás a criar um tipo. Ainda que o possas fazer directo no VAR, é boa prática fazê-lo no TYPE.

Além disso, em qualquer sitio que precises de declarar uma variável será só chamar o tipo.

já experimentei ambos e quando faço o readln(pessoa.nome) começa a dar erro... antes de colocar o array não dava erro... como é que faço o readln?

A partir do momento que é um array, tens de lhe indicar a posição para a qual estás a ler.

Por exemplo:

Pessoa[1].Nome := 'Nuno Picado';


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

Share this post


Link to post
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

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