Advertisement
Guest User

array de registro de comerciio

a guest
Oct 18th, 2012
437
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 6.27 KB | None | 0 0
  1. program ArrayComercio;
  2.  
  3.  
  4. uses
  5.   crt;
  6. const
  7.     max = 5; // cantidad maxima de productos
  8. type
  9.     // tipo de registro para cada producto
  10.     Rproducto = record
  11.     cod : integer; // codigo del producto
  12.       nom : string[20]; // nombre
  13.       prov :string[30]; // proveedor
  14.       prec : real; // precio
  15.    end;
  16.    // tipo de  array de registro
  17.    Tarray = array[1..max] of Rproducto;
  18.  
  19. procedure listado(reg:Tarray;len:integer;pos:integer);
  20. var  i : integer;
  21. begin
  22.     i := pos;
  23.    clrscr;
  24.     while (i <= len) do begin
  25.             write('Codigo de producto: ');
  26.          writeln(reg[i].cod);
  27.          write('Nombre:  ');
  28.          writeln(reg[i].nom);
  29.          write('Proveedor:  ');
  30.          writeln(reg[i].prov);
  31.          write('Precio:  $ ');
  32.          writeln(reg[i].prec:4:2);
  33.          i := i + 1;
  34.     end;
  35. end;
  36.  
  37. procedure ordenarXprecio(var reg:Tarray;len:integer);
  38. // ordenamiento burbuja por campo precio
  39. var ordenado : boolean;
  40. var aux:Rproducto;i:integer;
  41. begin
  42.     ordenado := false;
  43.     while (not ordenado) do begin
  44.            ordenado:= true;
  45.             for i := 1 to (len-1) do begin
  46.                 if (reg[i].prec > reg[i].prec) then
  47.                begin
  48.                    aux := reg[i+1];
  49.                    reg[i+1] := reg[i];
  50.                    reg[i] := aux;
  51.                    ordenado := false;
  52.                end;
  53.          end;
  54.     end;
  55.     writeln('Listado por precio Ascendente: ');
  56.     listado(reg,len,1);
  57. end;
  58.  
  59. procedure ordenarXprov(var reg:Tarray;len:integer);
  60. // ordenamiento burbuja por campo proveedor
  61. var ordenado : boolean;
  62. var aux:Rproducto;i:integer;
  63. begin
  64.     ordenado := false;
  65.     while (not ordenado) do begin
  66.            ordenado:= true;
  67.             for i := 1 to (len-1) do begin
  68.                 if (reg[i].prov > reg[i].prov) then
  69.                begin
  70.                    aux := reg[i+1];
  71.                    reg[i+1] := reg[i];
  72.                    reg[i] := aux;
  73.                    ordenado := false;
  74.                end;
  75.          end;
  76.     end;
  77.     writeln('Listado por orden alfabetico de proveedor ');
  78.     listado(reg,len,1);
  79. end;
  80.  
  81. procedure ordenarXnom(var reg:Tarray;len:integer);
  82. // ordenamiento burbuja por campo nombre
  83. var ordenado : boolean;
  84. var aux:Rproducto;i:integer;
  85. begin
  86.     ordenado := false;
  87.     while (not ordenado) do begin
  88.            ordenado:= true;
  89.             for i := 1 to (len-1) do begin
  90.                 if (reg[i].nom > reg[i].nom) then
  91.                begin
  92.                    aux := reg[i+1];
  93.                    reg[i+1] := reg[i];
  94.                    reg[i] := aux;
  95.                    ordenado := false;
  96.                end;
  97.          end;
  98.     end;
  99. end;
  100.  
  101. function busquedabinaria(reg:Tarray;len:integer;nom:string):integer;
  102. // busqueda binaria adaptada para buscar producto por nombre
  103. var i,j,k : integer;
  104. var encontrado : boolean;
  105. begin
  106.     encontrado:= false;
  107.     i := 1;
  108.     j := len;
  109.     while (i <= j) and (not encontrado) do begin
  110.             k := (i+j) div 2;
  111.          if (reg[k].nom = nom) then begin
  112.             encontrado:= true;
  113.          end else begin
  114.             if (reg[k].nom > nom) then begin
  115.                 i := k + 1;
  116.             end  else begin
  117.                 j := k - 1;
  118.             end;
  119.          end;
  120.     end;
  121.     if (i > j) then begin
  122.             busquedaBinaria := -1;
  123.     end else begin
  124.             busquedaBinaria := k;
  125.     end;
  126. end;
  127.  
  128. procedure buscar(reg:Tarray;len:integer);
  129. // procedimiento de busqueda de producto por nombre
  130. var pos:integer;nombre:string;
  131. begin
  132.     clrscr;
  133.     writeln('Busqueda de producto por nombre');
  134.     write('Nombre del producto: ');
  135.     readln(nombre);
  136.     pos := busquedaBinaria(reg,len,nombre);
  137.      if (pos < 0) then begin
  138.             writeln('El producto no se encuentra');
  139.          exit;
  140.     end else begin
  141.          listado(reg,len,pos);
  142.     end;
  143.     writeln('La busqueda ha finalizado');
  144.     writeln('Presione una tecla');
  145.     readkey();
  146. end;
  147.  
  148. function busquedaSecuencial(reg:Tarray;len:integer;num:integer):integer;
  149. var  i : integer;
  150. begin
  151.     i := 1;
  152.     while (i <= len) and (reg[i].cod <> num) do begin
  153.             i := i + 1;
  154.     end;
  155.     if (i > len) then
  156.             busquedaSecuencial := -1
  157.     else
  158.             busquedaSecuencial := i;
  159. end;
  160.  
  161. procedure insertar(var reg:Tarray;var len:integer);
  162. var
  163.     opc : char;i : integer; cod,pos:integer;
  164. begin
  165.     opc := 'S';
  166.      if (len = 0) then
  167.         i := 1
  168.     else
  169.         i := len;
  170.       writeln('Insertar nuevos productos');
  171.     while (opc = 'S') and (i <= max) do
  172.     begin
  173.         clrscr;
  174.         write('Codigo de producto: ');
  175.         readln(cod);
  176.         pos := busquedaSecuencial(reg,len,cod);
  177.         if (pos > 0) then
  178.                 writeln('El producto ya existe')
  179.         else begin
  180.               reg[i].cod := cod;
  181.               write('Nombre: ');
  182.               readln(reg[i].nom);
  183.               write('Proveedor: ');
  184.               readln(reg[i].prov);
  185.               write('Precio: ');
  186.               readln(reg[i].prec);
  187.               writeln;
  188.               len := len + 1;
  189.               i := i + 1;
  190.         end;
  191.         repeat
  192.                 writeln('Desea agregar otro producto (S/N): ');
  193.            opc := readkey;
  194.             opc := upcase(opc);
  195.         until (opc in ['S','N']);
  196.  
  197.     end;
  198. end;
  199.  
  200. procedure menu(reg:Tarray;len:integer);
  201. var fin : boolean; opc : char;
  202. begin
  203.      fin := false;
  204.     repeat
  205.             clrscr;
  206.          writeln('************MENU GENERAL*************');
  207.          writeln('Insertar Productos................[1]');
  208.          writeln('Orden Ascendente por precio.......[2]');
  209.          writeln('Orden Alafabetico por proveedor...[3]');
  210.          writeln('Orden Alfabetico por nombre.......[4]');
  211.          writeln('Buscar un producto................[5]');
  212.          writeln('Salir.............................[6]');
  213.          repeat
  214.             writeln('Escoja una opcion:  ');
  215.             opc := readkey;
  216.          until (opc in ['1'..'6']);
  217.          case opc of
  218.          '1' : insertar(reg,len);
  219.          '2' : ordenarXprecio(reg,len);
  220.          '3' : ordenarXprov(reg,len);
  221.          '4' : begin
  222.                ordenarXnom(reg,len);
  223.                listado(reg,len,1);
  224.                end;
  225.           '5' : buscar(reg,len);
  226.          '6' : fin := true;
  227.          end;
  228.     until fin;
  229. end;
  230.  
  231. // programa principal
  232. var
  233.     productos : Tarray;
  234.    len:integer;
  235. begin
  236.       clrscr;
  237.       len := 0;
  238.       menu(productos,len);
  239. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement