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 |
```Pascal
program Problema;
type
cadena35 = string[35];
empleado = record
dirCorreo: cadena35;
edad: integer;
sueldo:real;
end;
punt = ^empleado;
vector = array [1..500] of punt;
lista = ^nodo;
nodo = record
dato: empleado;
sig: lista;
end;
var
v:vector;
l,aux:lista;
emp:empleado;
i:integer;
begin
l:=nil;
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^.dato := emp;
aux^.sig: := l;
l := aux;
end;
end.
```
|
| Tipo de Dato | Memoria | | ------------- | ------------- | | Char | 1 byte | | Integer | 6 byte | | Real | 8 byte | | Boolean | 1 byte | | String | Longitud + 1 byte | | Puntero | 4 byte | |
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 | 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 |
```Pas program opcion_A; type lista = ^nodo; nodo = record dato:integer; sig:lista; end; var l,nue:lista; i:integer; begin l:=Nil; for i:=l to 6 do begin new(nue); nue^.dato:=i; nue^.sig:=l; l:=nue; end; end. ``` | ```Pas program opcion_B; type vector = array [1..10] of integer; var v:vector; i,dimL:integer; begin dimL:=0; for i:=1 to 6 do begin dimL:=dimL + 1; v[i]:=i; end; end. ``` | | Dato | Memoria | | ------------- | ------------- | | Char | 1 byte | | Integer | 6 byte | | Real | 8 byte | | Boolean | 1 byte | | String | Long + 1 byte | | Puntero | 4 byte | |
A)
Memorias | Resultado |
Memoria Estatica: ```Pas var l,nue:lista; 4b + 4b = 8bytes i:integer; 6bytes ``` | Memoria Estatica = ```14 bytes``` |
Memoria Dinamica: ```Pas begin l:=Nil; for i:=l to 6 do begin new(nue); 4bytes + (6bytes) = 10 bytes nue^.dato:=i; nue^.sig:=l; l:=nue; end; 6 * 10b end. ``` | Memoria Dinamica = ```(6*10)``` Memoria Dinamica = ```60 bytes``` Memoria Total = ```60b + 14b``` = ```74 bytes``` |
B)
Memorias | Resultado |
Memoria Estatica: ```Pas var v:vector; 10*6 = 60 b i,dimL:integer; 6 + 6 = 12 b ``` | Memoria Estatica = ```72 bytes``` |
Memoria Dinamica: ```Pas begin dimL:=0; for i:=1 to 6 do begin dimL:=dimL + 1; v[i]:=i; end; end. ``` | 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