Advertisement
mrevilca31

TP 5 punto 1

Sep 20th, 2017
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 9.25 KB | None | 0 0
  1. program TP5_Punto1;
  2.  
  3. uses
  4. crt;
  5.  
  6. type
  7.   cadena=string[30];
  8.   TRegistro=Record
  9.     serie:integer;
  10.     marca:cadena;
  11.     modelo:cadena;
  12.     precio:real;
  13.     procesador:real;
  14.     camPrincipal:integer;
  15.     camFrontal:integer;
  16.     display:real;
  17.     resDisplay:integer;
  18.     memInterna:integer;
  19.     memExterna:integer;
  20.     SO:cadena;
  21.     bateria:integer;
  22.     estado:cadena;
  23.     end;
  24.   TVector=array[1..100] of TRegistro;
  25.  
  26. var
  27.   registro:TRegistro;
  28.   vector:TVector;
  29.   n,opc:integer;
  30.  
  31. procedure cargarRegistro(var registro:TRegistro);
  32. begin
  33.   with registro do
  34.     begin
  35.        ClrScr();
  36.        Write('Num. de serie: '); ReadLn(serie);
  37.        Write('Marca: '); ReadLn(marca);
  38.        Write('Modelo: '); ReadLn(modelo);
  39.        Write('Precio: $'); ReadLn(precio);
  40.        Write('Procesador: '); ReadLn(procesador);
  41.        Write('Res. Cam. Principal: '); ReadLn(camPrincipal);
  42.        Write('Res. Cam. Frontal: '); ReadLn(camFrontal);
  43.        Write('Tamanio Dislay: '); ReadLn(display);
  44.        Write('Resolusion del display: '); ReadLn(resDisplay);
  45.        Write('Memoria interna: '); ReadLn(memInterna);
  46.        Write('Memoria externa Maxima: '); ReadLn(memExterna);
  47.        Write('Sistema Operativo: '); ReadLn(SO);
  48.        Write('Capacidad de bateria: '); ReadLn(bateria);
  49.        Write('Estado: '); ReadLn(estado);
  50.        end;
  51. end;
  52.  
  53. procedure cargarVector(var vector: TVector;var  n:integer);
  54. var
  55.   i:integer;
  56. begin
  57.   Clrscr();
  58.   Write('Cantidad de equipos: ');
  59.   ReadLn(n);
  60.   for i:=1 to n do
  61.   begin
  62.     cargarRegistro(vector[i]);
  63.   end;
  64. end;
  65.  
  66. procedure mostrarRegistro(registro:TRegistro);
  67. begin
  68.      with registro do
  69.      begin
  70.        WriteLn('Num. de serie: ',serie);
  71.        WriteLn('Marca: ',marca);
  72.        WriteLn('Modelo: ',modelo);
  73.        WriteLn('Precio: $',precio:2:2);
  74.        WriteLn('Procesador: ',procesador:2:2);
  75.        WriteLn('Resolusion camara principal: ',camPrincipal);
  76.        WriteLn('Resolusion camara frontal: ',camFrontal);
  77.        WriteLn('Tamanio display: ',display:2:2);
  78.        WriteLn('Resolusion display: ',resDisplay);
  79.        WriteLn('Memoria interna: ',memInterna,'Gb');
  80.        WriteLn('Memoria externa maxima: ',memExterna,'Gb');
  81.        WriteLn('Sistema Operativo: ',SO);
  82.        WriteLn('Capacidad de bateria: ',bateria,' mA');
  83.        WriteLn('Estado del telefono: ',estado);
  84.      end;
  85. end;
  86.  
  87. procedure mostrarVector(vector: TVector; n: Integer);
  88. var
  89.   i: integer;
  90. begin
  91.   for i:=1 to n do
  92.   begin
  93.     mostrarRegistro(vector[i]);
  94.     WriteLn();
  95.   end;
  96.   ReadKey();
  97. end;
  98.  
  99. procedure selectionSortxResCamPrincipal( var aux:Tvector; n:integer);
  100. var
  101. i,k,j:integer;
  102. y:TRegistro;
  103. Begin
  104.   For I := 1 To N - 1 Do
  105.     Begin
  106.       K := I;
  107.       y := aux[I];
  108.       For J := (I + 1) To N Do
  109.        If (aux[J].camPrincipal < y.camPrincipal) Then //es ordenado por el campo resolusion camara principal
  110.         Begin
  111.          K := J;
  112.          Y := aux[J];
  113.         End;
  114.       aux[K] := aux[I];
  115.       aux[I] := Y;
  116.     End;
  117. end;
  118.  
  119. procedure porResCamPrincipal(vector:TVector; n:integer);  // Mostrar los equipos con resolución de cámara principal mayor o igual a un valor dado
  120. var
  121.   aux:TVector;
  122.   resolusion,i:integer;
  123.   band:boolean;
  124. begin
  125.   Clrscr();
  126.   aux:=vector;
  127.   selectionSortxResCamPrincipal(aux,n);
  128.   WriteLn('Indicar resolusion de camara principal');
  129.   ReadLn(resolusion);
  130.   band:=true;
  131.   for i:=1 to n do
  132.    begin
  133.         if(aux[i].camPrincipal>=resolusion)then
  134.          begin
  135.           mostrarRegistro(aux[i]);
  136.           band:=false;
  137.           WriteLn();
  138.          end;
  139.    end;
  140.   if band then
  141.    begin
  142.      WriteLn('No hay ningun equipo con las especificaciones dadas');
  143.    end;
  144.   ReadKey();
  145. end;
  146.  
  147. procedure selectionSortxPrecio(var aux:Tvector;n:integer);
  148. var
  149. i,k,j:integer;
  150. y:TRegistro;
  151. Begin
  152.     For I := 1 To N - 1 Do
  153.       Begin
  154.         K := I;
  155.         y := aux[I];
  156.         For J := (I + 1) To N Do
  157.          If (aux[J].precio < y.precio) Then //es ordenado por el campo precio.
  158.           Begin
  159.            K := J;
  160.            Y := aux[J];
  161.           End;
  162.         aux[K] := aux[I];
  163.         aux[I] := Y;
  164.       End;
  165. end;
  166.  
  167. procedure selectionSortxModelo(var aux:Tvector;n:integer);
  168. var
  169. i,k,j:integer;
  170. y:TRegistro; //es del tipo del registro.
  171. Begin
  172.     For I := 1 To N - 1 Do
  173.       Begin
  174.         K := I;
  175.         y := aux[I];
  176.         For J := (I + 1) To N Do
  177.          If (aux[J].modelo < y.modelo) Then //es ordenado por el campo modelo.
  178.           Begin
  179.            K := J;
  180.            Y := aux[J];
  181.           End;
  182.         aux[K] := aux[I];
  183.         aux[I] := Y;
  184.       End;
  185. end;
  186.  
  187. procedure porIntervalodePrecio(vector:TVector; n:integer); //Mostrar los equipos cuyo precio se encuentre dentro de un intervalo mínimo y máximo dados.
  188. var
  189.   aux:TVector;
  190.   i:integer;
  191.   band:boolean;
  192.   minimo, maximo:real;
  193. begin
  194.   Clrscr();
  195.   aux:=vector;
  196.   selectionSortxPrecio(aux,n);
  197.   Write('Precio Minimo: $');
  198.   ReadLn(minimo);
  199.   Write('Precio Maximo: $');
  200.   ReadLn(maximo);
  201.   ClrScr();
  202.   band:=true;
  203.   for i:=1 to n do
  204.   begin
  205.      if(aux[i].precio>=minimo)and(aux[i].precio<=maximo)then
  206.       begin
  207.         mostrarRegistro(aux[i]);
  208.         band:=false;
  209.         WriteLn();
  210.       end;
  211.   end;
  212.   if band then
  213.    begin
  214.      WriteLn('No hay ningun equipo dentro del intervalo especificado');
  215.    end;
  216.   ReadKey();
  217. end;
  218.  
  219. procedure MarcaDadaxPrecio(vector:TVector; n:integer);
  220. var
  221.   marcaDada:cadena;
  222.   aux:TVector;
  223.   i,tamAux:integer;
  224. begin
  225.   Clrscr();
  226.   Write('Ingrese Marca de celular: ');
  227.   ReadLn(marcaDada);
  228.   tamAux:=0;
  229.   for i:=1 to n do
  230.   begin
  231.     if (vector[i].marca=marcaDada) then
  232.      begin
  233.        tamAux:=tamAux+1;
  234.        aux[tamAux]:=vector[i];
  235.      end;
  236.   end;
  237.   if (tamAux=0) then
  238.    begin
  239.      WriteLn('La marca de celular que ingreso no esta disponible');
  240.      ReadKey();
  241.    end
  242.   else
  243.    begin
  244.      selectionSortxPrecio(aux,tamAux);
  245.    end;
  246.    mostrarVector(aux,tamAux);
  247. end;
  248.  
  249. procedure MarcaDadaxModelo(vector:TVector; n:integer);
  250. var
  251.   marcaDada:cadena;
  252.   aux:TVector;
  253.   i,tamAux:integer;
  254. begin
  255.   Clrscr();
  256.   Write('Ingrese Marca de celular: ');
  257.   ReadLn(marcaDada);
  258.   tamAux:=0;
  259.   for i:=1 to n do
  260.   begin
  261.     if (vector[i].marca=marcaDada) then
  262.      begin
  263.        tamAux:=tamAux+1;
  264.        aux[tamAux]:=vector[i];
  265.      end;
  266.   end;
  267.   if (tamAux=0) then
  268.    begin
  269.      WriteLn('La marca de celular que ingreso no esta disponible');
  270.      ReadKey();
  271.    end
  272.   else
  273.    begin
  274.      selectionSortxModelo(aux,tamAux);
  275.    end;
  276.    mostrarVector(aux,tamAux);
  277. end;
  278.  
  279. function Binaria(vector:tVector; n:integer; k:integer):integer;
  280. var
  281.   i,j,m :integer;
  282.   encontrado :boolean;
  283. begin
  284.   encontrado:=false;
  285.   i:=1;
  286.   j:=n;
  287.   while (Not encontrado) and (i <= j) do
  288.     begin
  289.       m:=(i + j) div 2;
  290.       if vector[m].serie = k then
  291.         encontrado:=true
  292.       else
  293.         if k > vector[m].serie then
  294.           i:= m + 1
  295.         else
  296.           j:= m - 1;
  297.     end;
  298.   if Not encontrado then
  299.     m:=0;
  300.   Binaria:= m;
  301. end; {fin Binaria}
  302.  
  303. procedure Quick_Sort(primero,ultimo:integer; var vector:tVector);  //ordena por serie
  304. var
  305.   i,j,m, pivote: integer;
  306.   aux:TRegistro;
  307. begin
  308.   i:=primero;
  309.   j:=ultimo;
  310.   m:=(primero + ultimo) div 2;
  311.   pivote:=vector[m].serie;
  312.   repeat
  313.     while vector[i].serie < pivote do
  314.       inc(i);
  315.     while vector[j].serie > pivote do
  316.       dec(j);
  317.     if i<=j then
  318.      begin
  319.       aux:=vector[i];
  320.       vector[i]:=vector[j];
  321.       vector[j]:=aux;
  322.       inc(i);
  323.       dec(j);
  324.      end;
  325.   until i > j;
  326.   if primero < j then
  327.     Quick_Sort(primero,j,vector);
  328.   if ultimo > i then
  329.     Quick_Sort(i,ultimo,vector);
  330. end; {fin Quick_Sort}
  331.  
  332. procedure venderEquipo(var vector:TVector; n:integer);  //Vender un equipo. Consiste en cambiar el estado de “En Stock” a “Vendido” y sólo podrá realizarse en caso de que el equipo este en stock, en caso contrario debe mostrarse un mensaje de error.
  333. var
  334.   serie, pos:integer;
  335. begin
  336.   Clrscr();
  337.   Write('Ingrese Numero de serie de equipo a vender: ');
  338.   ReadLn(serie);
  339.   Quick_Sort(1,n,vector);
  340.   pos:= Binaria(vector,n,serie);
  341.   if (vector[pos].estado='en stock')or(vector[pos].estado='EN STOCK') then
  342.    begin
  343.     vector[pos].estado:='Vendido';
  344.     WriteLn('Operacion exitosa. El Equipo fue vendido');
  345.     ReadKey();
  346.    end
  347.   else
  348.    begin
  349.     WriteLn('ERROR: El equipo no esta disponible.');
  350.     ReadKey();
  351.    end;
  352. end;
  353.  
  354. procedure menu(var opc:integer);
  355.   begin
  356.      WriteLn('Seleccione una opcion');
  357.      WriteLn('1: Cargar Vector');
  358.      WriteLn('2: Mostrar Vector');
  359.      WriteLn('3: Mostrar por resolusion');
  360.      WriteLn('4: Mostrar por intervalo de precio');
  361.      WriteLn('5: Vender equipo');
  362.      WriteLn('6: Dada una marca ordenar por modelo');
  363.      WriteLn('7: Dada una marca ordenar por precio');
  364.      WriteLn('0: Salir');
  365.      ReadLn(opc);
  366.   end;
  367.  
  368. begin //principal
  369.   repeat
  370.      ClrScr();
  371.      menu(opc);
  372.      case opc of
  373.        0: WriteLn('terminado');
  374.        1: cargarVector(vector,n);
  375.        2: mostrarVector(vector,n);
  376.        3: porResCamPrincipal(vector,n);
  377.        4: porIntervalodePrecio(vector,n);
  378.        5: venderEquipo(vector,n);
  379.        6: MarcaDadaxPrecio(vector,n);
  380.        7: MarcaDadaxModelo(vector,n);
  381.        else
  382.         writeln('Opcion invalida..');
  383.        end;
  384.   until opc = 0;
  385. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement