SoloCodigo
Programación General => Pascal => Mensaje iniciado por: Mondrast en Viernes 8 de Agosto de 2008, 16:42
-
Bien dejo aqui el algoritmo que compila pero que al rellenar el array no me salta otra vez el menu para hacer operaciones con este array sino que entra e un bucle y me pide rellenar el array una y otra vez, se que es una chorrada de fallo pero no caigo aer si me podeis ayudar, muchas gracias.
program ordenar_arrays;
VAR
tabla:ARRAY [1..10] OF INTEGER;
i,aux,salir,opcion,cambio:INTEGER;
begin
writeln('Elige una de las siguientes operaciones');
writeln('1.- Rellenar el Array');
writeln('2.- Ordenar Desendentemente');
writeln('3.- Ordenar Ascendentemente');
Writeln('0.- Salir');
writeln;
write('Su opcion:');
readln(opcion);
salir:=0;
begin
WHILE salir=0 DO
CASE opcion OF
1:
begin (*leer*)
FOR i:=1 TO 10 DO
begin
writeln('Mete el numero de la posicion ',i,':');
readln(tabla);
end;
end;
2:
begin (*ordenar descendentemente*)
REPEAT
cambio:=0;
FOR i:=1 TO 9 DO
begin
IF tabla< tabla [i+1] THEN
begin
aux:= tabla;
tabla:= tabla[i+1];
tabla[i+1]:=aux;
cambio:=1;
end;
end
UNTIL cambio=0;
(*escribe array*)
FOR i:=1 TO 10 DO
begin
write(tabla,' ');
end;
end;
3: (*ordenar Ascendentemente*)
begin
REPEAT
cambio:=0;
FOR i:=1 TO 9 DO
begin
IF tabla> tabla [i+1] THEN
begin
aux:= tabla;
tabla:= tabla[i+1];
tabla[i+1]:=aux;
cambio:=1;
end;
end
UNTIL cambio=0;
(*escribe array*)
FOR i:=1 TO 10 DO
begin
write(tabla,' ');
end;
end;
0: (*salir*)
begin
salir:=1;
writeln('Se va a finalizar el programa.');
readln;
end;
ELSE
Writeln('Opcion no valida');
readln;
end;
readln;
end;
readln;
end.
-
En primer lugar, te pediria que uses [ code][ /code] cuando pongas codigo, mejora la legibilidad de tu codigo ;)
Estas lineas:
salir:=0;
WHILE salir=0 DO
deberian ir antes del menu, para que vuelva al principio, tu lo tienes antes del case, es la razon por la cual no regresa.
Pero en lugar de usar while..do, quizas deberias usar mejor repeat..until, ya que el ciclo se debe ejecutar AL MENOS una vez.
-
mira es verdad, muchisimas gracias y tienes razon ahora que lo dices, mejor un repeat que un while porque una vez tiene que entrar obligatoriamente y asi optimizo el programa, muchisimas gracias de nuevo.
P.D: siento no poner el codigo correctamente, lo hare la proxima vez.
Un saludo