Resultados 1 al 3 de 3

Tema: Punteros Modula-2

  1. #1 Punteros Modula-2 
    Colaborador HH
    Fecha de ingreso
    Jun 2006
    Ubicación
    Uruguay
    Mensajes
    1.450
    Descargas
    11
    Uploads
    0
    Todavia no logro entender mucho punteros.. entiendo el concepto.. pero no lo se pasar a la maquina. Hice un código que supuestamente hace esto:
    Te pregunta una cantidad de veces que que queres ingresar X números, luego de ingresar estos X números te los muestra.
    Este codigo puede que este muy mal. Estoy haciendo esto medio a ciegas.

    Código:
    MODULE eqf;
    FROM InOut IMPORT ReadCard,WriteCard, WriteString,WriteLn;
    TYPE  Cardlista = POINTER TO Nodo;
    Nodo  = RECORD
    	elemen:CARDINAL;
    	Resto:Cardlista;
    END;
    VAR
    	l:Cardlista;
    	a,i:CARDINAL;
    	
    BEGIN
    	l:=NIL;
    	WriteString ("Ingrese un número");
    	WriteLn;
    	ReadCard(a);
    	WriteLn;
    	FOR i:=1 TO a DO		
    		NEW(l);	(*	aca me da error el compilador.. no tengo muy claro lo que hace el comando NEW, creo que agrega un espacio al puntero *) 
    
                    ReadCard (l^.elemen);
    		l^.Resto:=NIL;		
    	END;
    	
    	FOR i:= 1 TO a DO
    		WriteCard (l^.elemen);
    	END;
    END eqf.
    Pues bien.. ^^ ahí esta el código.. voy a seguir intentando.. pero por ahora no sale nada

    Saludos,
    Cypress
    Última edición por Cypress; 08-04-2007 a las 22:02
    Louis Armstrong le dice a Ella Fitzgerald
    "take another drink of wine, and maybe you change your mind"
    Citar  
     

  2. #2  
    Avanzado
    Fecha de ingreso
    Jun 2006
    Ubicación
    Valhala
    Mensajes
    1.167
    Descargas
    4
    Uploads
    0
    Veras, tal como me aparece en el libro de Modula-2:
    NEW(punter)
    Este procedimiento crea una variable dinámica del tipo al que hace referencia el puntero, asigna como valor del puntero la referencia a la variable recien creada.

    Como buen libro de la uned no queda muy claro, te intento explicar un poco mejor. el procedimiento NEW(l) reserva espacio en memoria para una variable del tipo de l Si en cada pasada llamas a NEW, lo que haces es destruir el valor de esa variable, para asignarle uno nuevo. Bueno no es realmente destruir, sino que haces que ese puntero apunte a otra zona de memoria, dejando ocupada e inutilizada la anterior. Por lo que veo estas intentando hacer una lista. En tu codigo, en ningun sitio haces que el nuevo elemento señale al siguiente de la lista.
    Normalmente para las listas, suelen hacer falta tres variables, una que referencie al primer elemento de la lista, si no no podriamos recorrerla. Otro para referenciar al elemento actual y otro para referenciar al siguiente, creo que era asi.
    http://www.project-longinus.es
    Citar  
     

  3. #3  
    Colaborador HH
    Fecha de ingreso
    Jun 2006
    Ubicación
    Uruguay
    Mensajes
    1.450
    Descargas
    11
    Uploads
    0
    Aqui la solucion... me la paso alguien en el newsgroup de la facu
    Código:
    MODULE punteros;
    FROM InOut IMPORT ReadCard,WriteCard, WriteString,WriteLn;
    FROM Storage IMPORT ALLOCATE, DEALLOCATE;
    TYPE  Cardlista = POINTER TO Nodo;
    Nodo  = RECORD
         elemen:CARDINAL;
         Resto:Cardlista;
    
    END;
    VAR
         l:Cardlista;
         cant,i,leido:CARDINAL;
    
    
    PROCEDURE Cons (x: INTEGER ; VAR L: Cardlista);
    (* Inserta el elemento 'x' al comienzo de la lista 'L' *)
    VAR nuevo: Cardlista;
    
    BEGIN
        NEW (nuevo);
        nuevo^.elemen:= x;
        nuevo^.Resto:= NIL;
    
    
        IF ( L = NIL) THEN
            L := nuevo;
        ELSE
    	nuevo^.Resto := L;
    	L := nuevo;
        END;
    END Cons;
    
    
    
    
    
    
    
    
    (****************************************************)
    PROCEDURE ImprimirLista (L: Cardlista);
    (* Imprime los elementos de la lista 'L'; en caso de que la lista sea
        vacia imprime 'NIL' *)
    
    BEGIN
        IF (L = NIL) THEN (* si la lista es vacia *)
            WriteString ("NIL");
        ELSE (* imprimo los elementos *)
            (* muestro el primer elemento, porque se que no es vacia *)
            WriteCard (L^.elemen,0);
            L := L^.Resto;
            WHILE ( L <> NIL) DO
                WriteCard (L^.elemen, 0);
                L := L^.Resto;
            END;
    	
        END;
    
    
    
            (* Notar que recorro la lista con el mismo puntero 'L', ya que
                este es pasado 'por copia' *)
    END ImprimirLista;
    (****************************************************)
    
    (****************************************************)
    PROCEDURE DestruirLista (L: Cardlista);
    (* Destruye la memoria asignada a la lista 'L'*)
    VAR eliminar : Cardlista;
             (* variable auxiliar para recorrer la lista y eliminar la celda *)
    
    BEGIN
        WHILE ( L # NIL) DO
            eliminar := L;
            L := L^.Resto;
            DISPOSE (eliminar);
        END;
    END DestruirLista;
    (****************************************************)
    
    (*Programa Principal*)
    BEGIN
         l:=NIL; (* inicializo variable *)
         WriteString ("Ingrese un n&#250;mero"); WriteLn;
         ReadCard(cant);
         WriteLn;
         FOR i:=1 TO cant DO
              ReadCard (leido);
              Cons (leido,l);
         END;
    
    
    
    
         ImprimirLista (l);
    
        (* Una vez que no se va a usar mas la lista, hay que devolver la memoria
    *)
        DestruirLista (l);
    
    END punteros.
    Louis Armstrong le dice a Ella Fitzgerald
    "take another drink of wine, and maybe you change your mind"
    Citar  
     

Temas similares

  1. modula 2
    Por Francis en el foro PROGRAMACION DESKTOP
    Respuestas: 1
    Último mensaje: 14-06-2010, 01:25
  2. Problemas de un principiante con Modula-2
    Por YoGalactus en el foro PROGRAMACION DESKTOP
    Respuestas: 18
    Último mensaje: 22-05-2010, 18:19
  3. Punteros a estructuras
    Por Nelsou en el foro PROGRAMACION DESKTOP
    Respuestas: 1
    Último mensaje: 31-10-2009, 19:05
  4. Punteros para ficheros binarios en C++
    Por Dwarft en el foro PROGRAMACION DESKTOP
    Respuestas: 1
    Último mensaje: 04-08-2004, 15:42
  5. informacion sobre punteros
    Por ^K3``N30 en el foro GENERAL
    Respuestas: 2
    Último mensaje: 21-05-2003, 00:51

Marcadores

Marcadores

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •