Autor |
Mensaje |
ezequiel.grillo
Nivel 4
Registrado: 11 Abr 2011
Mensajes: 74
Carrera: Informática y Sistemas
|
|
Buenas, tengo problemas con el tp1 de la catedra guarna
El codigo q me genera problema es este(es una parte de todo):
Cita:
|
tcaracImgPBM=record
ID:byte;
nombre:string[30];
dimAncho:byte;
dimAlto:byte;
imagenFinal:timagenFinal; {array de una matriz}
end;
tvtotImgs= array [MIN_CANT_IMG..MAX_CANT_IMG] of tcaracImgPBM;
Procedure ingresoNombreImg (var totImgs:tvtotImgs; cantImgs:byte);
Begin
clrscr;
writeln('Ingrese el nombre de la imagen');
readln(totImgs[cantImgs].nombre);
End;
|
El problema es que nose porque se muere el programa cuando quiere cargar la posicion "nombre" en el registro.
cantImgs es una variable que la voy incrementando para ir cargando todo el array. Y este procedure lo llamo desde otro proced. que llena los otros campos de la misma manera.
La verdad que no veo cual es el problema y lo tengo que entregar mañana.....toy al horno pero bue algo tengo q salvar
PD: Me van a cagar a puteadas porque meti el codigo asi nomas pero no se usar latex....perdon
|
|
|
|
|
|
|
|
|
Symbolic
Nivel 6
Edad: 33
Registrado: 25 Ago 2011
Mensajes: 204
Ubicación: Avellaneda
Carrera: Informática
|
|
Para mi el procedimiento esta bien hecho. ¿Podrias poner la parte del código en donde lo usas?
EDIT: no habia leido bien el comentario que se te moria en tiempo de ejecucion
|
|
|
|
|
|
|
|
|
ezequiel.grillo
Nivel 4
Registrado: 11 Abr 2011
Mensajes: 74
Carrera: Informática y Sistemas
|
|
Por las dudas aca esta el codigo donde uso ese procedimiento
Cita:
|
Procedure ingresoImagen(var totImgs:tvtotImgs; var cantImgs:byte);
var
j,k:byte;
Begin
ingresoNombreImg(totImgs,cantImgs);
ingresoDim(totImgs,cantImgs);
ingresoID(totImgs,cantImgs);
For j:=1 to (totImgs[cantImgs].dimAlto) do
For k:=1 to (totImgs[cantImgs].dimAncho) do
Begin
write('[',j,',',k,'], Ingrese el valor 1/0: ');
readln(totImgs[cantImgs].imagenFinal[j,k]);
End;
inc(cantImgs);
End;
|
Cuando se muere me pone este mensaje "exited with exitcode=201".
De paso para que vean probe tambien llamando primero al proced. "ingresoID" y tmb se cuelga, el codigo de ingresoID es este
Cita:
|
Procedure ingresoID (var totImgs:tvtotImgs; var cantImgs:byte);
Begin
totImgs[cantImgs].id:=cantImgs;
End;
|
|
|
|
|
|
|
|
|
|
Amadeo
Nivel 9
Registrado: 20 Oct 2008
Mensajes: 1436
Carrera: No especificada
|
|
|
|
|
ezequiel.grillo
Nivel 4
Registrado: 11 Abr 2011
Mensajes: 74
Carrera: Informática y Sistemas
|
|
Gracias por el link....pascal me decia algo de range error, el tema es q no entiendo donde esta el problema con el rango porque canImgs lo inicializo en 1 y el array lo defino con las constante q van de 1 a 10.
Ademas haciendo debuggin segui la variable cantImgs y llega con el valor 1 asi q no tendria que haber problemas
|
|
|
|
|
|
|
|
|
Amadeo
Nivel 9
Registrado: 20 Oct 2008
Mensajes: 1436
Carrera: No especificada
|
|
ezequiel.grillo escribió:
|
Ademas haciendo debuggin segui la variable cantImgs y llega con el valor 1 asi q no tendria que haber problemas
|
Si, pero por ahí se pasa de largo del 10. Fijate eso.
|
|
|
|
|
|
|
|
|
Symbolic
Nivel 6
Edad: 33
Registrado: 25 Ago 2011
Mensajes: 204
Ubicación: Avellaneda
Carrera: Informática
|
|
Che pero en pascal si lo definis el rango con un tipo constante, despues podes usar byte? Yo recuerdo que usaba integer para acceder aunque nunca se me ocurrio preguntar si habia problema con byte.
|
|
|
|
|
|
|
|
|
ezequiel.grillo
Nivel 4
Registrado: 11 Abr 2011
Mensajes: 74
Carrera: Informática y Sistemas
|
|
Ya esta soy un boludo, no estaba pasando cantImgs por referencia en la firma del proced. en la que creo el menu principal y cantImgs lo inicializaba antes.
Graciass..
|
|
|
|
|
|
|
|
|
ezequiel.grillo
Nivel 4
Registrado: 11 Abr 2011
Mensajes: 74
Carrera: Informática y Sistemas
|
|
Muchachos tengo otra duda
No me permiten hacer hardcodeo y lo q tenia que guardar eran unos strings que guarden nombres de procesos para estas imagenes.
Lo que hice fue guardar estos strings en un proceso i desp con un readln lei el proceso que se ingreso por teclado y compare lo guardado en el registro con lo ingresado por teclado.
El problema es q pascal me los toma como distintos y siempre me entra a un if que puse para q escriba "proceso incorrecto".
Aka les dejo la carga del regsitro:
Cita:
|
Procedure cargaRegProc (var proc:tprocesos);
Begin
proc.INV:='#INV';
proc.ROT90:='#ROT90';
proc.DEL:='#DEL';
End;
|
Y aca esta el codigo cuando comparo:
Cita:
|
Begin
if ((procesoElegido <> proc.INV) or (procesoElegido <> proc.ROT90) or (procesoElegido <> proc.DEL)) then
Begin
writeln('ERROR: Proceso Incorrecto');
writeln();
writeln('Por favor reingrese el proceso a efectuar');
readkey();
End
else if (procesoElegido = proc.INV) then
Begin
vproc[cantProc].tipo_proc:=1;
inc(cantProc);
End
else if (procesoElegido = proc.ROT90) then
Begin
vproc[cantProc].tipo_proc:=2;
inc(cantProc);
End
else if (procesoElegido = proc.DEL) then
Begin
vproc[cantProc].tipo_proc:=3;
inc(cantProc);
End;
End
|
Lo que tendria que hacer es entrar en el if que le corresponda con lo ingresado, pero siempre entra en el primer if
|
|
|
|
|
|
|
|
|
Symbolic
Nivel 6
Edad: 33
Registrado: 25 Ago 2011
Mensajes: 204
Ubicación: Avellaneda
Carrera: Informática
|
|
Fijate que no es or es and. Con or con tal que uno sea verdadero entra al modulo.
|
|
|
|
|
|
|
|
|
ezequiel.grillo
Nivel 4
Registrado: 11 Abr 2011
Mensajes: 74
Carrera: Informática y Sistemas
|
|
Listo....q salame jajaj
Gracias Symbolic
|
|
|
|
|
|
|
|
|
ezequiel.grillo
Nivel 4
Registrado: 11 Abr 2011
Mensajes: 74
Carrera: Informática y Sistemas
|
|
Ultima pregunta muchachos (lo ultimo que me queda para terminar)....tengo que hacer un proceso me que me gire una matriz 90 grados
Por ejemplo:
Cita:
|
0 0 0 1 0 0 0
0 0 1 1 ==> 1 0 0
0 1 1 1 1 1 0
1 1 1
|
La idea del algoritmo seria ir recorriendo la 1° matriz por columnas e ir asignando por filas pero de atras para adelante
Este es el codigo que escribi:
Cita:
|
Function rotarMat90 (var reg:tvtotImgs; imagenElegida:byte):timagenFinal;
var
k,j,aux:byte;
Begin
For k:=1 to (reg[imagenElegida].dimAncho) do
Begin
aux:=0;
For j:=1 to (reg[imagenElegida].dimAlto) do
Begin
reg[imagenElegida].imagenFinal[j,k]:= reg[imagenElegida].imagenFinal[k,(reg[imagenElegida].dimAlto - aux)];
inc(aux);
End;
End;
rotarMat90:=reg[imagenElegida].imagenFinal;
End;
|
Ya lo repase un monton de veces el codigo i me parece q funciona pero no me devuelve la matriz rotada
Ven que haya algo mal??
Tal vez sea error de otra parte del codigo pero revisando me parece q esta todo bien y quiero sacarme la duda de q este algoritmo este bien.
Saluds
|
|
|
|
|
|
|
|
|
ezequiel.grillo
Nivel 4
Registrado: 11 Abr 2011
Mensajes: 74
Carrera: Informática y Sistemas
|
|
Perdon el ejemplo es este
0 0 0 1---------------- 0 0 0
0 0 1 1-----==>------1 0 0
0 1 1 1-----------------1 1 0
-------------------------1 1 1
|
|
|
|
|
|
|
|
|
Huey 7
Nivel 6
Registrado: 03 Mar 2010
Mensajes: 267
Carrera: Electrónica
|
|
ezequiel.grillo escribió:
|
Ya lo repase un monton de veces el codigo i me parece q funciona pero no me devuelve la matriz rotada
Ven que haya algo mal??
|
Dos problemas. Esto:
ezequiel.grillo escribió:
|
La idea del algoritmo seria ir recorriendo la 1° matriz por columnas e ir asignando por filas pero de atras para adelante
|
está bien pensado, pero esta línea:
Código:
|
reg[imagenElegida].imagenFinal[j,k]:= reg[imagenElegida].imagenFinal[k,(reg[imagenElegida].dimAlto - aux)];
|
a) No hace lo que estás proponiendo (¿error de mareo? ).
b) Escribe en la misma matriz que lee, así que vas "pisando" valores en posiciones que tenés que leer en iteraciones posteriores, perdiendo los valores originales.
|
|
|
|
_________________
|
|
|
|
|
ezequiel.grillo
Nivel 4
Registrado: 11 Abr 2011
Mensajes: 74
Carrera: Informática y Sistemas
|
|
Recien me acabo de dar cuenta de eso i ahora veo q me lo aclaraaste aca..... no pego una
Otra pregunta como tendria que poner para q se escriba en otra matriz....si pongo un reg2 estaria bien o tendria q usar otro espacio de la matriz imagenFinal?
|
|
|
|
|
|
|
|
|
|