Foros-FIUBA Foros HostingPortal
 FAQ  •  Buscar  •  Wiki  •  Apuntes  •  Planet  •  Mapa  •  Eyeon  •  Chat
Preferencias  •  Grupos de Usuarios
Registrarse  •  Perfil  •  Entrá para ver tus mensajes privados  •  Login
Ver tema siguiente
Ver tema anterior

Responder al tema Ver tema anteriorEnviar por mail a un amigo.Mostrar una Lista de los Usuarios que vieron este TemaGuardar este Tema como un archivoPrintable versionEntrá para ver tus mensajes privadosVer tema siguiente
Autor Mensaje
emmet
Nivel 5


Edad: 35
Registrado: 12 Oct 2008
Mensajes: 162

Carrera: Sistemas
blank.gif
MensajePublicado: Jue Feb 05, 2009 9:46 pm  Asunto: Oh si ! dudas (pascal) arhivos+recursividad Responder citandoFin de la PáginaVolver arriba

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 :S

a ver si alguien me puede tirar un centro con estooo
gracias!!!


Aquario Género:Masculino Dragón OfflineGalería Personal de emmetVer perfil de usuarioEnviar mensaje privado
Rada
Moderador


Edad: 37
Registrado: 10 Abr 2006
Mensajes: 2728
Ubicación: Caballito
Carrera: Informática
blank.gif
MensajePublicado: Jue Feb 05, 2009 9:53 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

mmm lo del archivo no se entiende la verdad, dudo que ese sea el enunciado completo,si lo tenes completo ponelo

Con respecto al de la matriz, pensalo no es dificil, que tenes hasta ahora?

_________________
[CAMPAÑA] Colaboremos entre todos por un foro más ordenado (click aquí)
[CAMPAÑA] Hacer un tópico por cada curso y con información ¡útil! (click aquí)


Gabba gabba we accept you we accept you one of us

Tauro Género:Masculino Tigre OcultoGalería Personal de RadaVer perfil de usuarioEnviar mensaje privadoEnviar emailYahoo MessengerMSN Messenger
martin.
Nivel 8


Edad: 36
Registrado: 05 Jul 2007
Mensajes: 732
Ubicación: Frente de Estudiantes Libertarios
Carrera: Informática
egypt.gif
MensajePublicado: Jue Feb 05, 2009 10:24 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

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

Aquario Género:Masculino Gato OfflineGalería Personal de martin.Ver perfil de usuarioEnviar mensaje privadoEnviar emailVisitar sitio web del usuario
Stoma
Nivel 8


Edad: 36
Registrado: 06 Jul 2006
Mensajes: 510

Carrera: Informática
argentina.gif
MensajePublicado: Jue Feb 05, 2009 10:24 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Pensa en términos recursivos. Como es un algoritmo recursivo? Que cosas debe tener? Que pinta tiene?

Por ej, para hacer [tex]n![/tex], para resolverlo recursivamente haces:
[tex] n! = n*(n-1)![/tex]
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.

_________________
Image
Si yo te digo carnaval...

Geminis Género:Masculino Gato OfflineGalería Personal de StomaVer perfil de usuarioEnviar mensaje privado
emmet
Nivel 5


Edad: 35
Registrado: 12 Oct 2008
Mensajes: 162

Carrera: Sistemas
blank.gif
MensajePublicado: Jue Feb 05, 2009 10:34 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

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!


Aquario Género:Masculino Dragón OfflineGalería Personal de emmetVer perfil de usuarioEnviar mensaje privado
emmet
Nivel 5


Edad: 35
Registrado: 12 Oct 2008
Mensajes: 162

Carrera: Sistemas
blank.gif
MensajePublicado: Jue Feb 05, 2009 10:36 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

bueeena respondieron un par mientras me escribia la vida jajajaj


Aquario Género:Masculino Dragón OfflineGalería Personal de emmetVer perfil de usuarioEnviar mensaje privado
emmet
Nivel 5


Edad: 35
Registrado: 12 Oct 2008
Mensajes: 162

Carrera: Sistemas
blank.gif
MensajePublicado: Vie Feb 06, 2009 12:59 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

probe con la recursiva q tiro martin,
tiene cosas mejores q la mia pero igual todavia me quedan lugares sin comparar :S


Aquario Género:Masculino Dragón OfflineGalería Personal de emmetVer perfil de usuarioEnviar mensaje privado
Stoma
Nivel 8


Edad: 36
Registrado: 06 Jul 2006
Mensajes: 510

Carrera: Informática
argentina.gif
MensajePublicado: Vie Feb 06, 2009 3:52 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

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:
[tex]m = \left[ \begin{array}{cccc}  4 & 7 & 2 & 1 \\ 7 & 9 & 3 & 2 \\ 2 & 3 & 2 & 8 \\ 1 & 2 & 8 & 6 \\ \end{array} \right][/tex]

llamo la función asi:
Código:
simetrico(m,0,4)

En el primer paso, va a comparar la fila 0 con la columna 0:
[tex]\left[ \begin{array}{cccc}4&7&2&1\end{array}\right][/tex] vs [tex] \left[ \begin{array}{cccc}4&7&2&1\end{array}\right] [/tex].
Como son iguales, llama recursivamente para analizar la matriz que quedo dentro, es decir:
[tex]m = \left[ \begin{array}{ccc}  9 & 3 & 2 \\ 3 & 2 & 8 \\ 2 & 8 & 6 \\ \end{array} \right][/tex]
Esto lo hace incrementando posicion.
Con esta nueva llamada, va a compara la fila 1 vs la columna 1, es decir:
[tex]\left[ \begin{array}{ccc}9&3&2\end{array}\right][/tex] vs [tex] \left[ \begin{array}{ccc}9&3&2\end{array}\right] [/tex]
De haber puesto
Código:
for (i = 0; ...)
en vez de
Código:
for(i = posicion;...)
lo que iba a comparar iba a ser:
[tex]\left[ \begin{array}{cccc}7&9&3&2\end{array}\right][/tex] vs [tex] \left[ \begin{array}{cccc}7&9&3&2\end{array}\right] [/tex].
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á.

_________________
Image
Si yo te digo carnaval...

Geminis Género:Masculino Gato OfflineGalería Personal de StomaVer perfil de usuarioEnviar mensaje privado
emmet
Nivel 5


Edad: 35
Registrado: 12 Oct 2008
Mensajes: 162

Carrera: Sistemas
blank.gif
MensajePublicado: Vie Feb 06, 2009 5:19 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

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 :P


Aquario Género:Masculino Dragón OfflineGalería Personal de emmetVer perfil de usuarioEnviar mensaje privado
Mostrar mensajes de anteriores:      
Responder al tema Ver tema anteriorEnviar por mail a un amigo.Mostrar una Lista de los Usuarios que vieron este TemaGuardar este Tema como un archivoPrintable versionEntrá para ver tus mensajes privadosVer tema siguiente

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 CrackerTracker
365 Attacks blocked.

Powered by phpBB2 Plus, phpBB Styles and Kostenloses Forum based on phpBB © 2001/6 phpBB Group :: FI Theme :: Mods y Créditos

Foros-FIUBA está hosteado en Neolo.com Cloud Hosting

[ Tiempo: 0.2219s ][ Pedidos: 20 (0.1643s) ]