Advertisement
paulogp

Conjuntos (v. 1.0.2)

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