Learning machine #16 - Programando en Pascal - Arreglos de punteros.
Hola de nuevo a todos, el día de hoy vamos a continuar con más aprendizaje del lenguaje de programación Pascal.
En el post anterior vimos cómo es posible crear arreglos y usar punteros, pero en el programa del triangulo de Pascal, fue cuando mucha gente prguntó cómo es que funcionaba. Hay que recordar que cuando usamos punteros, el código debe de ser bien manejado si no, pueden ocurrir cosas malas.
Para poder crear un arreglo de punteros, primero debemos de crear un par de tipos, el primero debe de ser una nuevo tipo del tipo "array of algo" donde "algo" es alguno de los tipos soportados por Pascal. Seguido debemos de crear un nuevo tipo que va a ser un puntero del tipo que acabamos de crear. Para ilustrar un poco mejor, retomemos parte del código del triangulo de Pascal.
type
Values = array of integer;
PValues = ^Values;En la declaración de los tipos, creamos primero el tipo "Values" que a su vez es del tipo "array of integer", una vez creado, solo queda crear un nuevo tipo que será un puntero al tipo que acabamos de crear, en este caso es "PValues" que es un puntero de "^Values".
function CalculateLevel (Level : integer) : PValues;
var
i : integer;
Result1 : PValues;
PResult : PValues;
begin
new(Result1);
Setlength(Result1^, Level);
if (Level = 1) then
begin
Result1^[1] := 1;
end;
if (Level = 2) then
begin
Result1^[1] := 1;
Result1^[2] := 1;
end;
if (Level > 2) then
begin
PResult := CalculateLevel(Level - 1);
for i := 1 to Level do
begin
if (i = 1) or (i = Level) then
begin
Result1^[i] := 1;
end
else
begin
Result1^[i] := PResult^[i] + PResult^[i - 1];
end;
end;
end;
exit(Result1);
end;program ArregloDePunteros;
type
Nombres = Array of string;
PointToNombres = ^Nombres;
var
ListaDeNombres : PointToNombres;
i : integer;
begin
New(ListaDeNombres);
Setlength(ListaDeNombres^ , 4);
ListaDeNombres^[1] := 'RMFP';
ListaDeNombres^[2] := 'RSC';
ListaDeNombres^[3] := 'USG';
ListaDeNombres^[4] := 'SCL';
for i := 1 to 4 do
writeln (ListaDeNombres^[i]);
end.
Learning machine #15 - Programando en Pascal - Tipos, Punteros y arreglos.
Hola de nuevo a todos, el día de hoy vamos a continuar con un poco mas del lenguaje de programacion Pascal.
Hace algunos días hice un programa que sirve para calcular el triangulo de Pascal. La versión en C, Python y Pascal están disponibles para su consulta, pero a partir de ellos, se generaron dudas y si bien en el caso de Python y C siempre he dicho que en el blog no hay tutoriales para aprender a programar, en el caso de Pascal no es así. En el caso de C y Pascal se hacen uso de punteros y si bien la forma de declararlos en cada uno es diferente, la forma de uso es esencialmente la misma, por eso este post sirve para poder entender cómo es que se utilizan los punteros en Pascal, pero la idea para C es la misma (en el caso de los punteros). Para poder entender cómo se usan los tipos también es necesario saber sobre los tipos (solo en el caso de Pascal)
Tipos.
program Tipos;
type
Colores = string;
DiasDeLaSemana = string;
Numeros = integer;
var
MiColor : Colores;
Hoy : DiasDeLaSemana;
Fecha : Numeros;
begin
MiColor := 'Verde';
Hoy := 'Sabado';
Fecha := 24;
writeln (MiColor);
writeln (Hoy);
writeln (Fecha);
end.Punteros.
En ciencias de la computación, un puntero es un objeto del lenguaje de programación, cuyo valor se refiere a (o "apunta a") otro valor almacenado en otra parte de la memoria del ordenador utilizando su dirección. Un puntero referencia a una ubicación en memoria, y a la obtención del valor almacenado en esa ubicación se la conoce como desreferenciación del puntero. A modo de analogía, un número de página en el índice de un libro podría considerarse un puntero a la página correspondiente; desreferenciar un puntero sería como ir a la página con el número de página especificada en el índice wikipedia/Punteros
En pascal, primero debemos de crear un tipo, este a su vez será un puntero de cualquiera de los admitidos por Pascal precedido por "^". Si queremos declarar un puntero hacia un valor "integer", debemos de hacer una declaración cómo la que sigue:
type
PointToInt = ^integer;program Pointers;
type
PointToInt = ^integer;
var
MiNumero : PointToInt;
begin
new(MiNumero);
MiNumero^ := 20;
writeln (MiNumero^);
Dispose(MiNumero);
end.Arreglos.
type ArregloDeNumeros = array[0..99] of integer;
program Arreglos;
type
ArregloDeNumeros = array[0..99] of integer;
var
MisNumeros : ArregloDeNumeros;
i : integer;
begin
for i := 1 to 99 do
begin
MisNumeros[i] := i * 2;
end;
for i := 1 to 99 do
begin
writeln(MisNumeros[i]);
end;
end.program Arreglos;
uses
sysutils;
type
ArregloDeNumeros = array[0..99] of integer;
ArregloDePalabras = array[0..99] of string;
var
MisPalabras : ArregloDePalabras;
MisNumeros : ArregloDeNumeros;
i : integer;
begin
for i := 0 to 99 do
begin
MisNumeros[i] := i * 2;
MisPalabras[i] := concat('EL valor de i es ', IntToStr(i));
end;
for i := 0 to 99 do
begin
end;
end.
writeln(MisNumeros[90]); writeln(MisPalabras[90]);






No hay comentarios. :
Publicar un comentario