Viernes 8 de Noviembre de 2024, 19:44
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
Pascal
»
Matrices
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Matrices (Leído 2581 veces)
Pacoqui
Nuevo Miembro
Mensajes: 2
Matrices
«
en:
Martes 25 de Mayo de 2004, 12:23 »
0
Vamos a ver, un asunto curioso.
Defino una matriz, con filas 1..2, y columnas 1..13.
Mediante una rutina, la cargo con valores, desde el elemento 1/1 al 1/13, y desde el 2/1 al 2/13. No utilizo para nada fila 0 ni columna 0.
Trabajo con estos elementos y el programa no me da un solo problema.
Por otro motivo, me pongo a revisar el programa, hecho con DEV Pascal (FreePascal), con el Insight (Debuger, valido tanto para Pascal como para C/C++) y veo que la matriz solo tiene 2 filas, la 0 y la 1, y 13 columnas, de la 0 a la 12.
Mi programa hace referencia a coordenadas que estan fuera de este rango, e incluso tengo puesta la directiva del compilador para controlar esto, y sin embargo no dice ni pio.
Ademas, en la matriz, indudablemente, no aparece ningun dato relacionado con la fila 2 de la misma, ya que para Insight no existe.
Y repito, el programa funciona perfectamente.
Entiendo es un problema del Insight, que se "trabuca" entre C y Pascal a la hora de manejar las matrices.
A la vista de esto, defino la matriz como 1..3 y 1..14, para filas y columnas, respectivamente, y entonces si que veo en el Insight 3 filas, 0,1 y 2, y catorce columnas, de la 0 a la 14. Y sin ningun otro cambio, el programa sigue funcionando como antes.
Alguien me confirma el fallo del Insight?
Si no fallara el Insight, pensaria en que el compilador, a pesar de la directiva, no me ha controlado en el primer caso los rangos minimo y maximo de la matriz, y que al ejecutar el programa, los datos han quedado en memoria, al estar manejados por punteros, y que el programa funciona de chiripa.
Perdon por el ladrillo.
Pacoqui.-
Soy nuevo, asi que saludos para todos.
Tweet
FSR
Nuevo Miembro
Mensajes: 14
Re: Matrices
«
Respuesta #1 en:
Martes 25 de Mayo de 2004, 12:59 »
0
A mi parecer, la disminución en una unidad de los límites de la Matriz son sólo para manejo Interno. Lo importante es que puedas utilizar los índices establecidos en la declaración sin problemas. Saludos
Amilius
Miembro HIPER activo
Mensajes: 665
Re: Matrices
«
Respuesta #2 en:
Martes 25 de Mayo de 2004, 16:44 »
0
Cita de: "Pacoqui"
Alguien me confirma el fallo del Insight?
No existe fallo de ningún tipo. Es mejor que te acostumbres a usar matrices cuya primera fila/columna es 0.
En pascal tienes la comodidad de comenzar tus vectores y matrices de valores distintos de 0, pero siempre ten en mente que internamente, por sobradas razones (ya te darás cuenta), siempre comenzarán de 0 al igual que en C. Por eso es que nunca tendrás problemas de índices fuera de rango ya que al hacer referencia en pascal a la posición [3,3] de una matriz cuya primera fila y columna son [1,1], en realidad el código máquina generado hace referencia a la posición [2,2] en una matriz cuya primera fila y columna son [0,0]
A medida que eleves tu nivel de programación te irás dando cuenta de las ventajas que tienes al comenzar de 0. El 0 es el primero. Como sabemos la idea de comenzar por 1 es culpa de la herencia romana que eran ignorantes de la existencia del 0 y tenían el más ridículo de los sistemas de numeración que no sirve ni para sumar menos para multiplicar.
Pacoqui
Nuevo Miembro
Mensajes: 2
Re: Matrices
«
Respuesta #3 en:
Martes 25 de Mayo de 2004, 21:27 »
0
Vamos a ver.:
No te digo que no a lo que expones, porque el programa funcionaba, tal y como te dije.
Observa.:
type
matriz=array [1..2,1..13] of integer;
var
cadena : matriz;
tratada por ejemplo como sigue.:
cadena[1,1]:=13;
cadena[2,1]:=10;
cadena[1,2]:=14;
cadena[2,2]:=10;
cadena[1,3]:=15;
cadena[2,3]:=10;
cadena[1,4]:=16;
cadena[2,4]:=10;
cadena[1,5]:=17;
cadena[2,5]:=10;
cadena[1,6]:=18;
cadena[2,6]:=10;
cadena[1,7]:=19;
cadena[2,7]:=10;
cadena[1,8]:=20;
cadena[2,8]:=10;
cadena[1,9]:=21;
cadena[2,9]:=10;
cadena[1,10]:=22;
cadena[2,10]:=10;
cadena[1,11]:=23;
cadena[2,11]:=10;
cadena[1,12]:=24;
cadena[2,12]:=10;
cadena[1,13]:=25;
cadena[2,13]:=10;
for x:=1 to 2 do
begin
for y:=1 to 13 do
begin
Write(cadena[x,y], ' ');
end;
WriteLn;
end;
La impresion funciona, indudablemente
Hasta aqui todo bien, matriz de 2x13.
Se supone que si empieza por cero, es decir, hace una matriz de 0,1 filas, 0..12 columnas, al acceder a sus elementos, segun tengo escrito, o bien el compilador es inteligente de cojones y rebaja en 1 esas coordenadas, o bien se pasa por el forro lo de los rangos.
La cosa es que el programa, curiosamente, funciona.
Y sigue la cosa, lo ejecuto con Insight, y dejo a continuacion un archivito, donde se ve la matriz una vez cargada con los valores iniciales antes descritos.
La fila 0 esta vacia.
La fila 1 esta cargada. indudablemente, aunque con 12 columnas rellenas.
La fila 2 no existe.
Y repito, el programa funciona.
Insisto que el Insight no trabaja bien con las matrices y que seguramente el programa, internamente, esta haciendo lo que tu dices. No veo otra explicacion.
Ciao.
El mensaje contiene
1 archivo adjunto
. Debes
ingresar
o
registrarte
para poder verlo y descargarlo.
Amilius
Miembro HIPER activo
Mensajes: 665
Re: Matrices
«
Respuesta #4 en:
Lunes 31 de Mayo de 2004, 07:19 »
0
hmmm... Ya veo.
Es probable que el Insight definitivamente fué programado y verificado sólo con matricies estilo C, que siempre comienzan de 0 y por eso que da problemas cuando la matriz aparentemente comienza de 1: Internamente comienza de 0 (lo que explica que la fila 2 no existe), pero luego erroneamente anula la posición 0, (en ese caso considera que se comienza por 1) y el resultado es tener la fila 0 toda vacía.
blannasa
Nuevo Miembro
Mensajes: 6
Re: Matrices
«
Respuesta #5 en:
Martes 1 de Junio de 2004, 02:38 »
0
holap andaba por aqui y me econtre con esta cosilla asi que vi he intente ver que pasaba asi que esto si funciona y no tengo ningun error al mostrar
program matriz(input,output);
type
matriz=array [1..2,1..13] of integer;
var
cadena : matriz;
x,y:integer;
begin
cadena[1,1]:=13; cadena[2,1]:=10;
cadena[1,2]:=14; cadena[2,2]:=10;
cadena[1,3]:=15; cadena[2,3]:=10;
cadena[1,4]:=16; cadena[2,4]:=10;
cadena[1,5]:=17; cadena[2,5]:=10;
cadena[1,6]:=18; cadena[2,6]:=10;
cadena[1,7]:=19; cadena[2,7]:=10;
cadena[1,8]:=20; cadena[2,8]:=10;
cadena[1,9]:=21; cadena[2,9]:=10;
cadena[1,10]:=22; cadena[2,10]:=10;
cadena[1,11]:=23; cadena[2,11]:=10;
cadena[1,12]:=24; cadena[2,12]:=10;
cadena[1,13]:=25; cadena[2,13]:=10;
for x:=1 to 2 do
begin
for y:=1 to 13 do
Write(cadena[x,y], ' ');
WriteLn;
end;
readln
end.
asi que no se cual es el problema
chau
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
Pascal
»
Matrices