Apunte de Delphi Simple
Apunte de Delphi Simple
Apunte de Delphi Simple
PROGRAMACIÓN ESTRUCTURADA
Los términos programación modular, programación descendente y programación
estructurada se suelen usar como sinónimos aunque no significan lo mismo. La
programación estructurada significa escribir un programa de acuerdo a las siguientes
reglas:
El programa tiene un diseño modular.
Debe seguir una estructura de fija de diseño.
Cada módulo se codifica utilizando las tres estructuras de control básicas: secuencia,
selección y repetición.
La programación estructurada utiliza un número limitado de estructuras que minimizan
la complejidad de los programas y por lo tanto reducen los errores; hace los programas
más fáciles de escribir, verificar, leer y mantener.
Hemos visto que un algoritmo se define como un conjunto finito de pasos o acciones
que se ejecutan por una persona o computadora, para alcanzar un objetivo dado.
Todo algoritmo consta de 3 partes: Principio del algoritmo, declaración de variables y
el cuerpo.
Ejemplo:
Uses
< Declaración de librerías >
Const
< Declaración de constantes > CABECERA
Type
< Declaración de tipos >
Var
< Declaración de variables >
Begin
----------
---------- CUERPO
----------
End.
Escrito por el
programador Se corrigen los ……EXE
errores sintáticos
Ejemplo 1:
Program ejm1;
Begin
Write (‘Hola Mundo’);
End.
Lo que hace es escribir el texto Hola Mundo en la pantalla del computador, es decir se
visualizará
Hola Mundo_
Ejemplo 2:
Program ejm2;
Begin
Writeln ( ‘Adiós Mundo’ );
End.
A diferencia del ejemplo anterior, el cursor estará en la siguiente línea, por lo tanto, la
salida será la siguiente :
Adiós Mundo
_
Para que el usuario pueda ingresar caracteres deberá utilizar el comando readln (leer).
Este comando también se utiliza para visualizar la pantalla hasta que el usuario presione
“enter”. Es por ello que siempre se coloca readln antes del END para detener la
ejecución del programa.
Se debe colocar un punto y coma ( ; ) después de utilizar los comandos write, writeln y
readln. Aunque no es necesario colocar ; antes del END. En realidad no hay diferencia
si coloca o no el ; antes de un END.
PARTES DE UN PROGRAMA
VARIABLES Y CONSTANTES
IDENTIFICADORES VÁLIDOS
Los identificadores deben cumplir varios requisitos (los cuales se asemejan a los
requisitos que debe tener el nick de un usuario de correo electrónico):
Las palabras reservadas son aquellas palabras que ya tienen una función declarada, por
ejemplo: char, var, if, for, etc..
Ejemplos:
- Jose (correcto).
- 123abc (incorrecto).
- raiz_123 (correcto).
- byte (incorrecto).
Minmax
minMax
minmax
MINMAX
MiNmAx
Al declarar una variable, tras el identificador que servirá como nombre, indicaremos el
tipo de dato que podremos almacenar en ella.
TIPOS DE VARIABLES
Declaración de variables
Sintaxis:
cad : string;
Raiz_12 : real;
Edad : integer;
Opcion : char;
Ejemplo :
Program Prueba;
Var
a: integer; b: real;
c: char; d: string;
e,f: boolean;
Begin
a:=5; // 5 es el valor de a
b:=3.25; // 3.25 es el valor de b
c:=‘1’; { ‘1’ es el valor de c }
d:=‘11’; (* ‘11’ es el valor de *)
e:=True; // El valor de e es verdadero
f:=False; { El valor de f es falso }
End.
Observaciones:
- No hay error si b:=5; pero si a := 3.25; estaría mal ya que a debe ser entero.
- No hay error si d:=‘1’; pero si c:= ‘11’; estaría mal ya que c debe ser un caracter.
- Podemos colocar más de un identificador en la asignación del tipo de variables si
los separamos por comas (,) como en el ejemplo anterior al definir e y f.
Los comentarios se usan para describir una o más instrucciones en el programa y no son
ejecutados por el programa. Si es un comentario corto podemos utilizar “//”, en todo
caso podemos escribir el comentario dentro de llaves { } o dentro de (* *), los cuales se
usan en comentarios largos, como en el ejemplo anterior.
Sintaxis:
Write ( < nombre de la variable > ); Writeln ( < nombre de la variable > ) ;
Ejemplo 1:
Program Prueba1;
Var
entero : integer;
b: boolean;
Begin
Entero := 5;
B:=False;
Writeln (‘a = ’);
Write (entero);
Writeln (b);
Readln
End.
Ejemplo 2:
Program Prueba2;
Var
a : integer;
Begin
a := 3;
Write (‘a = ’);
Writeln( a );
Writeln;
a := 5;
Write (‘Ahora a = ’);
Writeln ( a );
Readln
End.
Ahora a = 5
_
Sintaxis
Ejemplo:
Program Prueba3;
Var
a: integer;
Begin
Writeln (‘Ingrese un entero’);
Readln (a);
Write ( ‘a = ’ );
Write (a);
Readln
End.
Ejemplo:
Program Prueba;
Var
nombre: string;
edad: integer;
Begin
Write (‘Escriba su nombre: ’);
Readln (nombre);
Write (‘Escriba su edad: ’);
Readln (edad);
Writeln (‘Su nombre es ’,nombre,’ y su edad es ’,edad );
Readln
End.
En el ejemplo anterior utilizamos dos variables cuyos valores son ingresados por el
usuario y estos valores son mostrados acompañados de textos que se separan de las
variables mediante comas.
Operadores aritméticos:
+ : suma
- : resta
* : producto
/ : división
Operadores relacionales:
= : igual que
> : mayor que
< : menor que
>= : mayor o igual que
<= : menor o igual que
<> : diferente que
Operadores lógicos:
And ( y )
Or ( o )
Not ( negación )
Ejemplos:
Operador Prioridad
Not 1 Mas alta (se evalúa primero)
* , /, div, mod, and 2
+, -, or 3
<, <=, =, >, >=, < > 4 Más baja (se evalúa último)
Si existen paréntesis, las expresiones de su interior se evalúan primero
Funciones matemáticas:
Sin : Seno
Cos : Coseno
Tan : Tangente
Exp : Exponencial
Sqr : Al cuadrado
Sqrt: Raíz cuadrada
Ln : Logaritmo neperiano
Abs : Valor absoluto
ArcTan : Arco tangente
ArcSin : Arco seno
ArcCos : Arco coseno
Sinh : Seno hiperbólico
Cosh : Coseno hiperbólico
sintaxis:
< función > ( < variable > ) ; < función > ( < valor numérico > ) ;
Observaciones:
- Las funciones Abs y Sqr , respetan el tipo de variable, es decir, si la variable es real
(entera), el resultado también será real (entera).
- Para utilizar las funciones Tan, ArcSin, ArcCos, Sinh y Cosh debemos incluir la
librería Math.
Ejemplo:
Program Prueba ;
Var
a, b: integer ;
c, d: real ;
Begin
a := 2; b := sqr(a) ;
c := -3.5; d := abs(c) ;
End.
3 +1
Para , debemos escribir en el programa: ( sqrt(3) +1 ) / 2
2
Ejemplo:
Escribir un programa en Delphi que calcule la suma y el producto de las raíces del
polinomio cuadrático: x2 – a x + ln (b), donde a y b son ingresados por el usuario.
Program Ejemplo1;
{$APPTYPE CONSOLE}
Var
a,b: real;
Begin
Write ('Ingrese el valor de "a": ');
Readln (a);
Write ('Ingrese el valor de "b": ');
Readln (b);
Writeln ('El valor de la suma de las raíces es ',sqrt(a));
Writeln ('El valor del producto de las raíces es ',ln(b));
Readln
End.
Para evitar la salida de los 14 decimales que tiene a podemos indicar en el programa el
número de decimales que tendrá una variable real y también podemos dar espacios en
blanco antes de mostrar un valor. Para ello escribiremos:
el valor será n-d, si n-d < 0 entonces no se dará espacios en blanco. Apliquemos esto en
el siguiente ejemplo:
Program Ejemplo2;
{$APPTYPE CONSOLE}
Begin
Writeln ( ln(3):4:2 );
Write ( sqrt(2):6:2 );
Readln
End.
Hay otras variables aritméticas definidas en Delphi como div y mod, los cuales están
definidos como el cociente y el residuo de una división entera respectivamente. Es
decir, dados a y b números enteros existen números enteros q y r, tal que : a = q*b + r,
donde 0 ≤ r < b. Entonces q = a div b y r = a mod b.
Sintaxis:
<Variable de tipo entero> := <Variable de tipo entero> div <Variable de tipo entero> ;
<Variable de tipo entero> := <Variable de tipo entero> mod <Variable de tipo entero>;
Ejemplos:
14 div 3 = 4
14 mod 3 = 2
5 mod -2 = -2
5 div -2 = 1
Ejemplos:
1. Dado n un entero positivo menor que 100, el cual es ingresado por el usuario, haga
un programa en Delphi que halle la suma de sus cifras:
Program SumaCifras;
{$APPTYPE CONSOLE }
Var : a,b,n : byte ;
Begin
Write ( ‘Ingrese un entero positivo menor que 100: ’ ) ;
Readln (n) ;
a:= n div 10 ;
b:= n mod 10 ;
Program Ejemplo2;
{$APPTYPE CONSOLE}
Var
a,b,c,d,det: real;
Begin
Writeln ('Ingrese el valor de a, b , c y d en ese orden: ');
Readln(a,b,c,d);
det:=a*d-b*c;
Write('El valor del determinante es ',det:6:3);
Readln
End.
Observación:
- En el segundo ejemplo podemos ver que no fue necesario introducir las variables
una por una, pues en Delphi se puede introducir varias variables a la vez con el
comando Readln si separamos las variables mediante comas.
ESTRUCTURAS DE CONTROL
ESTRUCTURAS SELECTIVAS
SENTENCIA IF:
A ) Selección simple
B ) Selección doble
Ejemplo 1.
Algoritmo Calificación
Variables
cal: entero
Inicio
Leer (cal)
Si cal > 8 entonces
Escribir ("Aprobado")
Fin_si
Fin
Estructura If Doble
D
Diagrama de Flujo
Ejemplo 1
Algoritmo Calificacion
Inicio
Leer (cal)
Si cal > 10 entonces
Escribir ("aprobado")
Sino
Escribir ("reprobado")
Fin_si
Fin
Ejemplo 2.
Dado como dato el sueldo de un trabajador, aplicar un aumento del 15% si su sueldo es
inferior a $1000 y 12% en caso contrario, luego imprimir el nuevo sueldo del
trabajador.
Ejemplos:
Program Multiplo2;
{$APPTYPE CONSOLE }
Var
a,b: integer;
Begin
Write (‘Ingrese un entero positivo: ’) ;
Readln (a) ;
If ( a>0 ) then
Begin
b:= a mod 2 ;
If ( b = 0 ) then
Write ( a,‘ es multiplo de 2’)
Else
Write ( a,‘ no es multiplo de 2’) ;
End;
Readln
End.
Observaciones:
2. Elabore un pseudocódigo que diga si un número real está o no en el intervalo [-1 1].
Algoritmo Intervalo;
Variables
x: real
Inicio
Escribir (‘Ingrese un numero real: ’)
Leer (x)
Si (x ≥ -1) y ( x ≤ 1 ) entonces
Escribir (x,‘ está en el intervalo [ -1 , 1 ]’)
Sino
Escribir (x,‘ no está en el intervalo [ -1 , 1 ]’)
Fin
Program Mayor2;
{$APPTYPE CONSOLE }
Var
a,b: real;
Begin
Writeln ( ‘Ingrese dos numeros reales: ’ ) ;
Readln (a,b) ;
If ( a > b ) then
Write (‘El numero mayor es ’ , a:5:3)
Else
Se ha visto que el compilador puede escoger entre dos alternativas. En algunos casos, el
compilador debe escoger entre una lista con más de dos alternativas. Hay dos métodos:
IF anidado y Case.
El Enunciado IF Anidado:
Sintaxis:
Ejemplo:
Elabore un programa que pida el ingreso de un número real y diga si es positivo, cero o
negativo. En el caso que sea positivo diga además si es par o impar.
Program IF_Anidado;
{$APPTYPE CONSOLE }
Var
n: integer;
Begin
Write ( 'Ingrese un numero entero: ' ) ;
Readln (n) ;
If ( n < 0 ) then
Write ( 'El numero es negativo ' )
Else if ( n = 0 ) then
La Sentencia Case:
Con frecuencia es necesario que existan más de dos elecciones posibles. Este problema
se podría resolver por estructuras selectivas simples, dobles o anidadas, pero si el
número de alternativas es grande puede plantear serios problemas de escritura y de
legibilidad.
Usando la estructura de decisión múltiple se evaluará una expresión que podrá tomar n
valores distintos, 1, 2 , 3, ....,n y según que elija uno de estos valores en la condición, se
realizará una de las n acciones o lo que es igual, el flujo del algoritmo seguirá sólo un
determinado camino entre los n posibles.
Esta estructura se representa por un selector el cual si toma el valor 1 ejecutará la acción
1, si toma el valor 2 ejecutará la acción 2, si toma el valor N realizará la acción N.
Ejemplo 1:
Diseñar un algoritmo tal que dados como datos dos variables de tipo entero, obtenga el
resultado de la siguiente función:
Sintaxis:
Observación:
Ejemplos:
Program ValCase;
{$APPTYPE CONSOLE}
Var
num,v: integer;
val: real;
Begin
Writeln('Ingrese los valores de “num” y “val” en ese orden:');
Readln(num,v);
Case num of
1: val:= 100*v;
2: val:= exp(ln(100)*v);
3: val:= 100/v
Else
val:= 0;
End;
Write('El valor de "val" es ',val:6:3);
Readln
End.
Program DiaCase;
{$APPTYPE CONSOLE }
Var
cad: string;
op: char;
Begin
Write ('Ingrese la primera letra del dia de hoy: ');
Readln(op);
Case op of
'l','L': cad:='Hay clases pues es lunes';
'm','M': cad:='Hay clases pues es martes'
Else
cad:= 'Hoy no hay clases ';
End;
Writeln (cad);
Readln
End.
ESTRUCTURAS REPETITIVAS
Contador:
Representación:
Ejemplo: i = i + 1
Acumulador:
Es una variable que suma sobre sí misma un conjunto de valores para de esta manera
tener la suma de todos ellos en una sola variable. La diferencia entre un contador y un
acumulador es que mientras el primero va aumentando de uno en uno, el acumulador va
aumentando en una cantidad variable.
Representación:
La Sentencia FOR
Ejemplo 1:
Hacer un algoritmo que calcule la suma de los cuadrados de los primeros 100 enteros y
escribir el resultado. Se desea resolver el problema usando la sentencia For.
Sintaxis:
INCREMENTOS : For < contador >: = < val_ini > to < val_fin > do
Begin
< sentencias >;
End ;
DECREMENTOS : For < contador >: = < val_ini > downto < val_fin > do
Begin
< sentencias >;
End ;
Ejemplo:
Program SumaCuadrados;
{$APPTYPE CONSOLE}
Var
suma,i: integer;
Begin
suma:=0;
for i:=1 to 100 do
suma:=suma+sqr(i);
Write('El valor de la suma es ',suma);
Readln
End.
Ejemplos:
LA SENTENCIA WHILE
Observe en el diagrama de flujo, que se necesita una variable contadora (un índice),
para llevar la cuenta de las veces que entramos al cuerpo del ciclo. También es
importante notar que esta variable se inicializa antes de entrar al cuerpo del ciclo y
dentro del cuerpo se incrementa en una cantidad constante, por lo general en uno.
Esta variable a la vez, nos sirve para compararla con el valor dado en la condición,
cuando se cumple la condición, se sale del ciclo.
Ejemplo:
Hacer un algoritmo que calcule la suma de los cuadrados de los primeros 100 números
enteros utilizando la estructura Mientras.
Sintaxis :
Program SumaMientras;
{$APPTYPE CONSOLE}
Var
suma,i: integer;
Begin
suma:=0;
i:=1;
while (i<=100) do
Begin
suma:= suma + sqr(i);
i:=i+1;
End;
Write('El valor de la suma es ',suma);
Readln
End.
La Sentencia REPEAT
Las reglas para construcción de esta estructura usando Repetir, nos dicen que debemos
declarar una variable contador que debe inicializarse antes del ciclo e incrementarse
dentro del ciclo. A diferencia de la estructura Mientras, la condición ahora estará
colocada al final del bucle para que primero ejecutamos la instrucción y luego
preguntamos si la condición se cumple. Esto quiere decir, que en esta estructura el bucle
se realizará por lo menos una vez. También podrás observar que la condición está al
revés, porque el bucle se repite hasta que la condición se cumpla. En el bucle Mientras,
la condición se evaluaba mientras era cierta.
Ejemplo:
1. Hacer un algoritmo que calcule la suma de los cuadrados de los primeros 100
números enteros utilizando la estructura Repeat.
Sintaxis :
REPEAT
Sentencia 1 ;
Sentencia 2 ;
.
.
.
Sentencia n ;
Until ( expresión booleana ) ;
Observación:
Ejemplo:
Program SumaRepeat;
{$APPTYPE CONSOLE}
Var
suma,i: integer;
Begin
suma:=0;
i:=0;
Repeat
i:=i+1;
suma:=suma+sqr(i);
Until (i=100);
Write('El valor de la suma es ',suma);
Readln
End.
Puede ocurrir que el saldo de una cuenta corriente sea positivo o negativo,
pero nunca 0. Sería más seguro :
Ejercicios resueltos:
Solución:
Program cambio_de_base;
{$APPTYPE CONSOLE}
Uses SysUtils;
Var n,m,p:integer;
Begin
write('Ingrese el numero en base 2: ');
readln(n);
write(n,' convertido a base 10 es ');
m:=n mod 10;
p:=2;
Repeat
n:=n div 10;
m:=m+(n mod 10)*p;
p:=p*2
Until n=0 ;
Write(m);
readln
End.
Program suma_exp;
{$APPTYPE CONSOLE}
Uses SysUtils;
Var
i,k,n:integer; x,fx,sum:real;
Begin
Write('Ingrese un numero real: ');
Readln(x);
Write('Ingrese un numero natural: ');
Readln(n);
Sum:=0; k:=1; fx:=1;
for i:=1 to n do
begin
k:=k*i;
fx:=fx*x;
sum:=sum+fx/k;
end;
Write('La suma es ',sum:6:4);
Readln
End.
Solución:
Algoritmo menor_n
Variables
k, n : enteros
x, : reales
Inicio
Leer(x)
Leer( )
n←1
n
xk
Mientras e x hacer
k 0 k!
n←n+1
Fin_mientras
Mostrar(n)
Fin
4. Diseñe un programa que pida un número natural y calcule sus divisores propios.
Solución:
Program div_propios;
{$APPTYPE CONSOLE}
Uses SysUtils;
Var
i,n:integer;
Begin
Write('Ingrese un numero natural: ');
Readln(n);
Writeln('Los divisores propios de ',n,' son:');
for i:=1 to (n div 2) do
If (n mod i = 0) then
write(i,' ');
Readln
End.
Una variable del tipo Char , almacena un caracter que puede ser leído por el teclado .
Observación:
Es distinto poner por ejemplo ‘2’ que 2, pues ‘2’ representa una variable del tipo char o
string, mientras 2 es una variable del tipo integer o real.
Notar que: < caracter asociado > = CHR (<número entero entre 1 y 255>)
A:= ‘ HOLA’
Por ejemplo :
Program Cadena;
{$APPTYPE CONSOLE}
Var A : string
Begin
Write ( ‘ Ingresa tu nombre ‘ );
Read ( A );
Write (‘ HOLA ’ );
Write ( A );
Write (‘ ¿ Como estas ? ’);
Readln
End.
Ejercicio: Para una cadena ingresada por el usuario, hacer un programa que devuelva
la longitud de la cadena.
Concatenación de cadenas
A:= ‘Hola’;
B:= ‘Como estas’
C:= A + B + ‘?’; // Entonces el valor de C será: ‘HolaComo estas?’
A:= ‘ABC_’
B:= ‘XYZ’
C:= A + B
C:= ‘ABC_XYZ’ // Ahora el valor de C será: ‘ABC_XYZ’
En adelante trabajaremos con mayor frecuencia con variables del tipo string, es por ello
que en algunos casos convertiremos variables del tipo integer o real a variables del tipo
string y viceversa.
Sintaxis:
< variable del tipo integer > := StrToInt ( < variable del tipo string >);
< variable del tipo real > := StrToFloat ( < variable del tipo string >);
< variable del tipo string > := IntToStr ( < variable del tipo integer >);
< variable del tipo string > := FloatToStr ( < variable del tipo real >);
Ejemplo:
Program Prueba;
{$APPTYPE CONSOLE}
Uses SysUtils;
Var cad : string;
Num : integer;
Begin
Write ( ‘Ingrese un entero’ );
Read ( cad );
Num := StrToInt ( cad );
Write ( ‘Ud. Ha ingresado :’ + IntToStr( Num ) );
Readln
End.
Ejercicios Resueltos:
1. Haga un programa que muestra una cadena ingresada por teclado al revés.
Program reves;
{$APPTYPE CONSOLE}
Uses
SysUtils,dialogs;
Var
i,n:integer;
cad1,cad2:string;
Begin
// cad1:=inputbox('','Ingrese un texto:','');
Write('Ingrese un texto: '); readln(cad1);
n:=length(cad1);
For i:=n downto 1 do
cad2:=cad2+cad1[ i ]; // cad2 no tiene que ser iniciada, pues por defecto es ‘’
// showmessage(cad2);
Write(cad2); readln
End.
Program promedio;
Uses
SysUtils, Dialogs;
Var
n,m,p: integer;
prom: real;
Begin
n:=StrToInt(InputBox('Lectura de números','Ingrese el primer número:',''));
Program factorial;
Uses
SysUtils,dialogs;
Var
i,n,f:integer;
Begin
repeat
n:=strtoint(inputbox('','Ingrese un número natural menor que 20',''));
until (n>=0);
f:=1;
for i:=2 to n do
f:=f*i;
showmessage('El factorial de '+inttostr(n)+' es '+inttostr(f));
End.
Program primo;
Uses SysUtils,Dialogs;
Var n,i,k:integer; r:real;
Begin
n:=StrToInt(InputBox('','Ingrese un número',''));
r:=sqrt(n); i:=1; k:=0;
while (i<=r) and (k=0) do
begin
i:=i+1;
if (n mod i = 0) then
k:=1;
end;
if (k=0) then
ShowMessage(IntToStr(n)+' si es un número primo')
else
ShowMessage(IntToStr(n)+' no es un número primo')
End.
Program change_of_base;
Uses
SysUtils,Dialogs;
Var
n,m,p:integer;
cad:string;
Begin
cad:=InputBox('Lectura del número','Ingrese el número en base 2:','');
n:=StrToInt(cad);
m:=n mod 10;
p:=2;
while (n>0) do
begin
n:=n div 10;
m:=m+(n mod 10)*p;
p:=p*2;
end;
ShowMessage(cad+' convertido a base 10 es '+IntToStr(m));
End.
Program change_of_base;
Uses
SysUtils,Dialogs;
Var
i,n:integer; m:real;
cad:string;
Begin
cad:=InputBox('Lectura del número','Ingrese el número en base 2:','');
n:=length(cad);
i:=1;
while (i<=n) and (StrToInt(cad[i])<=1) do
i:=i+1;
if (i=n+1) then
begin
m:=0;
for i:=n downto 1 do
m:=m+StrToInt(cad[i])*exp(ln(2)*(n-i));
ShowMessage(cad+' convertido a base 10 es '+FloatToStr(m));
end
else showmessage('El número ingresado no está en base 2');
End.
Program suma_exp;
Uses SysUtils,Dialogs;
Var
i,k,n:integer; x,fx,sum:real;
Begin
x:=StrToFloat(InputBox('','Ingrese un numero real:',''));
n:=StrToInt(InputBox('','Ingrese un numero natural:',''));
Sum:=0; k:=1; fx:=1;
for i:=1 to n do
begin
k:=k*i;
fx:=fx*x;
sum:=sum+fx/k;
end;
ShowMessage('La suma es '+FloatToStr(sum))
End.
8. Haga un programa que calcule los divisores propios de un número ingresado por el
usuario.
Program div_propios;
Uses
SysUtils,Dialogs;
Var
i,n:integer;
cad:string;
Begin
n:=StrToInt(InputBox('','Ingrese un numero natural:',''));
for i:=1 to (n div 2) do
If (n mod i = 0) then
cad:=cad+IntToStr(i)+#9;
ShowMessage('Los divisores propios de '+IntToStr(n)+' son:'+#13+cad);
End.
Program Fibonnacci;
Uses SysUtils,dialogs;
Var i,a,b,temp,n:integer; S:string;
Begin
n:=strtoint(inputbox('Sucesión de Fibonacci','Ingrese el número de
términos',''));
S:='1'; a:=1;
if n>1 then
begin
S:=S+#9+'1'; b:=1;
for i:=3 to n do
begin
temp:=b;
b:=a+b;
a:=temp;
S:=S+#9+inttostr(b);
end;
end;
showmessage('La sucesión de Fibonacci es'+#13+S);
End.
10. Diseñar un programa tal que dados como datos una variable de tipo entero y una
del tipo real, obtenga el resultado de la siguiente función:
Program ValCase;
Uses SysUtils,Dialogs;
Var
num: integer;
v,val: real;
Begin
num:=StrToInt(InputBox('','Ingrese un número entero:',''));
v:=StrToFloat(InputBox('','Ingrese un número real positivo:',''));
Case num of
1: val:= 100*v;
2: val:= exp(ln(100)*v);
3: val:= 100/v
Else
val:= 0;
End;
ShowMessage('El valor de la función será'+#13+FloatToStr(val))
End.
end;
showmessage(str);
End.
13. Diseñar un programa que muestre una ventana con cuaternas de números (todos
distintos y menores o iguales a 15) que satisfagan la ecuación:
Program suma_cubo;
Uses SysUtils,Dialogs;
Var
a,b,c,d: Integer;
S: string;
Begin
S:='a'+#9+'b'+#9+'c'+#9+'d'+#9+'N'+#13;
for a:=1 to 15 do
for b:=1 to 15 do
for c:=1 to 15 do
for d:=1 to 15 do
if ((a*sqr(a)+b*sqr(b))=(c*sqr(c)+d*sqr(d))) then
if (a<>b) and (b<>c) and (c<>d)
and (a<>c) and (a<>d) and (b<>d) then
begin
S:=S+IntToStr(a)+#9+IntToStr(b)+#9+IntToStr(c)+#9+IntToStr(d)
+#9+IntToStr(c*sqr(c)+d*sqr(d))+#13;
ShowMessage(S);
end
End.
ARREGLOS
Para hacer uso de vectores o matrices, Delphi ha definido “array”, que en castellano
significa arreglo. Un array es un tipo de variable definida por el usuario, similar a una
cadena, con la diferencia de que en vez de caracteres sus elementos pueden ser
cualquier tipo de variable, por ejemplo para definir un vector (arreglo
unidimensional) lo declararemos en la cabecera de la siguiente manera:
donde “n” y “m” son números enteros y la longitud del arreglo sería n-m+1,
“nombre_vector” es el nombre del arreglo vectorial y “tipo_variable” puede ser integer,
real, char, etc..
1. Program ejemplo;
Uses sysutils,dialogs;
Type vector=array[1..4] of integer;
Var A:vector;
Begin
A[1]:=2; A[2]:=3; A[3]:=5; A[4]:=7;
End.
2. Program arreglo;
Uses SysUtils, Dialogs;
const max=20;
type vector=array[1..max] of integer;
Var i,n:integer; A:vector; S:string;
Begin
n:=strtoint(inputbox('','Ingrese la dimensión del vector',''));
for i:=1 to n do
begin
// Definiendo el vector A:
A[i]:=strtoint(inputbox('A['+inttostr(i)+']','Ingrese valor',''));
S:=S+inttostr(A[i])+#9; // Conversión de A a la cadena S
end;
showmessage('El vector A es'+#13+S)
End.
3. Program norma;
Uses SysUtils, Dialogs;
const max=20;
type vector=array[1..max] of integer;
Var i,n:integer; norm:real;
A:vector; S:string;
Begin
n:=strtoint(inputbox('','Ingrese la dimensión del vector',''));
norm:=0;
for i:=1 to n do
begin
A[i]:=strtoint(inputbox('A['+inttostr(i)+']','Ingrese valor',''));
S:=S+inttostr(A[i])+#9; // Conversión de A a la cadena S
norm:=norm+sqr(A[i]);
end;
norm:=sqrt(norm);
showmessage('El vector A es'+#13+S)
End.
4. Program Fibonnacci;
Uses SysUtils, Dialogs;
const max=20;
type vector=array[1..max] of integer;
Var i,n:integer; A:vector; S:string;
Begin
n:=strtoint(inputbox('Sucesión de Fibonacci','Ingrese el número de términos',''));
A[1]:=1; S:='1';
if n>1 then
begin
A[2]:=1; S:=S+#9+'1';
for i:=3 to n do
begin
A[i]:=A[i-1]+A[i-2];
S:=S+#9+inttostr(A[i]);
end;
end;
showmessage('La sucesión de Fibonacci es'+#13+S);
End.
5. Program suma_vectores;
Uses SysUtils, Dialogs;
const max=20;
type vector=array[1..max] of real;
Var i,n:integer; A,B:vector; S,S1,S2:string;
Begin
n:=strtoint(inputbox('','Ingrese la dimensión del vector',''));
S1:='El vector A es'+#13;
S2:='El vector B es'+#13;
for i:=1 to n do
begin
// Definiendo los vectores A y B
A[i]:=strtofloat(inputbox('Lectura del vector A','Ingrese A['+inttostr(i)+']',''));
B[i]:=strtofloat(inputbox('Lectura del vector B','Ingrese B['+inttostr(i)+']',''));
S1:=S1+floattostr(A[i])+#9;
S2:=S2+floattostr(B[i])+#9;
S:=S+floattostr(A[i]+B[i])+#9;
end;
showmessage(S1+#13+#13+S2+#13+#13+'El vector A+B es'+#13+S)
End. // Calcular la diferencia de los vectores, el producto interno, etc..
6. Program polinomios;
Uses SysUtils, Dialogs;
const max=20;
type polinomio=array[1..max] of real;
Var i,n,m,l:integer; A,B:polinomio; S,S1,S2:string;
Begin
n:=strtoint(inputbox('','Ingrese el grado del polinomio P',''));
m:=strtoint(inputbox('','Ingrese el grado del polinomio Q',''));
S1:='Los coeficientes del polinomio P son'+#13;
S2:='Los coeficientes del polinomio Q son'+#13;
for i:=1 to n+1 do
begin
A[i]:=strtofloat(inputbox('P(x)=A[0]+A[1]x+..+A['+inttostr(n)+']x^'+inttostr(n),
'Ingrese A['+inttostr(i-1)+']',''));
S1:=S1+floattostr(A[i])+#9;
end;
for i:=1 to m+1 do
begin
B[i]:=strtofloat(inputbox('Q(x)=B[0]+B[1]x+..+B['+inttostr(m)+']x^'+inttostr(m)
,'Ingrese B['+inttostr(i-1)+']',''));
S2:=S2+floattostr(B[i])+#9;
end;
if m>n then l:=m
else l:=n;
for i:=1 to l+1 do
S:=S+floattostr(A[i]+B[i])+#9;
showmessage(S1+#13+#13+S2+#13+#13+'Los coeficientes del polinomio P+Q
son'+#13+S)
End.
7. Program menor;
Uses SysUtils,Dialogs;
Const max=20;
Type vector=array[1..max] of real;
Var i,n:integer; min:real;
A:vector; S:string;
Begin
n:=Strtoint(Inputbox('','Ingrese el número de elementos',''));
for i:=1 to n do
begin
A[i]:=Strtofloat(Inputbox('','Ingrese A['+inttostr(i)+']',''));
S:=S+Floattostr(A[i])+#9;
end;
min:=A[1];
for i:=2 to n do
if (A[i]<min) then
min:=A[i];
Showmessage('El menor elemento de'+#13+S+#13+'es '+floattostr(min))
End.
8. Program ordenacion;
Uses SysUtils,Dialogs;
Const max=20;
Type vector=array[1..max] of real;
Var i,j,k,n:integer; min:real;
A:vector; S1,S2:string;
Begin
n:=Strtoint(Inputbox('','Ingrese el número de elementos',''));
for i:=1 to n do
begin
A[i]:=Strtofloat(Inputbox('','Ingrese A['+inttostr(i)+']',''));
S1:=S1+Floattostr(A[i])+#9;
end;
for i:=1 to n do
begin
// calculando el menor elemento de A[i] hasta A[n]
min:=A[i];
k:=i;
for j:=i+1 to n do
if (A[j]<min) then
begin
min:=A[j];
k:=j;
end;
// intercambiando A[k] (el mínimo) hallado con la posición A[i]
A[k]:=A[i];
A[i]:=min;
S2:=S2+Floattostr(A[i])+#9;
end;
Showmessage(S1+#13+'ordenado ascendentemente es'+#13+S2)
End.
Program ejemplo;
Uses sysutils,dialogs;
Type matriz=array[1..6,1..8] of integer;
Var A: matriz;
Begin
A[1,1]:=2; A[1,2]:=3; A[2,1]:=5; A[2,2]:=7;
End.
Program matricial;
Uses SysUtils,dialogs;
const max=20;
type matriz=array[1..max,1..max] of integer;
var i,j,n:integer; A:matriz; S:string;
Begin
n:=strtoint(inputbox('','Ingrese el orden de la matriz',''));
// Lectura de los elementos de la matriz:
for i:=1 to n do
begin
for j:=1 to n do
begin
A[i,j]:=strtoint(inputbox('A['+inttostr(i)+','+inttostr(j)+']','Ingrese valor',''));
S:=S+inttostr(A[i,j])+#9;
end;
S:=S+#13;
end;
showmessage('La matriz A es'+#13+S)
End.
Ejercicio. Modificar para una matriz no cuadrada, calcular la suma de los elementos.
Program suma_matrices;
Uses SysUtils,dialogs;
const max=20;
Type matriz=array[1..max,1..max] of integer;
var i,j,n:integer; A,B:matriz; S1,S2,S:string;
Begin
S1:='La matriz A es'+#13;
S2:='La matriz B es'+#13;
n:=strtoint(inputbox('','Ingrese el orden de la matriz',''));
for i:=1 to n do
begin
for j:=1 to n do
begin
A[i,j]:=strtoint(inputbox('A['+inttostr(i)+','+inttostr(j)+']','Ingrese valor',''));
B[i,j]:=strtoint(inputbox('B['+inttostr(i)+','+inttostr(j)+']','Ingrese valor',''));
S1:=S1+inttostr(A[i,j])+#9;
S2:=S2+inttostr(B[i,j])+#9;
S:=S+inttostr(A[i,j]+B[i,j])+#9;
end;
S1:=S1+#13; S2:=S2+#13; S:=S+#13;
end;
showmessage(S1+#13+#13+S2+#13+#13+'La matriz A+B es'+#13+S)
End.
Program aleatorio;
Uses SysUtils,dialogs;
const max=20;
Type vector=array[1..max] of real;
Var i,n:integer; A,B:vector; S,S1,S2:string;
Begin
n:=strtoint(inputbox('','Ingrese la dimensión del vector',''));
S1:='El vector A es'+#13;
S2:='El vector B es'+#13;
randomize;
for i:=1 to n do
begin
A[i]:=trunc(100*random)/10; // También A[i]:=trunc(random(101))/10;
B[i]:=random(10)+1;
S1:=S1+floattostr(A[i])+#9;
S2:=S2+floattostr(B[i])+#9;
S:=S+floattostr(A[i]+B[i])+#9;
end;
showmessage(S1+#13+#13+S2+#13+#13+'El vector A+B es'+#13+S)
End.
Arreglos Dinámicos
Sintaxis:
Type
Arreglo_dinamico = array of Tipo_dato;
Var
Identificador = Arreglo_dinámico;
Begin
...
setlength(Identificador,tamaño);
...
End.
Ejemplos:
Program dinamico;
Uses SysUtils;
Type vector_d=array of integer;
Var A:vector_d;
Begin
setlength(A,4);
A[0]:=2; A[1]:=3; A[2]:=5; A[3]:=7;
End.
Program aleatorio_din;
Uses SysUtils,dialogs;
Type vector_d=array of real;
Var i,n:integer; A:vector_d; cad:string;
Begin
n:=strtoint(inputbox('','Ingrese un número natural',''));
cad:='Los primeros números reales son:'+#13;
setlength(A,n); randomize;
for i:=0 to n-1 do
begin
A[i]:=(random(201)-100)/10; // -10+20*random;
cad:=cad+floattostr(A[i])+#9; // formatfloat(‘0.00’,A[i])+#9;
end;
showmessage(cad)
End.
Program aleatorio_n;
Uses SysUtils,dialogs;
Type vector_d=array of integer;
Var i,n:integer; A:vector_d; cad:string;
Begin
n:=strtoint(inputbox('','Ingrese un número natural',''));
cad:='Los primeros '+inttostr(n)+' números naturales son:'+#13;
setlength(A,n); randomize;
for i:=0 to n-1 do
begin
repeat
A[i]:=random(n)+1;
until A[i]=i+1;
cad:=cad+inttostr(A[i])+#9;
end;
showmessage(cad)
End.
Program sum_matriz_din;
Uses SysUtils,dialogs;
Type matriz=array of integer;
Var i,j,n,m:integer; A,B:matriz; S1,S2,S:string;
Begin
S1:='La matriz A es'+#13;
S2:='La matriz B es'+#13;
m:=strtoint(inputbox('','Ingrese el número de filas de las matrices',''));
n:=strtoint(inputbox('','Ingrese el número de columnas de las matrices',''));
setlength(A,m*n); setlength(B,m*n);
randomize;
for i:=0 to m-1 do
begin
for j:=0 to n-1 do
begin
A[i+j]:=random(m+n);
B[i+j]:=random(m+n);
S1:=S1+inttostr(A[i+j])+#9;
S2:=S2+inttostr(B[i+j])+#9;
S:=S+inttostr(A[i+j]+B[i+j])+#9;
end;
S1:=S1+#13; S2:=S2+#13; S:=S+#13;
end;
showmessage(S1+#13+S2+#13+'La matriz A+B es'+#13+S)
End.
Programa que genera una matriz aleatoriamente definiendo un arreglo dinámico cuyos
elementos son vectores.
Program matriz_d_random;
Uses
SysUtils,Dialogs;
Type
vector = array of real;
matriz = array of vector;
Var
A:matriz; i,j,n,m:integer; S:string;
Begin
n:=strtoint(inputbox('','Ingrese el número de filas',''));
m:=strtoint(inputbox('','Ingrese el número de columnas',''));
setlength(A,n); // Genera las "n" filas de A
Randomize;
for i:=0 to n-1 do
begin
setlength(A[i],m); // Genera los "m" elementos de la fila "i"
for j:=0 to m-1 do
begin
A[i,j]:=-10+20*random;
S:=S+formatfloat('0.00',A[i,j])+#9;
end;
S:=S+#13;
end;
Showmessage(S);
End.
Programa que muestra los elementos del arreglo A de “n” términos definida por
A[1] = (-2)n , A[2] = n!, A[k] = A[k-1] - A[k-2], si k>2.
Program sucesion;
Uses SysUtils,dialogs;
Type vector_d=array of integer;
var i,n:integer; A:vector_d; S:string;
Begin
n:=strtoint(inputbox('Sucesión D3p11','Ingrese el número de términos',''));
setlength(A,n);
A[0]:=1; A[1]:=1;
for i:=1 to n do
begin
A[0]:=A[0]*i;
A[1]:=A[1]*(-2);
end;
S:=inttostr(A[0]);
if n>1 then
begin
S:=S+#9+inttostr(A[1]);
for i:=2 to n-1 do
begin
A[i]:=A[i-1]-A[i-2];
S:=S+#9+inttostr(A[i]);
end;
end;
showmessage('La sucesión de la pregunta 11 es'+#13+S);
End.
Programa que dados dos arreglos A y B los cuales están ordenados, construye un
arreglo C , también ordenado, con los elementos de A y B.
Program ordenacion_A_B;
Uses SysUtils,dialogs;
Type vector_d=array of real;
Var i,j,k,n,m:integer; A,B,C:vector_d; S1,S2,cad:string;
Begin
n:=strtoint(inputbox('','Ingrese la dimensión del vector A',''));
m:=strtoint(inputbox('','Ingrese la dimensión del vector B',''));
setlength(A,n+1); setlength(B,m+1); setlength(C,n+m);
randomize;
A[0]:=random(10*n)/10; B[0]:=random(10*m)/10;
S1:='El vector A es'+#13+floattostr(A[0]);
PROCEDIMIENTOS Y FUNCIONES
Una función es un procedimiento que puede devolver un valor (sólo una variable). Su
sintaxis es:
Ejemplos:
Program factorial;
Uses SysUtils,Dialogs;
Var n:integer;
Program leer_imprimir;
Uses SysUtils, Dialogs;
Type vector = array of real;
Var A:vector; n:integer;
for i:=1 to n do
A[i]:=strtofloat(inputbox('A['+inttostr(i)+']','Ingrese',''));
end;
Program val_polinomio;
Uses SysUtils,Dialogs;
Type polinomio = array of real;
Var i,n:integer; x:real;
P:polinomio; S:string;
Parámetros de entrada por valor, si solo adquiere el valor del parámetro ingresado
en el programa principal.
Cuando los parámetros de entrada son por valor no es necesario colocar “var” antes de
las variables de entrada, mientras que si son parámetros de referencia debemos incluir
“var” antes de las variables de entrada.
Program factorial_recursivo;
Uses SysUtils,Dialogs;
Var n:integer;
Program primos;
Uses SysUtils,Dialogs;
Type v2=array[1..2] of integer;
var n:integer; p:v2;
Program producto_matriz;
Uses SysUtils,Dialogs;
Type matriz = array[1..10,1..10] of real;
Var A,B,C:matriz; S:string;
i,j,k,m,n,p:integer;
Begin
m:=strtoint(inputbox('','Ingrese el valor de m:',''));
n:=strtoint(inputbox('','Ingrese el valor de n:',''));
p:=strtoint(inputbox('','Ingrese el valor de p:',''));
Randomize;
{Almacenando la matriz A}
S:='Matriz A:'+#13;
for i:=1 to m do
begin
for j:=1 to n do
S:=S+floattostr(A[i,j])+#9;
S:=S+#13;
end;
S:=S+#13;
{Almacenando la matriz B}
S:=S+'Matriz B:'+#13;
for i:=1 to n do
begin
for j:=1 to p do
S:=S+floattostr(B[i,j])+#9;
S:=S+#13;
end;
{Almacenando la matriz C}
S:=S+#13+'Matriz C=AB:'+#13;
for i:=1 to m do
begin
for j:=1 to p do
S:=S+floattostr(C[i,j])+#9;
S:=S+#13;
end;
showmessage(S); // Mostrando A, B y C=AB
End.
TÉCNICAS DE ORDENACIÓN
Program ordenacion_seleccion;
Uses SysUtils,Dialogs;
Type vector=array[1..20] of real;
var A:vector; n:integer; cad:string;
Program ordenacion_insercion;
Uses SysUtils,Dialogs;
Type vector=array[1..20] of real;
var A,B:vector; n:integer; cad:string;
REGISTROS (RECORD)
Los registros son la generalización de los arreglos, así como los arrays son las
generalizaciones de las cadenas. Un registro es un arreglo unidimensional, en donde
cada elemento de ese arreglo puede ser cualquier tipo de variable, inclusive un arreglo.
Cada elemento de un arreglo se denominará “campo”.
Un registro se puede definir dentro de Type o como una variable (dentro de Var), con la
diferencia de que en Type se colocará “ = Record” y dentro de Var irá “ : Record”.
Veamos algunos ejemplos:
A continuación definiremos el registro “Amigo” dentro como una variable y con tres
campos (Nombre, Edad y Telef):
Program registro_amigo;
Uses SysUtils, Dialogs;
Var Amigo : Record
Nombre : String;
Edad : Byte;
Telef : Integer;
End;
Begin
Amigo.Nombre := 'Luis Salazar';
Amigo.Edad := 20;
Amigo.Telef := 3456789;
Showmessage(amigo.nombre+' tiene '+inttostr(amigo.edad));
Showmessage('y su número telefónico es '+inttostr(amigo.telef));
End.
Program registro_alumno;
Uses SysUtils, Dialogs;
Type // Observe que aquí se define el registro “Alumno” dentro del Type.
Alumno = Record
Nombre : String;
Curso : String;
Nota : Byte;
End;
Var Alm:Alumno; cad:string;
Begin
Alm.Nombre := inputbox('','Ingrese el nombre del alumno:','');
Alm.Curso := inputbox('','Ingrese el curso que lleva','');
Alm.Nota := strtoint(inputbox('','Ingrese el promedio:',''));
if (Alm.Nota < 10) then
cad := ' desaprobará '
else
cad := ' aprobará ';
showmessage(alm.nombre+cad+alm.curso+' con '+inttostr(alm.nota));
End.
Program precio_auto;
Uses Sysutils, Dialogs;
Type Carac = record
marca: integer;
anho: integer;
color: string[10];
End;
Var auto: carac; cad, marc: string; precio: integer;
Procedure leer(var x: carac);
var cad1: string;
begin
cad1:='1) Tayet'+#13+'2) Sumari'+#13+'3) Macros'+#13+'4) Futura';
repeat
x.marca:=strtoint(inputbox('Tenemos las siguientes marcas:',cad1,'1, 2, 3 ó 4'));
until (x.marca>0) and (x.marca<5);
x.anho:=strtoint(inputbox('Ingrese el año','año:',''));
x.color:=inputbox('Ingrese el color','color:','');
end;
Program registros_egresados;
Uses SysUtils, dialogs;
Type Alumnos = Record
Nombre : String;
Especialidad : String; // N1,N2,N3 ó N5
Ponderado : Byte;
End;
Begin
n:=strtoint(inputbox('','Número de egresados de la Facultad de Ciencias:',''));
j1:=0; j2:=0; j3:=0; j5:=0;
for i:=1 to n do
begin
promo[i].nombre := inputbox('','Ingrese el nombre completo del alumno:','');
promo[i].especialidad := inputbox('','Ingrese el código de la especialidad:','');
promo[i].ponderado := strtoint(inputbox('','Ingrese el promedio ponderado:',''));
cad:=promo[i].especialidad; op:=cad[2];
case op of
'1': begin
j1:=j1+1; N1[j1]:=i;
end;
'2': begin
j2:=j2+1; N2[j2]:=i;
end;
'3': begin
j3:=j3+1; N3[j3]:=i;
end;
'5': begin
j5:=j5+1; N5[j5]:=i;
end;
else showmessage('Ingrese un código de especialidad perteneciente a Ciencias');
end;
end;
showmessage('Hay '+inttostr(j1)+' egresados de la Especialidad de Física.'+#13+
'Hay '+inttostr(j2)+' egresados de la Especialidad de Matemática.'+#13+
'Hay '+inttostr(j3)+' egresados de la Especialidad de Química.'+#13+
'Hay '+inttostr(j5)+' egresados de la Especialidad de Ing. Física.');
cad := 'Los alumnos egresados agrupados por especialidad son' + #13 +
#13 + 'Apellidos y Nombres' + #9 + 'Esp' + #9 + 'Ponderado' + #13;
for i:= 1 to j1 do
cad := cad + print(promo[N1[i]]);
for i:= 1 to j2 do
cad := cad + print(promo[N2[i]]);
for i:= 1 to j3 do
cad := cad + print(promo[N3[i]]);
for i:= 1 to j5 do
cad := cad + print(promo[N5[i]]);
showmessage(cad)
End.
En las estructuras podemos incluir CUALQUIER tipo de datos. Incluidos los arrays e
incluso otras estructuras. Así, podemos declarar una variable con:
Amigo_Cromos : Record
Nombre : String;
Edad : Byte;
Tengui : Array [1..300] of Word;
Falti : Array [1..300] of Word;
Colecs : Record
BolaDeDrac : Boolean;
SonGoku : Boolean;
DragonBall : Boolean;
End;
End;
Y más útil todavía es poder definir una estructura dentro de un array. Es decir, algo
como esto:
Amigos : Array [1..100] of Record
Nombre : String;
Edad : Byte;
Colecs : Record;
SonGoku : Array [1..300] of Boolean;
Bulma : Array [1..300] of Boolean;
End;
End;
Con esto, definimos una "lista" en la que podemos guardar los datos de 100 amigos
diferentes. Podemos guardar su Nombre, su Edad y los cromos que tienen de las dos
colecciones.
-1
2
-3
…
(-1)n*n
program Project2;
uses
SysUtils,Dialogs;
var
sig,i,n:integer;
cad1,cad2:string;
begin
n:=strtoint(inputbox('lectura del numero de filas ','ingrese n',''));
sig:=-1;
for i:=1 to n do
begin
cad2:=cad2+cad1+inttostr(sig*i)+#13;
cad1:=cad1+#9;sig:=sig*(-1);
end;
showmessage(cad2);
end.