Advertisement
crispm50

parcial

Oct 5th, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 7.75 KB | None | 0 0
  1. program parcial2017;
  2. uses crt;
  3. //van los registros , los vectores matrices,
  4. type
  5.   cadena=String[50];
  6.  
  7.   Fecha=record
  8.      dia:integer;
  9.      mes:integer;
  10.      anio:integer
  11.   end;
  12.  
  13.   Producto=record
  14.      codigo:integer;
  15.      descripcion:cadena;
  16.      tipo:char;
  17.      precio:real
  18.   end;
  19.  
  20.   tvProductos=array[1..100] of Producto;  //es el vector
  21.  
  22.  
  23. //declaran las var del algoritmo principal
  24. var
  25.   opc,n:integer;
  26.   resp:char;
  27.   v:tvProductos;
  28.  
  29.  
  30.  
  31.  
  32. //procedimientos y funciones
  33. procedure menu(var opc:integer); //por referencia cambia .. var
  34. begin
  35.      writeln('1-cargar las ventas de los productos');
  36.      writeln('2-mostrar productos de un tipo, ordenado x descrip. y importe total');
  37.      writeln('3-agregar una venta');
  38.      writeln('4-buscar producto por descripcion');
  39.      writeln('5-mostrar todo el vector');
  40.  
  41.      writeln('ingrese una opcion: ');
  42.      readln(opc);
  43.  
  44. end;
  45.  
  46. function buscarXCodigo(v:tvProductos;n:integer; codigo: integer): integer;
  47. var
  48.   pos,i:integer;
  49.  
  50. begin
  51.      pos:=0;
  52.      for i:=1 to n do
  53.      begin
  54.           if(v[i].codigo = codigo) then
  55.           begin
  56.                pos:=i;
  57.           end;
  58.      end;
  59.  
  60.      buscarXCodigo:=pos;
  61. end;
  62.  
  63.  
  64. procedure cargarUnProducto(var e:Producto );
  65. var
  66.   codigoBus,posBus:integer;
  67. begin
  68.      writeln('*********************');
  69.      writeln('ingrese un codigo:');
  70.      readln(codigoBus);
  71.      posBus:=buscarXCodigo(v,n,codigoBus);
  72.      while(posBus<>0)do
  73.      begin
  74.             writeln('codigo repetido........');
  75.             writeln('ingrese otro codigo:');
  76.             readln(codigoBus);
  77.             posBus:=buscarXCodigo(v,n,codigoBus);
  78.      end;
  79.  
  80.  
  81.      e.codigo:=codigoBus;//el codigo que me ingreso el usuario
  82.      WriteLn('ingrese descripcion:');
  83.      readln(e.descripcion);
  84.      WriteLn('ingrese el tipo:');
  85.      readln(e.tipo);
  86.      WriteLn('ingrese precio:');
  87.      readln(e.precio);
  88. end;
  89.  
  90.  
  91.  
  92. procedure mostrarUnProducto( e:Producto);
  93. begin
  94.      writeln('*********************');
  95.      writeln('codigo= ', e.codigo);
  96.      writeln('descripcion=', e.descripcion);
  97.      writeln('tipo=', e.tipo);
  98.      writeln('precio=', e.precio:4:2);
  99.  
  100. end;
  101.  
  102. procedure cargarVectorDeProductos(var v:tvProductos;var N:integer);
  103. var
  104.   i:integer;
  105. begin
  106.      writeln('Ing la cantidad de Producto N: ');
  107.      readln(N);
  108.      for i:=1 to N do
  109.      begin
  110.           cargarUnProducto(v[i]);
  111.      end;
  112. end;
  113.  
  114. procedure mostrarVectorDeProductos( v:tvProductos; N:integer);
  115. var
  116.   i:integer;
  117. begin
  118.      for i:=1 to N do
  119.      begin
  120.           mostrarUnProducto(v[i]);
  121.      end;
  122. end;
  123.  
  124.  
  125.  
  126.  
  127. Procedure Swap(Var x, y : Producto);
  128. Var
  129.   //este es le procedimiento de intercambio intercambio 2 registro personas
  130.    aux: Producto;
  131. Begin
  132.   aux:= x;
  133.   x:= y;
  134.   y:= aux;
  135. End;
  136.  
  137.  
  138. (*-------------------------- S H E L L S O R T(METODO SHELL) CRECIENTE ---------------------*)
  139. Procedure ShellSortCreciente(Var X : tvProductos; N: Integer);
  140.           Var
  141.              Done: Boolean;
  142.              Jump,I,J: Integer;
  143.           Begin
  144.                Jump := N;
  145.                While (Jump > 1) Do
  146.                      Begin
  147.                           Jump := Jump Div 2;
  148.                           Repeat
  149.                                 Done := true;
  150.                                 For J := 1 To (N - Jump) Do
  151.                                     Begin
  152.                                          I := J + Jump;
  153.                                  //AGREGAR LOS CAMPOS DEL REGISTRO QUE SE QUIERE ORDENAR < creciente
  154.                                          If (X[J].descripcion > X[I].descripcion) Then //<---aqui elijo el campo a ordenar
  155.                                             Begin
  156.                                                  Swap(X[J], X[I]);
  157.                                                  Done := false
  158.                                             End;
  159.                                     End;
  160.                           Until Done;
  161.                      End;
  162.                 mostrarVectorDeProductos(X,N); //mostramos el vector completo
  163.  
  164.           End;
  165.  
  166.  
  167. (*-------------------------- S H E L L S O R T(METODO SHELL) DECRECIENTE ---------------------*)
  168. Procedure ShellSortDecreciente(Var X : tvProductos; N: Integer);
  169.           Var
  170.              Done: Boolean;
  171.              Jump,I,J: Integer;
  172.           Begin
  173.                Jump := N;
  174.                While (Jump > 1) Do
  175.                      Begin
  176.                           Jump := Jump Div 2;
  177.                           Repeat
  178.                                 Done := true;
  179.                                 For J := 1 To (N - Jump) Do
  180.                                     Begin
  181.                                          I := J + Jump;
  182.                                  //AGREGAR LOS CAMPOS DEL REGISTRO QUE SE QUIERE ORDENAR > decreciente
  183.                                          If (X[J].descripcion < X[I].descripcion) Then //<---aqui elijo el campo a ordenar
  184.                                             Begin
  185.                                                  Swap(X[J], X[I]);
  186.                                                  Done := false
  187.                                             End;
  188.                                     End;
  189.                           Until Done;
  190.                      End;
  191.                 mostrarVectorDeProductos(X,N); //mostramos el vector completo
  192.  
  193.           End;
  194.  
  195.  
  196. procedure agregar(var v:tvProductos;var n:integer;elemento:Producto);
  197. begin
  198.   v[n]:=elemento;
  199.   n:=n+1;
  200. end;
  201.  
  202. procedure mostarProdOrdenadoXDescripcion(v:tvProductos;n:integer);
  203. var
  204.    n2,i:integer;
  205.    v2:tvProductos;
  206.    suma:real;
  207.    tipo:char;
  208. begin
  209.   n2:=1;
  210.   suma:=0;
  211.   writeln('ingrese un tipo de producto');
  212.   readln(tipo);
  213.  
  214.   for i:=1 to n do
  215.   begin
  216.     if(v[i].tipo = tipo)then
  217.     begin
  218.         agregar(v2,n2,v[i]);
  219.         suma:=suma+v[i].precio;
  220.     end;
  221.   end;
  222.   writeln('*******************');
  223.   ShellSortCreciente(v2,n2);
  224.   writeln('*******************');
  225.   writeln('el acumulado es: ', suma:4:2);
  226.   writeln('*******************');
  227. end;
  228.  
  229. procedure agregarProducto(var v:tvProductos ;var n:integer);
  230. var
  231.    codigoBus,posBus,pos,i:integer;
  232. begin
  233.      writeln('*********************');
  234.      writeln('ingrese un codigo:');
  235.      readln(codigoBus);
  236.      posBus:=buscarXCodigo(v,n,codigoBus);
  237.      while(posBus<>0)do
  238.      begin
  239.             writeln('codigo repetido........');
  240.             writeln('ingrese otro codigo:');
  241.             readln(codigoBus);
  242.             posBus:=buscarXCodigo(v,n,codigoBus);
  243.      end;
  244.      n:=n+1;
  245.      v[n].codigo:=codigoBus;//el codigo que me ingreso el usuario
  246.      WriteLn('ingrese descripcion:');
  247.      readln(v[n].descripcion);
  248.      writeln('ingrese el tipo: ');
  249.      readln(v[n].tipo);
  250.      WriteLn('ingrese precio:');
  251.      readln(v[n].precio);
  252.  
  253. end;
  254.  
  255.  
  256. procedure buscarXDescripcion(v:tvProductos;n:integer);
  257. var
  258.   i,res:integer;
  259.   descripcion:cadena;
  260.  
  261. begin
  262.       writeln('ingrese la descripcion a buscar ');
  263.       readln(descripcion);
  264.  
  265.      for i:=1 to n do
  266.      begin
  267.           res:=Pos(descripcion,v[i].descripcion);
  268.           if (res<>0) then
  269.           begin
  270.               mostrarUnProducto(v[i]);
  271.           end;
  272.      end;
  273. end;
  274.  
  275.  
  276.  
  277.  
  278.  
  279.  
  280. //el principal
  281. begin
  282.      repeat
  283.           ClrScr;//limpio la pantalla
  284.            menu(opc);
  285.            case opc of
  286.                 1:cargarVectorDeProductos(v,n);
  287.                 2:mostarProdOrdenadoXDescripcion(v,n);
  288.                 3:agregarProducto(v,n);
  289.                 4:buscarXDescripcion(v,n);
  290.                 5:mostrarVectorDeProductos(v,n);
  291.  
  292.            end;
  293.  
  294.           writeln('DESEA CONTINUAR S/N: ');   //la repeticion es apedido del operador
  295.           readln(resp);
  296.  
  297.      until (resp='N')or(resp='n');
  298.      readKey;         //hace una pausa a la ejecucion y tiene que estar..
  299.  
  300. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement