Advertisement
eduardovp97

Ex2 2015-1 Pregunta 1

Nov 30th, 2015
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 4.66 KB | None | 0 0
  1. program project1;
  2. Const MAXINGR = 30;
  3. Type TIngred = Record
  4.     codigo : Integer;
  5.     cantidad : Real;
  6.     end;
  7.   ArrIngred = array[0..MAXINGR] of TIngred;
  8.   Str25 = String[25];
  9.   TPlato = Record
  10.     codigo : Integer;
  11.     nombre : Str25;
  12.     ingreds : ArrIngred;
  13.   end;
  14.   TArchBin = File of TPlato;
  15.  
  16.  
  17.  
  18. //procedure BorrarEspacios(var cadenota: St60);
  19. //var p:Integer;
  20. //begin
  21. //
  22. //  p := pos('  ',cadenota);
  23. //  while p <> 0 do begin
  24. //    delete(cadenota,p,1);
  25. //    p := pos('  ',cadenota);
  26. //  end;
  27. //  p := pos(' ',cadenota);
  28. //  if p=1 then delete(cadenota,1,1);
  29. //end;
  30.  
  31.  
  32. //function sacaPalabra(cadena:string):string;
  33. //  const control: String ='';
  34. //  delimitador:Integer = 0;
  35. //  var cadAux:String;
  36. //  posIni,cantCar:Integer;
  37. //
  38. //begin
  39. //  //verificamos si el contenido de la variable de control estatica
  40. //  //coincide con el contenido del argumento
  41. //  if cadena <> control then begin
  42. //  //si son diferentes se establece el delimitador de palabras
  43. //  //en el primer caracter de la cadena y
  44. //  delimitador := 1;
  45. //  //se guarda la nueva cadena para ser comparada en el
  46. //  //siguiente llamado a la función
  47. //  control := cadena;
  48. //  end;
  49. //  //si las cadenas son iguales se mantiene el valor del delimitador
  50. //  //que se estableció en el llamado anterior
  51. //  //movemos la delimitador de modo de saltar los espacios en blanco iniciales
  52. //  while (delimitadr <=length(cadena)) and (cadena[delimitador] = ' ') do
  53. //  inc(delimitador);
  54. //  //marcamos el inicio de la palabra
  55. //  posIni := delimitador;
  56. //  //buscamos el fin de la palabra
  57. //  contCar:=0;
  58. //
  59. //  while (delimitador<length(cadena)) and (cadena[delimitador]<>' ') do begin
  60. //  inc(delimitador);
  61. //  inc(cantCar);
  62. //  end;
  63. //  sacaPaalabra := copy(cadena,posIni,cantCar);
  64. //end;
  65.  
  66.  
  67. //ORDENAR BINARIO
  68. //
  69. //n := filesize(arch);
  70. //for i:=0 to n-2 do begin
  71. //  for j:=i+1 to n-1 do begin
  72. //      seek(arch,i); read(arch,regI);
  73. //      seek(arch,j); read(arch,regJ);
  74. //      if CONDICION  then begin
  75. //         seek(arch,i); write(arch,regJ);
  76. //         seek(arch,j); write(arch,regI)
  77. //      end;
  78. //  end;
  79. //end;
  80.  
  81. procedure prepararArchivos(var archT:Text; var archB:TArchBin);
  82. var nomb:String;
  83. begin
  84.   writeln('Ingrese el nombre del archivo');
  85.   readln(nomb);
  86.   assign(archT,nomb);
  87.   reset(archT);
  88.  
  89.   assign(archB,'platos.bin');
  90.   rewrite(archB);
  91. end;
  92.  
  93. procedure cerrarArchivos(var archT:Text; var archB:TArchBin);
  94. begin
  95.   close(archT);
  96.   close(archB);
  97. end;
  98.  
  99.  
  100. procedure borrarEspacios(var cad:String);
  101. var p:Integer;
  102. begin
  103.   cad := cad+ ' ';
  104.   p := pos('  ',cad);
  105.   while p<>0 do begin
  106.     delete(cad,p,1);
  107.     p := pos('  ',cad);
  108.   end;
  109.   p := pos(' ',cad);
  110.   if p=1 then delete(cad,1,1);
  111.   p := pos(' ',cad);
  112. end;
  113.  
  114. function sacaPalabra(var cad:String):String;
  115. var p:Integer;
  116. begin
  117.   p := pos(' ',cad);
  118.   if p<>0 then begin
  119.     sacaPalabra := copy(cad,1,p-1);
  120.     delete(cad,1,p);
  121.   end else sacaPalabra := '';
  122. end;
  123.  
  124. procedure separarDatos(var cad:String; var nombPl:Str25; var ingreds: ArrIngred);
  125. var aux :String;
  126.   nomb : Str25;
  127.   cod,cErr,i,numIng:Integer;
  128.   cant:Real;
  129.   ing:ArrIngred;
  130. begin
  131.   borrarEspacios(cad);
  132.   nomb := '';
  133.   repeat
  134.     aux := sacaPalabra(cad);
  135.     val(aux,cod,cErr);
  136.     if(cErr<>0) then nomb := nomb + aux;
  137.   until (cErr=0);
  138.   numIng := 0;
  139.   aux := sacaPalabra(cad);
  140.   val(aux,cant);
  141.   numIng:=0;
  142.   while (cod<>0) do begin
  143.     inc(numIng);
  144.     ing[numIng].codigo := cod;
  145.     ing[numIng].cantidad := cant;
  146.     aux := sacaPalabra(cad);
  147.     val(aux,cod);
  148.     aux := sacaPalabra(cad);
  149.     val(aux,cant,cErr);
  150.     if(cErr<>0) then cod:=0;
  151.   end;
  152.   ing[0].codigo := numIng;
  153.   nombPl := nomb;
  154.   ingreds := ing;
  155. end;
  156.  
  157. procedure insertarOrdenado(var plato:TPlato; var archB:TArchBin);
  158. var n:Integer;
  159.   reg:TPlato;
  160. begin
  161.   n := filesize(archB)-1;
  162.   repeat
  163.     seek(archB,n);
  164.     read(archB,reg);
  165.     if(reg.nombre >= plato.nombre) then write(archB,reg)
  166.     else write(archB,plato);
  167.     dec(n);
  168.   until (reg.nombre < plato.nombre) or (n=-1);
  169.   if (n=-1) then begin
  170.     seek(archB,0);
  171.     write(archB,plato);
  172.   end;
  173. end;
  174.  
  175. procedure procesarDatos(var archT:Text; var archB:TArchBin);
  176. var cod,i :Integer;
  177.   car : Char;
  178.   plato : TPlato;
  179.   cad : String;
  180. begin
  181.   i:=0;
  182.   while not eof(archT) do begin
  183.     read(archT,cod,car);
  184.     plato.codigo:=cod;
  185.     readln(archT,cad);
  186.     separarDatos(cad,plato.nombre,plato.ingreds);
  187.     if i=0 then begin
  188.       write(archB,plato);
  189.       inc(i);
  190.     end
  191.     else insertarOrdenado(plato,archB);
  192.   end;
  193. end;
  194.  
  195. var archB : TArchBin;
  196.   archT : Text;
  197. begin
  198.   prepararArchivos(archT,archB);
  199.   procesarDatos(archT,archB);
  200.   cerrarArchivos(archT,archB);
  201.  
  202. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement