• Domingo 22 de Diciembre de 2024, 17:45

Autor Tema:  Orientacion Con Operaciones De Matrices  (Leído 2088 veces)

rak40

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Orientacion Con Operaciones De Matrices
« en: Miércoles 2 de Mayo de 2007, 06:35 »
0
hola, a todos. Estoy haciendo un programa el que trabajo con una matriz cubica :comp: , y todo lindo, pero para cargarla me gustaria poner unas restricciones como por ejemplo, que solo se puedan ingresar numeros, y que los demas caracteres esten permitidos, y que la suma de las filas de esta matriz no sean superior a un numero determinado, esto me desconcierta, por que no lo puedo imaginar, si alguien me puede tirar una pista. si quieren mas informacion acerca de lo que quiero hacer diganlo nomas. bueno, espero que se entienda lo que quiero, saludos :hola:

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Orientacion Con Operaciones De Matrices
« Respuesta #1 en: Miércoles 2 de Mayo de 2007, 22:24 »
0
Nunca trabajé con arreglso cúbicos, pero se me hace que para recorrer las filas tendrías que tener 3 ciclos diferentes. Serian filas direccion x, filas direccion y , filas direccion z
filas del 1er eje
Código: Text
  1.  
  2. for i:=1 to 10
  3.    for j:=1 to 10
  4.        for k:=1 to 10
  5.            v[i,j,k]
  6.  
  7.  
filas 2do eje
Código: Text
  1.  
  2.    for j:=1 to 10
  3.       for i:=1 to 10
  4.           for k:=1 to 10
  5.               v[i,j,k]
  6.  
  7.  
filas 3er eje
Código: Text
  1.  
  2.    for k:=1 to 10
  3.       for i:=1 to 10
  4.           for j:=1 to 10
  5.               v[i,j,k]
  6.  
  7.  
Te soy sincero, no se a cual eje le correspode cada ciclo. Ademas ten'e en cuenta que  el mismo eje lo podes recorrer en 2 sentido distintos.
Es decir
Código: Text
  1.  
  2. es decir, i,j,k e  i,k,j
  3. for i:=1 to 10
  4.    for j:=1 to 10
  5.        for k:=1 to 10
  6.            v[i,j,k]
  7.  
  8.  
Código: Text
  1.  
  2. for i:=1 to 10
  3.    for k:=1 to 10
  4.        for j:=1 to 10
  5.            v[i,j,k]
  6.  
  7.  

La verdad, ni idea, pero algo es mejor que nada no? (me fij'e en Google y no dice  nada)

rak40

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Orientacion Con Operaciones De Matrices
« Respuesta #2 en: Viernes 4 de Mayo de 2007, 20:08 »
0
gracias che. deje de lado la matriz cubica   :lol: , es mucho para un principiante como yo. y por eso quiero sumar los valores de las filas de una matriz que yo ingreso, pero no logro que se sumen, lo sumo me devuelve el valos de la ultima columna de las filas. De verdad me estoy volviendo loko, y los libros mucho no los llego a entender del todo. bueno que se yo, se que parece una boludes que no me doy cuenta de mi error

{--------------------------------------------------------------------------}
program matrices;
uses crt;
const MAX_COLUMNA = 3;
      MAX_FILA = 2;
Type COLUMNA = 1..MAX_COLUMNA;
     FILA= 1..MAX_FILA;
     MiEntero = integer;
     tMatriz = Array[COLUMNA,FILA] of MiEntero;
var Matriz: tMatriz;
    contadorg: integer;
{-----------------------------------------------------}
procedure carga(var mat: tMatriz);
   var i: FILA;
   j: COLUMNA;

   begin
   clrscr;

   for i:=1 to MAX_FILA do
   for j:=1 to MAX_COLUMNA do
      begin
        write ('ingrese el valor [', i, ', ', j,'] ');
        readln (mat[i,j]);
      end;
     readkey;

   end;
{-----------------------------------------------------}
procedure suma (mat: tmatriz);
type
tvector= array[FILA] of integer;
var
x: FILA;
y: COLUMNA;
matrizaux:tvector;
suma: integer;
begin
     for x:=1 to MAX_FILA do
         begin

         for y:=1 to MAX_COLUMNA do
            matrizaux[x,y]:=0;
            begin

            matrizaux:= matrizaux + mat[x,y];

            end;
            Writeln ('la suma de las columnas es ',matrizaux,'');
         end
end;

{---------------------------------------------------------}
procedure imprime (mat: tMatriz);
   var i: FILA;
       j: COLUMNA;
   begin
   clrscr;
   for i:=1 to MAX_FILA do
      begin
           for j:=1 to MAX_COLUMNA do
           write (mat[i, j]:5);
           writeln;
      end;
   readkey;
   end;
{---------------------------------------------}
begin {estos es el cuerpo principal}
     clrscr;
     carga (matriz);
     imprime (matriz);
     readkey;
     suma (matriz);
     readkey;
end.

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Orientacion Con Operaciones De Matrices
« Respuesta #3 en: Viernes 4 de Mayo de 2007, 21:28 »
0
Suma los campos de la primera fila
Código: Text
  1.  
  2. var
  3.    v: array[1..10, 1..10] of Integer;
  4.    i: Integer;
  5.    Suma: Integer;
  6. begin
  7.   for i:=1  to 10  do
  8.   begin
  9.      Suma := Suma  + v[1,i];
  10.   end;
  11. end.
  12.  
  13.  
suma todos los campos
Código: Text
  1.  
  2.  for i:=1  to 10  do
  3.     for j:=1 to 10 do
  4.        Suma := Suma  + v[j,i];
  5.  
  6.  

rak40

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Orientacion Con Operaciones De Matrices
« Respuesta #4 en: Domingo 6 de Mayo de 2007, 00:22 »
0
gracias por el dato, COMPILA Y TODO :hola:  :smartass:

Valten

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Orientacion Con Operaciones De Matrices
« Respuesta #5 en: Domingo 6 de Mayo de 2007, 10:11 »
0
Cita de: "rak40"
hola, a todos. Estoy haciendo un programa el que trabajo con una matriz cubica :comp: , y todo lindo, pero para cargarla me gustaria poner unas restricciones como por ejemplo, que solo se puedan ingresar numeros, y que los demas caracteres esten permitidos, y que la suma de las filas de esta matriz no sean superior a un numero determinado, esto me desconcierta, por que no lo puedo imaginar, si alguien me puede tirar una pista. si quieren mas informacion acerca de lo que quiero hacer diganlo nomas. bueno, espero que se entienda lo que quiero, saludos :hola:
Hola rak, jejeje. Te puedo decir que en Pascal he utilizado un par de veces los arrays cúbicos en los 16 ó 17 años que llevo con él, y siempre fué porque algún estudiante se puso pesadillo con que quería ver un ejemplo.

No te preocupes, para recorrerlos, sólo hace falta poner tres bucles anidados como bien ha dicho Enko. En cuanto a los "ejes", lo puedes entender como quieras ya que dentro de la memoria del ordenador se va a almacenar todo seguido uno detrás de otro como si fuera un vector (array de una dimensión). Por ejemplo, supongo que tomes el primer índice como filas, y el segundo como columnas. Pues sigue así, y entiende el tercero como "profundidad" o "capas".

El orden en que recorres la matriz viene dado por el orden en que pongas los bucles anidados, es decir, si primero pones filas, luego columnas, y por último capas, recorreras así: primero la fila 1 por columnas de cada capa, luego la 2, y así sucesivamente. Es fácil aunque un poco lío de contar por escrito.

En cuanto a lo de limitar la entrada del usuario, ese ya es un problema más complejo. Te diré para o asfixiarte demasiado que, si estás con Turbo Pascal 7.0, te eches un vistazo al procedimiento VAL. Ese es la clave. Cuando leas el valor, lee un string (no importa que sea un número, tú lee un string). Después llamas a VAL y éste te dirá si era un número correcto o no. Por lo tanto, te dirá si tienes que volver a preguntar el valor o ya vale. Mételo todo en un REPEAT UNTIL y lo tienes hecho. Para lo de la suma, ese ya es otro cantar, así que ve por partes como decía Jack el destripador. Ahí ya tendrás que hacerte tu propia función booleana que haga la comprobación y utilizarla igual casi que el VAL.

Pues nada, espero haber aclarado algo más el tema.
[size=109]Un saludo desde Santander (España)[/b][/size]