

















Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Apuntes de Estructura de Datos y de la Información sobre Pascal, Organizacion de un programa en pascal, Tipos de datos, Entrada salida, Estructuras de control, Subalgoritmos de procedimiento y Subalgoritmo de funcion, Paso de parametros.
Tipo: Apuntes
1 / 25
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!


















Variables de tipo puntero. − Definición de estructura. − Implementación en Pascal. − Operaciones. PILAS, COLAS Y RECURSIVIDAD. ESTRUCTURA DE DATOS ARBOLES. ESTRUCTURA DE DATOS GRAFOS. LIBROS: − Programación avanzada y resolución de problemas en Pascal estructura de datos, metodología de la programación e ingeniería del Software (Autores G. M. Steven C. Bruell) Editorial Anaya. − Gusta a ella es: Pascal y estructura de datos. Date/Lilly Mc Graw Hill. − Otro clásico es: Estructura de datos. Seymoul Lipschntz Mc Craw Hill. Es todo en Pseudocódigo. Apuntes realizados por Ignacio Domínguez (Nacho) y Jose Luis Blanco (Chevere) TEMA I − REPASO PASCAL 1.− ORGANIZACION DE UN PROGRAMA EN PASCAL. 2.− TIPOS DE DATOS. 3.− ENTRADA SALIDA. 4.− ESTRUCTURAS DE CONTROL. 5.− SUBALGORITMOS DE PROCEDIMIENTO Y SUBALGORITMO DE FUNCION. 6.− PASO DE PARAMETROS. 7.− ESTRUCTURA DE DATOS VECTOR.
A) Area de encabezamiento. C) Area de subalgoritmos. PROGRAM nombre; PROCEDURE USES librerias; FUNCTION B) Area de declaraciones. D) Area de programa principal. CONST identif=valor; BEGIN TYPE identif=tipo; ... VAR identif:tipo; END. 2.− TIPOS DE DATOS EN PASCAL: Los datos se dividen en datos simples y estructurados: son varios datos de tipo simple. Integer String SIMPLES Char ESTRUCTURADOS Array Boolean El resto.... Real
3. ENTRADA. SALIDA. READ( ); WRITE( ); READLN( ); WRITELN( ); 4.− ESTRUCTURAS DE CONTROL: Se dividen en estructuras de: − lógica secuencial : asignaciones y llamadas a procedimientos. − lógica condicional : simple,doble,multiple ( IF ; CASE ) − lógica iterativa o repetitiva : FOR ; WHILE ; REPEAT SIMPLE DOBLE IF Condición THEN IF Condición THEN
Uses CRT; Var i,num,may,men: integer; BEGIN may := 0; men := 0; for i := 1 to 20 do begin repeat readln(num); until (num >= 1) and ( num < 50); if num >= 25 then may := may+1; else men := men+1; end; writeln(Hay, may, nº mayores o igual a 25 años); writeln(Hay, men, nº menores a 25 años); END. EJER 2: Aceptar el termino cuadrático, lineal e independiente de una ecuación de 2º grado y muestre por pantalla todas sus posibles soluciones. ax 2 +bx+c=0 2 −−cuadrado 1º) si a=0 x=−c/b 2º) si a<>0 y b 2 −4ac=0 x=−b/2a 3º) si a<>0 y b 2 −4ac<0 no hay soluciones reales 4º) si a<>0 y b 2 −4ac< PROGRAM RAIZ; VAR X,A,B,C,X1,X2:INTEGER; BEGIN WRITE('TECLEE TÉRMINO CUADRÁTICO');
PROCEDURE nombre( ); FUNCTION nombre( ):tipo;
potencia:=aux; END; EJER 6: Programa que acepte un número entero y mediante una función de tipo boolean visualice en pantalla si el número es > ó <= PROGRAM ent; FUNCTION DECIM : boolean; VAR num:integer; BEGIN BEGIN if num>10 then decim:=true writeln('Teclee un número: '); else decim:=false; read(num); END; if decim=T then writeln('El nº es > que 10') else writeln('El nº es > que 10'); END. 6.− PASO DE PARAMETROS: PARAMETROS: sirven para enviar informacion desde el punto de llamada del procedimiento o función al subalgoritmo y viceversa. Parametros formales en las cabeceras: PROCEDURE UNO (parametros formales); Parametros actuales en la llamada: UNO (parametros actuales); Según el sentido del flujo de información hay dos tipos de parámetros: −PARAMETROS POR VALOR: son de ida. Desde el punto de llamada hasta el procedimiento. No se modifican a la vuelta porque sólo son de ida. Procedure Uno (x:integer ; a:char); −PARAMETROS POR VARIABLE: de ida y vuelta. Llevan y devuelven información. Procedure Dos (VAR x:real ; VAR z:char); Nº parametros formales = Nº parametros actuales Las variables Por Valor deben de ser: − Mismo nº de parámetros actuales que en la cabecera de la función (formales). − Del mismo tipo. − En el mismo orden.
− En la llamada se pondría una variable, un valor o una expresión. Las variables Por Referencia deben de ser: − Sólo pueden ponerse variables que contengan un valor. Ejemplo paso de parámetros. PROGRAM EJERCICIO; VAR a,b,c:Integer; PROCEDURE Parametros (Var x,y:Integer;Z:Integer); VAR h:Integer BEGIN h:=x+2; y:=y+h; z:=2*y; x:=z; END; BEGIN a:=1; b:=2; c:=3; Parametros (a,b,c); WRITE (A); WRITE (B); WRITE (C); END. EJER 7: Dada la siguiente declaración de tipos y de variables que representan la cantidad de vehiculos vendidos en los últimos 20 años. Se pide: 1.− hacer una funcion que calcule el promedio de ventas de cualquiera de ellos. 2.− hacer un procedimiento que visualica aquellas posiciones del vector que tenga una cantidad superior al promedio de ventas. TYPE VECTOR : ARRAY [1..20[ OF INTEGER; VAR CANTT : INTEGER;
VECTOR: = Array [lim.inf. ... lim.sup.[ OF tipo; VAR v1,v2,v3: VECTOR; Búsqueda de un elemento en un Vector de 2 formas: Secuencial: Del primero al último. Dicotómica: En un vector ordenado se va partiendo por la mitad y se va buscando, así sucesivamente. − BUSQUEDA DICOTOMICA: 1.− Calcular el elemento mitad. 2.− Comparar el elemento a buscar con el elemento mitad. 3.− Hacer el vector mas pequeño. Inf := LI; Sup := LS; Mitad := [inf+sup[ DIV 2; Parametros: − vector donde busco. − elemento a buscar. − posición donde lo encuentra,si no lo encuentra un 0. TYPE VECTOR: = Array [lim.inf. ... lim.sup.[ OF tipo; VAR v1,v2: VECTOR; PROCEDURE DICOTOMICA (v:vector;elem: ;VAR pos:integer); VAR Inf, Sup, Mitad: integer; Enc: boolean; BEGIN Inf := LINF;
Sup := LSUP; Enc:= false; REPEAT mitad:= (inf+sup) DIV 2; IF elem = v[mitad[ THEN BEGIN enc := true; pos := mitad; END; ELSE IF elem < v[mitad[ THEN sup := mitad+ else inf := mitad+1; UNTIL (enc = true) OR (inf = sup); IF NOT enc THEN pos := 0; END; 8.− ESTRUCTURA DE DATOS REGISTRO: REGISTRO: es una estructura de datos homogeneos o no a los cuales se les llama campos tales que se accede a ellos mediante su propio nombre. Tienen un número ilimitado de elementos y no tienen porque guardar un orden natural en memoria. IMPLEMENTACION: TYPE registro = RECORD campo1: tipo; campo2: tipo; ... END; VAR reg1, reg2: registro; Para acceder : reg1.campo
Alumno=RECORD Nombre: String; F−Nac: Fecha; Notas: ARRAY [1..8] OF REAL; END; VAR CLASE2TA: ARRAY [1..35] OF ALUMNO; Supuesta la estructura que está cargada hacer un algoritmo que visualice el nombre de todos aquellos alumnos con nota media superior a 7. Visualizar el nombre de los alumnos que han nacido en el mes de Febrero. Funcion que cuente el número de alumnos. PROCEDURE VISUALIZAR: VAR X,Y: INTEGER; PROM: REAL; BEGIN FOR X:=1 TO 35 DO BEGIN PROM:=0; FOR Y:=1 TO 8 DO PROM:=PROM+CLASE2TA[X].NOTAS[Y]; PROM:=PROM/8; IF PROM >7 THEN WRITELN (CLASE2TA[X].NOMBRE): END; END; FUNCTION NUMERO:INTEGER; VAR I, CON: INTEGER; BEGIN
EJER 10: Con la misma declaración de tipos que el ejercicio anterior y con la variable CLASES hacer un algoritmo que visualice el nombre de los alumnos del curso 2TA cuyo año de nacimiento sea 1970 y cuya nota en la asignatura 3 sea inferior a 5. VAR CLASES: ARRAY [1..35] OF ALUMNO; FOR X:=1 TO 35 DO BEGIN IF (CLASES[I[ .FECHA_NAC.AÑO=1970) AND (CLASES[I[ .CURSO=`2MD') AND (CLASE[I[ .NOTAS[3[ < 5) THEN WRITELN(CLASES[I[ .NOMBRE); END; 9.− FICHEROS: FICHERO: estructura de almacenamiento de información, todos del mismo tipo, el almacenamiento se realiza en disco. IMPLEMENTACION: TYPE registro = ... fichero = FILE OF registro; VAR f: fichero; OPERACIONES: ASSIGN (VAR Fichero, 'C:\Fichero físico'); Asignar. RESET (Var Fichero); Para leer un fichero que ya existe; situa el puntero en el primer registro del fichero. Si no existe el fichero daría error.
Notas: ARRAY [1..6] OF REAL; END; fichero=FILE OF alumno; VAR F:fichero; Hacer un procedimiento que carge de teclado el fichero hasta que el usuario diga que no quiere meter mas datos. Una vez creado hacer un algoritmo que visualice el nombre de los alumnos que tengan más de un 6 de nota media. PROCEDURE CARGAR; VAR REG:ALUMNO; BEGIN ASSIGN(F,'A:\PASCAL\ALUMNOS.DAT); {$I−} RESET(F); {$I+} REWRITE(F); SEGUIR:=S'; REPEAT WRITELN(Teclee nombre: );READLN(Reg.nombre); WRITELN(Teclee dia de nacimiento: );READLN(Reg.fecha_nac.dia); WRITELN(Teclee mes: );READLN(Reg.fecha_nac.mes); WRITELN(Teclee año: );READLN(Reg.fecha_nac.año); WRITELN(Teclee el curso: `);READLN(Reg.curso); FOR I:=1 TO 6 DO BEGIN
WRITE(Teclee la nota:); READ(Reg.notas[I[ ; END; WRITELN(¿DESEA SEGUIR?'); SEGUIR:=READKEY; UNTIL SEGUIR:=N'; CLOSE(F); END; TEMA II − PUNTEROS 1.− ASIGNACION ESTATICA Y DINAMICA DE MEMORIA. 2.− VARIABLES DE TIPO PUNTERO. 1.− ASIGNACION ESTATICA Y DINAMICA DE MEMORIA: Una variable tiene asignación estática de memoria cuando su tamaño se define en el momento de la compilación. (Ej: A:INTEGER;) Una variable tiene asignación dinámica de memoria cuando se define en la compilación, pero no ocupa memoria (no existe realmente) hasta la ejecución. (Ej: X:INTEGER;). 2.− VARIABLES DE TIPO PUNTERO: PUNTERO : Es una variable que almacena una dirección de memoria. Las variables dinámicas se definen y se accede a ellas a través de las variables de tipo puntero. IMPLEMENTACION TYPE Puntero=^Integer; VAR P,Q:PUNTERO; BEGIN NEW (P); NEW: Este procedimiento asigna al puntero P,a traves del parámetro una dirección de memoria libre. En esta dirección es donde se almacena la variable dinámica.
¿Que es un NODO ?: Es un elemento formado por 2 partes, la parte de la Izquierda es el INFO , es donde guarda el dato y el de la Derecha, es el SIG , me da la dirección de memoria del siguiente NODO. info sig NIL Lista 2.− IMPLEMENTACION EN PASCAL: TYPE Puntero=^nodo; Nodo=RECORD INFO:...; SIG:Puntero; END; VAR Lista,Aux:Puntero; Lista : Puntero comienzo, me garantiza la lista completa. Aux : Puntero auxiliar. 3.− OPERACIONES CON LISTAS ENLAZADAS: 3.1.− CREACION: Estructura dinámica. NEW (LISTA); Lista es el primer NODO. READ (LISTA^.Info); Aceptar el campo Info del NODO. LISTA^.Sig:=NIL; Meto NIL en Sig, para saber que es el último NODO. Todos los NODOS son iguales, menos el 1º ( jamás debe tocarse el 1º ). Hay 2 pasos, creación del primer NODO y el Resto. CREACION CON N NODOS: BEGIN NEW (Lista); READ (Lista^.Info);
Aux:=Lista; FOR I:=1 TO N DO BEGIN NEW (Aux^.Sig); Aux:=Aux^.Sig; READ (Aux^.Info); END; Aux^.Sig:=NIL; END. 3.2.− RECORRIDO EN UNA LISTA ENLAZADA: Me sitúo en el primer NODO, con el puntero auxiliar y hasta el último no termina. Aux:=Lista; WHILE Aux <> NIL DO BEGIN WRITE (Aux^.Info); Aux:=Aux^.Sig; END; 3.3.− BUSQUEDA DE UN ELEMENTO EN UNA LISTA ENLAZADA: Realizar un Procedure que reciba como parámetro el puntero comienzo de una lista enlazada, un elemento del mismo tipo y un puntero sobre el que se devuelve la dirección de memoria del NODO que contiene dicho elemento si es que esta y NIL si no está. PROCEDURE BUSQUEDA(Comienzo:Puntero,Elem:Integer,VAR pos:Puntero) VAR Aux:Puntero; Enc:Boolean; BEGIN Aux:=COMIENZO;