CADP
CADP copied to clipboard
🎓 Practicas, Parciales, Módulos funcionales y evaluados por la catedra. Además de ejercicios de tiempo de ejecución para el final.
Aca esta la carpeta de cadp, con todos los ejercicios de todas las practicas
- Resumen Final
- Preguntas de verdadero o falso
- Preguntas Teoricas
- Ejemplos de memorias y tiempo
- Eliminar Ocurrencias vector ordenado
- Vectores
- Listas
1) Teniendo en cuenta la tabla, calcular la memoria estatica, dinamica y el tiempo de ejecución.
Problema | Tabla | ||||||||||||||
|
|
Resolución
La tabla del inicio puede variar dependiendo la pc o los profesores que te toquen ya que en este caso es teorico.
💾🧍♂️ Memoria Estatica.
Es la suma de las variables declaradas en el Var
del programa principal.
En este ejemplo seria:
var
v:vector;
l,aux:lista;
emp:empleado;
i:integer;
Hacemos los calculos:
v:vector; 500 * 4b (Al ser un puntero, siempre vale lo que nos marca en la tabla, aunque apunte a otras variables)
2000 bytes
l,aux:lista; 4b + 4b = 8 bytes
emp:empleado;
i:integer;
Recordemos que:
empleado = record
dirCorreo: cadena35; (35 + 1b)
edad: integer; 6b
sueldo:real; 8b
end:
Nos quedaria:
v:vector; 2000b
l,aux:lista; 8 bytes
emp:empleado; (35 + 1b) + 6b + 8b = 50 bytes
i:integer; 6b
Dimension Fisica
= v + l,aux + emp + i
Dimension Fisica
= 2000b + 8b + 50b + 6b
Dimension Fisica
= 2064 bytes
💾🏃 Memoria Dinamica.
La memoria dinamica se empieza a calcular a partir del primer new();
, en caso de no encontrarse en el programa no tendriamos que hacer ninguna operación. Y asi como se suma memoria dinamica con el new();
se restaria (Libera) con el Dispose();
for i:=1 to 10 to
begin
read(emp.dirCorreo, emp.edad, emp.sueldo);
if (emp.edad < 40) and (emp.sueldo < 40000) then
exp.sueldo:= exp.sueldo + 7000;
new(aux); <-------------------------- Aux fue decladaro como lista y lista es un puntero a nodo
aux^.dato := emp;
aux^.sig: := l;
l := aux;
end;
Recordemonos que:
lista = ^nodo;
nodo = record
dato: empleado; 50 bytes (Ya lo calculamos arriba)
sig: lista; 4 bytes (Puntero)
end; 50b + 4b = 54 bytes
Concluimos que el new(aux); es 54 bytes
y al estar dentro de un for que va hasta 10, lo que tenemos que hacer es:
Memoria Dinamica
= 54b * 10
Memoria Dinamica
= 540 bytes
⌚💀🔪 Tiempo de Ejecución.
Codigo | Tiempo (ut) |
---|---|
readln(); | 0ut |
writeln(); | 0ut |
else | 0ut + contenido |
x := 0; | 1ut |
x := y; | 1ut |
new(); | 0ut |
Dispose(); | 0ut |
l:=nil; | 1ut |
x := y (+,-,*,/,mod,div) x; | 2ut |
if () then | (1ut por op.elem) + contenido (<,>,<>,=,or,and,not,/,*,+,-) |
for i:=1 to n | ((3*n+2)ut) + (n * contenido) |
while() do | (n + 1ut por op.elem) + (n * contenido) |
repeat until() | Ni idea |
case (): | Ni idea :D (HELP!) |
Ya sabiendo lo anterior, solo nos quedaria hacer las operaciones
begin
l:=nil; 1ut
for i:=1 to 10 to (3*10+2)
begin
read(emp.dirCorreo, emp.edad, emp.sueldo); 0ut
if (emp.edad < 40) and (emp.sueldo < 40000) then (1ut + 1ut + 1ut)
exp.sueldo:= exp.sueldo + 7000; 2ut
new(aux); 1ut
aux^.dato := emp; 1ut
aux^.sig: := l; 1ut
l := aux; 1ut
end;
end.
Nos quedaria:
Tiempo de ej
= 1ut + ((3*10+2) + (((1ut + 1ut + 1ut) + 2ut) + 1ut + 1ut + 1ut + 1ut) * 10)
Tiempo de ej
= 1ut + ((3*10+2) + (((3ut) + 2ut) + 4ut)*10)
Tiempo de ej
= 1ut + ((32ut) + (9ut)*10)
Tiempo de ej
= 1ut + ((32ut) + 90ut)
Tiempo de ej
= 1ut + (122ut)
Tiempo de ej
= 123ut
2) Cual de las dos opciones consume menos memoria total (Memoria estatica + Memoria dinamica).
A | B | Tabla | ||||||||||||||
|
|
|
A)
Memorias | Resultado |
Memoria Estatica:
|
Memoria Estatica = |
Memoria Dinamica:
|
Memoria Dinamica = Memoria Dinamica = Memoria Total = |
B)
Memorias | Resultado |
Memoria Estatica:
|
Memoria Estatica = |
Memoria Dinamica:
|
Memoria Dinamica = No tiene :D |
Justificación:
- El A es el que ocupa menos memoria ya que en el B con tan solo la memoria estatica, este supera al A en memoria total