7.11. Respuestas a las preguntas y ejercicios.
anterior :: indice :: siguiente
1. |
|
Un puntero es una variable que nos permite guardar una dirección de memoria.
|
2. |
|
Es una variable que se puede crear cuando se las necesita y borrar cuando ya no se las necesita durante la ejecución del programa
|
3. |
|
Sirve para obtener la dirección de memoria de una variable.
|
4. |
|
Sólo se puede compilar A.
|
5. |
|
Sirve para indicar que un puntero no tiene dirección de memoria.
|
6. |
|
Sólo se puede compilar A.
|
7. |
|
Es un tipo de dato puntero con un tipo de dato específico, que permite definir cómo será la variable dinámica cuando sea creada.
|
8. |
|
Cree los siguientes programas que hizo en los Ejercicios del Capítulo 5.9, pero esta vez usando variables dinámicas: |
| |
|
Pregunta 5:
|
|
|
A) |
|
{$codepage UTF8}
VAR VentasBrutas:integer;
salario:double;
n,c,i:integer;
contadores:^integer;
BEGIN
ReturnNilIfGrowHeapFails:=true;
getmem(contadores,9*SizeOf(integer));
if (contadores<>nil) then
Begin
fillchar(contadores^,9*SizeOf(integer),0);
Write('Ingrese numero de Vendedores : ');Readln(n);
For i:= 1 to n do
Begin
Write('Ventas Vendedor [',i,'] : ');Readln(VentasBrutas);
Salario:=200+(0.09*VentasBrutas);
if (salario>=200) and (salario<=299) then contadores[0]:=contadores[0]+1
else if (salario<=399) then contadores[1]:=contadores[1]+1
else if (salario<=499) then contadores[2]:=contadores[2]+1
else if (salario<=599) then contadores[3]:=contadores[3]+1
else if (salario<=699) then contadores[4]:=contadores[4]+1
else if (salario<=799) then contadores[5]:=contadores[5]+1
else if (salario<=899) then contadores[6]:=contadores[6]+1
else if (salario<=999) then contadores[7]:=contadores[7]+1
else contadores[8]:=contadores[8]+1;
End;
c:=200;
For i:= 0 to 8 do
Begin
if c<>1000 then Writeln('[',c,'..',c+99,']: ',contadores[i])
else Writeln('[',c,'..]: ',contadores[i]);
c:=c+100;
End;
freemem(contadores);
End
Else Writeln('Falta Memoria');
Writeln('Presione enter para terminar ...');
Readln
END. |
|
|
|
|
|
{$codepage UTF8}
VAR MA,MB,MR:^double;
i,j,n:integer;
BEGIN
ReturnNilIfGrowHeapFails:=true;
Write('Introduzca longitud de la Matriz : ');
Readln(n);
getmem(MA,n*n*SizeOF(double));
getmem(MB,n*n*SizeOF(double));
getmem(MR,n*n*SizeOF(double));
if ((MA<>nil) and (MB<>nil) and (MR<>nil)) then
Begin
Writeln('Ingrese datos de la primera Matriz : ');
for i:= 0 to n-1 do
Begin
for j:=0 to n-1 do
Begin
Write('[',i+1,',',j+1,'] ');Read(MA[i*n+j]);
End;
Writeln
End;
Writeln('Ingrese datos de la segunda Matriz : ');
for i:= 0 to n-1 do
Begin
for j:=0 to n-1 do
Begin
Write('[',i+1,',',j+1,'] ');Read(MB[i*n+j]);
End;
Writeln;
End;
for i:= 0 to n-1 do
for j:= 0 to n-1 do
MR[i*n+j]:=MA[i*n+j]+MB[i*n+j];
Writeln('Resulatdo de la suma ');
for i:= 0 to n-1 do
Begin
for j:= 0 to n-1 do
Begin
Write('[',i+1,',',j+1,'] : ',MR[i*n+j]:2:2,' ');
End;
Writeln;
End;
freemem(MA);
freemem(MB);
freemem(MR);
End
Else Writeln('Falta Memoria');
Write('Presione Enter para terminar ...');
Readln;
Readln
END. |
|
|
|
|
|
{$codepage UTF8}
VAR MA,MB,MR:^double;
i,j,k,n:integer;
BEGIN
ReturnNilIfGrowHeapFails:=true;
Write('Introduzca longitud de la Matriz : ');
Readln(n);
getmem(MA,n*n*SizeOF(double));
getmem(MB,n*n*SizeOF(double));
getmem(MR,n*n*SizeOF(double));
if ((MA<>nil) and (MB<>nil) and (MR<>nil)) then
Begin
Writeln('Ingrese datos de la primera Matriz : ');
for i:= 0 to n-1 do
Begin
for j:=0 to n-1 do
Begin
Write('[',i+1,',',j+1,']');Read(MA[i*n+j]);
End;
Writeln
End;
Writeln('Ingrese datos de la segunda Matriz : ');
for i:= 0 to n-1 do
Begin
for j:=0 to n-1 do
Begin
Write('[',i+1,',',j+1,']');Read(MB[i*n+j]);
End;
Writeln;
End;
for i:= 0 to n-1 do
for j:= 0 to n-1 do
Begin
MR[i*n+j]:=0;
for k:=0 to n-1 do
MR[i*n+j]:=MR[i*n+j]+MA[i*n+k]*MB[k*n+j];
End;
Writeln('Resultado del producto');
for i:= 0 to n-1 do
Begin
for j:= 0 to n-1 do
Begin
Write('[',i+1,',',j+1,'] : ',MR[i*n+j]:2:3);
End;
Writeln;
End;
freemem(MA);
freemem(MB);
freemem(MR);
End
Else Writeln('Falta Memoria');
Write('Presione Enter para terminar ...');
Readln;
Readln
END. |
|
|
|
|
|
{$codepage UTF8}
VAR Matriz:^integer;
d1,d2,i,j :integer;
posi1,posj1,posi2,posj2: integer;
mayor : integer = -32768;
menor : integer = 32767;
BEGIN
ReturnNilIfGrowHeapFails:=true;
Writeln('Ingrese dimensiones de la matriz (maximo m x n ): ');
Write('d1 : ');Readln(d1);
Write('d2 : ');Readln(d2);
getmem(Matriz,d1*d2*SizeOF(integer));
if Matriz<>nil then
Begin
Writeln('Ingrese datos a la matriz');
for i:= 0 to d1-1 do
for j:= 0 to d2-1 do
Begin
Write('matriz [',i+1,',',j+1,']');
Readln(Matriz[i*d1+j]);
End;
Writeln('Matriz');
for i:= 0 to d1-1 do
Begin
for j:= 0 to d2-1 do
Write(Matriz[i*d1+j]:5);
Writeln;
End;
for i:= 0 to d1-1 do
for j:= 0 to d2-1 do
Begin
if matriz[i*d1+j] > mayor then Begin
posi1:=i;
posj1:=j;
mayor:=matriz[i*d1+j];
End;
if matriz[i*d1+j] < menor then Begin
menor:=matriz[i*d1+j];
posi2:=i;
posj2:=j;
End;
End;
Writeln('El mayor es : [',posi1+1,',',posj1+1,'] = ',mayor);
Writeln('El menor es : [',posi2+1,',',posj2+1,'] = ',menor);
FreeMem(Matriz)
End
else Writeln('Falta Memoria');
Writeln('Presione Enter para terminar ...');
Readln
END. |
| |
|
|
|
|
{$codepage UTF8}
VAR ni,hi,NiMenorQ,NiMayorQ,HiMenorQ,HiMayorQ:^real;
n,i:integer;
Tni:real = 0;
BEGIN
ReturnNilIfGrowHeapFails:=true;
Write('Ingrese numero de datos : ');readln(n);
getmem(ni,n*SizeOF(real));
getmem(hi,n*SizeOF(real));
getmem(NiMenorQ,n*SizeOF(real));
getmem(NiMayorQ,n*SizeOF(real));
getmem(HiMenorQ,n*SizeOF(real));
getmem(HiMayorQ,n*SizeOF(real));
if ((ni<>nil) and (hi<>nil) and (NiMenorQ<>nil) and (NiMenorQ<>nil) and
(NiMayorQ<>nil) and (HiMenorQ<>nil) and (HiMayorQ<>nil)) then
Begin
for i:= 0 to n-1 do
Begin
Write('ni[',i+1,'] '); readln(ni[i]);
Tni+=ni[i];
End;
//Frecuencia Relativa hi
for i:= 0 to n-1 do hi[i]:=ni[i]/Tni;
//Frecuencia Absoluta Acumulada Menor Que Ni
NiMenorQ[0]:=ni[0];
for i:=1 to n-1 do NiMenorQ[i]:=NiMenorQ[i-1]+ni[i];
//Frecuencia Absoluta Acumulada Mayor Que Ni*
NiMayorQ[0]:=Tni;
for i:=1 to n-1 do NiMayorQ[i]:=NiMayorQ[i-1]-ni[i-1];
//Frecuencia Relativa Acumulada Menor Que Hi
HiMenorQ[0]:=hi[0];
for i:=1 to n-1 do HiMenorQ[i]:=HiMenorQ[i-1]+hi[i];
//Frecuencia Relativa Acumulada Mayor Que Hi*
HiMayorQ[0]:=1;
for i:=1 to n-1 do HiMayorQ[i]:=HiMayorQ[i-1]-hi[i-1];
Writeln(' ni hi Ni Ni* Hi Hi*');
for i:=0 to n-1 do
Writeln(ni[i]:8:2,hi[i]:8:2,NiMenorQ[i]:8:2,
NiMayorQ[i]:8:2,HiMenorQ[i]:8:2,HiMayorQ[i]:8:2);
Writeln;
freemem(ni);
freemem(hi);
freemem(NiMenorQ);
freemem(NiMayorQ);
freemem(HiMenorQ);
freemem(HiMayorQ);
End
else Writeln('Falta Memoria');
Writeln('Presione Enter para terminar ...');Readln
END. |
| |
|
|
|
|
{$codepage UTF8}
USES math;
VAR numeros:^boolean;
i,j,m,n:word;
BEGIN
ReturnNilIfGrowHeapFails:=true;
Write('Ingrese un numero : ');readln(n);
n:=n+1;
getmem(numeros,n);
if numeros<>nil then
Begin
fillchar(numeros^,n,1); //1 es true, 0 es false
m:=trunc(n**(1/2));
for i:=2 to m do
if numeros[i] then for j:=2 to n div i do numeros[i*j]:=false;
for i:=1 to n-1 do if numeros[i] then writeln(i:4);
End
else Writeln('Falta Memoria');
END. |
|
| |
|
Pregunta 7
|
| |
|
|
|
{$codepage UTF8}
TYPE TPersona = Record
Nombre : String;
Edad : String;
Sexo : Char;
altura : double;
colorpiel : String;
colorojos : String;
nacionalidad : String;
region : String;
End;
VAR personas : ^TPersona;
i,j,n:integer;
aux:Tpersona;
BEGIN
ReturnNilIfGrowHeapFails:=true;
Write('Ingrese numero de registros a procesar : ');Readln(n);
getmem(personas,n*SizeOf(TPersona));
if (personas<>nil) then
Begin
for i:=0 to n-1 do
Begin
Writeln('Registro #',i+1);
Write('Nombre : ');Readln(personas[i].Nombre);
Write('Edad : ');Readln(personas[i].Edad);
Write('Sexo : ');Readln(personas[i].Sexo);
Write('Altura : ');Readln(personas[i].Altura);
Write('Color Piel : ');Readln(personas[i].ColorPiel);
Write('Color Ojos : ');Readln(personas[i].ColorOjos);
Write('Nacionalidad : ');Readln(personas[i].Nacionalidad);
Write('Region : ');Readln(personas[i].Region);
End;
Writeln('ordenando');
For i:=1 to n-1 do
Begin
aux:=personas[i];
j:=i-1;
While ( (j>=0) and (personas[j].Nombre>aux.Nombre) ) do
Begin
personas[j+1]:= personas[j];
j := j - 1;
End;
personas[j+1]:=aux;
End;
Writeln('Mostrando arreglo ordenado');
for i:=0 to n-1 do
Begin
Writeln('Registro #',i);
Writeln('Nombre : ',personas[i].Nombre);
Writeln('Edad : ',personas[i].Edad);
Writeln('Sexo : ',personas[i].Sexo);
Writeln('Altura : ',personas[i].Altura:4:2);
Writeln('Color Piel : ',personas[i].ColorPiel);
Writeln('Color Ojos : ',personas[i].ColorOjos);
Writeln('Nacionalidad : ',personas[i].Nacionalidad);
Writeln('Region : ',personas[i].Region);
End;
End
Else Writeln('Falta Memoria');
Writeln('Presione enter para terminar ...');
Readln;
END. |
|
| |
|
|
9. |
|
Cree los siguientes programas que hizo en los Ejercicios del Capítulo 5.9, pero esta vez usando arreglos dinámicos: |
| |
|
Pregunta 5:
|
| |
|
A) |
|
{$codepage UTF8}
VAR VentasBrutas:integer;
salario:double;
n,c,i:integer;
contadores:array of integer;
BEGIN
SetLength(contadores,9);
if (contadores<>nil) then
Begin
fillword(contadores[0],9,0);
Write('Ingrese numero de Vendedores : ');Readln(n);
For i:= 1 to n do
Begin
Write('Ventas Vendedor [',i,'] : ');Readln(VentasBrutas);
Salario:=200+(0.09*VentasBrutas);
if (salario>=200) and (salario<=299) then contadores[0]:=contadores[0]+1
else if (salario<=399) then contadores[1]:=contadores[1]+1
else if (salario<=499) then contadores[2]:=contadores[2]+1
else if (salario<=599) then contadores[3]:=contadores[3]+1
else if (salario<=699) then contadores[4]:=contadores[4]+1
else if (salario<=799) then contadores[5]:=contadores[5]+1
else if (salario<=899) then contadores[6]:=contadores[6]+1
else if (salario<=999) then contadores[7]:=contadores[7]+1
else contadores[8]:=contadores[8]+1;
End;
c:=200;
For i:= 0 to 8 do
Begin
if c<>1000 then Writeln('[',c,'..',c+99,']: ',contadores[i])
else Writeln('[',c,'..]: ',contadores[i]);
c:=c+100;
End;
End;
Writeln('Presione enter para terminar ...');
Readln
END. |
|
|
|
|
|
{$codepage UTF8}
VAR MA,MB,MR:array of array of double;
i,j,n:integer;
BEGIN
Write('Introduzca longitud de la Matriz : ');
Readln(n);
SetLength(MA,n,n);
SetLength(MB,n,n);
SetLength(MR,n,n);
if ((MA<>nil) and (MB<>nil) and (MR<>nil)) then
Begin
Writeln('Ingrese datos de la primera Matriz : ');
for i:= 0 to n-1 do
Begin
for j:=0 to n-1 do
Begin
Write('[',i+1,',',j+1,'] ');Read(MA[i,j]);
End;
Writeln
End;
Writeln('Ingrese datos de la segunda Matriz : ');
for i:= 0 to n-1 do
Begin
for j:=0 to n-1 do
Begin
Write('[',i+1,',',j+1,'] ');Read(MB[i,j]);
End;
Writeln;
End;
for i:= 0 to n-1 do
for j:= 0 to n-1 do
MR[i,j]:=MA[i,j]+MB[i,j];
Writeln('Resulatdo de la suma ');
for i:= 0 to n-1 do
Begin
for j:= 0 to n-1 do
Begin
Write('[',i+1,',',j+1,'] : ',MR[i,j]:2:2,' ');
End;
Writeln;
End;
End;
Write('Presione Enter para terminar ...');
Readln;
Readln
END. |
|
|
|
|
|
{$codepage UTF8}
VAR MA,MB,MR:array of array of double;
i,j,k,n:integer;
BEGIN
ReturnNilIfGrowHeapFails:=true;
Write('Introduzca longitud de la Matriz : ');
Readln(n);
SetLength(MA,n,n);
SetLength(MB,n,n);
SetLength(MR,n,n);
if ((MA<>nil) and (MB<>nil) and (MR<>nil)) then
Begin
Writeln('Ingrese datos de la primera Matriz : ');
for i:= 0 to n-1 do
Begin
for j:=0 to n-1 do
Begin
Write('[',i+1,',',j+1,']');Read(MA[i,j]);
End;
Writeln
End;
Writeln('Ingrese datos de la segunda Matriz : ');
for i:= 0 to n-1 do
Begin
for j:=0 to n-1 do
Begin
Write('[',i+1,',',j+1,']');Read(MB[i,j]);
End;
Writeln;
End;
for i:= 0 to n-1 do
for j:= 0 to n-1 do
Begin
MR[i,j]:=0;
for k:=0 to n-1 do
MR[i,j]:=MR[i,j]+MA[i,k]*MB[k,j];
End;
Writeln('Resultado del producto');
for i:= 0 to n-1 do
Begin
for j:= 0 to n-1 do
Begin
Write('[',i+1,',',j+1,'] : ',MR[i,j]:2:3);
End;
Writeln;
End;
End;
Write('Presione Enter para terminar ...');
Readln;
Readln
END. |
|
|
|
|
|
{$codepage UTF8}
VAR
Matriz: array of array of integer;
d1,d2,i,j :integer;
posi1,posj1,posi2,posj2: integer;
mayor : integer = -32768;
menor : integer = 32767;
BEGIN
Writeln('Ingrese dimensiones de la matriz (maximo m x n ): ');
Write('d1 : ');Readln(d1);
Write('d2 : ');Readln(d2);
SetLength(Matriz,d1,d2);
if Matriz<>nil then
Begin
Writeln('Ingrese datos a la matriz');
for i:= 0 to d1-1 do
for j:= 0 to d2-1 do
Begin
Write('matriz [',i+1,',',j+1,']');
Readln(Matriz[i,j]);
End;
Writeln('Matriz');
for i:= 0 to d1-1 do
Begin
for j:= 0 to d2-1 do
Write(Matriz[i,j]:5);
Writeln;
End;
for i:= 0 to d1-1 do
for j:= 0 to d2-1 do
Begin
if matriz[i,j] > mayor then Begin
posi1:=i;
posj1:=j;
mayor:=matriz[i,j];
End;
if matriz[i,j] < menor then Begin
menor:=matriz[i,j];
posi2:=i;
posj2:=j;
End;
End;
Writeln('El mayor es : [',posi1+1,',',posj1+1,'] = ',mayor);
Writeln('El menor es : [',posi2+1,',',posj2+1,'] = ',menor);
End;
Writeln('Presione Enter para terminar ...');
Readln
END. |
| |
|
|
|
|
{$codepage UTF8}
VAR ni,hi,NiMenorQ,NiMayorQ,HiMenorQ,HiMayorQ:array of real;
n,i:integer;
Tni:real = 0;
BEGIN
ReturnNilIfGrowHeapFails:=true;
Write('Ingrese numero de datos : ');readln(n);
SetLength(ni,n);
SetLength(hi,n);
SetLength(NiMenorQ,n);
SetLength(NiMayorQ,n);
SetLength(HiMenorQ,n);
SetLength(HiMayorQ,n);
if ((ni<>nil) and (hi<>nil) and (NiMenorQ<>nil) and (NiMenorQ<>nil) and
(NiMayorQ<>nil) and (HiMenorQ<>nil) and (HiMayorQ<>nil)) then
Begin
for i:= 0 to n-1 do
Begin
Write('ni[',i+1,'] '); readln(ni[i]);
Tni+=ni[i];
End;
//Frecuencia Relativa hi
for i:= 0 to n-1 do hi[i]:=ni[i]/Tni;
//Frecuencia Absoluta Acumulada Menor Que Ni
NiMenorQ[0]:=ni[0];
for i:=1 to n-1 do NiMenorQ[i]:=NiMenorQ[i-1]+ni[i];
//Frecuencia Absoluta Acumulada Mayor Que Ni*
NiMayorQ[0]:=Tni;
for i:=1 to n-1 do NiMayorQ[i]:=NiMayorQ[i-1]-ni[i-1];
//Frecuencia Relativa Acumulada Menor Que Hi
HiMenorQ[0]:=hi[0];
for i:=1 to n-1 do HiMenorQ[i]:=HiMenorQ[i-1]+hi[i];
//Frecuencia Relativa Acumulada Mayor Que Hi*
HiMayorQ[0]:=1;
for i:=1 to n-1 do HiMayorQ[i]:=HiMayorQ[i-1]-hi[i-1];
Writeln(' ni hi Ni Ni* Hi Hi*');
for i:=0 to n-1 do
Writeln(ni[i]:8:2,hi[i]:8:2,NiMenorQ[i]:8:2,
NiMayorQ[i]:8:2,HiMenorQ[i]:8:2,HiMayorQ[i]:8:2);
Writeln;
End;
Writeln('Presione Enter para terminar ...');Readln
END. |
| |
|
|
|
|
{$codepage UTF8}
USES math;
VAR numeros:array of boolean;
i,j,m,n:word;
BEGIN
Write('Ingrese un numero : ');readln(n);
n:=n+1;
SetLength(numeros,n);
if numeros<>nil then
Begin
fillchar(numeros[0],n,1); //1 es true, 0 es false
m:=trunc(n**(1/2));
for i:=2 to m do
if numeros[i] then for j:=2 to n div i do numeros[i*j]:=false;
for i:=1 to n-1 do if numeros[i] then writeln(i:4);
End
END. |
|
| |
|
Pregunta 7
|
| |
|
|
|
{$codepage UTF8}
TYPE TPersona = Record
Nombre : String;
Edad : String;
Sexo : Char;
altura : double;
colorpiel : String;
colorojos : String;
nacionalidad : String;
region : String;
End;
VAR personas : array of TPersona;
i,j,n:integer;
aux:Tpersona;
BEGIN
Write('Ingrese numero de registros a procesar : ');Readln(n);
SetLength(personas,n);
if (personas<>nil) then
Begin
for i:=0 to n-1 do
Begin
Writeln('Registro #',i+1);
Write('Nombre : ');Readln(personas[i].Nombre);
Write('Edad : ');Readln(personas[i].Edad);
Write('Sexo : ');Readln(personas[i].Sexo);
Write('Altura : ');Readln(personas[i].Altura);
Write('Color Piel : ');Readln(personas[i].ColorPiel);
Write('Color Ojos : ');Readln(personas[i].ColorOjos);
Write('Nacionalidad : ');Readln(personas[i].Nacionalidad);
Write('Region : ');Readln(personas[i].Region);
End;
Writeln('ordenando');
For i:=1 to n-1 do
Begin
aux:=personas[i];
j:=i-1;
While ( (j>=0) and (personas[j].Nombre>aux.Nombre) ) do
Begin
personas[j+1]:= personas[j];
j := j - 1;
End;
personas[j+1]:=aux;
End;
Writeln('Mostrando arreglo ordenado');
for i:=0 to n-1 do
Begin
Writeln('Registro #',i);
Writeln('Nombre : ',personas[i].Nombre);
Writeln('Edad : ',personas[i].Edad);
Writeln('Sexo : ',personas[i].Sexo);
Writeln('Altura : ',personas[i].Altura:4:2);
Writeln('Color Piel : ',personas[i].ColorPiel);
Writeln('Color Ojos : ',personas[i].ColorOjos);
Writeln('Nacionalidad : ',personas[i].Nacionalidad);
Writeln('Region : ',personas[i].Region);
End;
End;
Writeln('Presione enter para terminar ...');
Readln;
END. |
|
|
|
|
10. |
|
Cree la siguiente Unidad : |
|
|
Haga clic para descargar el archivo (OpMat.zip) |
| |
|
|
anterior :: indice :: siguiente |
|