Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Práctica 1
¿Qué es un paradigma de programación?
Es una manera de programar, ya que existen distintas formas de diseñar un lenguaje de
programación y por lo tanto, diferentes formas de trabajar para obtener los resultados
esperados. Formalmente, un paradigma es un conjunto de métodos sistemáticos aplicables
en todos los niveles del diseño de programas que resuelven problemas computacionales.
Los lenguajes que adoptan varios paradigmas son llamados “multiparadigma”.
Práctica 2
¿Qué se denomina regla lexicográfica y regla sintáctica?
Regla léxica: es el conjunto de reglas para formar las palabras “word” a partir de caracteres
del alfabeto.
Regla sintáctica: es el conjunto de reglas que define como formar expresiones y sentencias.
CPLP - Repaso para NO morir en el parcial
G = (N, T, S , P)
N = {<palabra>, <letra>}
T = {a,b,c,d,e,f,g,h,i,j,k,l,m,n,ñ,o,p,q,r,s,t,u,v,w,x,y,z}
S = <palabra>
P{
<palabra> ::= <letra><palabra> | <letra>
<letra> ::= a | b | c | d | e | f | g | h | i | j | k | l | m | n | ñ | o | p | q | r | s | t | u | v | w | x |
y|z
}
El “|” nos sirve para representar la selección de una alternativa.
Cuando hacemos <noTerminal> ::= <algo><noTerminal> | <algo> aplicamos recursión, es la
única forma que tenemos de repetir algo.
G = (N, T, S, P)
N ={<nroPrimo><nroEntero>,<digito>,<digitoFinal>,<digitoUnico>,<nro>}
T = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
S = <nroPrimo>
P={
<nroEntero> ::= [(+|-)] <nro>
<nro> ::=( {<digito>}*<digitoFinal>| <digitoUnico>)
<digito> ::= ( 0|1|2|3|4|5|6|7|8|9)
<digitoFinal> ::= (1|3|7|9)
<digitoUnico>::(2|3|5|7)
}
Con esto se acotan los números primos de un solo dígito y se eliminan los números
pares y múltiplos de 5 de la lista (mayores a 2 y 5 respectivamente).
Falta poder condicionar que el número N no debe tener divisores entre los números primos
menores a raíz(N). Operación que no es posible definir en la gramática.
Práctica 3
¿Qué define la semántica?
Conjunto de reglas para saber qué pasa cuando se ejecuta, si va a ser válido o no. Se
describe el significado de símbolos, palabras y frases de un lenguaje. Explicar qué hace una
sentencia sintácticamente válida.
La semántica es importante en la fase de análisis ya que se necesita para que todas las
estructuras sintácticas sean reconocidas , además de que se comprueban tipos, nombres
y se agrega información implícita
La parte buena del intérprete es que ahorra espacio en memoria ya que las instrucciones
del lenguaje se dejan en su forma original.
Como desventajas se puede señalar que ante procesos iterativos requiere una mayor
carga de procesador por lo que es más lento en ejecución que un compilador.
Práctica 4
Formas de inicializar una variable al momento de declararla
Existen dos estrategias de inicialización o podés ignorar el problema.
1. Ignorar el problema: le metés lo que haya en memoria.
2. Dar una estrategia de inicialización:
a. Inicialización por defecto: dependiendo el tipo de dato, la variable se
inicializará con un valor válido, por ej: si es entero se inicializa con 0, si es
caracter se inicializa en blanco.
b. Inicializar en la declaración.
Forma de inicializar en lenguajes
Atributos (linea 3)
nombre : “a” “i”
alcance: Estático {de línea 3 a 16}
tipo: Predefinido
L-value: dinámica automática
r-Value: Indefinido
Atributos (Puntero)
Nombre: p ,
alcance: estático ( de line 4 a 16 ) ,
tipo: Definido por el programador,
L-value: dinámica automática , r-value: inDefinido
Tiene un tipo distinto ( este es definido por el programador ) y un nombre distinto, además el
r-value es indefinido
b.
En el cual el tiempo de vida de un identificador sea menor que su alcance
CPLP - Repaso para NO morir en el parcial
0-Program Uno;
1-type tpuntero=^integer;
2- var mipuntero: tpuntero;
3- var i:integer;
4- var h:integer;
5- Begin
6- i:=3;
7- mipuntero:=nil;
8- new(mipuntero);
9- mipuntero^:=i;
10- h:= mipuntero^+i;
11- dispose(mipuntero);
12- write(h);
13- i:= h- mipuntero;
14- End.
Todo junto
CPLP - Repaso para NO morir en el parcial
Práctica 5
Registro de activación y cada una de sus partes
CPLP - Repaso para NO morir en el parcial
● Pto retorno: cuando una rutina llama a otra y esta última rutina termina, el punto de
retorno será la dirección de memoria donde se debe seguir ejecutando el programa.
● EE (LE - Enlace estático): es el puntero a la dirección base del registro de activación
de la rutina que estáticamente la contiene. Osea, quien me contiene, si yo soy una
función/procedure definido dentro de otra, entonces esa otra me contendrá.
● ED (Enlace dinámico): puntero a la dirección base del registro de activación de la
rutina que me llamó. Osea, rutina A llama a rutina B, el enlace dinámico de rutina B
será la dirección base del registro de activación de la rutina A.
● Variables: se enumeran las variables que conforman la unidad y se le van
reemplazando los valores de acuerdo a como se ejecuta el programa.
● Procedimientos y funciones: solo se enumeran los identificadores que contiene la
unidad.
● VR (Valor de retorno): los valores retornados por las funciones llamadas desde una
unidad X se deberán escribir en el VR. Ejemplo, si yo, rutina A, llamo a rutina B y
rutina B devuelve algo, debo escribir ese algo en el VR de rutina A.
Si yo te pido que hagas la pila de ejecución por cadena estática, lo que te voy a pedir es
que si encontrás que se usa una variable que no está definida en el ámbito local de una
rutina, buscala siguiendo la cadena estática.
Es decir, el enlace estático. En nuestro caso, el procedure A modifica el var1 que no lo
define localmente, a procedure A lo contiene estáticamente el Program ejemplo, por lo tanto
CPLP - Repaso para NO morir en el parcial
tomaría el var1 de registro de activación.
Ahora, si yo te pido que busques por cadena dinámica, entonces vas a buscar el ED (enlace
dinámico) de quién te llamó, al procedure A lo llama el procedure B, y este tiene definido
una variable llamada var1, por lo tanto toma dicha variable.
Cadena Estática
Pto retorno
EE
ED
arreglo(1) = 5
arreglo(2) = 10
arreglo(3) = 15
arreglo(4) = 20
arreglo(5) = 25
arreglo(6) = 30
arreglo(7) = 35
arreglo(8) = 40
arreglo(9) = 45
arreglo(10) = 50
Procedure A
Procedure B
Procedure C
Function D
CPLP - Repaso para NO morir en el parcial
VR
2* REG ACTIVACIÓN B
Pto retorno
EE(1*)
ED(1*)
caracter = ‘B’
{en caso de ser cadena dinamica, caracter = ’B’, ‘A’}
VR
3* REG ACTIVACIÓN A
Pto retorno
EE(1*)
ED(2*)
VR
4* REG ACTIVACIÓN C
Pto retorno
EE(1*)
ED(1*)
resultado = 25
VR = 25 (resultado de la función D)
5* REG ACTIVACIÓN D
Pto retorno
EE(1*)
ED(4*)
valor1 = 5
valor2 = 5
resultado = 25
VR
CPLP - Repaso para NO morir en el parcial
Práctica 6
Conceptos
Parámetro: variable utilizada para recibir valores de entrada en una rutina, subrutina o
método.
● Parámetro real: son las expresiones que se utilizan en la llamada de la función.
● Parámetro formal: son las variables que recibe la función, creadas al definir la función. El
contenido de esos parámetros formales se setean cuando se llama a dicha función. Los
parámetros formales son variables locales dentro de la función.
● Ligadura posicional: Se relaciona la primer variable que mandas al invocar con el
primer parámetro de la definición
● Ligadura por palabra clave o nombre: Se relaciona la variable real con la variable del
parámetro por nombre.
Modo OUT
El parámetro formal envía el dato al parámetro real.
Por Resultado
● El valor del parámetro formal es copiado al parámetro real al terminar de
.ejecutarse la unidad llamada.
● El parámetro formal es una variable local, sin valor inicial.
● Lo positivo de esto es que la unidad que llama tiene sus datos protegidos ya
que el parámetro real no es modificado en la ejecución de la unidad llamada
(se modifica cuando ésta termina).
Por Resultado de funciones
● El resultado de una función puede devolverse con una sentencia return.
● El resultado reemplazará la invocación en la expresión que contiene el
llamado.
Modo IN/OUT
El parámetro formal recibe el dato del parámetro real y el parámetro formal le envía
el dato al parámetro real.
Por Valor-Resultado
● El parámetro formal es una variable local que recibe una copia del contenido
del parámetro real, y a la salida de la unidad llamada el contenido que quedó
en el parámetro formal es copiado al parámetro real.
● Las referencias al parámetro formal son referencias locales.
Por Referencia
● Se transfiere la dirección de memoria del parámetro real al parámetro formal.
● El parámetro formal será una variable local a la unidad llamadora que
contiene la dirección en el ambiente no local (wtf).
● CADA referencia al parámetro formal será a un ambiente no local (dirección
de memoria del parámetro real). Esto implica que cualquier cambio hecho en
el parámetro formal quedará registrado en el parámetro real.
● El parámetro real es compartido por la unidad llamada.
Por Nombre (la peor de todas)
● El parámetro formal se sustituye textualmente por el parámetro real (ok si).
● Es más flexible por la evolución de valor diferida.
CPLP - Repaso para NO morir en el parcial
● Puede actuar de diferente forma en base al dato a compartir:
● Si es un único valor (una variable pete): es igual que el pasaje por
referencia.
● Si es una constante es por valor (enviás un valor y no una variable).
● Si es un elemento de un arreglo se puede cambiar el suscrito entre
las distintas referencias.
b- Decir qué imprime el programa suponiendo que para todas las variables que se pasan
el pasaje de parámetros es por: (Deberá hacer la pila estática y dinámica para cada caso)
i- Referencia. ii- Valor iii-Valor Resultado iv- Nombre v-Resultado.
i - Referencia (estático )
Recibe imprime 5, 5, 5, 5, 6
Dos imprime 5, 5, 5
Main imprime 5, 5, 6
i- Referencia ( dinámico )
Recibe imprime 5 8 5 8 9
Dos imprime 5 8 9
Main imprime 5 8 2
SHALLOW
(parecido a buscar una variable por cadena dinámica):
El ambiente de referencia, es el del subprograma que tiene el parámetro formal
subprograma. Ejemplo: SNOBOL.
DEEP
(parecido a buscar una variable por cadena estática):
El ambiente es el del subprograma dónde está declarado el subprograma usado como
parámetro real. Se utiliza en los lenguajes con alcance estático y estructura de bloque
CPLP - Repaso para NO morir en el parcial
Práctica 7
¿Qué es un sistema de tipos y cuál es su principal función?
Es un conjunto de reglas usadas por un lenguaje para estructurar y organizar sus tipos.
El objetivo de dicho sistema es escribir programas más seguros.
Sebesta
La esencia de esta definición es que todos los tipos son ligados estáticamente y su
debilidad es que ignora la posibilidad de que, aunque el tipo de la variable sea conocido, la
dirección de almacenamiento a la cual está ligada puede almacenar valores de diferentes
tipos en tiempo de ejecución para tomar esta posibilidad en cuenta definimos un lenguaje de
programación como fuertemente tipado si los errores de tipos son siempre detectados
(compilación y ejecución).
o Producto Cartesiano
o Correspondencia Finita
o Unión
o Recursión
Producto cartesiano
Utilizar elementos de dos conjuntos para definir algo del mundo real
Por ejemplo un registro en pascal o una clase en java. Si yo hago registró persona con edad
y nombre combinó un elemento del conjunto de los enteros con un elemento del conjunto de
los strings para representar una persona, lo mismo si fuese un objeto en java.
Te podría dar un ejemplo del producto cartesiano para coordenadas tenés datos x e y, el
producto cartesiano sería {x,y}, es decir la coordenada de un punto
Correspondencia Finita.
Unión
La unión de dos o mas tipos define un tipo como la división de los tipos dados
-Profe de la clase 7
CPLP - Repaso para NO morir en el parcial
El tipo de dato va a ser 1 de los x definidos, pero no ambos. Esto no es seguro entonces
para que sea seguro se usa el discriminante que te dice que mientras se usa uno no se
puede usar el otro, para evitar errores.
Tipo recursivo T
Un tipo de dato recursivo T se define como una estructura que puede contener
componentes de tipo T
Define datos agrupados cuyo tamaño puede crecer arbitrariamente y cuya estructura puede
ser arbitrariamente compleja
Mutabilidad/Inmutabilidad
( si a vos te definen y no te podes modificar, sos ininmutable hermano, en dos dias no te
tocan )
e. Alias:
TAD
Abstraer es representar algo descubriendo SUS características esenciales y suprimiendo
las que no lo son
Ø Encapsulamiento
Ø Ocultamiento de información
Práctica 8
¿A qué denominamos excepción?
Es una condición inesperada o inusual que surge durante le ejecución del programa
y no puede ser manejada en el contexto local.
Reasunción
Cuando ocurre una excepción, se maneja y cuando se termina de tratar, el control de
la ejecución es devuelto a la sentencia siguiente de donde se levantó la excepción.
Terminación
Cuando se produce la excepción, el bloque donde se levantó la misma es terminado
y se ejecuta el manejador asociado a dicha excepción.
Práctica 9
Sentencia simple, sentencia compuesta, ¿diferencia?
Una sentencia simple es una expresión que termina en ;
Una sentencia compuesta son varias sentencias individuales encerradas entre
delimitadores, por ejemplo begin, end, o llavecitas.
Sobre la reducción: hay dos formas de aplicarla, una es de orden aplicativo donde
se evalúan los argumentos los necesite o no, la otra forma es orden normal donde
se calcula lo necesario.
Paradigma POO
Es un conjunto de objetos que interactúan entre sí enviando mensajes.
Elementos
- Objetos: datos abstractos con comportamiento(métodos) y estado interno(variables
de instancia).
- Mensajes: petición de un objeto a otro para que este se comporte de una forma
determinada.
- Métodos: comportamiento asociado a un objeto (bloques de procedimientos o
funciones, duh), la ejecución de un método se desencadena a través de un mensaje
recibido.
- Clases: son tipos definidos por el usuario que determina las estructuras de datos y
las operaciones asociadas con ese tipo definido, cada objeto pertenece a una clase
y dicho objeto tiene su funcionalidad.
- Instancia de clase: cuando construimos un objeto se crea una instancia de esa
clase. Es un objeto individual por los valores que tomen los atributos (variables de
instancia).
CPLP - Repaso para NO morir en el parcial
Paradigma lógico
Es un tipo de paradigma dentro del paradigma declarativo. Los programas son una serie de
aserciones lógicas. El conocimiento se representa a través de reglas y hechos, los objetos
se representan por términos, los cuales tienen constantes y variables. PROLOG es el
lenguaje mas utilizado ( lo gracioso es que PROgramacion LOGica xD )
los hechos son declaraciones ciertas mientras que las reglas son hechos que poseen una
condición para ser verdad
Las variables son uno de los componentes de los objetos, las constantes
son lo mismo, representadas por cadenas de string en minúscula o números