Inicio > Pascal > sergioyoplay > otra duda con las matrices

otra duda con las matrices

Experto:
Usuario:
Fecha: 28/06/2009
Valoración: (5,00 sobre 5) Categoría: Pascal
04/06/2009
elprogramdor, usuario preguntando en Pascal
Usuario
hola....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 numeros que introduce el usuario los llame epicentro y epicentro1....ahora mis dudas estan
 
1.como puedo hacer para q me recorra la matriz a partir de los epicentros q me introduce el usuario
 
2. como puedo hacer para q me recorra la matriz....pero solo las columnas impares....y q me vaya sumando cada de esos numeros
 
por ahora....la primera pregunta todavia no la he podido resolver
 
y la segunda....solo la programe para q 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 q llevo hecho....o el q esta relacionado con las preguntas q te hice.....porfa 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 q ver con las dudas fue un paso q hice para sacar el punto de donde tiene q empezar el programa a recorrer la matriz....en todo caso la duda viene...como empezar el recorrido a partir del resultado q te da "a" y "b"
 
agradesco tu respuesta
04/06/2009
elprogramdor, experto respondiendo en Pascal
Experto
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;
04/06/2009
elprogramdor, usuario preguntando en Pascal
Usuario
ok....igual q siempre no entendi q me quisistes decir....XD....sorry no soy tan bueno es pascal...pero dejame explicarte mejor para ver si me comprendes
 
mira el programa q tengo.....para q 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 q me dijistes (el de crear una matriz random).....ahora a eso yo le tiene q 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 aqui en adelante tengo q hacer el mismo recorrido de la matriz q te explique antes
 
pero ahora en este nuevo programa se me origina un error y me dice q la variable tercero no ha sido inicializada....pero cuando la inicializo....me da otro error q me dice q esperaba vec3....y no entiendo esto???
 
ahora mi duda viene....como arreglo ese error y como hago para recorrer la matriz en el sentido q te dije....claro q en este recorrido tengo q ir sumando esos numeros....basando en el programa q te acabo de pasar
 
disculpa las molestias....pero como te dije antes.....esto tiene q ser perfecto
05/06/2009
elprogramdor, experto respondiendo en Pascal
Experto
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 porfavor, para que pueda entender bien el problema, que el terremoto ya me ha descolocado :s
05/06/2009
elprogramdor, usuario preguntando en Pascal
Usuario
wow....es bastante largo el enunciado...mejor te paso una pagina q se acerca bastante a lo q tengo q hacer
 
http://iaaa.cps.unizar.es/personal/alvaper/telecos/prac4.pdf
 
la unica diferencia q hay es la forma de recorrer la matrices...si ves en el ejercicio q dice grado de terremoto 2...el saca el resultado al sumar los numeros en fila osea sale de sumar 98+10+35+25+26+98+2+57+12
 
pero en mi ejercicio el resultado yo lo tengo q sacar de sumar los numeros de las columnas
 
osea en ese mismo ejemplo 98+25+2+45+87+35+98+12+86+25+41+45+29+21+3 ...a eso es a lo q me refiero....pero estos numeros dependen del epicentro q introduce el usuario.....q eso es a lo q me referia....por ahora ayudame a recorrer las columnas impares...despues me ayudaras a recorrer las pares....aunq me parece q es lo mismo....solo q variando el ciclo del FOR
 
entonces recapitulando mis preguntas anteriores
 
1. como puedo recorrer las matrices partiendo del epicentro q el usuario introduce
 
2. y como puedo ir sumando todos esos numeros
 
una cosa mas...la suma de los numeros tambien depende del grado del terremoto....si ves en el ejemplo q colocan grado del terremoto 1 en ese caso solo se agarran los numeros
 
98+25+2+35+98+12
 
en caso de q el epicentro sea mayor 2, 3,4, ect....los numeros q debe agarrar el programa son mayores
 
eso en resumen es lo q tengo q hacer....aunq tambien le faltan otros puntos y otros recorridos.....pero quiero ir uno por uno
 
gracias por la ayuda
28/06/2009
elprogramdor, usuario preguntando en Pascal
Usuario
gracias por la ayuda
Más opciones
Enlaces patrocinados