• Jueves 14 de Noviembre de 2024, 22:57

Autor Tema:  Operaciones con Array  (Leído 1760 veces)

Mondrast

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Operaciones con Array
« en: Viernes 8 de Agosto de 2008, 16:42 »
0
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.

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Operaciones con Array
« Respuesta #1 en: Viernes 8 de Agosto de 2008, 18:46 »
0
En primer lugar, te pediria que uses [ code][ /code] cuando pongas codigo, mejora la legibilidad de tu codigo ;)

Estas lineas:
Código: Pascal
  1.  
  2. salir:=0;
  3. WHILE salir=0 DO
  4.  
  5.  

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.

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

Mondrast

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Operaciones con Array
« Respuesta #2 en: Viernes 8 de Agosto de 2008, 20:23 »
0
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