HELP!!!!
Publicado por Nickolas (2 intervenciones) el 18/06/2006 00:21:12
TENGO QUE HACER LOS SIGUIENTE...
Diseñar un programa que permita cargar un arreglo de 100 valores enteros elegidos al azar por la función RANDOM(). Una vez cargados los datos debe elegir un pivote o elemento central de acuerdo a alguna de las siguientes reglas:
pivote = (n1 + nk) / 2, donde k es el tamaño máximo del arreglo
pivote = , donde k es el tamaño máximo del arreglo
pivote = nk/2 , donde k es el tamaño máximo del arreglo
El usuario debe tener la posibilidad de elegir con que pivote desea trabajar.
Una vez elegido el pivote se debe considerar el arreglo dividido éste a la "mitad". A continuación el programa buscará un elemento en la sub-lista de la izquierda que sea mayor que el pivote y un elemento en la sub-lista de la derecha que sea menor que el pivote y los intercambiará. Este procedimiento se continuará hasta que no se encuentren elementos para intercambiar.
ESTO ES LO QUE HE LOGRADO...EL PROGRAMA FUNCIONA PERFECTO EXCEPTO PARA ALGUNOS VALORES COMO EL 4.00 ( ME PARACE) QUE TE AGREGA CEROS QUE NO VAN O NO TOMA EN CUENTA CIERTO NUMEROS...ALGUIEN ME PUEDE DECIR COMO SOLUCIONARLO...PARA MI EL ERROR ESTA EN EL PROCEDURE INTERCAMBIO... GRACIAS....EL PROGRAMA IMPRIME PASO POR PASO PARA QUE SE VEA EL ERROR..
Program Entregable2;
uses wincrt;
const n=10;
type vector = array [1..n] of integer;
var Arre : vector; a,b,c: real; op: char;
procedure imprimir (Ar:vector;pivot:real);
var i: integer;
begin
for i:=1 to n do
write (Ar[i],' ');
writeln;
writeln (pivot:2:2);
end;
procedure cargar (var arreglo : vector); {carga el arreglo con valores hasta 100}
var j : integer;
begin
randomize;
for j:=1 to n do
arreglo[j] := Random (10);
end;
function pivo2 (arreglo : vector):real;
var i : integer; acum: real;
begin
acum := 0;
for I := 1 to n do
acum := acum + arreglo[i];
pivo2 := acum / n;
end;
function pivo1 (arreglo : vector) : real;
begin
pivo1:= (arreglo[1] + arreglo[n]) / 2;
end;
function pivo3 (arreglo : vector) : integer;
begin
pivo3 := arreglo[n div 2];
end;
procedure intercambio (arreglo : vector; piv : real);
var j, i, aux1, aux : integer;
begin
imprimir (arreglo,piv);
j := n div 2;
for i := 1 to (N div 2) do {compara el arreglo con el pivote elegido}
if arreglo[i] > piv then
begin
aux := arreglo[i];
repeat
j:=j+1;
if arreglo[j] < piv then
begin
aux1 := arreglo[j];
arreglo[i] := aux1;
arreglo[j]:= aux;
end
else
arreglo[i] := arreglo[i];
imprimir (arreglo,piv);
readln;
until (aux1 < piv) or (j=N);
end;
writeln;
imprimir (arreglo,piv);
end;
BEGIN
cargar (Arre);
A := pivo1(arre);
B := pivo2(arre);
C := pivo3(arre);
repeat
writeln ('****---MENU DE OPCIONES---****');
writeln ('1.pivote =(n[1]+n[k])/2, donde k es el tamaño máximo del arreglo');
writeln ('2.pivote : promedio del arreglo');
writeln ('3.pivote = n[k/2], donde k es el tamaño máximo arreglo');
writeln ('S.SALIR');
readln (op);
case (op) of
'1':intercambio (arre , a);
'2':intercambio (arre , b);
'3':intercambio (arre , c);
end;
until upcase (op) = 'S' ;
END.
Diseñar un programa que permita cargar un arreglo de 100 valores enteros elegidos al azar por la función RANDOM(). Una vez cargados los datos debe elegir un pivote o elemento central de acuerdo a alguna de las siguientes reglas:
pivote = (n1 + nk) / 2, donde k es el tamaño máximo del arreglo
pivote = , donde k es el tamaño máximo del arreglo
pivote = nk/2 , donde k es el tamaño máximo del arreglo
El usuario debe tener la posibilidad de elegir con que pivote desea trabajar.
Una vez elegido el pivote se debe considerar el arreglo dividido éste a la "mitad". A continuación el programa buscará un elemento en la sub-lista de la izquierda que sea mayor que el pivote y un elemento en la sub-lista de la derecha que sea menor que el pivote y los intercambiará. Este procedimiento se continuará hasta que no se encuentren elementos para intercambiar.
ESTO ES LO QUE HE LOGRADO...EL PROGRAMA FUNCIONA PERFECTO EXCEPTO PARA ALGUNOS VALORES COMO EL 4.00 ( ME PARACE) QUE TE AGREGA CEROS QUE NO VAN O NO TOMA EN CUENTA CIERTO NUMEROS...ALGUIEN ME PUEDE DECIR COMO SOLUCIONARLO...PARA MI EL ERROR ESTA EN EL PROCEDURE INTERCAMBIO... GRACIAS....EL PROGRAMA IMPRIME PASO POR PASO PARA QUE SE VEA EL ERROR..
Program Entregable2;
uses wincrt;
const n=10;
type vector = array [1..n] of integer;
var Arre : vector; a,b,c: real; op: char;
procedure imprimir (Ar:vector;pivot:real);
var i: integer;
begin
for i:=1 to n do
write (Ar[i],' ');
writeln;
writeln (pivot:2:2);
end;
procedure cargar (var arreglo : vector); {carga el arreglo con valores hasta 100}
var j : integer;
begin
randomize;
for j:=1 to n do
arreglo[j] := Random (10);
end;
function pivo2 (arreglo : vector):real;
var i : integer; acum: real;
begin
acum := 0;
for I := 1 to n do
acum := acum + arreglo[i];
pivo2 := acum / n;
end;
function pivo1 (arreglo : vector) : real;
begin
pivo1:= (arreglo[1] + arreglo[n]) / 2;
end;
function pivo3 (arreglo : vector) : integer;
begin
pivo3 := arreglo[n div 2];
end;
procedure intercambio (arreglo : vector; piv : real);
var j, i, aux1, aux : integer;
begin
imprimir (arreglo,piv);
j := n div 2;
for i := 1 to (N div 2) do {compara el arreglo con el pivote elegido}
if arreglo[i] > piv then
begin
aux := arreglo[i];
repeat
j:=j+1;
if arreglo[j] < piv then
begin
aux1 := arreglo[j];
arreglo[i] := aux1;
arreglo[j]:= aux;
end
else
arreglo[i] := arreglo[i];
imprimir (arreglo,piv);
readln;
until (aux1 < piv) or (j=N);
end;
writeln;
imprimir (arreglo,piv);
end;
BEGIN
cargar (Arre);
A := pivo1(arre);
B := pivo2(arre);
C := pivo3(arre);
repeat
writeln ('****---MENU DE OPCIONES---****');
writeln ('1.pivote =(n[1]+n[k])/2, donde k es el tamaño máximo del arreglo');
writeln ('2.pivote : promedio del arreglo');
writeln ('3.pivote = n[k/2], donde k es el tamaño máximo arreglo');
writeln ('S.SALIR');
readln (op);
case (op) of
'1':intercambio (arre , a);
'2':intercambio (arre , b);
'3':intercambio (arre , c);
end;
until upcase (op) = 'S' ;
END.
Valora esta pregunta


0