Publicado el 11 de Julio del 2017
1.042 visualizaciones desde el 11 de Julio del 2017
65,4 KB
73 paginas
Creado hace 20a (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=鈭抍/b
2潞) si a<>0 y b 2 鈭4ac=0 x=鈭抌/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 := 鈭扖/B;
WRITE('EL RESULTADO ES: ',X);
END;
IF (A<>0) AND (SQR(B)鈭4AC=0) THEN
BEGIN
X:= 鈭払/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:= (鈭払鈭扴QRT(SQR(B)鈭4AC))/2A;
X2:= (鈭払+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:
鈭扨ARAMETROS 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);
鈭扨ARAMETROS 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鈭扤ac: 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