terça-feira, 9 de novembro de 2010

Criptografia e Descriptografia

Frase criptografada: e i qipru upeiocmatla otusriouvmau oqee rcs oprihrd e ors
Frase descriptografada: eu vim aqui porque eu preciso compartilhar do teu sorriso

sábado, 23 de outubro de 2010

Cobra Norato

Cobra Norato alcança o fundo da floresta, onde a terra é fabricada e as árvores passam a noite tecendo folhas em segredo. Está perdido em um escuro labirinto de árvores.

sexta-feira, 15 de outubro de 2010

Exercício Estruturado 2

No Exercício Estruturado 2 foi proposto:

1º. Proporcionar a troca de idéias e experiências.
2º. Desenvolver a habilidade de discussão em grupo.
3º. Desenvolver a capacidade de análise, interpretação, crítica, levantamento de hipóteses, obtenção e organização de dados, comparação, resumo e observação.
4º. Escrever programas que utilizem os construtos fundamentais (entrada e saída de dados, estruturas padrões de controle --‐ seqüencial, condicional, iterativa --‐ e definição e uso de procedimentos e funções parametrizados).
5º. Aplicar técnicas de decomposição estrutural e refinamentos para a quebra de um programa em partes menores.
6º. Testar e depurar programas em uma linguagem de alto nível (Pascal).
7º. Documentar idéias e soluções com precisão e qualidade.

Respostas dos Desafios Propostos


Desafio 1-) 
De acordo com o código fonte do Programa “Temperatura com procedimentos” vimos que:
1.1-       O programa principal começa após a definição de todos os procedimentos que serão usados.
1.2-       Os nomes dos procedimentos utilizados são ConverteFemC, ConverteRemC e ConverteKemC.
1.3-       Os procedimentos são chamados no programa principal.
1.4-       Sim, apesar de não ocorrer no programa Temperatura, os procedimentos podem ser chamados dentro de outros procedimentos ou funções, e temos um exemplo disso no desafio 2.
1.5-       Os procedimentos são listados no início do programa.
1.6-       As variáveis globais são: TemperaturaF, TemperaturaK e TemperaturaR.
1.7-       As variáveis locais são: tempF, tempCF; tempR, tempCR; tempK, tempCK.
1.8-       Não, pois as variáveis locais podem ser utlizadas onde forem definidas.


Desafio 2-)  
O desenho produzido após a execução do programa é:







 Os comentários podem ser:
1)    Após declaração variável: {Programa desenha cinco quadrados}
2)    Após nome procedimento: {Desenha quadrado de lado 100}
3)    Após nome procedimento 2:{Desenha quadrado do procedimento 1 e linha tamanho 100}
4)    Inicio programa principal: {Executa quatro vezes o subprograma desenho2}


Desafio 3-) 
De acordo com os dados e com as figuras este vemos que precisaremos utilizar de comandos para a execução da tartaruga-robô. Em todos os exemplos, percebe-se que o objetivo era deslocar o robô com uma determinada angulação, 100 passos a frente e isso sendo executado por uma determinada quantidade de vezes, obtendo assim, algumas figuras geométricas. Dessa forma, temos que:
·         poli(100,144,5): o robô inclina-se com um ângulo de 144 graus e desloca-se 100 passos a frente durante 5 vezes O resultado é uma “estrela” de cinco pontas.
·         Poli(100,175,36): o robô inclina-se com um ângulo de 175 graus e desloca-se 100 passos a frente durante 36 vezes. O resultado é um emaranhado de triângulos de pequenos ângulos internos.
·         Poli(100,90,4): o robô inclina-se com um ângulo de 90 graus e desloca-se 100 passos a frente durante 4 vezes. O resultado é um quadrado.
·         Poli(100,160,9): o robô inclina-se com um ângulo de 160 graus e desloca-se 100 passos a frente durante 9 vezes. O resultado é uma figura formada por cinco triângulos.

Desafio 4-)  
Neste desafio é pedido o programa que gerou as figuras mostradas no desafio anterior, explicitando também que um mesmo procedimento desse programa tem de ser o mesmo aplicado para todas elas. Com isso, precisamos de varáveis chaves, como o lado(da figura geométrica), ângulo (inclinação do robô responsável pelas diferentes figuras) e n ( a quantidade de vezes que o robô se deslocará). Assim um programa possível e executável é:

program desafio3;

var lado, angulo, n , j :integer;

procedure poli;
var i:integer;
begin
  for i:=1 to n do
  begin
   pdireita(angulo);
   pfrente(lado);

end;
end;

Begin

For j:=1 to 4 do

begin

writeln('informe lado ');
readln(lado);
writeln('informe angulo');
readln(angulo);
writeln('informe n');
readln(n);

  ul;
  poli;
  un;
  ptras(100);
  pdireita(90);
  pfrente(200);
  ul;
 
 
 end;


Desafio 5-) Este é um desafio simples, pois não é dado um problema em si, mas exige-se que tenhamos conhecimento de geometria.  A hipotenusa (H) de um triângulo retângulo de catetos a e b é dada por:
              H² =  (a² + b²)

Em PascaL, podemos usar suas funções embutidas e calcular a hipotenusa de um triângulo retângulo dados seus catetos. Para isso, utilizamos as variáveis
 H, a, e b reais e calculamos a hipotenusa como a raiz quadrada(sqrt) da soma dos quadrados dos catetos (sqr(a) + sqr(b):

            Function calculahipotenusa(a,b:real);
      Begin
       Hipotenusa:= sqrt(sqr(a) + sqr(b));
      end;
Desafio 6-)

program Petrusdesafio6borboleta;
var A, B, C, V, diagonalbase, diagonalparalelepipedo, velocidadeconvertida, tempototal: real;
function diagonalbase(a,b:real): real;
 begin
            diagonalbase:= sqrt(power(a,2) + power(b,2));
 end;
function diagonalparalelepipedo(a,b,c:real): real;          
 begin
            diagonalparalelepipedo:= sqrt(power(c,2)+power(diagonalbase(a,b),2));
 end;

function velocidadeconvertida(v:real): real;
 begin
            velocidadeconvertida:= v/3.6
 end;

function tempototal(diagonalparalelepipedo, velocidadeconvertida: real): real;
 begin
           tempototal:= (diagonalparalelepipedo/velocidadeconvertida);
 end;

begin
 
  writeln('Digite a primeira medida em m: ');
  readln(A);
  writeln('Digite a segunda medida em m: ');
  readln(B);
  writeln('Digite a primeira medida em m: ');
  readln(C);
  writeln('Digite a velocidade da borboleta');
  readln(V);
  writeln('A diagonal do paralelpípedo é:');
  writeln(diagonalparalelepipedo(a,b,c));
  writeln('Avelocidadeconvertida é:');
  writeln(velocidadeconvertida(v));
  writeln('O tempo é igual a:');
  writeln(tempototal(diagonalparalelepipedo(a,b,c), velocidadeconvertida(v)));

end.

Desafio 7-)  
Neste desafio, a solução procurada é o desenho de uma espiral, de diferentes tamanhos e formatos. Para isso, no único procedimento criado precisa conter as variáveis inteiras que receberá a quantidade de segmentos da espiral (tamanho da espiral), o comprimento do segmento que a formará e o ângulo de inclinação do robô (formato da espiral), onde utilizamos N, Lado e Ângulo respectivamente, além dos simples comandos de deslocamento do robô – pfrente, pdireita -.

Program espirais;

var N, Lado, Ângulo, j: integer;
{N: quantidade de segmentos}
{Lado: comprimento do segmento inicial}
{Ângulo:inclinação do robô que dará origem a espiras de diferentes formatos}

 procedure resultado;
  var i: integer;
   begin
    for I := 1 to N  do
     begin
      pfrente(Lado);
      pdireita(Ângulo);
      Lado:= Lado + 10;
  
      end;
end;
  
 begin

    writeln(‘Informe N’);
    readln(N);
    writeln(‘Informe Lado’);
    readln(Lado);
    writeln(‘Informe Angulo’);
    readln(Angulo);
     ul;
     resultado;
     dr;

end.
 
Comentário

Exercício Estruturado 1

No Exercício Estruturado 1 foi proposto:
1º. Proporcionar a troca de idéias e experiências.
2º. Desenvolver a hablidade de discussão em grupo.
3º. Desenvolver a capacidade de análise, interpretação, crítica, levantamento de hipóteses, obtenção e organização de dados, comparação, resumo e observação.

Respostas dos Desafios Propostos

DESAFIO 1) 
Os sete erros foram identificados de acordo com a linha e na resposta apresentamos a correção.
   Linha 1:                  x :=  1;
   Linha 2:                pfrente(100);
   Linha 5:                end;
   Linha 6:                y := 1;
   Linha 6:                to 9 do
   Linha 6 e 7:         Begin
   Linha 8:                pdireita(90);

DESAFIO 2)  
2.1) O programa irá escrever o valor de x.  Como o comando de saída está dentro de uma estrutura de repetição (FOR) será impresso sete valores de x, de 1 a 7.
2.2) O programa irá escrever o valor de x acompanhado da frase “É o valor de i”.  Como o comando de saída está dentro de uma estrutura de repetição (FOR) será impresso 3 valores de x, de 1 a 3;
2.3)Escreve o valor de I mais o valor de contador. A variável I varia de 1 a 10 enquanto a variável contador varia de 0.2 a 2.0.

DESAFIO 3)  
O enunciado do programa nos informa que Chico cresce 2 cm por ano enquanto Juca 3 cm por ano. Ao analisarmos o algorítmo verificamos que esse dado foi trocado no momento da implementação da equação que calcula a altura em função do tempo. Então o erro de lógica é identificado nas linhas 9 e 10. A estrutura correta seria:
C <- C + 0.02;
J <- J + 0.03;
DESAFIO 4.1)  
Para a resolução desse problema primeiramente vamos definir as variáveis.
C : custo ao consumidor de um carro novo.
Pf: preço de fábrica.
Ld: percentual de lucro do distribuidor.
I :  percentual de imposto.
O lucro do distribuidor é dado pela multiplicação do percentual de lucro do distribuidor pelo custo de fábrica. (Ld x Pf);
Valor correspondente ao imposto = I. Pf;
O preço final do veículo é o custo ao consumidor de um carro novo.
C: = Pf + LdxPf + IxPf;

DESAFIO 4.2)  
Os dados abaixo  são os que serão inseridos no programa, a partir dele calcularemos outras informações.
Peso de saco de ração para cachorro (SC).
Peso de saco de ração para gato (SG).
Quantidade de ração para cada gato por dia (QG).
Quantidade de ração para cada cachorro por dia (QC).
T = TEMPO.
SCS = O QUE SOBRA DO SACO APÓS T TEMPOS.
SGS = O QUE SOBRA DO SACO APÓS T TEMPOS
>Transformando a quantidade de quilograma para grama
SC := SC X 1000;
SG := SG X 1000;
SCS := SC – 2(T X QC);
SGS:= SG -2(T X QG);

DESAFIO 4.3)  
Para esse programa vamos considerar o número a ser inserido como inteiro e devido a isso terá no máximo 256 algarismos. A partir disso, elaboraremos uma função que, ao receber o número a ser invertido, calcula quantas casas ele possui, só assim será possível usar o comando de repetição para inverter.

(Pseudocódigo para descobrir quantos algarismos o número possui)
Variáveis, num controle,T,X,Qalg : inteiras.
Num-> número a ser invertido.
Controle-> variável para procedimento.
T->número máximo de algarismos que uma variável inteira pode possuir.
Qalg->Quantidade de algarismos que o número possui.
X :=10256;
Controle receberá o valor inicial de 0.
While controle <>1
{IF (num/10t ) = 0 então controle continua valendo 0 e T:=T -1;
             Else controle := 1 e Qalg:= T;}

(Pseudocódigo para inverter o algarismo inserido)
Variáveis:
Qalg = resultado do primeiro procedimento.
Rest = variável para percorrer as casas.
Casa = variável para fazer as divisões de unidade,dezena,centena e assim por diante.
Numinvert=resultado do número invertido
Rest := num;
Casa:= 1;
FOR(I = Qalg downto 1) do
{Numinvert := rest/10I x casa;
  Rest := rest MOD 10I;
  Casa := casa x 10;}
FIM DOS CÁLCULOS
RESULTADO FINAL
WRITE(Numinvert);


DESAFIO 5)
Caso 1) 
Para esse programa pediremos ao usuário um número inteiro positivo de cada vez. O número que será lindo será chamado de NUM.
M3 =CONTROLE SE O NÚMERO É NÚMERO MÚLTIPLO DE 3,INICIADO COM 0.
M5 =CONTROLE SE O NÚMERO É NÚMERO MÚLTIPLO DE 5,INICIADO COM 0.
IF NUM MOD 3= 0 M3 =1;
IF NUM MOD 5=0 M5 =1;
IF(M3 = 1 E M5 = 1){O NÚMERO É MULTIPLO DE 3 E 5}
ELSE
IF(M3=1 E M5=0){O NÚMERO É MÚLTIPLO DE 3}
ELSE
IF(M3=0 E M5=1){O NÚMERO É MÍLTIPLO DE 5}
ELSE{O NÚMERO NÃO É MÚLTIPLO}

Caso 2)
Um dado conjunto de valores é considerado triângulo se e somente se obedecer as 3 equações abaixo:
CONTROLE=0;
IF(A+B>C)CONTROLE = CONTROLE +1;
IF(A+C>B) CONTROLE = CONTROLE +1;
IF(B+C>A) CONTROLE = CONTROLE +1;
IF CONTROLE=3 O NÚMERO É UM TRIÂNGULO.


Caso 3) 
Será recebido um número de cada vez:
MAIOR = variável que recebe o número de maior valor.
Ao ser inserido o primeiro número:
Maior = numinserido.
Depois para cada próximo numero:
IF numinserido > maior {maior = numinserido}
Se não for não modificaremos o valor de maior.
Assim quando for finalizada a inserção de dados o maior número será aquele da variável maior.
Caso 4) 
Seguiremos o mesmo raciocínio do caso 3:
DIGITE O PRIMEIRO NÚMERO:
RECEBA O VALOR DE NUM.
MAIOR = NUM;
MENOR =NUM;
DIGITE O PRÓXIMO NÚMERO: (NUM É UMA VARIÁVEL DINÂMICA).
IF NUM > MAIOR  {MAIOR = NUM}
IF NUM < MENOR {MENOR = NUM}
WRITE MAIOR E MENOR.

Conclusão

O Exercício Estrurado 1 proporcionou a troca de conhecimento com outros estudantes e o  aperfeiçoamento de nossos próprios métodos de aprendizagem.

quarta-feira, 13 de outubro de 2010

Guia de Auto Estudo 5

No Guia de Auto Estudo 5 foi proposto:
1º. Utilizar o PascaL para produzir a sua bandeira do Brasil.
 1.1. A primeira delas terá cores aleatórias, a segunda terá as cores da bandeira do Brasil.
 1.2. Utilize um menu para escolher qual das bandeiras será produzida.
 1.3. As bandeiras devem ser produzidas a partir de procedimentos separados para cada uma das figuras.
 1.4. Ela deve conter, no mínimo, duas estrelas.
 1.5. A tarja branca e o texto ao centro são opcionais.

Códido do Programa em PascaL

{*******************PROGRAM BANDEIRADOBRASILPETRUSLUISDASILVAGOMESRIBEIRO*******************}

program bandeiradobrasilpetrusluisdasilvagomesribeiro;
{Programa que desenha uma bandeira do Brasil na forma tradicional ou com cores aleatórias}
var opcao:integer; {Variável que armazenara a sua opção de bandeira}

 procedure fazretangulo;
 {Procedimento para criar o retângulo da bandeira}
 
  var i: integer;
  begin
   if opcao=1
    then begin
     mudecorlapis (random(255),random(255),random(255));
    end
    else begin
     mudecorlapis(22,157,15);
    end;
   for i:= 1 to 4 do
    begin
     pfrente(300);
     pdireita(90);
     pfrente(490);
     pdireita(90);
    end;
  end;

 procedure fazlosango;
 {Procedimento para criar o losango da bandeira}

  var i: integer;
  begin
   if opcao=1
    then begin
     mudecorlapis (random(255),random(255),random(255));
    end
    else begin
     mudecorlapis(255,255,0);
    end;

     pdireita(60);
     pfrente(275);
     pdireita(60);
     pfrente(275);
     pdireita(120);
     pfrente(275);
     pdireita(60);
     pfrente(275);
     pdireita(120);
     pfrente(275);
     pdireita(60);
     pfrente(275);
     pdireita(120);
     pfrente(275);
     pdireita(60);
     pfrente(275);
     pdireita(120);

  end;

 procedure fazcirculo;
 {Procedimento para criar o círculo da bandeira}

   var i: integer;
   begin
   if opcao=1
    then begin
     mudecorlapis (random(255),random(255),random(255));
    end
    else begin
     mudecorlapis(0,0,255);
    end;

    for i:= 1 to 720 do
     begin
      pfrente(1.5);
      pdireita(1);
     end;
   end;

 procedure fazestrelas;
 {Procedimento para criar as estrelas da bandeira}

  var i, j, k: integer;
  begin
   if opcao=1
    then begin
     mudecorlapis (random(255),random(255),random(255));
    end
    else begin
     mudecorlapis(255,255,255);
    end;

   un;
   pfrente(30);
   ul;

   for i:= 1 to 5 do
    begin
     pdireita(27);
     pesquerda(81);
     pfrente(2);
     pdireita(144);
     pfrente(2);
     pesquerda(72);
     pfrente(2);
     pdireita(144);
     pfrente(2);
     pesquerda(72);
     pfrente(2);
     pdireita(144);
     pfrente(2);
     pesquerda(72);
     pfrente(2);
     pdireita(144);
     pfrente(2);
     pesquerda(72);
     pfrente(2);
     pdireita(144);
     pfrente(2);
     pesquerda(72);
     pfrente(2);
     un;
     pfrente(20);
     ul;
    end;
  
   un;
   ptras(75);
   ul;

   for j:= 1 to 5 do
    begin
     pdireita(27);
     pesquerda(81);
     pfrente(2);
     pdireita(144);
     pfrente(2);
     pesquerda(72);
     pfrente(2);
     pdireita(144);
     pfrente(2);
     pesquerda(72);
     pfrente(2);
     pdireita(144);
     pfrente(2);
     pesquerda(72);
     pfrente(2);
     pdireita(144);
     pfrente(2);
     pesquerda(72);
     pfrente(2);
     pdireita(144);
     pfrente(2);
     pesquerda(72);
     pfrente(2);
     un;
     pfrente(20);
     ul;
    end;

   un;
   pdireita(90);
   ptras(75);
   ul;

   for k:= 1 to 5 do
    begin
     pdireita(27);
     pesquerda(81);
     pfrente(2);
     pdireita(144);
     pfrente(2);
     pesquerda(72);
     pfrente(2);
     pdireita(144);
     pfrente(2);
     pesquerda(72);
     pfrente(2);
     pdireita(144);
     pfrente(2);
     pesquerda(72);
     pfrente(2);
     pdireita(144);
     pfrente(2);
     pesquerda(72);
     pfrente(2);
     pdireita(144);
     pfrente(2);
     pesquerda(72);
     pfrente(2);
     un;
     pfrente(20);
     ul;
    end;

  end;


 procedure regulagemlosangoretangulo;
 {Procedimento para alinhar o losango em relação ao retângulo}

   var i: integer;
    begin
     pfrente(150);
     pdireita(90);
     pfrente(7);
     pesquerda(90);
    end;

 procedure regulagemcirculolosango;
 {Procedimento para alinhar o círculo em relação ao losango}

   var i: integer;
   begin
    pdireita(30);
    pfrente(150);
    pesquerda(90);
   end;

  procedure regulagemestrelascirculo;
  {Procedimento para alinhar as estrelas em relação ao círculo}

   var i: integer;
   begin
    pdireita(90);
    pfrente(30);
    pdireita(90);
   end;

  procedure coloreretangulo;
  {Procedimento para colorir o retângulo}

   begin
    pfrente(1);
    pdireita(90);
    pfrente(1);
    if opcao=1
     then begin
      mudecorpreenche (random(255),random(255),random(255));
     end
     else begin
      mudecorpreenche(22,157,15);
     end;
    pinte;
    ptras(1);
    pesquerda(90);
    ptras(1);
   end;

  procedure colorelosango;
  {Procedimento para colorir o losango}

   begin
    pfrente(1);
    if opcao=1
     then begin
      mudecorpreenche (random(255),random(255),random(255));
     end
     else begin
      mudecorpreenche(255,255,0);
     end;
    pinte;
    ptras(1);
   end;

  procedure colorecirculo;
  {Procedimento para colorir o círculo}

   begin
    pfrente(1);
    pdireita(90);
    pfrente(1);
    if opcao=1
     then begin
      mudecorpreenche (random(255),random(255),random(255));
     end
     else begin
      mudecorpreenche(0,0,255);
     end;
    pinte;
    ptras(1);
    pesquerda(90);
    pesquerda(1);
   end;


{********************Programa principal********************}

begin

  write('Escolha uma opcao(1-Bandeira Aleatória,2-Bandeira Original) ');
  readln(opcao); {Opção a ser escolhida}
  clrscr;
  ar;
  fazretangulo;
  coloreretangulo;
  un;
  regulagemlosangoretangulo;
  ul;
  fazlosango;
  colorelosango;
  un;
  regulagemcirculolosango;
  ul;
  fazcirculo;
  colorecirculo;
  un;
  regulagemestrelascirculo;
  ul;
  fazestrelas;
  dr;

end.
 
Imagens da Bandeira

Opção 1 - Cores Aleatórias


Opção 2 - Cores Originais


Comentário

É possível utilizar o programa Pascal para a criação de desenhos, através do uso de procedimentos e estruturas de controle seqüencial, repetitiva e alternativa. Sendo muito favorável a sua utilização em várias áreas do mercado de trabalho. Entre elas cito a área de engenharia, para a criação de plantas, e a as áreas de marketing, publicidade e propaganda, onde o visual tem muita valorização.