Otra duda con las matrices

Otra vez con otra duda con las matrices de pascal esta vez necesito saber como recorrer una matriz... Pero solamente las columnas impares... Partiendo de un punto que el usuario ingresa por pantalla
A los números que introduce el usuario los llame epicentro y epicentro1... Ahora mis dudas están
1.Como puedo hacer para que me recorra la matriz a partir de los epicentros que me introduce el usuario
2. Como puedo hacer para que me recorra la matriz... Pero solo las columnas impares... Y que me vaya sumando cada de esos números
Por ahora... La primera pregunta todavía no la he podido resolver
Y la segunda... Solo la programe para que me recorriera la primera columna impar... Pero me da error en la linea
suma:=suma + (primero [i1,j1]); ....esto lo hice para q me los sumara pero me da error y no se q hacerle a esto
Mira este es el pedazo de programa que llevo hecho... O el que esta relacionado con las preguntas que te hice... Por favor acomodamelo en el ejercicio... Tanto como recorrerlo a partir de los epicentros y como recorrer la columnas impares
suma:=0;
j1:=1;
if (grado = 1) then {el grado es otra variable....pero no interviene dentro de esto}
begin
a:=epicentro-1;
b:=epicentro1-1;
end;
for  i1:=1 to maxn do
begin
suma:=suma + (primero [i1,j1]); {primero fue un arreglo q hice arriba q va desde [1..30] de tipo integer};
writeln (suma);
end;
readkey;
end.
lo mas seguro te vas a preguntar porq coloque
a:=epicentro-1;
b:=epicentro1-1;
Y eso tampoco tiene que ver con las dudas fue un paso que hice para sacar el punto de donde tiene que empezar el programa a recorrer la matriz... En todo caso la duda viene... Como empezar el recorrido a partir del resultado que te da "a" y "b"

1 respuesta

Respuesta
1
No acabo de entender eso de los "epicentros". Tendrás que explicármelo mejor, pero aprovecho el mensaje para ayudarte en lo de las mpares:
Eso se podrá hacer con un FOR, o con un REPEAT o con un WHILE.
Voy a desarrollarlo con un WHILE, que es el más "adecuado".
IF iniciousuario MOD 2 =0 THEND INC(iniciousuario);//Si el número que eligió el usuario es PAR, le sumamos uno para comenzar por la siguiente impar
i:=iniciousuario;//iniciousuario le he llamado a la variavle a partir de la cual el usuario quiere empezar a contar. Si quieres, lo puedes cambiar por un 1 y ya está.
suma:=0;//Siempre inicializamos
WHILE i<=maxn DO//DIV 2 porque solo vamos a recorrer la mitad, recuerda
 BEGIN
  FOR j:=1 TO maxm DO (...)//Aquí todas las sumas que quieras hacer, con la "i" impar ya colocadita
  i:=i+2;//Le sumamos 2 poara saltarnos la columna par;
 END;
Ok... igual que siempre no entendí que me quisiste decir... XD... sorry no soy tan bueno es pascal... pero dejame explicarte mejor para ver si me comprendes
Mira el programa que tengo... para que me vayas comprendiendo mejor
PROGRAM Array_RANDOM;
USES crt;
CONST m=100;
n=100;
TYPE TMatriz=ARRAY[1..m,1..n] OF INTEGER;
vec1=array [1..30] of integer;
vec2=array [1..30] of integer;
vec3=array [1..900,1..900] of integer;
VAR i,j:WORD;
matriz:TMatriz;
primero:vec1;
segundo:vec2;
tercero:vec3;
maxm,maxn:WORD;
grado,epicentro,epicentro1,i1,j1,suma,a,b:integer;
PROCEDURE Rellenar_Matriz_RANDOM(VAR matriz:TMatriz;maxm,maxn:WORD);
 VAR i,j:WORD;
 begin
  RANDOMIZE;
  for i:=1 TO maxm DO
   for j:=1 TO maxn DO
    begin
     matriz[i,j]:=RANDOM(100);
    end;
 end;
PROCEDURE Escribir_Matriz(matriz:TMatriz;maxm,maxn:WORD);
 VAR i,j:WORD;
 begin
  for i:=1 TO maxm DO
   begin
    for j:=1 TO maxn-1 DO
     begin
      write(matriz[i,j],'  ');
     end;
    writeln(matriz[i,maxn]);
   end;
 end;
begin
CLRSCR;
writeln('Introduzca las dimensiones de la matriz :');
gotoxy (1,2);read(maxm);
gotoxy (4,2);write ('X');
gotoxy (6,2);readln(maxn);
writeln;
writeln ('su matriz es ');
writeln;
 Rellenar_Matriz_RANDOM(matriz,maxm,maxn);
 Escribir_Matriz(matriz,maxm,maxn);
 writeln;
 writeln('introduzca el grado del terremoto');
 readln (grado);
writeln ('introduce el epicentro');
readln(epicentro,epicentro1);
suma:=0;
if (grado = 1) then
begin
a:=epicentro1-grado;
end;
For  j1:=a  to epicentro1+grado do
begin
   for i1:=epicentro-grado to  epicentro+grado do
begin
j1:=j1+1;
suma:=suma+tercero[j1,i1]; {"M"es un array que va [1..900,1..900}
end;
end;
Writeln('las pérdidas económicas son ',suma);
end;
readln;
end.
Eso es uniendo el programa anterior que me dijiste (el de crear una matriz random)... ahora a eso yo le tiene que agregar el grado del terremoto y el epicentro... pero yo trabaje al epicentro en dos variable distintas (si ves me aparece epicentro, epicentro1)... y de aquí en adelante tengo que hacer el mismo recorrido de la matriz que te explique antes
¿Pero ahora en este nuevo programa se me origina un error y me dice que la variable tercero no ha sido inicializada... pero cuando la inicializo... me da otro error que me dice que esperaba vec3... y no entiendo esto?
Ahora mi duda viene... como arreglo ese error y como hago para recorrer la matriz en el sentido que te dije... claro que en este recorrido tengo que ir sumando esos números... basando en el programa que te acabo de pasar
Disculpa las molestias... pero como te dije antes... esto tiene que ser perfecto
La verdad, sigo sin entender el enunciado... ¿No me puedes pasar el original o algo? Creo que así podríamos entendernos mejor xD
Lo de "vec3", es un TIPO. Pascal no puede mezclar peras con manzanas. Si espera recibir un CHAR, y le metes un INTEGER; se queja. Lo mismo pasa si espera un "TMatriz" y le metes un "vec3".
Por inicializar deduzco que le das a lo de rellenar random. Ese procedimiento, si te fijas, espera recibir un TMatriz, y le estarías mandando nu "vec3", que es un tipo distinto ;)
Prueba a cambiar el tipo de tu variable, y poner TMatriz. El tamaño del TMatriz lo cambias en las constantes "m" y "n".
Pásame el enunciado original por favor, para que pueda entender bien el problema, que el terremoto ya me ha descolocado :s

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas