Advertisement
paulogp

Conjuntos (v. 1.0.1)

Aug 7th, 2011
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 6.51 KB | None | 0 0
  1. { paulogp }
  2. { mac os 7 }
  3. program Ada24p;
  4.  
  5. uses
  6.     MemTypes, QuickDraw, OSIntf;
  7.  
  8. const
  9.     MAX = 20;
  10.  
  11. type
  12.     Conjunto = Array [1..MAX] of real;
  13.  
  14. {* Verificação da existência do valor no conjunto - Método recursivo *}
  15. function NaoEsta(a: real; q: Conjunto; k: integer): boolean;
  16. begin
  17.     if k > 0 then
  18.         if a = q[k] then NaoEsta:= false else NaoEsta:= NaoEsta(a, q, k - 1)
  19.     else NaoEsta:= true;
  20.  
  21.     {achou:= false;   i:= 1;
  22.     while not achou and(i <= N)
  23.     do if a = x[i] then achou:= true else i:= i + 1;
  24.     NaoEsta:= achou}
  25. end;
  26.  
  27. {* localização de um valor dentro de um conjunto *}
  28. procedure ProcurarElemento(a: real; q: Conjunto; k: integer);
  29. var
  30.     i, contador: integer;
  31.  
  32. begin
  33.     contador:=  0;
  34.     if k > 0 then
  35.     begin
  36.         for i:=  k downto 1 do
  37.             if q[i] = a then contador:= i;
  38.            
  39.         if contador > 0 then writeln('Encontra-se na ', contador, ' ª posição.') else
  40.             writeln('Não existe.');
  41.     end;
  42. end;
  43.  
  44. {* construção de conjuntos *}
  45. procedure ConstroiConjunto(var q: Conjunto; var qn: integer);
  46. var
  47.     a, c: real;
  48.     i, j: integer;
  49.  
  50. begin
  51.     repeat
  52.         write('Número de elementos [1,', MAX, ']: ');
  53.         readln(qn);
  54.     until (qn > 0) and (qn <= MAX);
  55.     writeln;
  56.     i:= 1;
  57.     repeat
  58.         writeln;
  59.         write('Introduza o ', i, 'º elemento: ');
  60.         readln(a);
  61.         if NaoEsta(a, q, i - 1) then
  62.         begin
  63.             q[i]:=  a;
  64.             i:= i + 1;
  65.         end else
  66.         begin
  67.             writeln;
  68.             writeln('ERRO: Elemento repetido.')
  69.         end;
  70.     until i = qn + 1;
  71.  
  72.     {* Ordena *}
  73.     for i:= 2 to qn do
  74.         for j:= 1 to qn - 1 do
  75.             if q[i] < q[j] then
  76.             begin
  77.                 c:= q[i];
  78.                 q[i]:= q[j];
  79.                 q[j]:= c;
  80.             end;
  81. end;
  82.  
  83. {* Visualização de conjuntos - Método Recursivo *}
  84. procedure MostrarConjunto(q: Conjunto; k: integer);
  85. begin
  86.     if k = 1 then writeln('pos(', k, '): ', q[1]:2:2) else
  87.     begin
  88.         MostrarConjunto(q, k - 1);
  89.         writeln('pos(', k, '): ', q[k]:2:2)
  90.     end
  91. end;
  92.  
  93. {* União de conjuntos *}
  94. procedure UniaoConjunto(q, r: Conjunto; var s: Conjunto; qn, rn: integer; var sn: integer);
  95. var
  96.     i: integer;
  97.  
  98. begin
  99.     sn:= qn;
  100.     s:= q;
  101.     for i:= 1 to rn do
  102.         if NaoEsta(r[i], s, sn) then
  103.         begin
  104.             sn:= sn + 1;
  105.             s[sn]:= r[i];
  106.         end;
  107. end;
  108.  
  109. {* intersecção de conjuntos *}
  110. procedure InterseccaoConjunto(q, r: Conjunto; var s: Conjunto; qn, rn: integer; var sn: integer);
  111. var
  112.     contador, i: integer;
  113.  
  114. begin
  115.     contador:= 0;
  116.     sn:= 0;
  117.     if qn > rn then contador:= qn else contador:= rn;
  118.     for i:= 1 to contador do
  119.         if NaoEsta(q[i], r, rn) = false then
  120.         begin
  121.             sn:= sn + 1;
  122.             s[sn]:= q[i];
  123.         end;
  124. end;
  125.  
  126. {* diferença de conjuntos *}
  127. procedure DiferencaConjunto(q, r: Conjunto; var s: Conjunto; qn, rn: integer; var sn: integer);
  128. var
  129.     i: integer;
  130.  
  131. begin
  132.     sn:= 0;
  133.     for i:= 1 to qn do
  134.         if NaoEsta(q[i], r, rn) = true then
  135.         begin
  136.             sn:= sn + 1;
  137.             s[sn]:= q[i];
  138.         end;
  139.    
  140.     for i:= 1 to rn do
  141.         if NaoEsta(r[i], q, qn) = true then
  142.         begin
  143.             sn:= sn + 1;
  144.             s[sn]:= r[i];
  145.         end;
  146. end;
  147.  
  148. {** titulo **}
  149. procedure Titulo(x: integer; nome: String);
  150. var
  151.     i: integer;
  152.  
  153. begin
  154.     clearscreen;
  155.     gotoxy(x,2);
  156.     writeln(nome);
  157.     gotoxy(x,3);
  158.     for i:= 1 to length(nome) do write('~');
  159.     writeln;
  160.     writeln;
  161. end;
  162.  
  163. {* pausa *}
  164. procedure Pausa;
  165. begin
  166.     writeln;
  167.     writeln;
  168.     write('Prima uma tecla para continuar!');
  169.     readln;
  170. end;
  171.  
  172. {* string "Conjunto"*}
  173. procedure NomeConjunto(c: Char);
  174. begin
  175.     writeln('Conjunto ', c);
  176. end;
  177.  
  178. {* alinhamento do texto *}
  179. procedure Alinha(y: integer);
  180. begin
  181.     gotoxy(23, y);
  182. end;
  183.  
  184. {* corpo principal *}
  185. var
  186.  n1, n2, n3, i: integer;
  187.  opcao, tecla: char;
  188.  extra: string;
  189.  x, y, z: Conjunto;
  190.  valor: real;
  191.  desistir: boolean;
  192.  
  193. begin
  194.     Titulo(28, 'Definição dos Conjuntos');
  195.     NomeConjunto('A');
  196.     ConstroiConjunto(x, n1);
  197.     Titulo(28, 'Definição dos Conjuntos');
  198.     NomeConjunto('B');
  199.     ConstroiConjunto(y, n2);
  200.     repeat
  201.         Titulo(32, 'MENU PRINCIPAL');
  202.         Alinha(6);
  203.         writeln('1 - Mostrar conjuntos');
  204.         Alinha(8);
  205.         writeln('2 - União entre dois conjuntos');
  206.         Alinha(9);
  207.         writeln('3 - Intersecção entre dois conjuntos');
  208.         Alinha(10);
  209.         writeln('4 - Diferença entre dois conjuntos');
  210.         Alinha(12);
  211.         writeln('5 - Procurar elemento');
  212.         Alinha(13);
  213.         writeln('6 - Novo conjunto');
  214.         Alinha(15);
  215.         writeln('7 - Autor');
  216.         Alinha(17);
  217.         writeln('8 - Saír');
  218.         Alinha(20);
  219.         write('Opção: ');
  220.         readln(extra);
  221.         opcao:= extra[1];
  222.  
  223.         Case opcao of
  224.             '1': begin
  225.                     Titulo(28, 'Visualização dos Conjuntos');
  226.                     NomeConjunto('A');
  227.                     MostrarConjunto(x, n1);
  228.                     writeln;
  229.                     NomeConjunto('B');
  230.                     MostrarConjunto(y, n2);
  231.                     Pausa;
  232.                 end;
  233.             '2': begin
  234.                     Titulo(30, 'Reunião dos Conjuntos');
  235.                     UniaoConjunto(x, y, z, n1, n2, n3);
  236.                     MostrarConjunto(z, n3);
  237.                     Pausa;
  238.                 end;
  239.             '3': begin
  240.                     Titulo(30, 'Reunião dos Conjuntos');
  241.                     InterseccaoConjunto(x, y, z, n1, n2, n3);
  242.                     MostrarConjunto(z, n3);
  243.                     Pausa;
  244.                 end;
  245.             '4': begin
  246.                     Titulo(30, 'Reunião dos Conjuntos');
  247.                     DiferencaConjunto(x, y, z, n1, n2, n3);
  248.                     MostrarConjunto(z, n3);
  249.                     Pausa;
  250.                 end;
  251.             '5': repeat
  252.                     Titulo(30, 'Localização de Valor');
  253.                     write('valor a localizar: ');
  254.                     readln(valor);
  255.                     writeln;
  256.                     writeln('Conjunto A');
  257.                     ProcurarElemento(valor, x, n1);
  258.                     writeln;
  259.                     writeln;
  260.                     NomeConjunto('B');
  261.                     ProcurarElemento(valor, y, n2);
  262.                     writeln;
  263.                     writeln;
  264.                     write('Repetir (s/n): ');
  265.                     readln(extra);
  266.                     uprstring(extra, true);
  267.                     tecla:=  extra[1];
  268.                 until tecla = 'N';
  269.             '6': repeat
  270.                     desistir:=  false;
  271.                     Titulo(30, 'Definição de Conjuntos');
  272.                     write('Conjunto a editar (A, B, N: Saír): ');
  273.                     readln(extra);
  274.                     uprstring(extra, true);
  275.                     tecla:= extra[1];
  276.                     writeln;
  277.                     writeln;
  278.                     Case tecla of
  279.                         'A': begin
  280.                                 NomeConjunto('A');
  281.                                 ConstroiConjunto(x, n1);
  282.                             end;
  283.                         'B': begin
  284.                                 NomeConjunto('B');
  285.                                 ConstroiConjunto(y, n2);
  286.                             end;
  287.                         'N': desistir:= true;
  288.                     end;
  289.                    
  290.                     if desistir = false then
  291.                     begin
  292.                         writeln;
  293.                         write('Repetir (s/n): ');
  294.                         readln(extra);
  295.                         uprstring(extra, true);
  296.                         tecla:= extra[1];
  297.                     end;
  298.                 until tecla = 'N';
  299.             '7': begin
  300.                     Titulo(32, 'Autor do Programa');
  301.                     gotoxy(20, 6);
  302.                     writeln('Análise e Desenvolvimento de Algoritmos');
  303.                     gotoxy(22, 8);
  304.                     writeln('professor: António Ferreira Pereira');
  305.                     gotoxy(25, 11);
  306.                     writeln('Paulo G.P.');
  307.                     gotoxy(36, 12);
  308.                     writeln('23 134');
  309.                     gotoxy(1, 21);
  310.                     writeln('27 de Novembro de 2001');
  311.                     Pausa;
  312.                 end;
  313.             '8': halt;
  314.         end;
  315.     until opcao = '8';
  316. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement