Jump to content

[Resolvido] Ideias


epolozero
 Share

Recommended Posts

Alguém me pode dar ideias para este programa?

https://drive.google.com/file/d/0B7acBEJ7Vr8NcUh1dkdjOUtQN1U/edit?usp=sharing


Program programa;
uses crt;
var op,op1,i,aux,colortext,colorback,h,m,s:integer;


procedure menu_(x,y,tamanho,cor_atual:integer);
var i,a:integer;
begin
textcolor(4);
gotoxy(x,y);
for i:=1 to tamanho do
       write('#');


for i:=1 to (tamanho-22) do
begin
       gotoxy(x,y+i);
       write('#');
       gotoxy(x+tamanho-1,y+i);
       writeln('#');
end;
gotoxy(x,tamanho+1-22);
for i:=1 to tamanho do
       write('#');

textcolor(cor_atual)

end;

       Procedure menu(op,x,y,cor_atual:integer);                       //op-> 0=menu principal     1=menu de funçoes
       begin
                                                                       //procedimento que escreve menu no ecra
               case op of
                       0:begin
                               menu_(20,1,31,cor_atual);
                               gotoxy(x+8,y);
                               writeln('---MENU---');
                               gotoxy(x,y+2);
                               writeln('1- Opções de Visualização');
                               gotoxy(x,y+3);
                               writeln('2- Temporizador');
                               gotoxy(x,y+4);
                               writeln('3- Cronómetro');
                               gotoxy(x,y+5);
                               writeln('0- Sair');

                               writeln;
                       end;

                       1:begin
                               menu_(20,1,31,cor_atual);
                               gotoxy(x+8,y);
                               writeln('---MENU---');
                               gotoxy(x,y+2);
                               writeln('1- Cor de texto');
                               gotoxy(x,y+3);
                               writeln('2- Cor de fundo');
                               gotoxy(x,y+4);
                               writeln('3- Efeitos de cores');
                               gotoxy(x,y+5);
                               writeln('0- Anterior');
                               writeln;
                       end;
               end;


       end;

       //PROCEDIMENTOS QUE ALTERAM A COR //
{
0->Preto
1->Azul
2->Verde
3->Azul-marinho
4->Vermelho
5->Laranja
6->Marrom
7->Cinza-claro
8->Cinza-escuro}

Procedure cod_cores;
begin
       writeln('-------------------Código de Cores-------------------');
       writeln('0->Preto');
       writeln('1->Azul');
       writeln('2->Verde');
       writeln('3->Azul-marinho');
       writeln('4->Vermelho');
       writeln('5->Laranja');
       writeln('6->Marrom ');
       writeln('7->Cinza-claro ');
       writeln('8->Cinza-escuro');

end;


Procedure cor_fundo(var cor:integer);
var i:integer;
begin

       for i:=1 to 1990 do
       begin
       textbackground(cor);
       write(' ');
       end;
end;

//FIM DOS PROCEDIMENTOS// 

Procedure temporizador(horas,minutos,segundos:integer);
var h,m,s:integer;ini,ent:boolean;
begin
ini:=false;
ent:=false;
writeln('Para parar pressione qualquer tecla');
for h:=horas downto 0 do
       begin
               if (minutos<59) and (not ent) then
               begin
               ent:=true;
                       for m:=minutos downto 0 do
                               begin
                                       if (segundos<59) and (not ini) then
                                               begin
                                                       ini:=true;
                                                       for s:=segundos downto 0 do
                                                               begin
                                                               write(h,':',m,':',s);
                                                                       delay(1000);
                                                                       clrscr;
                                                                       writeln('Para parar pressione qualquer tecla');
                                                                       if keypressed then
                                                                       exit;


                                                               end;
                                               end
                                                       else
                                                       begin
                                                               for s:=59 downto 0 do
                                                               begin

                                                                       write(h,':',m,':',s);
                                                                       delay(1000);
                                                                       clrscr;
                                                                       writeln('Para parar pressione qualquer tecla');
                                                                       if keypressed then
                                                                       exit;

                                                               end;


                                                       end;

                               end;

               end
                       else

                       begin

                       for m:=59 downto 0 do
                               begin
                               ent:=true;
                                       if (segundos<59) and (not ini) then
                                               begin
                                                       ini:=true;
                                                       for s:=segundos downto 0 do
                                                               begin
                                                                       write(h,':',m,':',s);
                                                                       delay(1000);
                                                                       clrscr;
                                                                       writeln('Para parar pressione qualquer tecla');
                                                                       if keypressed then
                                                                       exit;

                                                               end;
                                               end
                                                       else
                                                       begin
                                                               for s:=59 downto 0 do
                                                               begin
                                                                       write(h,':',m,':',s);
                                                                       delay(1000);
                                                                       clrscr;
                                                                       writeln('Para parar pressione qualquer tecla');
                                                                       if keypressed then
                                                                       exit;
                                                               end;

                       end;
                       end;
                       end;

       end;

end;

Procedure cronometro;
var h,m,s:integer;
begin
writeln('Para parar pressione qualquer tecla');
for h:=0 to 24 do
       for m:=0 to 59 do
               for s:=0 to 59 do
               begin
                       writeln(h,':',m,':',s);
                       delay(1000);
                       clrscr;
                       writeln('Para parar pressione qualquer tecla');
                       if keypressed then
                       exit;
               end;
end;


Procedure muda_cores;
var tipo:integer;
begin

               while not keypressed do
               begin
               randomize;
                       tipo:=random(3)+1;
                       textbackground(random(8)+1);

                               case tipo of

                                       1:
                                       for i:=1 to 4 do
                                               begin
                                               clrscr;
                                               textbackground(random(8)+1);
                                               delay(70);
                                               end;


                                       2:
                                       for i:=1 to 700 do
                                               begin
                                               write(' ');
                                               textbackground(random(8)+1);
                                               delay(3);
                                               end;

                                       3:
                                                       for i:=1 to  700 do
                                               begin
                                               write(' ');
                                               delay(3);
                                               end;
                               end;

               END;
end;

                               //PROGRAMA PRINCIPAL//

begin
       gotoxy(1,1);
       colortext:=7;
       colorback:=1;

       repeat
       cor_fundo(colorback);
       textcolor(colortext);  
       menu(0,23,2,colortext);
       gotoxy(23,9);
       write('Digite a opção-> ');
       read(op);
               case op of

                       1:begin
                               Repeat
                                       clrscr;
                                       menu(1,23,2,colortext);
                                       gotoxy(23,9);
                                       write('Digite a opção-> ');
                                       read(op1);
                                       case op1 of

                                               1:begin
                                                       clrscr;
                                                       cod_cores;
                                                       writeln;
                                                       writeln('Insira o valor da cor a alterar-> ');
                                                       readln(colortext);
                                                       textcolor(colortext);

                                               end;

                                               2:begin
                                                       clrscr;
                                                       cod_cores;
                                                       writeln;
                                                       writeln('Insira o valor da cor a alterar-> ');
                                                       read(colorback);
                                                       cor_fundo(colorback);
                                                       gotoxy(1,1);

                                               end;
                                       3:begin
                                               clrscr;
                                               muda_cores;
                                               textbackground(colorback);
                                       end;

                                       end;

                               Until op1=0;
                       end;

                       2:begin
                               writeln('Insira as horas: ');
                               readln(h);
                               writeln('Insira os minutos: ');
                               readln(m);
                               writeln('Insira os segundos: ');
                               readln(s);
                               clrscr;
                               temporizador(h,m,s);
                       end;

                       3:      begin
                               clrscr;
                               cronometro;
                               writeln;
                               writeln('Para parar pressione qualquer tecla');
                       end;

               end;

               clrscr;

       until op=0;

end.
Link to comment
Share on other sites

A melhor ideia é seres mais específico...

Ninguém com um mínimo de noção de segurança informática vai transferir um executável de fonte desconhecida sem um mínimo de informação...

"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

tens razão, nem pensei nisso.

http://pastebin.com/UW7jhasx

Isto não é ser mais específico. Pessoalmente não tenho tempo para ler dezenas ou centenas de linhas de código para adivinhar o que ele faz.

Diz-nos do que trata o teu programa e que ideias pretendes. Eu posso-te dar muitas ideias, tendo por base a não-informação. Por exemplo: desenha corações multicolor, faz fogo de artifício cronometrado, mete o programa a dizer umas mensagens obscenas... É este tipo de ideias que procuras? Não creio. 😉

Edited by thoga31

Knowledge is free!

Link to comment
Share on other sites

Isto não é ser mais específico. Pessoalmente não tenho tempo para ler dezenas ou centenas de linhas de código para adivinhar o que ele faz.

Diz-nos do que trata o teu programa e que ideias pretendes. Eu posso-te dar muitas ideias, tendo por base a não-informação. Por exemplo: desenha corações multicolor, faz fogo de artifício cronometrado, mete o programa a dizer umas mensagens obscenas... É este tipo de ideias que procuras? Não creio. 😉

Este programa é um repositório de programas, o que eu queria era colocar todos os programas em um só.

Por exemplo colocar uma categoria de jogos , funções, etc..

O objetivo para além de aprender,era no fim disponibilizar o código, para tirarem ideias, por exemplo.

O que eu estava a pedir é que dessem ideias para novos programas,etc.

Link to comment
Share on other sites

Assim já faz sentido (a pergunta), mas vou dar-te uma ideia mais abrangente do que apenas novos programas...

Se a tua ideia é aprender e ao mesmo tempo disponibilizar código, para outros aprenderem, não metas tudo num programa, que servirá apenas para... ninguém ver!

Atenção, não estou a dizer que o código está bem ou mal, mas como disse o Thoga, o tempo é pouco para estar a correr todo o código de um programa a analisar o que lá está.

A minha sugestão:

Em vez de um único programa, faz uma suite de units.

Basicamente, cada um desses "mini-programas" que tens no teu, passa a ser uma unit. Eventualmente, se houverem procedimentos relacionados uns com os outros, podes por na mesma unit mais do que um.

Além de ser melhor a nível de organização, porque está tudo dividido por "categoria", quando tu proprio precisares usar algum desse código, em vez de andares à procura, para depois copiar e colar num novo programa, basta-te adicionar essa unit À secção Uses do novo programa. Tudo estará lá pronto a usar.

Claro que, para fazeres isto como deve ser, não podes pensar sequer em variáveis globais... Cada procedimento ou função tem de ser estanque, e usar apenas variáveis próprias, ou parâmetros.

Não reparei se já fazes isto, mas se não estiveres a fazer, é mais uma coisa excelente para aprender! 😉

  • 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

Assim já faz sentido (a pergunta), mas vou dar-te uma ideia mais abrangente do que apenas novos programas...

Se a tua ideia é aprender e ao mesmo tempo disponibilizar código, para outros aprenderem, não metas tudo num programa, que servirá apenas para... ninguém ver!

Atenção, não estou a dizer que o código está bem ou mal, mas como disse o Thoga, o tempo é pouco para estar a correr todo o código de um programa a analisar o que lá está.

A minha sugestão:

Em vez de um único programa, faz uma suite de units.

Basicamente, cada um desses "mini-programas" que tens no teu, passa a ser uma unit. Eventualmente, se houverem procedimentos relacionados uns com os outros, podes por na mesma unit mais do que um.

Além de ser melhor a nível de organização, porque está tudo dividido por "categoria", quando tu proprio precisares usar algum desse código, em vez de andares à procura, para depois copiar e colar num novo programa, basta-te adicionar essa unit À secção Uses do novo programa. Tudo estará lá pronto a usar.

Claro que, para fazeres isto como deve ser, não podes pensar sequer em variáveis globais... Cada procedimento ou função tem de ser estanque, e usar apenas variáveis próprias, ou parâmetros.

Não reparei se já fazes isto, mas se não estiveres a fazer, é mais uma coisa excelente para aprender! 😉

Obrigado pela sugestão, eu tinha pensado nisso mas ainda não sei muito bem como se criam, ou melhor ainda tenho alguma duvidas.

Link to comment
Share on other sites

Obrigado pela sugestão, eu tinha pensado nisso mas ainda não sei muito bem como se criam, ou melhor ainda tenho alguma duvidas.

E esse é o melhor combustível para aprender...

Para criares uma unit, na sua forma mais básica, deves seguir a seguinte estrutura:

unit nome_da_tua_unidade;

interface     // zona de declarações - é obrigatório meter zona de interface, basta adicionar esta palavra logo depois do nome da unit.

uses          // Adicionas aqui uma secção uses caso precises de usar outras units. Esta secção é opcional, metes apenas se precisares
  SysUtils;  // (lista das várias units que precises usar aqui)


// Declaração dos cabeçalhos de procedimentos e funções
Procedure Nome_do_teu_procedimento1;  // Na zona de declarações, metes apenas o cabeçalho do procedimento
Procedure Nome_do_teu_procedimento2(xpto:String);


implementation  // zona de implementações - é aqui que vais meter os teus procedimentos e funções que declaraste em cima

Procedure Nome_do_teu_procedimento1;
begin
  // Faz qualquer coisa...
end;

Procedure Nome_do_teu_procedimento2(xpto:String);
begin
  // Faz outra coisa qualquer...
end;

end.

E pronto, é isso! 😉

  • 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

Para criares uma unit, na sua forma mais básica, deves seguir a seguinte estrutura:

unit nome_da_tua_unidade;

interface	 // zona de declarações - é obrigatório meter zona de interface, basta adicionar esta palavra logo depois do nome da unit.

uses		  // Adicionas aqui uma secção uses caso precises de usar outras units. Esta secção é opcional, metes apenas se precisares
  SysUtils;  // (lista das várias units que precises usar aqui)


// Declaração dos cabeçalhos de procedimentos e funções
Procedure Nome_do_teu_procedimento1;  // Na zona de declarações, metes apenas o cabeçalho do procedimento
Procedure Nome_do_teu_procedimento2(xpto:String);


implementation  // zona de implementações - é aqui que vais meter os teus procedimentos e funções que declaraste em cima

Procedure Nome_do_teu_procedimento1;
begin
  // Faz qualquer coisa...
end;

Procedure Nome_do_teu_procedimento2(xpto:String);
begin
  // Faz outra coisa qualquer...
end;

end.

Ei, muito obrigado!! 😉

Só tenho uma dúvida, qual é a diferença de meter as uses depois da interface ou dentro da implementarion? Quer dizer que se chamar a minha unit em um programa(" uses nome_da_tua_unidade") já nao preciso de chamar a unit que ja chamei dentro da minha unit( SysUtils)? Sei que esta um pouco confusa a minha pergunta

Link to comment
Share on other sites

Só tenho uma dúvida, qual é a diferença de meter as uses depois da interface ou dentro da implementarion? Quer dizer que se chamar a minha unit em um programa(" uses nome_da_tua_unidade") já nao preciso de chamar a unit que ja chamei dentro da minha unit( SysUtils)? Sei que esta um pouco confusa a minha pergunta

Não.

A maior diferença entre usar o uses no interface ou no implementation é que zona da tua unit vai usar essa declaração.

Se puseres na implementation, apenas essa secção vai ter acesso às referidas. Se puseres na interface, toda a unit vai ter acesso.

Há outras diferenças, como as referências circulares, em que só é possível fazer na implementation, e não na interface, mas já é coisa para mais à frente... 😉

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

A maior diferença entre usar o uses no interface ou no implementation é que zona da tua unit vai usar essa declaração.

Se puseres na implementation, apenas essa secção vai ter acesso às referidas. Se puseres na interface, toda a unit vai ter acesso.

Há outras diferenças, como as referências circulares, em que só é possível fazer na implementation, e não na interface, mas já é coisa para mais à frente... 😉

Podes-me dizer como e que é possível colocar as units dentro de uma pasta ("units") e depois utilizar no programa?É que eu só consigo usá-las quando estão no mesmo nível do código fonte do programa principal.

Link to comment
Share on other sites

Podes-me dizer como e que é possível colocar as units dentro de uma pasta ("units") e depois utilizar no programa?É que eu só consigo usá-las quando estão no mesmo nível do código fonte do programa principal.

Há duas maneiras...

Uma, com a qual não concordo, mas que ainda assim existe, é:

uses
  xpto in 'c:\xpto.pas';

Pessoalmente, evito isto, porque se por acaso mudar a unit de sitio, obriga-me alterar também o código de todos os programas que as refiram.

Assim, este método só mesmo com caminhos relativos, por exemplo para organizar dentro de subpastas do programa principal.

A alternativa, melhor quanto a mim, é configurar o compilador para ir buscar as units à pasta onde elas estão.

Regra geral, os compiladores permitem definir em que pastas podem procurar as units que não estejam na pasta do programa. Verifica no teu compilador como se faz isso, e tens o problema resolvido! 😉

  • 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

Há duas maneiras...

Uma, com a qual não concordo, mas que ainda assim existe, é:

uses
  xpto in 'c:\xpto.pas';

Pessoalmente, evito isto, porque se por acaso mudar a unit de sitio, obriga-me alterar também o código de todos os programas que as refiram.

Assim, este método só mesmo com caminhos relativos, por exemplo para organizar dentro de subpastas do programa principal.

A alternativa, melhor quanto a mim, é configurar o compilador para ir buscar as units à pasta onde elas estão.

Regra geral, os compiladores permitem definir em que pastas podem procurar as units que não estejam na pasta do programa. Verifica no teu compilador como se faz isso, e tens o problema resolvido! 😉

Obrigado, vou verificar 👍

Link to comment
Share on other sites

hehehehe Estás inspirado! 😛

É assim, as units não te permitem esconder código. Se passas uma unit, o código vai lá.

Mas há alternativas.

Para cederes código sem que o código fonte seja visível, tens de o enviar em formato compilado.

Em pascal, tens duas hipóteses principais:

- Unit compilada

Ao compilares um programa que chame uma unit da qual tens o código fonte, o compilador cria uma versão compilada dessa unit.

Podes depois distribuir apenas essa versão compilada, mas nem todos os compiladores vão gostar disto.

Não é o meio mais eficaz de o fazeres, mas é o meio que melhor se integra com um programa, pois age na prática como se tivesse o código fonte.

- DLL

Podes compilar as tuas funções em DLL's. Quando o fazes, o compilador gera-te um ficheiro .dll que encerra em si todas as funções e procedimentos.

No entanto, estes são estanques, e não é fácil interagir com o programa principal, a não ser é claro, através dos parâmetros das funções.

Esses parâmetros estão limitados aos tipos base do Windows, caso contrário, há questões de gestão de memória que têm de ser tidos em conta.

  • 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

Só agora estou a ver as reais capacidade do pascal

Mais do que reza muita gente... 🙂

Muito mais!

Isto trás-nos ao velho ditote de que Pascal é fraco, dito por quem ouviu falar sobre o Pascal dos anos 70 e reproduziu sem ter em conta toda a evolução que houve desde então. 🙂

Hoje, o Pascal, através das encarnações actuais Object Pascal e Delphi, é uma das linguagens com mais potencial.

"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

Mais do que reza muita gente... 🙂

Muito mais!

Isto trás-nos ao velho ditote de que Pascal é fraco, dito por quem ouviu falar sobre o Pascal dos anos 70 e reproduziu sem ter em conta toda a evolução que houve desde então. 🙂

Hoje, o Pascal, através das encarnações actuais Object Pascal e Delphi, é uma das linguagens com mais potencial.

É verdade, eu próprio tinha essa ideia, era o que ouvia...

Link to comment
Share on other sites

É verdade, eu próprio tinha essa ideia, era o que ouvia...

É normal... Até professores dizem isso...

Claro que não estou a ver uma linguagem fraca permitir criar os próprios compiladores, como é o caso! 😉

"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

Claro que não estou a ver uma linguagem fraca permitir criar os próprios compiladores, como é o caso! 😉

O Damas utiliza este argumento quase como um trunfo quasi-único da linguagem C no seu tão afamado livro.

Claro que me ri ao ler aquilo, e não exagero ao dizer que demorei algum tempo a aceitar ler o livro tendo em conta a sua Introdução onde também fala do Pascal como sendo apenas "uma linguagem de iniciação", entre outras coisas. "Ah e tal, C permite fazer sistemas operativos". Uau, o Pascal não, pois não? Para quem acha que não, procure pelos projectos FPOS (Free Pascal Operating System, um sistema operativo muito-muito simples implementado em Free Pascal) e o Projecto Oberon, desenvolvido pelo criador do Pascal. Só para informar, o Oberon tem interface gráfica, lol.

Faço notar que experimentei ambos em VM's, e mantenho a esperança de um dia poder explorar a fundo as entranhas destes sistemas (code speaking).

Edited by thoga31

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.