Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Apuntes sobre Pascal Parte1, Apuntes de Informática

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

2013/2014

Subido el 22/01/2014

gutierrez93
gutierrez93 🇻🇪

4.5

(60)

383 documentos

1 / 25

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
ESTRUCTURA
TEMARIO:
REPASO DE PASCAL.
ESTRUCTURAS DE DATOS LISTA.
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.
1
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19

Vista previa parcial del texto

¡Descarga Apuntes sobre Pascal Parte1 y más Apuntes en PDF de Informática solo en Docsity!

ESTRUCTURA

TEMARIO:

REPASO DE PASCAL.

ESTRUCTURAS DE DATOS LISTA.

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.

8.− ESTRUCTURA DE DATOS REGISTRO.

9.− ESTRUCTURA DE DATOS FICHERO.

1.− ORGANIZACION DE UN PROGRAMA PASCAL:

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');

READLN(A);

WRITE('TECLEE TÉRMINO REAL');

READLN(B);

WRITE('TECLEE TÉRMINO INDEPENDIENTE');

READLN(C);

IF A=0 THEN

BEGIN

X := −C/B;

WRITE('EL RESULTADO ES: ',X);

END;

IF (A<>0) AND (SQR(B)−4AC=0) THEN

BEGIN

X:= −B/2A;

WRITE('EL RESULTADO ES: ',X);

END;

IF (A=0) AND (SQR(B)−4AC<0) THEN

WRITE('NO EXISTEN SOLUCIONES REALES. ');

IF (A<>0) AND (SQR(B)−4AC>0) THEN

BEGIN

X1:= (−B−SQRT(SQR(B)−4AC))/2A;

X2:= (−B+SQRT(SQR(B)−4AC))/2A;

WRITE('LOS RESULTADOS SON: ',X1,','X2);

END;

END.

5.− SUBALGORITMOS DE PROCEDIMIENTOS Y DE FUNCION:

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;

TYPE

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

END;

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

CONT:=0;

FOR I:=1 TO 35 DO

BEGIN

IF CLASE2TA[I[.F_NAC.MED=2 THEN CONT:=CONT+1;

NUMERO:=CONT;

END;

END;

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;