Advertisement
paulogp

Conjuntos (v. 1.0.3)

Aug 7th, 2011
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 6.46 KB | None | 0 0
  1. {* paulogp *}
  2. {* mac os 7 *}
  3. program Ada26p; {** versão número 2b **}
  4.  
  5. uses
  6.     MemTypes, QuickDraw, OSIntf;
  7.  
  8. type
  9.     Conjunto = ^Termo;
  10.     Termo = record
  11.                 valor: real;
  12.                 proxi, antri: CONJUNTO;
  13.             end;
  14.  
  15. const
  16.     N_MENUS = ['A'..'I'];
  17.     S_MENUS = ['A','B','S'];
  18.     M_MENU = 'S - Menu Principal';
  19.  
  20. var
  21.     def, ref: Conjunto;
  22.     opcao, menu: char;
  23.  
  24. {* Design do programa *}
  25.  
  26. {** colocação de um título no cabeçalho da página **}
  27. procedure titulo(x: integer; nome: string);
  28. var
  29.     i: integer;
  30.  
  31. begin
  32.     clrscr;
  33.     gotoxy(x, 2);
  34.     writeln(nome);
  35.     gotoxy(x, 3);
  36.     for i:= 1 to length(nome) do
  37.         write('~');
  38. end;
  39.  
  40. {** alinhamento do menu **}
  41. procedure alinha(y: integer; funcao: String);
  42. begin
  43.     gotoxy(23, y);
  44.     writeLn(Funcao);
  45. end;
  46.  
  47. {** facilidade de escrita **}
  48. procedure conj(nome: char);
  49. begin
  50.     writeln('Conjunto ',nome);
  51.     writeln('~~~~~~~~~~');
  52.     writeln;
  53. end;
  54.  
  55. {** colocação de uma barra e informação no rodapé da página **}
  56. procedure barra_Inferior(mensagem: string);
  57. var
  58.     i: integer;
  59.  
  60. begin
  61.     gotoxy(2, 22);
  62.     for i:= 1 to 70 do write('~');
  63.     gotoxy(2, 23);
  64.     write(mensagem);
  65. end;
  66.  
  67. {** mantém a informação visível até ser premida uma tecla **}
  68. procedure pausa;
  69. begin
  70.     barra_Inferior('          Prima uma tecla para voltar ao menu principal!');
  71.     readkey;
  72. end;
  73.  
  74. {* Fim do design do programa *}
  75.  
  76. {* Informações sobre o autor *}
  77.  
  78. procedure Autor;
  79. begin
  80.     Titulo(30, 'ACERCA DO AUTOR');
  81.     writeln;
  82.     writeln(' ':17, 'Analise e Desenvolvimento de Algoritmos');
  83.     writeln(' ':18, 'professor ####');
  84.     writeln;
  85.     writeln;
  86.     writeln(' ':23, 'Paulo G.P.');
  87.     writeln;
  88.     writeln(' ':23, 'Nuno Miguel Batista Brites');
  89.     writeln;
  90.     Pausa;
  91. end;
  92. {* Fim das informacoes sobre o autor *}
  93.  
  94. {* Operações com Conjuntos *}
  95.  
  96. {** inserção de um elemento no conjunto **}
  97. procedure junta(a: real; ne: integer; var ref: Conjunto; var ns: integer);
  98. begin
  99.     if ref = nil then
  100.     begin
  101.         new(ref);
  102.         With ref^ do
  103.         begin
  104.             valor:= a;
  105.             antri:= nil;
  106.             proxi:= nil;
  107.             ns:= ne + 1;
  108.         end;
  109.     end else
  110.     with ref^ do
  111.     begin
  112.         if a < valor then junta(a, ne, antri, ns) else
  113.             if a > valor then junta(a, ne, proxi, ns) else
  114.             begin
  115.                 write('ERRO! Duplicação de dados!');
  116.                 writeln;
  117.             end;
  118.     end;
  119. end;
  120.  
  121. {** definicao dos elementos de um conjunto **}
  122. procedure definir(var ref: Conjunto);
  123. var
  124.     n, ne, ns: integer;
  125.     a: real;
  126.  
  127. begin
  128.     Write(' Número de elementos: ');
  129.     readLn(n);
  130.     ref:= nil;
  131.     if n > 0 then
  132.     begin
  133.         ne:= 1;
  134.         repeat
  135.             writeln;
  136.             write('v[', ne:2, ']: ');
  137.             readln(a);
  138.             junta(a, ne, ref, ne);
  139.         until ne = n + 1;
  140.     end;
  141. end;
  142.  
  143. {** visualização dos elementos de um conjunto **}
  144. procedure mostrar(ref: Conjunto; linha: integer);
  145. begin
  146.     if ref <> nil then
  147.     with ref^ do
  148.     begin
  149.         mostrar(antri, linha + 1);
  150.         write(valor:2:2, ' ');
  151.  
  152.         if (linha mod 9) = 0 then
  153.         begin
  154.             writeln;
  155.             write('   ');
  156.         end;
  157.         mostrar(proxi, linha + 1);
  158.     end;
  159. end;
  160.  
  161. {** contador de elementos de um conjunto **}
  162. procedure contador(ref: Conjunto; var n: integer);
  163. var
  164.     aux: Conjunto;
  165.  
  166. begin
  167.     n:= 0;
  168.     aux:= ref;
  169.     while aux <> nil do
  170.     begin
  171.         aux:= aux^.antri;
  172.         n:= n + 1;
  173.     end;
  174.  
  175.     while ref <> nil do
  176.     begin
  177.         ref:= ref^.proxi;
  178.         n:= n + 1;
  179.     end;
  180. end;
  181.  
  182. {** eliminação dos elementos de um conjunto **}
  183. procedure apagar(var ref: Conjunto);
  184. var
  185.     refaux, refapa : Conjunto;
  186.     N: integer;
  187.  
  188. begin
  189.     n:= 0;
  190.     refaux:= ref;
  191.     while refaux <> nil do
  192.     begin
  193.         refapa:= refaux;
  194.         refaux:= refaux^.proxi;
  195.         n:= n + 1;
  196.         dispose(refapa);
  197.     end;
  198.     ref:= refaux;
  199. end;
  200.  
  201. {* Fim das operações com conjuntos *}
  202.  
  203. procedure teste(ref: Conjunto);
  204. var
  205.     c1: Conjunto;
  206.  
  207. begin
  208.     mostrar(ref, 1);
  209.     writeln;
  210.     writeln;
  211.     c1:= ref;
  212.     while ref <> nil do
  213.     begin
  214.         ref^.antri:= ref;
  215.         write(ref^.valor:2:2, 'ª ');
  216.         ref:= ref^.proxi;
  217.     end;
  218.     writeln;
  219.     ref:= c1;
  220.     while ref <> nil do
  221.     begin
  222.         write(ref^.valor:2:2, 'ª ');
  223.         ref:= ref^.antri;
  224.     end;
  225. end;
  226.  
  227. {** facilidade de escrita -> estrutura de um sub-menu **}
  228. procedure submenu(ref: Conjunto; nome: char; y: integer);
  229. var
  230.     straux: string;
  231.     n: integer;
  232.  
  233. begin
  234.     contador(ref, n);
  235.     gotoxy(23, y);
  236.     if n = 0 then writeln(nome,' - Conjunto ',nome,':  ', nome,' = { }.') else
  237.         if n = 1 then writeln(nome,' - Conjunto ',nome,': 1  elemento.') else
  238.             writeln(nome,' - Conjunto ',nome,':', n:3,' elementos.');
  239. end;
  240.  
  241. {* Corpo principal do programa *}
  242.  
  243. begin
  244.     repeat
  245.     Titulo(23, 'PROGRAMA DE LISTAS VARIAVEIS');
  246.     Alinha(05, 'A - Definir conjuntos');
  247.     Alinha(06, 'B - Visualizar conjuntos');
  248.     Alinha(07, 'C - Eliminar conjunto');
  249.     Alinha(09, 'D - Adicionar elemento');
  250.     Alinha(10, 'E - Retirar elemento');
  251.     Alinha(12, 'F - Uniao de conjuntos');
  252.     Alinha(13, 'G - Interseccao de conjuntos');
  253.     Alinha(14, 'H - Diferenca de conjuntos');
  254.     Alinha(16, 'I - Acerca do autor');
  255.     Barra_Inferior('S - Sair');
  256.     gotoxy(23, 19);
  257.     write('Opcao: ');
  258.  
  259.     repeat
  260.         opcao:= readKey;
  261.         opcao:= upcase(opcao);
  262.     until (opcao in N_MENUS) or (opcao = 'S');
  263.  
  264.     case opcao of
  265.         'A': repeat
  266.                 titulo(25, 'DEFINIÇÃO DE CONJUNTOS');
  267.                 alinha(6, '  Conjunto a ser definido');
  268.  
  269.                 submenu(ref, 'A', 9);
  270.                 submenu(def, 'B', 11);
  271.  
  272.                 Barra_Inferior(M_MENU);
  273.  
  274.                 gotoxy(25, 14);
  275.                 write('Opção: ');
  276.  
  277.                 repeat
  278.                     menu:= readkey;
  279.                     menu:= upcase(menu);
  280.                 until menu in S_MENUS;
  281.  
  282.                 case menu of
  283.                     'A': begin
  284.                             titulo(24, 'DEFINIÇÃO DO CONJUNTO A');
  285.                             writeln;
  286.                             writeln;
  287.                             definir(ref);
  288.                         end;
  289.                        
  290.                     'B': begin
  291.                             titulo(24, 'DEFINIÇÃO DO CONJUNTO B');
  292.                             writeln;
  293.                             writeln;
  294.                             definir(def);
  295.                         end;
  296.                 end;
  297.             until menu = 'S';
  298.  
  299.         'B': begin
  300.                 titulo(23, 'VISUALIZAÇÃO DE CONJUNTOS');
  301.                 writeln;
  302.  
  303.                 writeln;
  304.                 conj('A');
  305.                 mostrar(ref, 2);
  306.                 writeln;
  307.                 writeln;
  308.  
  309.                 writeln;
  310.                 conj('B');
  311.                 mostrar(def, 2);
  312.                 pausa;
  313.             end;
  314.  
  315.         'C': repeat
  316.                 titulo(25, 'ELIMINAÇÃO DE CONJUNTOS');
  317.                 alinha(6, '  Conjunto a ser eliminado');
  318.  
  319.                 submenu(ref, 'A', 9);
  320.                 submenu(def, 'B', 11);
  321.  
  322.                 Barra_Inferior(M_MENU);
  323.  
  324.                 gotoxy(25, 14);
  325.                 write('Opção: ');
  326.                 repeat
  327.                     menu:= readkey;
  328.                     menu:= upcase(menu);
  329.                 until menu in S_MENUS;
  330.  
  331.                 case menu of
  332.                     'A': apagar(ref);
  333.                     'B': apagar(def);
  334.                 end;
  335.             until menu = 'S';
  336.  
  337.         'I': autor;
  338.  
  339.         'H': begin
  340.                 titulo(25,'ZONA DE TESTES');
  341.                 writeln;
  342.                 writeln;
  343.                 teste(ref);
  344.                 pausa;
  345.             end;
  346.         end;
  347.     until opcao = 'S';
  348.     apagar(ref);
  349.     apagar(def);
  350.     donewincrt;
  351. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement