Advertisement
paulogp

Exercicios - Folha 2

Aug 7th, 2011
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 8.70 KB | None | 0 0
  1. { paulogp }
  2. { mac os 7 }
  3. program Ada21p;
  4.  
  5. uses
  6.     MemTypes, QuickDraw, OSIntf;
  7.  
  8. const
  9.     MAX = 1000;
  10.     MX = 10;
  11.  
  12. type
  13.     x = array[1..MX] of integer;
  14.  
  15. var
  16.     i: integer;
  17.     tecla, opcao: string;
  18.     chave: char;
  19.     vector: x;
  20.  
  21. procedure acerca;
  22. begin
  23.     clearscreen;
  24.     writeln('Paulo G.P.');
  25.     writeln;
  26.     writeln('27 de Dezembro de 2001');
  27.     writeln;
  28.     writeln('Prima uma tecla para continuar.');
  29.     readln;
  30. end;
  31.  
  32. {* Exercício 1a *}
  33. function soma_rec(n: integer): integer;
  34. begin
  35.     if n=1 then soma_rec:= 1 else soma_rec:= soma_rec(n - 1) + n;
  36. end;
  37.  
  38. procedure exercicio1a;
  39. const
  40.     MAX = 900;
  41.     MIN = 0;
  42.  
  43. var
  44.     n, soma: integer;
  45.  
  46. begin
  47.     clearscreen;
  48.     writeln('Exercício 1');
  49.     writeln('Alínea a)');
  50.     writeln('------------');
  51.     writeln;
  52.     soma:= 0;
  53.     n:= 1;
  54.     repeat
  55.         writeln;
  56.         if (n >= MAX) or (n <= MIN) then writeln('Atenção!!!');
  57.         write('Introduza um número inteiro positivo ]', MIN, ';', MAX, '[: ');
  58.         readln(n);
  59.     until (n > MIN) and (n < MAX);
  60.     writeln;
  61.     writeln('soma = ', soma_rec(n));
  62.     writeln;
  63.     writeln;
  64.     write('Repetir (s/n): ');
  65.     readln(opcao);
  66.     uprstring(opcao, true);
  67.     if opcao = 'S' then exercicio1a;
  68. end;
  69.  
  70. {** Exercício 1b **}
  71. function fact_rec(n: integer): integer;
  72. begin
  73.     if (n = 0) or (n = 1) then fact_rec:= 1 else
  74.     fact_rec:= fact_rec(n - 1) * n;
  75. end;
  76.  
  77. procedure exercicio1b;
  78. const
  79.     MAX = 18;
  80.     MIN = 0;
  81.  
  82. var
  83.     n: integer;
  84.  
  85. begin
  86.     clearscreen;
  87.     writeln('Exercício 1');
  88.     writeln('Alínea b)');
  89.     writeln('------------');
  90.     writeln;
  91.     n:= 1;
  92.     repeat
  93.         writeln;
  94.         if (n >= MAX) or (n <= MIN) then writeln('Atenção!!!');
  95.         write('Introduza um número inteiro positivo ]', MIN, ';', MAX, '[: ');
  96.         readln(n);
  97.     until (n >= MIN) and (n < MAX);
  98.     writeln;
  99.     writeln('b) Fact = ', fact_rec(n));
  100.     writeln;
  101.     writeln;
  102.     write('Repetir (s/n): ');
  103.     readln(opcao);
  104.     uprstring(opcao, true);
  105.     if opcao='S' then exercicio1b;
  106. end;
  107.  
  108. {** Exercício 1c **}
  109. function mdc(a, b: integer): integer;
  110. begin
  111.     if b = 0 then mdc:= a else mdc:= mdc(b, a mod b);
  112. end;
  113.  
  114. function mmc(a, b: integer): integer;
  115. begin
  116.     if (a = 0) or (b = 0) then mmc:= 0 else mmc:= (a * b) div (mdc(a, b));
  117. end;
  118.  
  119. procedure exercicio1c;
  120. var
  121.     a,b: integer;
  122.  
  123. begin
  124.     clearscreen;
  125.     writeln('Exercício 1');
  126.     writeln('Alínea c)');
  127.     writeln('------------');
  128.     writeln;
  129.    
  130.     a:= 0;
  131.     b:= 0;
  132.  
  133.     repeat
  134.         writeln;
  135.         if a < 0 then writeln('Atenção!');
  136.         write('Introduza um número inteiro: ');
  137.         readln(a);
  138.     until a >= 0;
  139.     repeat
  140.         writeln;
  141.         if b < 0 then writeln('Atenção!');
  142.         write('Introduza um número inteiro: ');
  143.         readln(b);
  144.     until b >= 0;
  145.     writeln;
  146.     writeln('c) MMC = ', mmc(a, b));
  147.     writeln;
  148.     write('Repetir (s/n): ');
  149.     readln(opcao);
  150.     uprstring(opcao, true);
  151.     if opcao = 'S' then exercicio1c;
  152. end;
  153.  
  154. {** Exercício 2 **}
  155. function subfactorial(n: integer): integer;
  156. begin
  157.     if n = 0 then subfactorial:= 1 else
  158.     if not odd(n) then subfactorial:= subfactorial(n - 1) * n + 1 else
  159.         subfactorial:= subfactorial(n - 1) * n - 1;
  160. end;
  161.  
  162. procedure exercicio2a;
  163. const
  164.     MAX = 10;
  165.     MIN = 0;
  166.  
  167. var
  168.     i, n, x: integer;
  169.  
  170. begin
  171.     clearscreen;
  172.     writeln('Exercício 2');
  173.     writeln('Alínea a)');
  174.     writeln('------------');
  175.     writeln;
  176.     n:= 1;
  177.     repeat
  178.         writeln;
  179.         if (n >= MAX) or (n < MIN) then writeln('Atenção!');
  180.         write('Introduza um número inteiro positivo [', MIN, ';', MAX, '[: ');
  181.         readln(n);
  182.     until (n >= MIN) and (n < MAX);
  183.     writeln;
  184.     writeln;
  185.     writeln('Factorial recursivo = ', subfactorial(n));
  186.     writeln;
  187.     writeln;
  188.     write('Repetir (s/n): ');
  189.     readln(opcao);
  190.     uprstring(opcao, true);
  191.     if opcao = 'S' then exercicio2a;
  192. end;
  193.  
  194. {** Exercício 2b **}
  195. procedure exercicio2b;
  196. const
  197.     MAX = 10;
  198.     MIN = 0;
  199.  
  200. var
  201.     i, n, x: integer;
  202.  
  203. begin
  204.     clearscreen;
  205.     writeln('Exercício 2');
  206.     writeln('Alínea b)');
  207.     writeln('------------');
  208.     writeln;
  209.     n:= 1;
  210.     repeat
  211.         writeln;
  212.         if (n >= MAX) or (n < MIN) then writeln('Atenção!');
  213.         write('Introduza um número inteiro positivo [', MIN, ';', MAX, '[: ');
  214.         readln(n);
  215.     until (n >= MIN) and (n < MAX);
  216.     writeln;
  217.     writeln;
  218.     x:= 1;
  219.     for i:= 1 to n do
  220.         if odd(i) then x:= x * i - 1 else x:= x * i + 1;
  221.     writeln('Factorial iterativo = ', x);
  222.     writeln;
  223.     writeln;
  224.     write('Repetir (s/n): ');
  225.     readln(opcao);
  226.     uprstring(opcao, true);
  227.     if opcao = 'S' then exercicio2b;
  228. end;
  229.  
  230. {** Exercício 3a **}
  231. function recur(x: real; n: integer): real;
  232. begin
  233.     if n = 0 then recur:= 1 else
  234.     if n > 0 then recur:= recur(x, n - 1) * x else recur:= recur(x, n + 1) / x;
  235. end;
  236.  
  237. procedure exercicio3a;
  238. var
  239.     n: integer;
  240.     x: real;
  241.  
  242. begin
  243.     clearscreen;
  244.     writeln('Exercício 3');
  245.     writeln('Alínea a)');
  246.     writeln('------------');
  247.     writeln;
  248.     n:= 1;
  249.     writeln;
  250.     write('Introduza um número real (x): ');
  251.     readln(x);
  252.     writeln;
  253.     write('Introduza um número inteiro (n): ');
  254.     readln(n);
  255.     writeln;
  256.     writeln;
  257.     writeln('Método recursivo: x^n = ', recur(x, n):2:1);
  258.     writeln;
  259.     writeln;
  260.     write('Repetir (s/n): ');
  261.     readln(opcao);
  262.     uprstring(opcao, true);
  263.     if opcao = 'S' then exercicio3a;
  264. end;
  265.  
  266. {** Exercício 3b **}
  267. procedure exercicio3b;
  268. var
  269.     i, n: integer;
  270.     x, ite: real;
  271.  
  272. begin
  273.     clearscreen;
  274.     writeln('Exercício 3');
  275.     writeln('Alínea b)');
  276.     writeln('------------');
  277.     writeln;
  278.     n:= 1;
  279.     writeln;
  280.     write('Introduza um número real (x): ');
  281.     readln(x);
  282.     writeln;
  283.     write('Introduza um número inteiro (n): ');
  284.     readln(n);
  285.     writeln;
  286.     writeln;
  287.     if n = 0 then ite:= 1 else
  288.     if n < 0 then
  289.     begin
  290.         ite:= 1 / x;
  291.         n:= n * (-1);
  292.         for i:= 1 to (n - 1) do ite:= ite * (1 / x);
  293.     end else
  294.     begin
  295.         ite:= x;
  296.         for i:= 1 to (n - 1) do ite:= ite * x;
  297.         if (x < 0) and not odd(n) then ite:= ite * (-1);
  298.     end;
  299.     writeln('Método iterativo: x^n = ', ite:2:4);
  300.     writeln;
  301.     writeln;
  302.     write('Repetir (s/n): ');
  303.     readln(opcao);
  304.     uprstring(opcao, true);
  305.     if opcao = 'S' then exercicio3b;
  306. end;
  307.  
  308. {** Exercício 4 **}
  309. function Inver(n, a: integer): integer;
  310. begin
  311.     if (n div 10) > 0 then
  312.     begin
  313.         a:= (a + (n mod 10)) * 10;
  314.         Inver:= Inver(n div 10, a);
  315.     end;
  316.     if (n div 10) = 0 then Inver:= a + n;
  317. end;
  318.  
  319. procedure exercicio4;
  320. var
  321.     n: longint;
  322.  
  323. begin
  324.     clearscreen;
  325.     writeln('Exercício 4');
  326.     writeln('------------');
  327.     writeln;
  328.     n:= 1;
  329.     repeat
  330.         writeln;
  331.         if n<0 then writeln('Atenção!');
  332.         write('Introduza um número inteiro: ');
  333.         readln(n);
  334.     until (n >= 0) and (n <= 9000);
  335.     writeln;
  336.     writeln('número inserido:  ', n);
  337.     writeln;
  338.     writeln('número invertido: ', Inver(n, 0));
  339.     writeln;
  340.     writeln;
  341.     write('Repetir (s/n): ');
  342.     readln(opcao);
  343.     uprstring(opcao, true);
  344.     if opcao = 'S' then exercicio4;
  345. end;
  346.  
  347. {** Exercício 5 **}
  348. function locate (v:x;k,comp:integer):integer;
  349. begin
  350.     if comp = 1 then
  351.     if v[1] = k then locate:= 1 else locate:= 0;
  352.     if comp > 1 then
  353.         if v[comp] = k then locate:= locate(v, k, comp - 1) + 1 else
  354.             locate:= locate(v, k, comp - 1);
  355. end;
  356.  
  357. procedure exercicio5;
  358. var
  359.     k, i, comp: integer;
  360.  
  361. begin
  362.     clearscreen;
  363.     writeln('Exercício 5');
  364.     writeln('-----------');
  365.     writeln;
  366.     repeat
  367.         write('Comprimento do vector: ');
  368.         readln(comp);
  369.         if (comp <= 0) or (comp > MX) then writeln('Atenção!');
  370.         writeln;
  371.     until (comp > 0) and (comp <= MX);
  372.     writeln;
  373.     for i:= 1 to comp do
  374.     begin
  375.         write('vector[', i,'] = ');
  376.         readln(vector[i]);
  377.     end;
  378.     writeln;
  379.     write('v = [ ');
  380.     for i:= 1 to comp - 1 do write(vector[i], ', ');
  381.     write(vector[comp], ']');
  382.     writeln;
  383.     writeln;
  384.     write('Elemento a localizar: ');
  385.     readln(k);
  386.     writeln;
  387.     writeln('O elemento ', k, ' ocorre ', locate(vector, k, comp),' vez(es).');
  388.     writeln;
  389.     writeln;
  390.     write('Repetir (s/n): ');
  391.     readln(opcao);
  392.     uprstring(opcao, true);
  393.     if opcao = 'S' then exercicio5;
  394. end;
  395.  
  396. {** Corpo principal **}
  397. begin
  398.     repeat
  399.         clearscreen;
  400.         writeln('Folha 2 - ADA.');
  401.         writeln('--------------');
  402.         writeln;
  403.         writeln('Exercício 1:                                  Exercício 4:');
  404.         writeln(' a) Série.                                     h) Ordem inversa.');
  405.         writeln(' b) Factorial.');
  406.         writeln(' c) MMC.                                      Exercício 5:');
  407.         writeln('                                               i) Localizador.');
  408.         writeln('Exercício 2:');
  409.         writeln(' d) Factorial recursivo.');
  410.         writeln(' e) Factorial iterativo.');
  411.         writeln;
  412.         writeln('Exercício 3:');
  413.         writeln(' f) x^n -> Método recursivo.');
  414.         writeln(' g) x^n -> Método iterativo.');
  415.         writeln;
  416.         writeln;
  417.         writeln('? - Acerca dos autores.');
  418.         writeln('s - Saír do programa.');
  419.         writeln;
  420.         write('Opção: ');
  421.         readln(tecla);
  422.         uprstring(tecla, true);
  423.         chave:= tecla[1];
  424.         case chave of
  425.             'A': exercicio1a;
  426.             'B': exercicio1b;
  427.             'C': exercicio1c;
  428.             'D': exercicio2a;
  429.             'E': exercicio2b;
  430.             'F': exercicio3a;
  431.             'G': exercicio3b;
  432.             'H': exercicio4;
  433.             'I': exercicio5;
  434.             '?': acerca;
  435.         end;
  436.     until tecla = 'S';
  437. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement