Publicado el 11 de Julio del 2017
943 visualizaciones desde el 11 de Julio del 2017
65,4 KB
73 paginas
Creado hace 19a (20/07/2004)
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
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
2
BEGIN BEGIN
−−−− −−−−−
END; END
ELSE
BEGIN
−−−−−
END;
IF Múltiple CASE:
CASE Variable OF
Valor1:−−−−
−−−−
Valor2:−−−−
−−−−
End;
FOR:
FOR Variable:=Valor1 TO Valorn DO
BEGIN
−−−−−
END;
WHILE: REPEAT:
WHILE Condición DO REPEAT
BEGIN −−−−−−
−−−−− UNTIL Condición;
END;
EJER 1: Hacer un programa en Pascal que acepte 20 números de teclado comprendidos entre 1 y 50, y
visualice en pantalla cuantos son mayores o iguales que 25 y cuantos son menores.
Program ejer1;
3
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<0
PROGRAM RAIZ;
VAR
X,A,B,C,X1,X2:INTEGER;
BEGIN
WRITE('TECLEE TÉRMINO CUADRÁTICO');
4
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;
5
CONST
TYPE
VAR
EJER 3: Hacer una función que devuelva la suma de los elementos de un vector de n posiciones. Esta
cargado con números enteros:
FUNCTION SUMA:integer;
Var i,aux:integer;
BEGIN
aux := 0;
for i := 1 to n do
aux := aux+vector[i[;
suma:=aux;
END;
EJER 4: Hacer una función de tipo boolean que devuelve verdadero si el número
n es > 10 y falso en el caso contrario.
FUNCTION ERROR:boolean; **programa principal**
BEGIN if ERROR then writeln(n es > que 10)
if n > 10 then error := true else writeln(n no es > que 10);
else error := false;
END;
EJER 5: Codificar la potencia.
FUNCTION POTENCIA:integer;
VAR aux:integer;
BEGIN
aux:=1;
for i:=1 to exp do
aux:=aux*base;
6
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 > ó <=10
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.
7
− 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;
8
COCHES,MOTOS,CAMIONES,CICLOMOTORES,TRACTORES:VECTOR;
FUNCTION PROMEDIO (V1 : VECTOR):REAL;
VAR
ACUM,I : INTEGER;
BEGIN
ACUM := 0;
FOR I:=1 TO 20 DO ACUM := ACUM+V1[I[;
PROMEDIO := ACUM/20;
END;
PROCEDURE SUPERIOR(X:VECTOR);
VAR
PROM:REAL;
BEGIN
PROM:=PROMEDIO(X);
FOR I:=1 TO 20 DO
IF X[I[ > PROM THEN WRITELN(I);
END;
BEGIN
WRITELN('EL PROMEDIO DE COCHES ES: ' PROMEDIO(COCHES));
WRITELN('EL PROMEDIO DE MOTOS ES: ' PROMEDIO(MOTOS));
....
....
END.
7.− ESTRUCTURA DE DATOS VECTOR:
VECTOR: es una estructura de datos lineal, finita de elementos homogeneos que se almacenan
secuencialmente en memoria y son referenciados mediante un índice.
IMPLEMENTACION:
9
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;
10
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+1
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.campo1
11
EJER 8: Se tiene la siguiente declaración de tipos y de variables:
TYPE datos=RECORD
nombre:string;
provincia:string;
ventas:ARRAY[1..12[ of real;
END;
VAR tiendas:ARRAY[1..50[ of datos;
El vector tiendas almacena el nombre,provincia y las ventas realizadas durante los últimos 12 meses de 50
tiendas de España.
Suponiendo cargada la estructura,se pide un algoritmo que visualice el nombre de las tiendas de cuenca cuyo
promedio mensual de ventas sea inferior a 100.000 pts.
FOR I:=1 TO 50 DO
BEGIN
IF TIENDAS[I[ .PROVINCIA=`CUENCA' THEN
BEGIN
ACUM:=0;
FOR J:=1 TO 12 DO
SUM:=SUM+TIENDAS[I[ .VENTAS[J[ ;
IF SUM/12 < 100000 THEN
WRITELN(TIENDAS[I[ .NOMBRE);
END;
END;
EJER 9: Dada la siguiente declaración de tipos y de variables:
TYPE Fecha =RECORD
Día:1..31;
Mes: 1..12;
Año:1960..1995;
12
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
PR
Comentarios de: Repaso de Pascal (0)
No hay comentarios