[ Foro de Pascal ]

Eliminar elemento array y sustituir

28-Nov-2014 02:10
Alberto Rilo Mosteiro
3 Respuestas

Buenas de nuevo, a ver si me podeis decir porque falla este codigo

(*Plantee e implemente un programa en PASCAL que construya un array a partir
de números enteros proporcionados por el usuario (máximo 20 elementos) y que
a continuación sustituya los números pares por su cuadrado y elimine los
números impares. Muestre por pantalla tanto el array original como el resultante
de las operaciones indicadas.*)

 
PROGRAM ejercicio9boletin(input,output);
 TYPE tarray=array[1..20 ]of integer;
 VAR a:tarray;
     c:integer;
 
 
(*********************************************************************)
PROCEDURE Insertar (VAR z:tarray; VAR cantidad:integer);
   BEGIN { Pedimos 20 datos o hasta introducir el valor 999 }
    cantidad := 0;
    repeat
        if cantidad > 20 then
            writeLn('No caben mas datos!')
        else
        begin
            cantidad := cantidad+1;
            write('Deme el dato ',cantidad,' (999 para salir): ');
            readLn(z[cantidad]);
        end;
    until z[cantidad]=999;
 
    { El ultimo dato no hay que guardarlo }
    cantidad := cantidad-1;
  END;
 (******************************************************************)
 PROCEDURE EliminarImpares(VAR z:tarray; VAR cantidad:integer);
  VAR i:integer;
      pos:integer;
  FOR i:=1 TO cantidad DO
   BEGIN
    IF (i mod 2<>0) THEN
      pos:=i;
      z[i]:=z[i+1];
      cantidad:=cantidad-1; 
 
(********************************************************************)  
 
 
 BEGIN
 Insertar(a);
 END.
 




28-Nov-2014 02:12
Alberto Rilo Mosteiro

Faltaria todavia el mostrar, que se me olvido ahi , pero aparte de que no compila esa parte, como sustituyo los pares de todo el array por el cuadrado? Primero los borro y en esa posicion inserto su cuadrado,o como ?


28-Nov-2014 03:45
Alberto Rilo Mosteiro

Otra cosa, la pongo aqui para no abrir otro hilo. Por que esto me da un error que pone "asignmente of ready location"

 
PROCEDURE Ordenar(protected var z:tarray);
VAR i,j:integer;  temporal:integer;
BEGIN
 for i := N downto 2 do
        for j := 0 to i - 1 do
            if z[j] > z[j + 1] then
            begin
                temporal := z[j];
                z[j] := z[j + 1];
                z[j + 1] := temporal;
            end;
end;
 




28-Nov-2014 05:06
Alberto Rilo Mosteiro

Solucionado.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)