Ayuda con las matrices en pascal

Necesito hacer un arreglo... Que cuando el usuario introduzaca un numero N el programa haga esto
A. Leer el arreglo
B. Imprimir el arreglo
C. Calcular la suma de los valores del arreglo
D. Calcular la media de los valores del arreglo
E. Calcular la cantidad de numero que son pares y la cantidad de numero que son impares
F. Calcular la cantidad de numero que son mayores que la media y los que son menores de la media
G. Obtener un nuevo arreglo, tal que sus elementos sean la diferencia de los elementos sucesivos del arreglo dado
H. Transformar el arreglo, de tal forma que en las posiciones pares contengan un valor POR dado
Yo pude llegar hasta la letra E, pero el programa se me cae al tratar de buscar lo números pares, miralo para que me entiendas
program matrices;
uses crt;
var
vec: array [1..99999999] of integer;
i,n,suma,CONT:integer;
media:real;
begin
writeln ('de cuanto quiere que sea su matriz');
readln (n);
writeln ('introduzca los valores de esa matriz');
for i:=1 to n do
begin
readln (vec );
end;
for i:=1 to n do
begin
writeln (' los valores de la matriz en la posicion ', i,' es ',vec );
end;
for i:=1 to n do
       suma:=suma + vec;
           writeln;
              writeln ('la suma de la matriz es ',suma);
        media:=suma / n;
           writeln;
              writeln ('la media es ',media:10:10);
     for i:=1 to n do
           if (vec mod 2)<>0 then
              CONT:=CONT+1;
                writeln;
             writeln ('hay ',CONT,' numeros impares'); {hasta aqui todo va bien,pero se me cae en la siguiente condicion}
      for i:=1 to n do
          if (vec mod 2)=0 then
             CONT:=CONT+1; {esto ya lo intente colocandolo como CONT1 o inicianisandolo en 0, pero el programa me sigue sin imprimirme bien los numero pares}
        writeln ('hay ',CONT,' numero pares');
{despues de esto sigue le resto del programa para la letra F ya tengo una idea de lo que tengo que hacer pero para las otra dos letras ni idea....si eres tan amable me las puedes explicar}
readln;
end.

1 respuesta

Respuesta
1
Prueba a hacer esto, en vez de utilizar el mismo contador y para no sobrecargar el ordenador utiliza el mismo for con 2 contadores, es decir CONT y CONT1
CONT:=0;
CONT1:=0;
for i:=1 to n do
           if (vec mod 2)<>0 then
                CONT:=CONT+1;
           else
                CONT1:=CONT1+1;
 writeln;
 writeln ('hay ',CONT,' numeros impares');
 writeln;
 writeln ('hay ',CONT1,' numeros pares');    
Otro fallo que veo es la declaración de la matriz, el programa reserva espacio para 99999999 enteros, eso es mucho espacio y es normal que casque. Pon como mucho 1000 o menos puesto que no te van a hacer falta.
Si tienes más problemas ya sabes ;-)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas