lenguaje pascal: ana laureano_uam-a lenguajes de programación pascal profesora ana lilia laureano -...
Post on 02-Apr-2015
108 Views
Preview:
TRANSCRIPT
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
Lenguajes de ProgramaciónLenguajes de Programación
PascalPascalProfesora Ana Lilia Laureano - CrucesProfesora Ana Lilia Laureano - Cruces
Universidad Autónoma Metropolitana - AzcpotzalcoUniversidad Autónoma Metropolitana - Azcpotzalco
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
PascalPascal Pascal es un lenguaje de programación Pascal es un lenguaje de programación
desarrollado por Niklaus Wirth a principios de desarrollado por Niklaus Wirth a principios de los 80s. los 80s.
Fue desarrollado con fines didácticos, pero Fue desarrollado con fines didácticos, pero debido a su claridad y capacidad pronto se debido a su claridad y capacidad pronto se convirtió en un lenguaje de desarrollo. convirtió en un lenguaje de desarrollo.
Es un lenguaje multi-paradigma: su estructura Es un lenguaje multi-paradigma: su estructura esta basada en programación estructurada y las esta basada en programación estructurada y las últimas versiones aceptan programación últimas versiones aceptan programación orientada a objetos.orientada a objetos.
Herederos de esta claridad y capacidad son los Herederos de esta claridad y capacidad son los lengujaes Modula Eiffel y Delphi.lengujaes Modula Eiffel y Delphi.
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
PascalPascal La estructura de un programa en Pascal La estructura de un programa en Pascal
es de la siguiente forma:es de la siguiente forma:PROGRAMPROGRAM nombre del programanombre del programa
expresionesexpresiones declarativasdeclarativassubprogramas internossubprogramas internos
BEGINexpresiones expresiones de de ejecuciónejecución
ENDEND..
Los enunciados son la base del programa y Los enunciados son la base del programa y a excepción del enunciado de asignación, a excepción del enunciado de asignación, todos empiezan con una palabra clave.todos empiezan con una palabra clave.
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
PascalPascal Los comentarios se escriben encerrando Los comentarios se escriben encerrando
el texto entreel texto entre (* (* Comentario Comentario *)*)
{ { ComentarioComentario }}
Tipos de Datos: Se dividen en 2 clases, Tipos de Datos: Se dividen en 2 clases, los numéricos (los numéricos (integerinteger y y realreal) y los no ) y los no numéricos (numéricos (character, stringcharacter, string y y logicallogical). ).
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
PascalPascal Asociado al tipo existen varias clases de ellos, de acuerdo Asociado al tipo existen varias clases de ellos, de acuerdo
al número de bits disponible para su almacenamiento, por al número de bits disponible para su almacenamiento, por lo que puede haber 2 clases de enteros: lo que puede haber 2 clases de enteros: shortintshortint y y longintlongint..
Variables:Variables: son aquellos valores que toman diferentes son aquellos valores que toman diferentes valores durante la ejecución del programa.valores durante la ejecución del programa.
Constantes:Constantes: usadas para denominar los valores de un tipo usadas para denominar los valores de un tipo en particular y cuyo valor no cambia a lo largo de la en particular y cuyo valor no cambia a lo largo de la ejecución del progrma.ejecución del progrma.
Identificadores:Identificadores: utilizados para los nombres de las utilizados para los nombres de las variables y constantes. Consiste entre 1 y 63 caracteres variables y constantes. Consiste entre 1 y 63 caracteres alfanuméricos y deben empezar con una letra, no es alfanuméricos y deben empezar con una letra, no es sensible a mayúsculas o minúsculas, esto es, sensible a mayúsculas o minúsculas, esto es, MINOMBRE significa lo mismo que MiNombre.MINOMBRE significa lo mismo que MiNombre.
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
Una regla de oroUna regla de oro
En Pascal no se puede utilizar En Pascal no se puede utilizar nadanada que que no haya sido previamente declarado.no haya sido previamente declarado.
NadaNada equivale a: 1) constantes, 2) equivale a: 1) constantes, 2) variables, 3) tipos derivados y definidos variables, 3) tipos derivados y definidos por el usuario y 4) abstracciones por el usuario y 4) abstracciones procedurales y funcionales.procedurales y funcionales.
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
Programa alumno (mòdulo 100)
Const
Type
Var x,y,z,a,b,c,d : real;
Procedure nom1 (Var x,y,z: integer, d:real);ConstTypeVar Procedure (argumentos) Function (argumentos)Begin
End:
Function nom2 (x,y,z: real): Real;ConstTypeVar Procedure (argumentos) Function (argumentos)Begin
End;
Begin (* programa principal*) Procedure nom1 (x,y,z,d); C:= nom2 (a,b,c); End. (* alumno*)
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
PascalPascal Asignación numérica:Asignación numérica: El propósito es calcular el El propósito es calcular el
valor de una expresión numérica y asignarla a valor de una expresión numérica y asignarla a una variable. Su forma general es:una variable. Su forma general es:
variablevariable = = exprexpr x x :=:= a + b a + b Entradas y salidas de datos:Entradas y salidas de datos:
Cuenta con formato libre, en ambos casos:Cuenta con formato libre, en ambos casos:Read o ReadLnRead o ReadLn y tiene la forma: y tiene la forma:
ReadRead (list); (list);ReadlnReadln (list); (list);
donde donde listlist es una lista de variables separadas es una lista de variables separadas por comas:por comas: Read Read (A, B, C); (A, B, C);
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
PascalPascalLa declaración La declaración Write/WriteLnWrite/WriteLn, se utiliza para la salida de datos. Su , se utiliza para la salida de datos. Su
forma general es: forma general es:
Write Write ((list)list)
WriteLn WriteLn ((list)list)
Donde Donde listlist puede ser una lista de constantes, variables, expresiones y puede ser una lista de constantes, variables, expresiones y cadenas de caracteres separadas por comas:cadenas de caracteres separadas por comas:
WriteWrite (‘la raiz cuadrada de’, 2, ‘es’, sqrt(2.0)) (‘la raiz cuadrada de’, 2, ‘es’, sqrt(2.0))
También podemos usar la declaración También podemos usar la declaración mascaras para los reales mascaras para los reales WriteLn WriteLn (ExpresionReal:AnchoTotal:Decimales);(ExpresionReal:AnchoTotal:Decimales);
X := 78.291X := 78.291
WriteLn (x:0:1);WriteLn (x:0:1); 78.378.3 {con cero aseguro que no hay blancos}{con cero aseguro que no hay blancos}
WriteLn (x:0:2);WriteLn (x:0:2); 78.2978.29 {que preceden al numero}{que preceden al numero}
WriteLn (x:0:0);WriteLn (x:0:0); 7878
WriteLn (‘x= ‘,x:0:3);WriteLn (‘x= ‘,x:0:3); x= 78.291x= 78.291
WriteLn (x:0:4);WriteLn (x:0:4); 78.291078.2910
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
Tipos de variablesTipos de variables
VarVar a: integer;a: integer; b: real;b: real; opcion: char;opcion: char; apellido: stringapellido: string Encontre: booleanEncontre: boolean
El tipo string puede almacenar hasta 255 El tipo string puede almacenar hasta 255 caracterescaracteres
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
Tipos derivadasTipos derivadas
Un tipo de variable derivada es aquel que Un tipo de variable derivada es aquel que se basa en los tipos básicos.se basa en los tipos básicos.
Arreglos Arreglos RegistroRegistro ConjuntoConjunto Definidos por el usuarioDefinidos por el usuario
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
ArreglosArreglos
En Pascal el tipo En Pascal el tipo ARRAYARRAY sirve para sirve para almacenar elementos del almacenar elementos del mismo tipomismo tipo de de forma secuencial. Los datos tipo ARRAY forma secuencial. Los datos tipo ARRAY pueden ser: pueden ser: uniunidimensionales, dimensionales, bibidimensionales,dimensionales, tri tridimensionales dimensionales nn--dimensionales.dimensionales.
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
ArreglosArreglos
VarVar X : array [1..5] of integer;X : array [1..5] of integer; X : array [1..5] of real;X : array [1..5] of real; X : array [1..5] of boolean;X : array [1..5] of boolean; X : array [1..5] of char;X : array [1..5] of char; X : array [1..5] of string;X : array [1..5] of string;
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
Array n-dimensionalArray n-dimensional
Const Const TamMax = 30;TamMax = 30;
TypeType (*(* Tipos definidos por el usuario*)Tipos definidos por el usuario*) Ventas : array [1..TamMax, 1..5] of integer;Ventas : array [1..TamMax, 1..5] of integer;
VarVar Ventas : tipoventas;Ventas : tipoventas;
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
El Tipo RegistroEl Tipo Registro Este tipo de datos permite agrupar datos de diferente Este tipo de datos permite agrupar datos de diferente
tipo. En Pascal se designan como RECORD.tipo. En Pascal se designan como RECORD. Type Type (* Tipos definidos por el usuario*)(* Tipos definidos por el usuario*)
Record Record RegPersRegPers = = RecordRecord Nombre: string Nombre: string [20];[20]; NumTel: string [9];NumTel: string [9];
Sexo : char;Sexo : char; EndEnd; (RegPers); (RegPers)VarVar personapersona : : RegPersRegPers;; MuchasPerMuchasPer: array [1..TamMax] of : array [1..TamMax] of RegPersRegPers;;
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
Cómo accesar los campos de un Cómo accesar los campos de un registroregistro
Laura 5761-2779 f
nombre numtel sexo
Emiliano 5561-8779 m
Javier 7561-5779 m
Laura 4561-2759 f
Pedro 3461-2379 m
Ana 3061-2279 f
Mauricio 9161-2979 m
1
n
.
.
.
Persona
MuchasPer
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
PersonaPersona..Nombre := ‘Laura’;Nombre := ‘Laura’; PersonaPersona..NumTel := ‘5761-2779’;NumTel := ‘5761-2779’; PersonaPersona..Sexo := ‘f’;Sexo := ‘f’;
WithWith Persona Persona DODO BeginBegin
Nombre := ‘Laura’;Nombre := ‘Laura’; NumTel := ‘5761-2779’;NumTel := ‘5761-2779’; Sexo := ‘f’;Sexo := ‘f’;
EndEnd; (*with*); (*with*)
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
El tipo ConjuntoEl tipo Conjunto
Este tipo permite agrupar un conjunto de valores Este tipo permite agrupar un conjunto de valores que se conocen como que se conocen como tipo basetipo base..
TypeType identificadorTipo = identificadorTipo = SetSet Of TipoBase; Of TipoBase;
TypeType Monedas = (penny, nickel, dime, quarter);Monedas = (penny, nickel, dime, quarter); TipoConjMon = TipoConjMon = set ofset of monedas; monedas;
VarVar ConjMoneda : TipoConjMon;ConjMoneda : TipoConjMon; Vocales, mayusculas : Vocales, mayusculas : set ofset of char; char;
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
Inicialización de las variables tipo Inicialización de las variables tipo conjuntoconjunto
Una vez que se ha declarado una Una vez que se ha declarado una variable tipo conjunto es necesario variable tipo conjunto es necesario inicializarla.inicializarla.
ConjMoneda := [ nickel, dime];ConjMoneda := [ nickel, dime]; Vocales := [‘a’, ‘e’, ‘i’, ‘o’, ‘u’];Vocales := [‘a’, ‘e’, ‘i’, ‘o’, ‘u’]; mayuscuas := [‘A’..’Z’];mayuscuas := [‘A’..’Z’];
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
Pertenencia a un ConjuntoPertenencia a un Conjunto
Se usa la palabra reservada Se usa la palabra reservada in in para para probar si un valor particular es miembro probar si un valor particular es miembro de un conjunto.de un conjunto.
EjemplosEjemplos If If charchar in in vocales vocales thenthen …; …; IfIf quartes quartes inin ConjMon ConjMon thenthen …; …; If If g g inin [‘a’,’b’,’c’,’d’] [‘a’,’b’,’c’,’d’] thenthen …; …;
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
Operaciones con conjuntosOperaciones con conjuntos
La uniónLa unión X X + + YY [1,2,5,6] [1,2,5,6] ++ [1,2,4,7] = [1,2,4,5,6,7] [1,2,4,7] = [1,2,4,5,6,7]
La intersecciónLa intersección X X ** Y Y [1,2,5,6] [1,2,5,6] ** [1,2,4,7] = [1,2] [1,2,4,7] = [1,2]
La diferenciaLa diferencia X X – – Y: todos los elementos de X que no están en YY: todos los elementos de X que no están en Y [1,2,5,6] [1,2,5,6] - - [1,2,4,7] = [5,6][1,2,4,7] = [5,6]
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
Conjunto vacíoConjunto vacío
El conjunto vacío representado por El conjunto vacío representado por [ ],[ ], es es un conjunto sin elementos.un conjunto sin elementos. [‘a’..’z’] * [‘A’.. ‘Z’] = [‘a’..’z’] * [‘A’.. ‘Z’] = [ ][ ] También sirve para inicializar una variable, También sirve para inicializar una variable,
antes de iniciar un ciclo al cual se le agregan antes de iniciar un ciclo al cual se le agregan elementos de un conjunto.elementos de un conjunto.
Los Los operadores relacionalesoperadores relacionales se pueden se pueden aplicar a los conjuntos.aplicar a los conjuntos.
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
Conjuntos y Operadores Conjuntos y Operadores relacionalesrelacionales
X X == Y es Y es truetrue cuando los conjuntos son cuando los conjuntos son iguales.iguales.
X X <><> Y es Y es truetrue cuando los conjuntos no cuando los conjuntos no son iguales.son iguales.
XX<=<=Y es Y es truetrue cuando X es un subconjunto cuando X es un subconjunto de Y.de Y.
X X >=>=Y es Y es truetrue cuando Y es un cuando Y es un subconjunto de X.subconjunto de X.
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
Pascal: ciclo de progresión Pascal: ciclo de progresión aritméticaaritmética
For For i i ::== jj toto k k dodo[Begin][Begin]
block;block;[End][End]
donde i es una variable de tipo enumerado, j y k son donde i es una variable de tipo enumerado, j y k son expresiones discretasexpresiones discretas, y block es cualquier número de , y block es cualquier número de declaraciones, las cuales se ejecutan repetidamente declaraciones, las cuales se ejecutan repetidamente dependiendo del valor de j y k.dependiendo del valor de j y k.
For For i i :=:= 1 1 toto 10 10 dodo WriteWrite (i); (i);
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
Pascal: condición sencillaPascal: condición sencilla Decisiones: Declaración Decisiones: Declaración IF-THEN-ELSEIF-THEN-ELSE
IF IF (expresión-lógica)(expresión-lógica) THENTHEN
[Begin][Begin]
block 1;block 1;
[End][End]
[[ELSEELSE
[Begin][Begin]
block E; block E; ]]
[End][End] La expresión La expresión ConstConst::
se utiliza como expresión de inicialización de constantesse utiliza como expresión de inicialización de constantes
ConstConst
pi = 3.141593;pi = 3.141593;
dos = 2;dos = 2;
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
Pascal: operadores relacionalesPascal: operadores relacionales
Operadores relacionales:Operadores relacionales:
<< menor quemenor que a a << 5 5
< =< = menor o igual quemenor o igual que b b < =< = 4 4
== igualigual b b == 3 3
< >< > diferentediferente a a < >< > 0 0
>> mayor quemayor que b b >> 4 4
> => = mayor o igual quemayor o igual que x x > => = 0 0 Operadores lógicos:Operadores lógicos:
notnot Negación lógicaNegación lógica
andand Intersección lógicaIntersección lógica
oror Unión lógicaUnión lógica
xorxor OrOr ExcluyenteExcluyente
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
Operadores Booleanos: andOperadores Booleanos: and
pp qq p and qp and q
VV VV VV
VV FF FF
FF VV FF
FF FF FF
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
Operadores Booleanos: orOperadores Booleanos: or
pp qq p or qp or q
VV VV VV
VV FF VV
FF VV VV
FF FF FF
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
Operadores Booleanos xor: Operadores Booleanos xor: ssi p o q es verdaderassi p o q es verdaderapp qq p xor qp xor q
VV VV FF
VV FF VV
FF VV VV
FF FF FF
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
EjemplosEjemplos
65 <= estatura <= 7565 <= estatura <= 75 if (estatura >= 65) and (estatura <= 75) if (estatura >= 65) and (estatura <= 75)
then …then …
if (calif > 65) and (calif2 > 65) thenif (calif > 65) and (calif2 > 65) then write (‘contratado’)write (‘contratado’)
elseelse write (‘rechazado’)write (‘rechazado’)
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
Precedencia de operadoresPrecedencia de operadores
PrecedenciaPrecedencia Operadores Operadores numèricosnumèricos
Operadores Operadores lógicos y lógicos y
relacionalesrelacionales
MáximaMáxima Menos unuarioMenos unuario NotNot
SegundaSegunda *,/, div, mod*,/, div, mod AndAnd
TerceraTercera +, -+, - Or, xorOr, xor
MínimaMínima <,>,>=,<=,<>,=<,>,>=,<=,<>,=
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
Precedencia de operadoresPrecedencia de operadores
Cuando se encuentran dos operadores Cuando se encuentran dos operadores con la con la misma precedenciamisma precedencia, la evaluación , la evaluación se lleva a cabo de izq a der.se lleva a cabo de izq a der.
Para Para alterar la precedenciaalterar la precedencia es necesario es necesario el uso de paréntesis.el uso de paréntesis.
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
Estructuras de SelecciónEstructuras de Selección Construcción Construcción CASECASE::
Similar a Similar a IF-THEN-ELSEIF-THEN-ELSE, permite seleccionar entre un , permite seleccionar entre un número de situaciones o casos basados en un número de situaciones o casos basados en un SELECTORSELECTOR, este debe ser de tipo ordinal. La , este debe ser de tipo ordinal. La (expr)(expr) debe dar como resultado un tipo ordinal.debe dar como resultado un tipo ordinal.
CASECASE ( (exprexpr))
SELECTOR1SELECTOR1:: ((BEGINBEGIN))
block 1;block 1; ((ENDEND););SELECTOR2SELECTOR2: :
block 2block 2[[ELSEELSE] ]
block dblock dENDEND; ;
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
PascalPascal Ejemplo:Ejemplo:
ReadLn (ch);ReadLn (ch);
CASE (ch)CASE (ch)
‘‘a’, ‘e’, ‘i’, ‘o’, ‘u’:a’, ‘e’, ‘i’, ‘o’, ‘u’:
WriteLn (‘vocal’)WriteLn (‘vocal’)
ElseElse
WriteLn (‘consonante u otro WriteLn (‘consonante u otro caracter’)caracter’)
END;END;
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
Pascal: ciclos condiconalesPascal: ciclos condiconales Repite:Repite:
RepeatRepeatblockblock
Until Until (expr-lógica(expr-lógica = verdadera)= verdadera)
Mientras:Mientras: WhileWhile (expr-lógica(expr-lógica = verdadera)= verdadera)[begin][begin]
blockblock[end][end]
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
PascalPascalinvitado := 0;invitado := 0;
REPEATREPEAT
invitado := invitado + 1;invitado := invitado + 1;
WriteLnWriteLn (‘tu invitado: ’); (‘tu invitado: ’);
ReadLn ReadLn (nombre);(nombre);
UNTIL UNTIL (invitado == 10)(invitado == 10)
WHILEWHILE (invitado < 10)(invitado < 10) DODO
beginbegin
invitado := invitado + 1;invitado := invitado + 1;
WriteLnWriteLn (‘tu invitado: ’); (‘tu invitado: ’);
ReadLn ReadLn (nombre);(nombre);
endend
END DO;END DO;
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
Comparación entre los ciclos Comparación entre los ciclos condicionales: condicionales: repeat y whilerepeat y while
El cuerpo de acciones del El cuerpo de acciones del repeatrepeat siempre siempre se ejecuta al menos una vez.se ejecuta al menos una vez.
Lo anterior implica que la expresión lógica Lo anterior implica que la expresión lógica que controla el que controla el repeat repeat se encuentra al se encuentra al final.final.
Y que las variables involucradas en la Y que las variables involucradas en la expresión lógica que controla el expresión lógica que controla el whilewhile deben haber sido inicializadas antes de deben haber sido inicializadas antes de que sean instanciadas.que sean instanciadas.
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
Tanto el Tanto el repeat repeat como el como el whilewhile sirven para sirven para modelar una tarea iterativa controlada por una modelar una tarea iterativa controlada por una condición.condición.
La diferencia entre las expresiones lógicas que La diferencia entre las expresiones lógicas que controlan a la condición, es que una es la controlan a la condición, es que una es la negaciónnegación de la otra. de la otra.
En el caso de los ciclos En el caso de los ciclos NO_CondicionalesNO_Condicionales, es , es claro que se utilizan cuando se conoce el claro que se utilizan cuando se conoce el número de veces que se desea se repita el número de veces que se desea se repita el conjunto de instrucciones que se encuentran conjunto de instrucciones que se encuentran anidadas.anidadas.
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
PascalPascal Los Programas diseñados con los principios de Los Programas diseñados con los principios de
programación estructurada y un diseño modular programación estructurada y un diseño modular descendente son estructurados por medio de descendente son estructurados por medio de abstracciones abstracciones procedurales y funcionalesprocedurales y funcionales. Estos . Estos procedimientos se comunican con el programa principal procedimientos se comunican con el programa principal de manera específica, de manera específica, a través del paso de datosa través del paso de datos y son y son invocados o llamados desde éste.invocados o llamados desde éste.
Existen dos formas de estructurar el programa a través Existen dos formas de estructurar el programa a través de : de : funcionesfunciones (abstracciones-funcionales) y (abstracciones-funcionales) y procedimientosprocedimientos (abstracciones-procedurales). (abstracciones-procedurales).
El paso de datos se conoce como paso de parámetros, El paso de datos se conoce como paso de parámetros, estos pueden ser pasados por estos pueden ser pasados por referenciareferencia o por o por valorvalor. .
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
PascalPascal
Paso de parámetros Paso de parámetros por referencia:por referencia: Es un mecanismo que permite el paso de un Es un mecanismo que permite el paso de un
parámetro utilizando parámetro utilizando una dirección de una dirección de memoriamemoria con el fin de facilitar ya sea el con el fin de facilitar ya sea el retorno al programa principal de un valor retorno al programa principal de un valor producidoproducido por un subprograma o el retorno al por un subprograma o el retorno al programa principal de un valor programa principal de un valor modificadomodificado por por el subprograma.el subprograma.
Ejemplo:Ejemplo: Var a,b: integer; ! Var a,b: integer; ! Producido o Producido o ! ! modificadomodificado
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
PascalPascal
Parámetros Parámetros por valor:por valor: Es un mecanismo que permite el paso de un Es un mecanismo que permite el paso de un
parámetro utilizando parámetro utilizando su valorsu valor con el fin de evitar su con el fin de evitar su modificación, de esta forma al terminar de ejecutarse modificación, de esta forma al terminar de ejecutarse el subprograma y retornar el control al programa el subprograma y retornar el control al programa principal el valor de ese parámetro continúa siendo el principal el valor de ese parámetro continúa siendo el mismo. En otras palabras mismo. En otras palabras el valorel valor de este parámetro de este parámetro sólo puede ser utilizado.sólo puede ser utilizado.
a, b: integer; a, b: integer; ! Sólo puede ser utilizado! Sólo puede ser utilizado
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
Diseño Modular Descendente
Abstracci—n Procedural 1 Abstracci—n Procedural 2 Abstracci—n Funcional 1
Programa Principal
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
PascalPascal Ejemplo de abstracción funcional (Ejemplo de abstracción funcional (functionfunction):):
PROGRAMPROGRAM cubo cubo{ se usa una función definida por el programador para elevar al cubo}{ se usa una función definida por el programador para elevar al cubo}
varvar
num, cubo : longint;num, cubo : longint; FunctionFunction encubo (n:integer):longint; {parametros formales} encubo (n:integer):longint; {parametros formales} beginbegin
encubo := n*n*nencubo := n*n*n end; end; {encubo}{encubo}
beginbegin {programa_principal} {programa_principal} write (‘escriba un entero: ’);write (‘escriba un entero: ’); readln (num);readln (num);
cubo := encubo (num);cubo := encubo (num); {parametros actuales} {parametros actuales} writeln (num,’al cubo es: ‘, cubo) writeln (num,’al cubo es: ‘, cubo) end. end. {programa_principal}{programa_principal}
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
PascalPascal Ejemplo de abstracción procedural (Ejemplo de abstracción procedural (procedureprocedure):):
PROGRAMPROGRAM cubo cubo{ se usa una función definida por el programador para elevar al cubo}{ se usa una función definida por el programador para elevar al cubo}
varvar
num, cubo : longint;num, cubo : longint; ProcedureProcedure encubo (n:integer; var cubo:longint); {parametros formales} encubo (n:integer; var cubo:longint); {parametros formales} beginbegin
cubo := n*n*ncubo := n*n*n end; end; {encubo}{encubo}
beginbegin {programa_principal} {programa_principal} write (‘escriba un entero: ’);write (‘escriba un entero: ’); readln (num);readln (num); encubo (num, cubo);encubo (num, cubo); {parametros actuales} {parametros actuales}
writeln (num,’al cubo es: ‘, cubo) writeln (num,’al cubo es: ‘, cubo) end. end. {programa_principal}{programa_principal}
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
PascalPascal RecursiónRecursión: Muchas funciones matemáticas : Muchas funciones matemáticas
pueden estar definidas recursivamente, es decir pueden estar definidas recursivamente, es decir que están definidas en términos de casos más que están definidas en términos de casos más simples de ellas mismas.simples de ellas mismas.
Para implementarlas es necesario que una Para implementarlas es necesario que una función se invoque a sí misma. en Pascal esto función se invoque a sí misma. en Pascal esto es posible tanto para abstracciones funcionales es posible tanto para abstracciones funcionales como procedurales. Y estas son funciones o como procedurales. Y estas son funciones o procedimeintos que se llaman a si mismos.procedimeintos que se llaman a si mismos.
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
PascalPascal
Ejemplo de función recursiva:Ejemplo de función recursiva:
function function factfact (n:integer): longinteger; (n:integer): longinteger;
BeginBegin
if if n = 1n = 1 then then
factfact := 1 := 1
elseelse
factfact := n * := n * factfact (n-1) (n-1)
End; End; {fact}{fact}
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
Ejemplo de procedimiento recursivo:Ejemplo de procedimiento recursivo:
programprogram proced_recur; proced_recur;
procedure procedure tareatarea (n:integer); (n:integer);
BeginBegin
if if n = 1n = 1 then then
writelnwriteln (‘n = 1 Regresa’) (‘n = 1 Regresa’)
elseelse
beginbegin
writeln writeln (n, ‘hola’);(n, ‘hola’);
tareatarea (n-1); (n-1);
writelnwriteln (n, ‘adios’) (n, ‘adios’)
endend; {else} ; {else}
endend; {tarea}; {tarea}
begin begin
tarea tarea (4)(4)
end.end.
PascalPascal
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
Pascal: compilación separadaPascal: compilación separada Unidades:Unidades: son contenedores físicos que son contenedores físicos que
permiten albergar expresiones declarativas o permiten albergar expresiones declarativas o abstracciones procedurales o funcionales. Estos abstracciones procedurales o funcionales. Estos módulos pueden ser compilados por separado o módulos pueden ser compilados por separado o pueden estar dentro de un programa:pueden estar dentro de un programa:
Puede contener más de una abstracción funcional o Puede contener más de una abstracción funcional o procedural, oprocedural, o
Puede tener expresiones declarativas y/o de Puede tener expresiones declarativas y/o de especificación accesibles a todas las unidades del especificación accesibles a todas las unidades del programa.programa.
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
PascalPascal Las Unidades son un cierto tipo de Las Unidades son un cierto tipo de programa externoprograma externo..
UnitUnit (nombre); (nombre); Interface {p’ublicos}Interface {p’ublicos}
{declaraciones uses, const, type, o var, si existen}{declaraciones uses, const, type, o var, si existen} {encabezados de procedimientos y funciones}{encabezados de procedimientos y funciones}
ImplementationImplementation {declaraciones completas de los procedimientos y funciones}{declaraciones completas de los procedimientos y funciones}
EndEnd.. Los identificadores declarados en la parte de Los identificadores declarados en la parte de interfazinterfaz, son , son
públicos públicos lo que significa que pueden ser leídos por cualquier lo que significa que pueden ser leídos por cualquier programa o unidad que declara esta unidad.programa o unidad que declara esta unidad.
En la sección implementación, aquí se detallan las definiciones En la sección implementación, aquí se detallan las definiciones completas de los subprogramas con el encabezado repetido. El completas de los subprogramas con el encabezado repetido. El último debe terminar en último debe terminar en ;;
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
PascalPascal
Precaución: debe utilizar el mismo Precaución: debe utilizar el mismo identificador para el nombre de la unidad y identificador para el nombre de la unidad y del archivo en el que guardará el código.del archivo en el que guardará el código.
Ejem. Ejem. UnitUnit InfoMat, el archivo debe InfoMat, el archivo debe llamarse llamarse InfoMat.pasInfoMat.pas
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
PascalPascal UNITUNIT InfoMat InfoMat InterfaceInterface
UsesUses ConstConst
MaxLongVect = 50;MaxLongVect = 50; TypeType
Tipo1: integer;Tipo1: integer; TipoDeElemento = TipoDeElemento = RecordRecord NumFil,NumFil, NumCol: integer;NumCol: integer; Info: array [1..maxlogvec] of Tipo1;Info: array [1..maxlogvec] of Tipo1; EndEnd;;
ImplementationImplementation End.End.
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
PascalPascal UnitUnit Matriz; Matriz; USESUSES InfoMat; InfoMat; InterfaceInterface
FunctionFunction InicMatriz (n,m:integer): TipoDeElemento; InicMatriz (n,m:integer): TipoDeElemento; FunctionFunction AsignaMatriz (mat: TipoDeElemento, i1,i2:integer; val:Tipo1): AsignaMatriz (mat: TipoDeElemento, i1,i2:integer; val:Tipo1):
TipoDeElemento;TipoDeElemento; FunctionFunction ElemMatriz (mat: TipoDeElemento, i1,i2:integer): Tipo1; ElemMatriz (mat: TipoDeElemento, i1,i2:integer): Tipo1; FunctionFunction FilasMatriz (mat: TipoDeElemento): integer; FilasMatriz (mat: TipoDeElemento): integer; FunctionFunction ColMatriz (mat: TipoDeElemento): integer; ColMatriz (mat: TipoDeElemento): integer; FunctionFunction SumaMatriz (mat1,mat2: TipoDeElemento): TipoDeElemento; SumaMatriz (mat1,mat2: TipoDeElemento): TipoDeElemento; FunctionFunction RestaMatriz (mat1,mat2: TipoDeElemento): TipoDeElemento; RestaMatriz (mat1,mat2: TipoDeElemento): TipoDeElemento; FunctionFunction Transpuesta (mat: TipoDeElemento): TipoDeElemento; Transpuesta (mat: TipoDeElemento): TipoDeElemento; FunctionFunction Multiplica (mat1,mat2: TipoDeElemento): TipoDeElemento; Multiplica (mat1,mat2: TipoDeElemento): TipoDeElemento;
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
PascalPascal
ImplementationImplementation Function InicMatriz (n,m:integer):TipoDeElemento;Function InicMatriz (n,m:integer):TipoDeElemento; VarVar
i:integer; mat: TipoDeElemento;i:integer; mat: TipoDeElemento; BeginBegin
mat.NumFil:= n; mat.NumCol:= m;mat.NumFil:= n; mat.NumCol:= m; For i: =1 to MaxLongVecFor i: =1 to MaxLongVec
Mat.info[i] := 0;Mat.info[i] := 0; InicMatriz := mat;InicMatriz := mat;
End;End;
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
Function AsignaMatrizFunction AsignaMatriz (mat: TipoDeElemento, i1,i2:integer; val:tipo1):(mat: TipoDeElemento, i1,i2:integer; val:tipo1): TipoDeElemento;TipoDeElemento;
BeginBegin Mat.info[(i2-1)*mat.NumFil) + i1] := val;Mat.info[(i2-1)*mat.NumFil) + i1] := val; AsignaMatriz := mat;AsignaMatriz := mat;
End;End;
Function ElemMatriz (mat:TipoDeElemento; i1,i2:integer):Tipo1;Function ElemMatriz (mat:TipoDeElemento; i1,i2:integer):Tipo1; BeginBegin
ElemMatriz := mat.info[((i2-1) * mat.NumFil) + i1;ElemMatriz := mat.info[((i2-1) * mat.NumFil) + i1; End;End; .. .. End.End.
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
Pascal: uso de el TAD MatrizPascal: uso de el TAD Matriz
Program Matrices;Program Matrices; Uses Matriz, InfoMat;Uses Matriz, InfoMat;
Var: Var: mat1,mat2,MatSum,MatRes,MatMul,MatTTramat1,mat2,MatSum,MatRes,MatMul,MatTTransp: TipoElemento;nsp: TipoElemento;
Op: integer;Op: integer;......
Lenguaje Pascal: Ana Laureano_UALenguaje Pascal: Ana Laureano_UAM-AM-A
finfin
top related