Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program problemaUno;
- Const MAX = 500;
- type TMerge = array [1 .. MAX] of Integer;
- Procedure imprimirDatos(var arrO:TMerge; numDat: Integer);
- var nomAOut: String;
- aOut: Text;
- i: Integer;
- begin
- write('Escriba el nombre del archivo de salida: ');
- readln(nomAOut);
- assign(aOut,nomAOut);
- rewrite(aOut);
- for i:=1 to numDat do begin
- write(aOut, arrO[i], ' ');
- end;
- close(aOut);
- end;
- Procedure merge(var arrO, arr1, arr2:TMerge; numDat, m, n:Integer);
- var k, i, j :Integer;
- begin
- k:=1; i:=1; j:=1;
- while (i <> m) and (j <> n) do begin
- if arr1[i] < arr2[j] then begin
- arrO[k] := arr1[i];
- k:= k + 1;
- i:= i + 1;
- end;
- if arr1[i] > arr2[j] then begin
- arrO[k] := arr2[j];
- k:= k + 1;
- j:= j + 1;
- end;
- end;
- if i = m then begin
- arrO[k]:= arr1[i];
- k:=k+1;
- while k <> numDat+1 do begin
- arrO[k]:= arr1[j];
- j:= j+1;
- k:= k+1;
- end;
- end;
- if j = n then begin
- arrO[k]:= arr2[j];
- k:=k+1;
- while k <> numDat+1 do begin
- arrO[k]:= arr1[i];
- i:= i+1;
- k:= k+1;
- end;
- end;
- end;
- Procedure divideArr(var arrO, arr1, arr2:TMerge; numDat:Integer; var m, n: Integer);
- var i :Integer;
- begin
- if arrO[1] < arrO[2] then begin
- m:= m + 1;
- arr1[m]:= arrO[1];
- end;
- if arrO[2] < arrO[1] then begin
- n:= n + 1;
- arr2[n]:= arrO[1];
- end;
- for i:=1 to numDat-1 do begin
- if arrO[i] < arrO[i+1] then begin
- m:= m+1;
- arr1[m] := arrO[i+1];
- end;
- if arrO[i] > arrO[i+1] then begin
- n:= n+1;
- arr2[n] := arrO[i+1];
- end;
- end;
- end;
- Function verificaOrden(var arrO: TMerge; numDat:Integer):Boolean;
- var i:Integer;
- aux:Boolean;
- begin
- i:=1;
- aux:= True;
- while (i <> numDat) and aux do begin
- aux:= arrO[i] < arrO[i+1];
- i:= i+1;
- end;
- verificaOrden:= aux;
- end;
- Procedure ordenarMerge(var arrO, arr1, arr2:TMerge; numDat:Integer);
- var aux: Boolean;
- m, n: Integer;
- begin
- aux:= verificaOrden(arrO, numDat);
- while not(aux) do begin
- m:= 0; n:=0;
- divideArr(arrO, arr1, arr2, numDat, m, n);
- merge(arrO, arr1, arr2, numDat, m, n);
- aux:= verificaOrden(arrO, numDat);
- end;
- end;
- Procedure leerDatosArrO (var arrO: TMerge; var numDat: Integer);
- var nomAIni: String;
- aIni: Text;
- begin
- write('Escriba el nombre del archivo con los datos de entrada: ');
- readln(nomAIni);
- assign(aIni, nomAIni);
- reset(aIni);
- while not eof(aIni) do begin
- inc(numDat);
- read(aIni,arrO[numDat]);
- end;
- close(aIni);
- end;
- var arrO, arr1, arr2: TMerge;
- numDat: Integer;
- begin
- numDat:= 0;
- leerDatosArrO(arrO, numDat);
- ordenarMerge(arrO, arr1, arr2, numDat);
- imprimirDatos(arrO, numDat);
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement