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
Problema | Tabla | ||||||||||||||
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.
|
|
La tabla del inicio puede variar dependiendo la pc o los profesores que te toquen ya que en este caso es teorico.
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
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
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
A | B | Tabla | ||||||||||||||
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. |
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. |
|
A)
Memorias | Resultado |
Memoria Estatica:
var
l,nue:lista; 4b + 4b = 8bytes
i:integer; 6bytes |
Memoria Estatica = |
Memoria Dinamica:
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 = Memoria Dinamica = Memoria Total = |
B)
Memorias | Resultado |
Memoria Estatica:
var
v:vector; 10*6 = 60 b
i,dimL:integer; 6 + 6 = 12 b |
Memoria Estatica = |
Memoria Dinamica:
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