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
Dx9
Moderador


Edad: 37
Registrado: 03 Ene 2007
Mensajes: 1552

Carrera: Informática
argentina.gif
MensajePublicado: Mar Jul 10, 2007 6:48 pm  Asunto:  Punteros en Pascal/C Responder citandoFin de la PáginaVolver arriba

Hola, estoy preparandome para rendir el final de algoritmos I, y toman en general ejercicios de punteros en C o en pascal, del estilo "busca el error en el siguiente programa".

Punteros se dio medio a las apresuradas en mi catedra (Guarna). Y no nos dieron nada para poder practicar.

la verdad queria ver si alguien me puede decir lo basico de punteros, aca les dejo un ejercicio de un coloquio:

Seguimiento
Explique con detalle que tarea realiza el siguiente procedimiento. Dar un ejemplo de funcionamiento para un conjunto de parametros p1 y p2 dados.

Código:


Procedure incognita(p1,p2:^char);

var p3:^char;
      a:char;

begin

 p3:=p1+1; {esto no entiendo que hace}

 while (p3 MENOR O IGUAL p2) do
    begin
      if (p1^ MAYOR p3^) then
        begin
         a := p1^;
         p1^ :=p3^;
         p3 ^:=a;
        end;
     inc(p3);
    end;

if (p1 <> p2) then
  incognita (p1+1,p2);
end;



Creo que este problema encapsula muchas de mis preguntas...si alguien lo puede resolver y explicarmelo un poco, seria de gran ayuda. Gracias Mr. Green




Última edición por Dx9 el Mie Jul 11, 2007 1:14 pm, editado 2 veces
Aries Género:Masculino Gato OcultoGalería Personal de Dx9Ver perfil de usuarioEnviar mensaje privadoVisitar sitio web del usuario
Rada
Moderador


Edad: 37
Registrado: 10 Abr 2006
Mensajes: 2728
Ubicación: Caballito
Carrera: Informática
blank.gif
MensajePublicado: Mar Jul 10, 2007 11:32 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

vos tenes que p3 es un puntero a un char, tal como lo son p1 y p2
Un puntero a un char puede ser entendido como una cadena (string)
Si vos pones p3 := p1+1 estas apuntando el inicio de la cadena p3 a la segunda posicion de p1.
Al pedir p1^ estas pidiendo a lo que apunta p1 en ese momento, el char inicial de la cadena seria.
Lo que no entiendo es la condicion del while, ademas de que dice while then cosa que me confunde mas todavia fiajte si por ahi no tenes algun error, depues la funcion no se lo que hace, fijae bien el enunciado, yo no entendi muy bien.

PD:maldito pascal

_________________
[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
Rada
Moderador


Edad: 37
Registrado: 10 Abr 2006
Mensajes: 2728
Ubicación: Caballito
Carrera: Informática
blank.gif
MensajePublicado: Mar Jul 10, 2007 11:37 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Si es por aprobar buen, pero veo que no les estan dando las cosas muy claras, en todo el codigo no hay ningun new ni dispose que es la forma en que se aloca la memoria en Pascal (creo) Serian los analogos de C al malloc free.

Yo cuando curse algo I (jajja parezco un viejo) no tomaban punteros en pascal.
Ahi pusiste que era en Pascal o en C, si podes darlo en C estudiate la aritmetica de punteros de C y listo, te va aser mucho mas productivo creo

_________________
[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
Fhran
Administrador


Edad: 39
Registrado: 25 Ago 2005
Mensajes: 3123
Ubicación: En la rama de un árbol... entre locos.
Carrera: Electrónica y Informática
blank.gif
MensajePublicado: Mar Jul 10, 2007 11:40 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

**********

Ojo que el foro tiene un bug y si ponés cosas entre > y < se chinga todo.

<testeando>

(en realidad puse testeando algo y el algo no se ve)

***********

_________________
Image
El horóscopo del ingeniero es un poco más amplio. Se compone de Amor, Dinero, Salud, Simetría y Linealidad Causa-Efecto.

Aquario Género:Masculino Rata OfflineGalería Personal de FhranVer perfil de usuarioEnviar mensaje privado
Dx9
Moderador


Edad: 37
Registrado: 03 Ene 2007
Mensajes: 1552

Carrera: Informática
argentina.gif
MensajePublicado: Mie Jul 11, 2007 12:50 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Rada escribió:

Lo que no entiendo es la condicion del while, ademas de que dice while then cosa que me confunde mas todavia fiajte si por ahi no tenes algun error, depues la funcion no se lo que hace, fijae bien el enunciado, yo no entendi muy bien.

PD:maldito pascal


Gracias rada, no habia pensado que p1 era un array de chars.

En un momento dice while (p3 <= p2) do

que esta comparando ahi? la direccion? tiene sentido?

mmm..si el codigo que aparece es cualquier cosa....los < > no me lo permiten escribir bien (me borraron un if completo y todo). Y tampoco puedo hacer las tabulaciones, porq no me las toma Mr. Green

Ellos me toman en C o en pascal :P Yo no elijo


Aries Género:Masculino Gato OcultoGalería Personal de Dx9Ver perfil de usuarioEnviar mensaje privadoVisitar sitio web del usuario
Rada
Moderador


Edad: 37
Registrado: 10 Abr 2006
Mensajes: 2728
Ubicación: Caballito
Carrera: Informática
blank.gif
MensajePublicado: Mie Jul 11, 2007 12:58 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

jaja con razon no entendia... ( :P)
sisi estas comparando la direccion de memoria y no le encuentro ningun sentido, segun q le pasas por parametro

_________________
[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
Rada
Moderador


Edad: 37
Registrado: 10 Abr 2006
Mensajes: 2728
Ubicación: Caballito
Carrera: Informática
blank.gif
MensajePublicado: Mie Jul 11, 2007 1:00 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Código:

alguien que edite y meta el codigo entre estas cosas

Ese alguien tenes q ser vos Dx9 pq vos solo sabe q decia

_________________
[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
Dx9
Moderador


Edad: 37
Registrado: 03 Ene 2007
Mensajes: 1552

Carrera: Informática
argentina.gif
MensajePublicado: Mie Jul 11, 2007 1:15 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

ahi lo mejore, gracias. Me sigue tirando error los <>

_________________
Biblioteca Apuntes

Aries Género:Masculino Gato OcultoGalería Personal de Dx9Ver perfil de usuarioEnviar mensaje privadoVisitar sitio web del usuario
Sebastian Santisi
Administrador Técnico


Edad: 42
Registrado: 23 Ago 2005
Mensajes: 17451


argentina.gif
MensajePublicado: Mie Jul 11, 2007 1:36 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

¿Soy yo o es un ordenamiento por selección esa garompa?

_________________
Image[tex] ${. \ \ \ \ \ \ \ \ \ .}$ [/tex][tex] ${\Large Usá \LaTeX, no seas foro...}$ [/tex]

Aries Género:Masculino Perro OfflineGalería Personal de Sebastian SantisiVer perfil de usuarioEnviar mensaje privadoVisitar sitio web del usuario
Dx9
Moderador


Edad: 37
Registrado: 03 Ene 2007
Mensajes: 1552

Carrera: Informática
argentina.gif
MensajePublicado: Mie Jul 11, 2007 1:41 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Sebastian Santisi escribió:
¿Soy yo o es un ordenamiento por selección esa garompa?


si, parece un ordenamiento por el swap, pero no entiendo porque compara

while (p3 MENOR O IGUAL p2) do

hasta donde yo entiendo, compara las direcciones. Y no le veo el sentido, si alguien me lo explica. Listo Smile


Aries Género:Masculino Gato OcultoGalería Personal de Dx9Ver perfil de usuarioEnviar mensaje privadoVisitar sitio web del usuario
todoseapormi
Nivel 9


Edad: 36
Registrado: 18 Mar 2006
Mensajes: 2135

Carrera: Sistemas
columbia.gif
MensajePublicado: Mie Jul 11, 2007 2:06 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

no eso recorre las direcciones hasta llegar al final!

la comparacion se hace en la lina del if!

_________________
MLI

Geminis Género:Masculino Gato OfflineGalería Personal de todoseapormiVer perfil de usuarioEnviar mensaje privadoEnviar emailMSN Messenger
Rada
Moderador


Edad: 37
Registrado: 10 Abr 2006
Mensajes: 2728
Ubicación: Caballito
Carrera: Informática
blank.gif
MensajePublicado: Mie Jul 11, 2007 2:13 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Pero si a esa funcion en p2 pasas algo mas chico que p1 .. explota por lo que veo

_________________
[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
Sebastian Santisi
Administrador Técnico


Edad: 42
Registrado: 23 Ago 2005
Mensajes: 17451


argentina.gif
MensajePublicado: Mie Jul 11, 2007 2:24 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Dx9 escribió:
si, parece un ordenamiento por el swap, pero no entiendo porque compara

while (p3 MENOR O IGUAL p2) do

hasta donde yo entiendo, compara las direcciones. Y no le veo el sentido, si alguien me lo explica. Listo Smile

Mientras que la dirección apuntada por p3 sea menor que la dirección apuntada por p2...

Si querés una traducción con notación de subíndices (y en C, please), basicamente:
Código:

void incognita(char *p1, size_t p2)
{
size_t p3;

for(p3 = 1; p3 < p2; p3++)
{
if(p1[0] > p1[p3])
{
swap(p1[0], p1[p3]);
}
}

if(p2 > 1)
incognita(p1 + 1, p2 - 1);

Cambié los tipos pero preservé los nombres de variables.

En tu ejemplo original, P1 es un puntero que apunta al principio, p2 es un puntero al final, p3 es un puntero al elemento que estás mirando; mientras que p3 sea menor que p2, si lo apuntado por p3 es más chico que lo apuntado por p1 (comienzo del array), hace un swap; así con cada p3. Después incrementa.

Eso claramente es selección; busca el menor elemento en el rango 0..N y lo pone al principio, después el menor en el rango 1..N, 2..N, etc..

_________________
Image[tex] ${. \ \ \ \ \ \ \ \ \ .}$ [/tex][tex] ${\Large Usá \LaTeX, no seas foro...}$ [/tex]

Aries Género:Masculino Perro OfflineGalería Personal de Sebastian SantisiVer perfil de usuarioEnviar mensaje privadoVisitar sitio web del usuario
Dx9
Moderador


Edad: 37
Registrado: 03 Ene 2007
Mensajes: 1552

Carrera: Informática
argentina.gif
MensajePublicado: Mie Jul 11, 2007 2:58 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Sebastian Santisi escribió:

En tu ejemplo original, P1 es un puntero que apunta al principio, p2 es un puntero al final, p3 es un puntero al elemento que estás mirando; mientras que p3 sea menor que p2, si lo apuntado por p3 es más chico que lo apuntado por p1 (comienzo del array), hace un swap; así con cada p3. Después incrementa.

Eso claramente es selección; busca el menor elemento en el rango 0..N y lo pone al principio, después el menor en el rango 1..N, 2..N, etc..


claro!!! gracias ss!! y gracias rada!! entre los dos lograron hacerme entender ! (cosa dificil Oops ).


Aries Género:Masculino Gato OcultoGalería Personal de Dx9Ver perfil de usuarioEnviar mensaje privadoVisitar sitio web del usuario
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.3923s ][ Pedidos: 20 (0.2819s) ]