Autor |
Mensaje |
emmet
Nivel 5
Edad: 35
Registrado: 12 Oct 2008
Mensajes: 162
Carrera: Sistemas
|
|
holaaaaa,
tengo unas ultimas dudas de cara al coloquio.
la primera,
con archivos de acceso directo
por ej:
si me dicen q el campo: numero de cliente es el campo "clave"
o q se accede directamente por numero de cliente.
eso quiere decir q el numero de cliente coincide con la posicion del registro?
o sea q si yo le tengo q cambiar algo al cliente numero 5 hago:
mover (archivo,5)
?
ahora va la segunda...
una funcion o procedimiento RECURSIVO q devuelva si una matriz es simetrica.
no le puedo encontrar la vuelta, siempre me quedan sin comparar algunos numeros
a ver si alguien me puede tirar un centro con estooo
gracias!!!
|
|
|
|
|
|
|
|
|
Rada
Moderador
Edad: 37
Registrado: 10 Abr 2006
Mensajes: 2728
Ubicación: Caballito
Carrera: Informática
|
|
|
|
|
martin.
Nivel 8
Edad: 36
Registrado: 05 Jul 2007
Mensajes: 732
Ubicación: Frente de Estudiantes Libertarios
Carrera: Informática
|
|
tratá de sacarlo, sino mira el pseudocódigo que puse
Código:
|
la funcion es simetrica(matriz, fila, columna) y se invoca con simetrica(matriz, 1, 1).
Si fila = (filaMax +1)
entonces es simétrica;
Si en cambio fila = columna
entonces devolvé simetrica(matriz, fila + 1, 1)
Si en cambio matriz[fila,columna]=matriz[columna,fila]
entonces devolvé simétrica(matriz, fila, columna + 1)
Sino
no es simétrica
|
|
|
|
|
_________________ FRENTE DE ESTUDIANTES LIBERTARIOS
Web: http://www.fel-arg.org/
Email: fel.argentina@gmail.com
|
|
|
|
|
Stoma
Nivel 8
Edad: 36
Registrado: 06 Jul 2006
Mensajes: 510
Carrera: Informática
|
|
Pensa en términos recursivos. Como es un algoritmo recursivo? Que cosas debe tener? Que pinta tiene?
Por ej, para hacer , para resolverlo recursivamente haces:
Es decir, ahora tenes el mismo problema, pero más chico, siguiendo recursivamente hasta llegar a la condicion de corte.
En este caso es parecido, pensá que vas a tener que ir desmenuzando la matriz y seguir tratando matrices mas chiquitas, hasta llegar a la solución de corte.
Bue, suficiente info, con eso tenes una punta grande. Si después de pensarlo mucho estas perdido, decinos hasta donde avanzaste y te ayudamos más.
|
|
|
|
_________________
Si yo te digo carnaval...
|
|
|
|
|
emmet
Nivel 5
Edad: 35
Registrado: 12 Oct 2008
Mensajes: 162
Carrera: Sistemas
|
|
lo q pasa es q si pongo el de archivos completo no tiene sentido a parte lo hice mucho mas facil para no entrar en otras cosas q no son necesarias.
voy de nuevo
a ver si se entiende algo.
ponele q el archivo de acceso directo (y binario) tiene informacion de clientes. Cada registro tiene: numero de cliente:entero
nombre:string
y me dice q se accede por numero de cliente.
Digamos q el ejercicio me pide q guarde en la variable: "elnombreqbusco" el nombre del cliente numero 5.
entonces hago:
seek(archivo,5)
read(archivo, reg)
elnombreqbusco:= reg.nombre
mi duda es si el hecho de q sea el campo por el cual se accede significa tamb q coincide su numero con el numero de registro.
o sea si en el registro 5 del archivo estan los datos justamente del cliente 5....
ahi se debe entender mejor.
con respecto a la matriz...
bue pongo lo q hice q no es tanto para escribir
f:=rango
c:=rango
es:true
procedure simet (var mat:tmatriz ; f ,c , var es:boolean);
begin
if (f=1) and (c=1) then
if es=true then write ('es')
if es=false then write ('no es')
end;
if ((f>1) or (c>1)) and (es=true) then
if mat [f-1]<>mat[f,c-1] then es:=false
simet (mat,f-1,c-1,es)
end;
f es para fila, c para columna
la condicion q es sea verdadero es para q no siga comparando si ya encontro dos q no son simetricos.
y tome en cuenta q la matriz es cudrada...
puede ser simetrica sin ser cuadrada?
bue quedo mas quilombo q lo de arriba seguro JAJAJA
a ver si sale algo ahora
gracias!
|
|
|
|
|
|
|
|
|
emmet
Nivel 5
Edad: 35
Registrado: 12 Oct 2008
Mensajes: 162
Carrera: Sistemas
|
|
bueeena respondieron un par mientras me escribia la vida jajajaj
|
|
|
|
|
|
|
|
|
emmet
Nivel 5
Edad: 35
Registrado: 12 Oct 2008
Mensajes: 162
Carrera: Sistemas
|
|
probe con la recursiva q tiro martin,
tiene cosas mejores q la mia pero igual todavia me quedan lugares sin comparar
|
|
|
|
|
|
|
|
|
Stoma
Nivel 8
Edad: 36
Registrado: 06 Jul 2006
Mensajes: 510
Carrera: Informática
|
|
Yo lo que pense es:
en cada paso, comparar la i-ésima fila con la i-ésima columna y si son simétricas, comparar la matriz cuadrada que se encuentra adentro de eso, asi recursivamente.
Ejemplo en C++, que es más claro que pascal y se entiende bien (no les puse tipo a los parámetros):
Código:
|
bool simetrico(matriz,posicion,rango){
if (posicion == (rango-1)){
return true;
}
bool sim = true;
//comparo que la posicion-ésima columna sea igual a la posicion-ésima fila
//arranco desde i=posicion para no comparar valores ya comparados antes
for (i = posicion; (i<rango) && sim; i++){
sim = (m[posicion][i] == m[i][posicion]);
}
if (sim){
return simetrico(matriz,posicion++,rango);
}else{
return false;
}
}
|
El for que esta ahi, es lo mismo que hacer esto pero con notación mas compacta:
Código:
|
i = posicion;
while ( (i<rango) AND (sim) ){
if (m[posicion][i] == m[i][posicion]){
sim = true;
}else{
sim = false;
}
i++;
}
|
Se invoca asi:
simetrico(matriz,0,rango);
Paso a paso:
supongamos una matriz asi:
llamo la función asi:
En el primer paso, va a comparar la fila 0 con la columna 0:
vs .
Como son iguales, llama recursivamente para analizar la matriz que quedo dentro, es decir:
Esto lo hace incrementando posicion.
Con esta nueva llamada, va a compara la fila 1 vs la columna 1, es decir:
vs
De haber puesto
en vez de
Código:
|
for(i = posicion;...)
|
lo que iba a comparar iba a ser:
vs .
No esta mal, va a seguir dando que es simétrico, pero vuelve a hacer comparaciones que ya hizo (podes notar que de la forma que lo hice tambien compara si los elementos de la diagonal son iguales, cosa que siempre va a pasar, eso podría arreglarse).
Esto va a llegar hasta que posicion sea igual a rango-1, es decir, cuando solo le quede comparar el 6 contra el 6, que ya sabemos que va a ser verdadero. Si en algun momento da que no es simétrico, devuelve falso y se corta el algoritmo.
Espero que se entienda, cualquier cosa preguntá.
|
|
|
|
_________________
Si yo te digo carnaval...
|
|
|
|
|
emmet
Nivel 5
Edad: 35
Registrado: 12 Oct 2008
Mensajes: 162
Carrera: Sistemas
|
|
bueeena gracias stomaa !
igual justo recien la pude terminar de otra forma,
lo q hice fue tomar el triangulo de abajo de la diag principal e ir comparando con los respectivos de arriba, la probe manualmente y funciono,
igual desp la paso a turbitopascal para corroborar
|
|
|
|
|
|
|
|
|
|
|
Ver tema siguiente
Ver tema anterior
Podés publicar nuevos temas en este foro No podés responder a temas en este foro No podés editar tus mensajes en este foro No podés borrar tus mensajes en este foro No podés votar en encuestas en este foro No Podéspostear archivos en este foro No Podés bajar archivos de este foro
|
Todas las horas son ART, ARST (GMT - 3, GMT - 2 Horas)
Protected by CBACK CrackerTracker365 Attacks blocked.
|