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
