Sunteți pe pagina 1din 63

Instituto Superior Juan XXIII Programación 1

EL LENGUAJE DE PROGRAMACIÓN DELPHI

La informática no cesa de evolucionar en todos sus aspectos. Nuevos procesadores,


posibilidades insospechadas de tratamiento de información, capacidades de
almacenamiento asombrosas y, obviamente, el software necesario para gestionar todo
ello. En este último punto se ha pasado en los últimos años del desarrollo de programas
que tenían como finalidad principal llevar a cabo una determinada función, sin importar
demasiado el diseño o la facilidad de uso, a la necesidad cada vez mayor de que sea el
software el que se adapte al usuario, y no al contrario, como venía ocurriendo.
La sofisticación de las interfaces de usuario, cada vez más complejas y completas,
acarrean una carga extra de trabajo al programador, que ya no sólo tiene que
preocuparse de que su programa realice la función para la que está pensado, sino que,
además, debe tener en cuenta que el aspecto de la aplicación sea agradable y que sea
fácil de usar por cualquier usuario.
Delphi aporta como otras herramientas visuales como C++, la facilidad al programador
de que esta programación de interfaces sea más sencilla. El entorno de desarrollo de
Delphi es simple, flexible y potente al mismo tiempo, cuando con un gran número de
componentes prefabricados que simplificarán en forma notable la creación de cualquier
aplicación.
Delphi está basado en el lenguaje Pascal, cuyas capacidades fueron extendidas para
convertirlo en un lenguaje orientado a objetos; que en la actualidad es la metodología de
programación más difundida y utilizada.

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.

CONCEPTO Y CARACTERÍSTICAS DE UN PROGRAMA

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:

Prof. Ana Gabela 1


Instituto Superior Juan XXIII Programación 1

NOMBRE: Algoritmo para hacer un vaso de limonada

Variables : Materiales: Vaso , cuchara , jarra , cuchillo


Ingredientes: Limón , azúcar , agua

CUERPO DEL ALGORITMO: 1. Partir el limón en dos


2. Exprimir el contenido del limón en el vaso
3. Echar agua y azúcar al vaso
4. Mezclar

Los programas también tiene una estructura y es la siguiente:

Program < Nombre del programa >

Uses
< Declaración de librerías >
Const
< Declaración de constantes > CABECERA
Type
< Declaración de tipos >
Var
< Declaración de variables >

<Declaracion de subprogramas Funciones y Procedimientos>

Begin

----------
---------- CUERPO
----------

End.

Se debe colocar siempre un punto después del END.

Todo lenguaje tiene un entorno de programación que facilita al usuario la escritura de


sus programas.

¿Qué es un entorno de programación?


El entorno de programación es un programa que contiene, además del compilador,
utilidades y herramientas. Estos elementos están integrados, de modo que pueden
llamarse fácilmente a cualquiera de los módulos, durante el proceso de la programación,
desde cualquier otro.
Un entorno de programación típico contiene:
 Un editor, que proporciona el medio de introducir el texto y símbolos para crear
el código fuente.
 Un compilador que convierte el código fuente en instrucciones que la
computadora puede comprender y ejecutar.

Prof. Ana Gabela 2


Instituto Superior Juan XXIII Programación 1

 Un verficador de errores en tiempo de ejecución que reconoce todos los errores


no detectados anteriormente en tiempo de compilación.
 Un depurador que ayuda a analizar y corregir errores de sintaxis, estructura o
lógicos.
El proceso de diseño, codificación, depuración y ejecución de un programa es mucho
más fácil y rápido cuando se utiliza un buen entorno de programación.

¿Cuáles son los pasos para crear un programa ejecutable?

Código Fuente Código Objeto Programa Ejecutable


Compilación Linkeo

Escrito por el
programador Se corrigen los ……EXE
errores sintáticos

ENTRADA Y SALIDA DE DATOS

La salida de datos es la visualización de información en la pantalla, para ello debemos


usar los comandos write (escribir) o writeln (escribir y dar salto de línea).

Si se quiere mostrar en la pantalla un texto, éste se debe escribir entre apóstrofes.

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 :

Prof. Ana Gabela 3


Instituto Superior Juan XXIII Programación 1

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.

Para la óptima comprensión de los comandos definidos anteriormente debemos


introducir el concepto de variables.

PARTES DE UN PROGRAMA

VARIABLES Y CONSTANTES

Cuando se procesa información o datos, un programa para computadora generalmente


mantiene valores para varias cantidades, a éstas cantidades se les puede hacer referencia
por nombres, conocidos como variables. El valor de una variable puede variar durante
la ejecución del programa.

Una constante es una variable, con la diferencia de que su valor no se altera.

Una variable va a tener dos propiedades (o partes):

 Un Nombre (Al que llamaremos identificador).


 Un Tipo (El tipo de variable puede ser entero, real, texto, etc.).

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):

- Sólo deben contener caracteres alfanuméricos y los caracteres “_” y “__”.


- El primer carácter debe ser una letra o subrayado.
- No puede contener espacios en blanco ni vocales tildadas.
- No debe ser ninguna palabra reservada.

Las palabras reservadas son aquellas palabras que ya tienen una función declarada, por
ejemplo: char, var, if, for, etc..

Prof. Ana Gabela 4


Instituto Superior Juan XXIII Programación 1

Ejemplos:

- Jose (correcto).
- 123abc (incorrecto).
- raiz_123 (correcto).
- byte (incorrecto).

Un identificador es sensible a las mayúsculas, por ejemplo, un identificador cono


MinMax puede escribirse de cualquiera de las siguientes maneras:

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

I ) Integer: Almacena números enteros.

II ) Real: Almacena números reales (con decimales).

III ) Char: Almacena un caracter cualquiera del código ASCII.

IV ) String: Almacena uno o más caracteres (texto).

V ) Boolean: Almacena el valor de TRUE o FALSE (V o F).

Tipos de datos numéricos:

Tipo Rango de valores ocupación

ShortInt -128 a 127 8 bits


Byte 0 a 255 8 bits
Integer -32768 a 32767 16 bits
Word 0 a 65535 16 bits
longInt -2147483648 a 2147483647 32 bits
Single 1.2e-38 a 3.4e38 32 bits
Real 2.2e-308 a 1.8e308 64 bits

Declaración de variables

Sintaxis:

Var < Identificador > : < Tipo de variable > ;

Prof. Ana Gabela 5


Instituto Superior Juan XXIII Programación 1

cad : string;
Raiz_12 : real;
Edad : integer;
Opcion : char;

Asignación de valores a variables en el cuerpo del programa:

< Nombre de la variable > := < Valor de la variable > ;

Donde “:=” es el operador de asignación. Cuando queremos asignar el valor de una


variable del tipo char o string, colocaremos el carácter o caracteres entre apóstrofes.

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.

Si queremos visualizar en la pantalla el valor de una variable podemos utilizar el


comando write o writeln, solamente escribiremos el nombre de la variable entre
paréntesis después de alguno de estos comandos. Es decir:

Sintaxis:

Write ( < nombre de la variable > ); Writeln ( < nombre de la variable > ) ;

Prof. Ana Gabela 6


Instituto Superior Juan XXIII Programación 1

Ejemplo 1:

Program Prueba1;
Var
entero : integer;
b: boolean;
Begin
Entero := 5;
B:=False;
Writeln (‘a = ’);
Write (entero);
Writeln (b);
Readln
End.

La pantalla de salida será : a=


5FALSE
_

Ejemplo 2:

Program Prueba2;
Var
a : integer;
Begin
a := 3;
Write (‘a = ’);
Writeln( a );
Writeln;
a := 5;
Write (‘Ahora a = ’);
Writeln ( a );
Readln
End.

La pantalla de salida será : a=3

Ahora a = 5
_

Cuando queremos dar un salto de línea simplemente, como en el ejemplo anterior,


escribiremos en el programa writeln;

Prof. Ana Gabela 7


Instituto Superior Juan XXIII Programación 1

Ingreso de datos por el usuario:

Para el ingreso de datos (por teclado) utilizaremos el comando readln y a continuación


escribimos el nombre de la variable entre paréntesis. Es decir:

Sintaxis

Readln ( < Nombre de la variable a ser leída > ) ;

Ejemplo:

Program Prueba3;
Var
a: integer;
Begin
Writeln (‘Ingrese un entero’);
Readln (a);
Write ( ‘a = ’ );
Write (a);
Readln
End.

Primero la pantalla de salida será: Ingrese un entero


_
Supongamos que ingresamos
3 como el valor de a

Luego se visualizará: Ingrese un entero


3
a = 3_

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.

Primero la pantalla de salida será: Escriba su nombre: _

Prof. Ana Gabela 8


Instituto Superior Juan XXIII Programación 1

Supongamos que ingresamos


Jorge como el valor de nombre

Luego se visualizará: Escriba su nombre: Jorge


Escriba su edad: _
Supongamos que ingresamos
20 como el valor de edad

Finalmente la salida será: Escriba su nombre: Jorge


Escriba su edad: 20
Su nombre es Jorge y su edad es 20
_

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:

( 4 < 5 ) and ( 3 >= 2 ) True


( -1 <> 1 ) or ( 3 < 2 ) True
Not ( 4 < 5 ) False
( 1 >= 0 ) xor ( 1 < 0 ) True

También podemos más de dos operadores lógicos, por ejemplo:

( ( 1 <> 0 ) or ( 1 > 2 ) ) and ( 4 < 3 ) False


Not ( ( 1 >= 2 ) and ( 0 <= -1) ) True

Prof. Ana Gabela 9


Instituto Superior Juan XXIII Programación 1

Tabla de prioridades para la evaluación de expresiones aritméticas

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:

Delphi tiene implementada las siguientes 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.

Para obtener b ² - 4ac , debemos escribir en el programa: sqrt ( sqr (b)–4*a*c )

Para obtener xy , debemos escribir en el programa: exp ( ln (x)*y )

Prof. Ana Gabela 10


Instituto Superior Juan XXIII Programación 1

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 ver la salida de un programa se debe incluir la instrucción {$APPTYPE


CONSOLE} al inicio de la cabecera del programa como en el ejemplo anterior.
Supongamos que ingresamos a=2 y b=4, entonces al final de ejecutar el programa
anterior se visualizará en la pantalla:

Ingrese el valor de "a": 2


Ingrese el valor de "b": 4
El valor de la suma de las raíces es 1,41421356237310E+0000
El valor del producto de las raíces es 1.38629436111989E+0000
_

Se aprecia que en la salida, ambos valores tienen 14 decimales y al final E+0000


significa que el número visualizado debe multiplicarse por 10 0000 = 1. En general,
cuando se muestra el valor de un número real, se verá en la pantalla aE+b ó aE-b, en
consecuencia el valor será a10b ó a10-b respectivamente.

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:

< variable de tipo real > : n : m

En este caso el número de decimales será m. Supongamos que el número de dígitos en


la salida es d, entonces el número de espacios en blanco que se dará antes de imprimir

Prof. Ana Gabela 11


Instituto Superior Juan XXIII Programación 1

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.

En la pantalla se mostrará la salida: 1.10


1.41_
En la segunda línea se ha dado 2 espacios.

Los operadores div y mod:

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 ;

Prof. Ana Gabela 12


Instituto Superior Juan XXIII Programación 1

Write ( ‘ la suma de cifras de ’ , n : 2 ) ;


Write ( ‘ es ’, a+b ) ;
Readln;
End.

2. Elabore un programa que pida 4 números: a, b, c y d, luego calcule el determinante


de a b  y muestre el resultado.
 
c d 

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

El compilador de un programa efectúa selecciones evaluando expresiones booleanas,


esto es, expresiones que tienen valores de verdadero o falso.

SENTENCIA IF:

La sentencia If , presenta dos formas: simple y doble.

A ) Selección simple

If < expresión booleana > then


Begin
< sentencias >  se ejecuta sólo si la expresión booleana es verdadera.
End ;

Prof. Ana Gabela 13


Instituto Superior Juan XXIII Programación 1

B ) Selección doble

If < expresión booleana > then


Begin
< sentencias 1>
End
ELSE
Begin
< sentencias 2 >
End;

Estructura If Simple (Si - entonces)

Está compuesto únicamente de una condición. La estructura “si – entonces” evalúa la


condición y en tal caso:

Si la condición es verdadera, entonces ejecuta la acción Si (o acciones si son varias).


Si la condición es falsa, entonces no se hace nada.

Ejemplo 1.

Construir un algoritmo tal, que dado como dato la calificación de un alumno en un


examen, escriba "Aprobado" en caso que esa calificación fuese mayor o igual que 10.

Algoritmo Calificación

Variables
cal: entero

Inicio
Leer (cal)
Si cal > 8 entonces
Escribir ("Aprobado")
Fin_si
Fin

Prof. Ana Gabela 14


Instituto Superior Juan XXIII Programación 1

Estructura If Doble

Es una estructura lógica que permite controlar la ejecución de varias acciones y se


utilizan cuando se tienen dos opciones de acción, por la naturaleza de estas se debe
ejecutar una o la otra, pero no ambas a la vez, es decir, son mutuamente excluyentes.

D
Diagrama de Flujo

Ejemplo 1

Dado como dato la calificación de un alumno en un examen, escriba "aprobado" si su


calificación es mayor que 10 y "Reprobado" en caso contrario.

Algoritmo Calificacion
Inicio
Leer (cal)
Si cal > 10 entonces
Escribir ("aprobado")
Sino
Escribir ("reprobado")

Prof. Ana Gabela 15


Instituto Superior Juan XXIII Programación 1

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:

1. Haga un programa en Delphi que diga si un entero ingresado es múltiplo o no de 2.

Program Multiplo2;

{$APPTYPE CONSOLE }
Var

Prof. Ana Gabela 16


Instituto Superior Juan XXIII Programación 1

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:

1) Si el número de sentencias es 1 se puede obviar el Begin – End.


2) Antes de un Else no hay “ ; ”.
3) Al final del End hay “ ; ”.
4) No es obligatorio colocar ‘;’ antes de un End.
5) No se puede visualizar las vocales tildadas.

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

3. Haga un programa que pida el ingreso de 2 números y calcule el mayor de ellos.

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

Prof. Ana Gabela 17


Instituto Superior Juan XXIII Programación 1

Write (‘El numero mayor es ’ , b:5:3);


Readln
End.

ESTRUCTURAS SELECTIVAS DE MULTIPLES ALTERNATIVAS

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:

En la solución de problemas encontramos numerosos casos en los que luego de tomar


una decisión y marcar el camino correspondiente a seguir, es necesario tomar otra
decisión. Dicho proceso puede repetirse numerosas veces. En aquellos problemas en
donde un bloque condicional incluye otro bloque condicional se dice que un bloque está
anidado dentro del otro.

Sintaxis:

If < condicion 1 > then


< sentencia 1 >
Else If < condicion 2 > then
< sentencia 2 >
Else If < condicion 3 > then
< sentencia 3 >
.
.
.
Else
< sentencia n > ;

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

Prof. Ana Gabela 18


Instituto Superior Juan XXIII Programación 1

Write ( 'El numero es cero' )


Else if ( n mod 2 = 0 ) then
Write ( 'El numero es positivo y par' )
Else
Write ( 'El numero es positivo e impar' );
Readln
End.

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:

Veamos la representación de tal algoritmo en un diagrama de flujo y en el diagrama NS.

Prof. Ana Gabela 19


Instituto Superior Juan XXIII Programación 1

Sintaxis:

Case < selector > of


Opción 1 : sentencia 1 ;
Opción 2 : sentencia 2 ;
Opción 3 : sentencia 3 ;
.
.
Opción n : sentencia n
Else
Sentencia n+1
End;

Prof. Ana Gabela 20


Instituto Superior Juan XXIII Programación 1

Observación:

- El selector debe ser de tipo ordinal, es decir entero o carácter.

Ejemplos:

1. Implemente el algoritmo del ejemplo anterior.

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.

2. Elabore un programa que diga si el día de hoy hay o no clases

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.

Prof. Ana Gabela 21


Instituto Superior Juan XXIII Programación 1

ESTRUCTURAS REPETITIVAS

Nos permiten ejecutar una secuencia de instrucciones repetidamente usando una


condición de control o variable, para determinar cuándo debe detenerse la ejecución.
Hay tres tipos de lazos de control:

Sentencia For (Repetir N veces).


Sentencia While (Repetir Mientras).
Sentencia Repeat (Repetir Hasta).

El conjunto de instrucciones que se ejecuta repetidamente cierto número de veces, se


llama Ciclo, Bucle o Lazo.
Una Iteración es cada una de las diferentes pasadas o ejecuciones de todas las
instrucciones contenidas en el bucle.

Fases de un Programa Cíclico :

1. Entrada de datos e instrucciones previas


2. Lazo o bucle
3. Instrucciones finales o resto del proceso
4. Salida de resultado

Contador:

Un contador es una variable cuyo valor se incrementa o decrementa en una cantidad


constante cada vez que se produce un determinado suceso o acción. Los contadores se
utilizan con la finalidad de contar sucesos o acciones internas de un bucle; deben
realizar una operación de inicialización y posteriormente las sucesivas de incremento o
decremento del mismo. La inicialización consiste en asignarle al contador un valor. Se
situará antes y fuera del bucle.

Representación:

<nombre del contador> ← nombre del contador> + <valor constante>

Ejemplo: i = i + 1

Si en vez de incremento es decremento se coloca un menos en lugar del más.


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.

Prof. Ana Gabela 22


Instituto Superior Juan XXIII Programación 1

Representación:

<Nombre del acumulador> ← <nombre del acumulador> + <valor variable>

La Sentencia FOR

Se usa frecuentemente cuando se conoce de antemano el número de veces que se


ejecutarán las acciones de un bucle. Esta es una de sus características.

A la estructura FOR se le conoce como Repetitiva. Para utilizar esta estructura en


algoritmos, debemos hacer uso de contadores y algunas veces de acumuladores, cuyos
conceptos se describen a continuación:

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.

Prof. Ana Gabela 23


Instituto Superior Juan XXIII Programación 1

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:

1. Implementar el algoritmo anterior.

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.

 Otros tipos permitidos de variables de control de bucles


Una variable de control debe ser de tipo ordinal o un subrango de tipo ordinal. Así
pues, además de entera puede ser de tipo char o de tipo lógico u otro tipo ordinal.

Ejemplos:

1. For Carácter:= 'A' to 'Z' do


Writeln(carácter);
2. For c:= 'e' to 'f' do
If c = caracterActual
Then
Suma:=suma+1;
3. For sw:=false to true do
If sw
Then
Writeln('Interruptor verdadero')
Else
Writeln('Interruptor falso');

Prof. Ana Gabela 24


Instituto Superior Juan XXIII Programación 1

Reglas de funcionamiento del bucle FOR


1. Las variables de control, valor inicial y valor final deben ser todas del mismo
tipo, pero el tipo real no está permitido. Los valores iniciales y finales pueden
ser tanto expresiones como constantes.
2. Antes de la primera ejecución del bucle, a la variable de control se asigna el
valor inicial.
3. La última ejecución del bucle normalmente ocurre cuando la variable de control
es igual al valor final.
4. Cuando variable de control se incrementa en uno en cada iteración.
5. Es ilegal intentar modificar el valor de la variable de control, el valor inicial y el
valor final dentro del bucle.
6. El valor de la variable de control se queda indefinido cuando se termina el
bucle.

LA SENTENCIA WHILE

En esta estructura la condición es evaluada antes de la primera ejecución de secuencias


de sentencias, de este modo que si la condición es falsa, la secuencia de sentencias
nunca es ejecutada. La ejecución de estas sentencias continua mientras la expresión
booleana sea verdadera.

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.

Prof. Ana Gabela 25


Instituto Superior Juan XXIII Programación 1

Ejemplo:

Hacer un algoritmo que calcule la suma de los cuadrados de los primeros 100 números
enteros utilizando la estructura Mientras.

Sintaxis :

While ( expresión booleana ) do


Begin
Sentencia 1 ;
Sentencia 2 ;
.
Sentencia n ;  opcional
End ;
Ejemplo:

 Implementar el algoritmo anterior.

Program SumaMientras;

{$APPTYPE CONSOLE}

Prof. Ana Gabela 26


Instituto Superior Juan XXIII Programación 1

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

Se llama Repetir a la estructura algorítmica que se ejecuta un número definido de veces


hasta que la condición se torna verdadera:

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:

Prof. Ana Gabela 27


Instituto Superior Juan XXIII Programación 1

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 ;

Prof. Ana Gabela 28


Instituto Superior Juan XXIII Programación 1

Sentencia 2 ;
.
.
.
Sentencia n ;
Until ( expresión booleana ) ;

Observación:

- No es necesario colocar Begin y End, pues Repeat y Until, marcan el inicio y el


final del cuerpo del ciclo.
- No es necesario colocar el punto y coma antes del Until.

Ejemplo:

 Implementar el algoritmo anterior.

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.

La estructura While y la estructura Repeat, se conocen como Iterativas. Se usan cuando


no se conoce con anticipación el número de veces que se ejecutará la acción.

La diferencia entre ambas es que la condición se sitúa al principio (Mientras) o al final


(Repetir) de la secuencia de instrucciones. Entonces, en el primero, el bucle continúa
mientras la condición es verdadera (la cual se comprueba antes de ejecutar la acción) y
en el segundo, el bucle continúa hasta que la condición se hace verdadera (la condición
se comprueba después de ejecutar la acción, es decir, se ejecutará al menos una vez).

La estructura Desde/Para suele utilizarse cuando se conoce con anterioridad el número


de veces que se ejecutará la acción y se le conoce como Estructura Repetitiva en lugar
de iterativa, para diferenciarla de las dos anteriores.

 Técnicas de depuración de programas

1. Los bucles infinitos se deben evitar. Posibles causas de error son:

Prof. Ana Gabela 29


Instituto Superior Juan XXIII Programación 1

a. No tener valor inicial la variable de control del bucle antes de comenzar el


bucle.
b. No modificar el valor de la variable de control dentro del bucle, y por lo
tanto, la condición siempre se cumple y nunca sale del bucle.
c. Existe una sentencia vacía después de do:
While n< 10 do ;
; sentencia
vacía
d. En un bucle Repeat, la condición de salida nunca se cumple. Por ejemplo, si
x es una variable de tipo real:
X:=0;
Repeat
Writeln(x:4:2);
X:= x + 0.3;
Until x = 1.0;

Produce un bucle infinito ya que x vale sucesivamente 0.0,0.3, 0.6, 0.9 ….


En este ejemplo, al ser x real y utilizar una condición de igualdad, se podría
producir también un error.
e. Las condiciones de desigualdad pueden producir también bucles infinitos:
While Saldo < > 0.0 do

Puede ocurrir que el saldo de una cuenta corriente sea positivo o negativo,
pero nunca 0. Sería más seguro :

While Saldo > 0.0 do


2. Si se utiliza un bucle controlado por un valor centinela, recuerde proporcionar
en el programa un mensaje que indique al usuario qué valor debe introducir para
terminar (el centinela). Asegúrese que el el valor del centinela no se puede
confundir con un dato válido.
3. Si el cuerpo del bucle contiene más de una sentencia, debe encerrar las
sentencias entre begin y end. En caso contrario, sólo se repetirá la primera
sentencia y las sentencias restantes se ejecutarán cuando se sale del bucle. El
siguiente programa no termina ya que el paso que actualiza la variable de
control del bucle no se considera parte del cuerpo del bucle.

While Potencia <= 1000 do


Writeln(‘La siguiente potencia de N es:’, Potencia: 5);
Potencia := Potencia *N;

Se imprime continuamente el valor inicial de Potencia


4. Asegúrese de inicializar a cero las variable que utiliza de acumuladoras de una
suma repetida y a uno las que se usan en multiplicaciones repetidas.
5. Hay que revisar cuidadosamente las condiciones extremas o fronteras de las
expresiones lógicas para evitar que nos falte o sobre un elemento al contar.
6. La expresión lógica de While se debe cumplir la primera vez para que se pueda
ejecutar el bucle.
7. Un bucle repeat no se debe utilizar a menos que se tenga seguridad de que el
bucle siempre se ejecutar una vez como mínimo.
8. El valor de la variable de control del bucle for se queda indefinido al terminar el
bucle.

Prof. Ana Gabela 30


Instituto Superior Juan XXIII Programación 1

9. La depuración de bucles se facilita con el seguimiento de los valores de las


variables en el bucle con las opciones de Traza (F7) disponibles en el entorno.

Ejercicios resueltos:

1. Haga un programa que pida un número en base 2 y lo convierta a base 10.

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.

2. Elabore un programa que pida un número real x y un número natural n y calcule


n
xk
la suma  .
k 1 k!
Solución:

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;

Prof. Ana Gabela 31


Instituto Superior Juan XXIII Programación 1

end;
Write('La suma es ',sum:6:4);
Readln
End.

3. Haga un algoritmo que, dado x  R y  >0, halle el menor n  N tal que


n
xk

k  0 k!
 ex   .

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.

Prof. Ana Gabela 32


Instituto Superior Juan XXIII Programación 1

CADENAS Y CARACTERES ( String y Char )


CARACTERES:

Una variable del tipo Char , almacena un caracter que puede ser leído por el teclado .

Por ejemplo : ‘a’ , ‘2’ , ‘@’, etc..

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.

Existe una biyección entre el conjunto de caracteres y el conjunto {1 , 2 , … , 255}, a


tal biyección se le conoce como código ASCII .

Por ejemplo: @ = ALT + 64 (sólo en Windows).

Notar que: < caracter asociado > = CHR (<número entero entre 1 y 255>)

<código ASCII asociado, variable de tipo entero> = (<Variable de tipo caracter>)

CADENAS : Una cadena es una arreglo de caracteres .

Si A es una cadena : A = ‘H’ ‘O’ ‘L’ ‘A’

Por ejemplo : VAR A:= string

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.

PANTALLA DE SALIDA : Ingresa tu nombre :


Jose
Hola Jose ¿ Como estas ?

Prof. Ana Gabela 33


Instituto Superior Juan XXIII Programación 1

La longitud de una cadena

Se usara la función LENGHT para conocer la cantidad de caracteres de una cadena.

< longitud de la cadena > = LENGHT(< Variable de tipo String >)

Por ejemplo, dentro de un programa tendremos:

Cad := ‘algoritmo’; // Cad es una variable del tipo String


Lon := LENGHT (Cad); // Lon es una variable del tipo Integer

En este ejemplo, el valor de de “Lon” es 9.

Ejercicio: Para una cadena ingresada por el usuario, hacer un programa que devuelva
la longitud de la cadena.

Concatenación de cadenas

Para concatenar (unir) dos cadenas , se usa el operador ‘+’ .

USO: (<Cadena concanetada>) = < cadena 1 > + < cadena 2 >

Por ejemplo, si A, B y C son variables del tipo String:

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’

CONVERSIÓN DE CADENA A NUMERO

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.

Para convertir una cadena a entero: StrToInt


Para convertir una cadena a reales: StrToFloat
Para convertir un entero a cadena: IntToStr
Para convertir un real a cadena: FloatToStr

Sintaxis:

Prof. Ana Gabela 34


Instituto Superior Juan XXIII Programación 1

< 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.

2. Haga un programa que pida el ingreso de 3 números enteros y calcule su promedio.

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:',''));

Prof. Ana Gabela 35


Instituto Superior Juan XXIII Programación 1

m:=StrToInt(InputBox('Lectura de números','Ingrese el segundo número:',''));


p:=StrToInt(InputBox('Lectura de números','Ingrese el tercer número:',''));
prom:=(n+m+p)/3;
ShowMessage('El promedio de los números ingresados es '+FloatToStr(prom));
{ ShowMessage('El promedio de '+IntToStr(n)+', '+IntToStr(m)+' y '+IntToStr(p)+
' es '+FloatToStr(prom)); }
End.

3. Elabore un programa que calcule el factorial de un número ingresado por teclado.

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.

4. Haga un programa que verifique si un número ingresado es primo o no.

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.

5. Elabore un programa que pida el ingreso de un número en base 2 y lo convierta a


base 10.

Program change_of_base;
Uses

Prof. Ana Gabela 36


Instituto Superior Juan XXIII Programación 1

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.

6. Haga el programa anterior verificando si el número está ingresado en base 2 y


utilizando variables del tipo string.

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.

7. Elabore un programa que pida un número real x y un número natural n y calcule la


n
xk
suma  .
k 1 k!

Program suma_exp;
Uses SysUtils,Dialogs;
Var

Prof. Ana Gabela 37


Instituto Superior Juan XXIII Programación 1

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.

9. Elabore un programa que muestre los n primeros números términos de la sucesión


de Fibonacci, donde n es ingresado por el usuario.

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);

Prof. Ana Gabela 38


Instituto Superior Juan XXIII Programación 1

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.

11. Haga un programa que pida un número natural n y muestre: 1


1 2
1 2 3
. . .
1 2 3... n
Program triangulo;
Uses
SysUtils,Dialogs;
Var
i,n:integer; cad,str:string;
Begin
n:=strtoint(inputbox('','Ingrese un número natural',''));
cad:='1';
str:=cad;
for i:=2 to n do
begin
cad:=cad+#9+inttostr(i);
str:=str+#13+cad;

Prof. Ana Gabela 39


Instituto Superior Juan XXIII Programación 1

end;
showmessage(str);
End.

12. Haga un programa que pida un número natural n y muestre: 1


2
3
.
n
Program triangulo;
Uses
SysUtils,Dialogs;
Var
i,n:integer; cad,str:string;
Begin
n:=strtoint(inputbox('','Ingrese un número natural',''));
str:='1';
for i:=2 to n do
begin
cad:=cad+#9;
str:=str+#13+cad+inttostr(i);
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:

a3 + b3 = c3 + d3 = N, para algún N natural

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.

Prof. Ana Gabela 40


Instituto Superior Juan XXIII Programación 1

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:

Type nombre_vector=array[n..m] of tipo_variable;

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..

Veamos algunos ejemplos:

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

Prof. Ana Gabela 41


Instituto Superior Juan XXIII Programación 1

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..

Prof. Ana Gabela 42


Instituto Superior Juan XXIII Programación 1

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.

Prof. Ana Gabela 43


Instituto Superior Juan XXIII Programación 1

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.

Para definir una matriz (arreglo bidimensional) lo declararemos en la cabecera de la


siguiente manera:

Type nombre_matriz=array[1..n,1..m] of tipo_variable;

donde “nombre_matriz” es el nombre del arreglo bidimensional, “tipo_variable” puede


ser integer, real, char, etc. y “n” es el número máximo de filas del arreglo y “m” el
número máximo de columnas.

Veamos algunos ejemplos:

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.

Prof. Ana Gabela 44


Instituto Superior Juan XXIII Programación 1

Programa que pide el ingreso de cada elemento de una matriz cuadrada:

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.

Elabore un programa que pida el ingreso de dos matrices cuadradas, muéstrelas y


calcule su suma.

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.

Prof. Ana Gabela 45


Instituto Superior Juan XXIII Programación 1

Random es una función que devuelve un número real aleatorio entre 0 y 1.


a+(b-a) *random devuelve un número real aleatorio entre a y b.
Random(n) es una función que devuelve un número entero entre 0 y n-1.
Randomize sirve para no obtener los mismos números aleatorios (cambia de raiz).
Trunc(x) es una función que devuelve la parte entera del número real x.

Haga un programa que construya aleatoriamente dos arreglos unidimensionales: A y


B, tal que A contiene elementos reales del 0 al 10 con un solo decimal y B elementos
enteros del 1 al 10, además sume A y B.

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

A diferencia de los arreglos estáticos, su tamaño se define en tiempo de ejecución, es


decir al compilar el programa, usando la función setlength. La ventaja de usar arreglos
dinámicos es el ahorro de memoria.

Sintaxis:

Type
Arreglo_dinamico = array of Tipo_dato;
Var
Identificador = Arreglo_dinámico;

Begin
...
setlength(Identificador,tamaño);
...
End.

Prof. Ana Gabela 46


Instituto Superior Juan XXIII Programación 1

Observación: El índice de los elementos de un arreglo dinámico empieza de cero.

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.

Programa que genera aleatoriamente “n” números reales de –10 a 10.

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.

Programa que genera aleatoriamente los n primeros números naturales.

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.

Prof. Ana Gabela 47


Instituto Superior Juan XXIII Programación 1

Programa que genera aleatoriamente dos matrices y las suma.

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;

Prof. Ana Gabela 48


Instituto Superior Juan XXIII Programación 1

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]);

Prof. Ana Gabela 49


Instituto Superior Juan XXIII Programación 1

S2:='El vector B es'+#13+floattostr(B[0]);


for i:=1 to n-1 do
begin
A[i]:=A[i-1]+random(10*n)/10;
S1:=S1+#9+floattostr(A[i]);
end;
for i:=1 to m-1 do
begin
B[i]:=B[i-1]+random(10*m)/10;
S2:=S2+#9+floattostr(B[i]);
end;
A[n]:=B[m-1]; B[m]:=A[n-1];
i:=0; j:=0;
Setlength(C,n+m);
for k:=0 to n+m-1 do
begin
if A[i]<B[j] then
begin
C[k]:=A[i]; i:=i+1;
end
else
begin
C[k]:=b[j]; j:=j+1;
end;
cad:=cad+floattostr(C[k])+#9;
end;
showmessage(S1+#13+#13+S2+#13+#13+'El vector ordenado es'+#13+cad)
End.

Prof. Ana Gabela 50


Instituto Superior Juan XXIII Programación 1

PROCEDIMIENTOS Y FUNCIONES

Un procedimiento es un subprograma que puede interactuar con los datos y simplifica


los programas extensos. Su sintaxis es:

Procedure nombre_procedimiento(variables de entrada);

Una función es un procedimiento que puede devolver un valor (sólo una variable). Su
sintaxis es:

Function nombre_funcion(variables de entrada):variable_salida;

Las variables que se definen dentro de un procedimiento o función son llamadas


variables locales, mientras que las variables definidas en el programa principal son
llamadas variables globales.

Ejemplos:

1. Programa que calcula el factorial de un número ingresado por el usuario:

Program factorial;
Uses SysUtils,Dialogs;
Var n:integer;

Function fact(var n:integer): integer;


var i,f:integer;
begin
f:=1;
for i:=2 to n do
f:=f*i;
fact:=f;
end;

Begin // Inicio del programa principal


n:=strtoint(inputbox('','Ingrese un número natural menor que 20',''));
showmessage('El factorial de '+inttostr(n)+' es ' +inttostr(fact(n)));
End.

2. Programa que lee los elementos de un arreglo y luego los muestra:

Program leer_imprimir;
Uses SysUtils, Dialogs;
Type vector = array of real;
Var A:vector; n:integer;

Procedure leer(var A:vector; var n:integer);


var i:integer;
begin
n:=strtoint(inputbox('','Ingrese la dimensión del vector A:',''));
Setlength(A,n);

Prof. Ana Gabela 51


Instituto Superior Juan XXIII Programación 1

for i:=1 to n do
A[i]:=strtofloat(inputbox('A['+inttostr(i)+']','Ingrese',''));
end;

Procedure imprimir(var A:vector; var n:integer);


var s:string; i:integer;
begin
s:='El vector ingresado es'+#13;
for i:=1 to n do
s:=s+floattostr(A[i])+#9;
showmessage(s);
end;

Begin // Inicio del programa principal


leer(A,n); imprimir(A,n);
End.

3. Programa que evalúa un polinomio cuyos coeficientes están en una arreglo:

Program val_polinomio;
Uses SysUtils,Dialogs;
Type polinomio = array of real;
Var i,n:integer; x:real;
P:polinomio; S:string;

Function val(var P:polinomio; var x:real): real;


Var i:integer; v,fx:real;
begin
v:=P[0]; fx:=x;
for i:=1 to high(P) do
begin
v:=v+P[i]*fx;
fx:=fx*x;
end;
val:=v;
end;

Begin // Inicio del programa principal


n:=strtoint(inputbox('','Ingrese el grado del polinomio',''));
Setlength(P,n+1);
P[0]:=strtofloat(inputbox('','Ingrese el término independiente',''));
S:='El polinomio P es:'+#13+floattostr(P[0]);
for i:=1 to n do
begin
P[i]:=strtofloat(inputbox('','Ingrese el término de orden '+inttostr(i),''));
S:=S+'+'+floattostr(P[i])+'x^'+inttostr(i);
end;
x:=strtofloat(inputbox('','Ingrese el número real a evaluar',''));
Showmessage(S+#13+#13+'P('+floattostr(x)+') = '+floattostr(val(P,x)));
End.

Prof. Ana Gabela 52


Instituto Superior Juan XXIII Programación 1

Parámetros por referencia

Un parámetro de entrada es el valor de una variable de entrada de un procedimiento o


función y se pueden dividir en:

 Parámetros de entrada por valor, si solo adquiere el valor del parámetro ingresado
en el programa principal.

 Parámetros de entrada por referencia, si es permitida la modificación 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.

4. Programa que calcula el factorial de un número usando una función recursiva:

Program factorial_recursivo;
Uses SysUtils,Dialogs;
Var n:integer;

Function fact(n:integer): integer; // colocar y quitar “var” (ver cambios)


Var f:integer;
begin
f:=n;
if (n>1) then
begin
n:=n-1;
f:=f*fact(n);
end;
fact:=f; // fact:=n;
end;

Begin // Inicio del programa principal


n:=strtoint(inputbox('','Ingrese un número natural menor que 20',''));
showmessage('El factorial de ' + inttostr(n) + ' es '+inttostr(fact(n)));
End.

5. Programa que dice si un número es primo o no (mencionando quien lo divide).

Program primos;
Uses SysUtils,Dialogs;
Type v2=array[1..2] of integer;
var n:integer; p:v2;

Function primo(n:integer):v2; // parámetro de entrada por valor


var i,k:integer; r:real;
begin
r:=sqrt(n);
i:=1; k:=0;

Prof. Ana Gabela 53


Instituto Superior Juan XXIII Programación 1

while (i<r) and (k=0) do


begin
i:=i+1;
if (n mod i = 0) then
k:=1;
end;
primo[1]:=k; primo[2]:=i;
end;

Begin // Inicio del programa principal


n:=strtoint(inputbox('','Ingrese un número natural',''));
p:=primo(n);
if p[1]=0 then
showmessage(inttostr(n)+' si es primo')
else
showmessage(inttostr(n)+' no es primo, pues '+inttostr(p[2])+' lo divide')
End.

6. Programa que calcula el producto de dos matrices A   m  n y B   n  p generados


aleatoriamente.

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;

{Ahora a rellenar las matrices aleatoriamente}


for i:=1 to m do
for j:=1 to n do
A[i,j]:=random(11)-5;
for i:=1 to n do
for j:=1 to p do
B[i,j]:=random(11)-5;

{Primero hacemos 0 los valores de C}


for i:=1 to m do
for j:=1 to p do
C[i,j]:=0;

{Ahora, a calcular C=AB}


for i:=1 to m do
for j:=1 to p do
for k:=1 to n do
C[i,j]:=C[i,j]+A[i,k]*B[k,j];

Prof. Ana Gabela 54


Instituto Superior Juan XXIII Programación 1

{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.

Ejercicio: Utilice procedimientos y funciones para el programa anterior mencionado


que tipo de parámetros de entrada esta utilizando.

Prof. Ana Gabela 55


Instituto Superior Juan XXIII Programación 1

TÉCNICAS DE ORDENACIÓN

Definamos el problema de ordenación:

Dados n números reales: x1 , x2 , x3 , … , xn colocarlos en orden creciente.

Veremos algunas técnicas de ordenación como los métodos de selección, inserción y


burbuja.

ORDENACIÓN POR SELECCIÓN

Algoritmo Ordenación por selección


Variables
i, j, n, m: enteros
x: arreglo de reales
Inicio
Leer x
n = tamaño de x
Desde i = 1 hasta i = n-1 hacer
m=i
Desde j = i+1 hasta j = n hacer
Si xj < xm entonces m = j
Fin_desde
Intercambiar xi por xm
Fin_desde
Fin

Implementación del método de ordenación por selección:

Program ordenacion_seleccion;

Uses SysUtils,Dialogs;
Type vector=array[1..20] of real;
var A:vector; n:integer; cad:string;

Procedure leer(var A:vector; var n:integer);


var i:integer;
begin
n:=strtoint(inputbox('','Ingrese la dimensión del vector A:',''));
for i:=1 to n do
A[i]:=strtofloat(inputbox('A['+inttostr(i)+']','Ingrese',''));
end;

Procedure intercambiar(var a,b:real);


var temp:real;
begin
temp:=a;
a:=b;
b:=temp;
end;

Prof. Ana Gabela 56


Instituto Superior Juan XXIII Programación 1

Function s(A:vector; n:integer):string;


var cad:string; i:integer;
begin
for i:=1 to n do
cad:=cad+floattostr(A[i])+#9;
s:=cad+#13;
end;

Function selec(A:vector; n:integer):vector;


var i,j,m:integer;
begin
for i:=1 to n-1 do
begin
m:=i;
for j:=i+1 to n do
if (A[j]<A[m]) then
m:=j;
intercambiar(A[i],A[m]);
end;
selec:=A;
end;

Begin // Inicio del programa principal


leer(A,n);
cad:='El vector ingresado es'+#13+s(A,n)+#13;
showmessage(cad+'Ordenado por el método de selección es'+#13+s(selec(A,n),n));
End.

ORDENACIÓN POR INSERCIÓN

Este algoritmo encuentra la posición correcta para xi , en el segmento x1 , x2 ,…,xi-1 y lo


coloca allí, es decir, lo inserta.

Algoritmo Ordenación por Inserción


Variables
i, j, n: enteros v: real
x : arreglo de reales
Inicio
Desde i = 2 hasta i = n hacer
v = xi
j=1
mientras xj-1 > v hacer
xj = xj-1
xj = v
fin_mientras
fin_desde
Fin

Veamos la implementación del método de inserción (con “inser” como un


procedimiento o función).

Prof. Ana Gabela 57


Instituto Superior Juan XXIII Programación 1

Program ordenacion_insercion;

Uses SysUtils,Dialogs;
Type vector=array[1..20] of real;
var A,B:vector; n:integer; cad:string;

Procedure leer(var A:vector; n:integer);


var i:integer;
begin
for i:=1 to n do
A[i]:=strtofloat(inputbox('A['+inttostr(i)+']','Ingrese',''));
end;

Function s(A:vector; n:integer):string;


var cad:string; i:integer;
begin
for i:=1 to n do
cad:=cad+floattostr(A[i])+#9;
s:=cad+#13;
end;

Procedure inser(var A:vector; n:integer); // Function inser(A:vector; n:integer):vector;


var i,j:integer; v:real;
begin
for i:=2 to n do
begin
v:=A[i]; j:=i;
while (j>1) and (A[j-1]>v) do
begin
A[j]:=A[j-1];
j:=j-1;
end;
A[j]:=v;
end;
// incluir “inser:=A;” en el caso de utilizar “inser” como una función
end;

Begin // Inicio del programa principal


n:=strtoint(inputbox('','Ingrese la dimensión del vector A:',''));
leer(A,n);
cad:='El vector ingresado es'+#13+s(A,n)+#13;
inser(A,n);
showmessage(cad+'El vector ordenado por el método de inserción es'+#13+s(A,n));
// Incluir lo siguiente si se utiliza “inser” como función:
{showmessage(cad + 'El vector ordenado por el método de inserción es' + #13 +
s(inser(A,n),n));}
End.

Prof. Ana Gabela 58


Instituto Superior Juan XXIII Programación 1

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.

El siguiente programa dirá si aprobó o desaprobó un alumno en el curso indicado.

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.

Prof. Ana Gabela 59


Instituto Superior Juan XXIII Programación 1

El programa a continuación es la solución de la pregunta 13 de la dirigida 5:

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;

Begin // Inicio del programa principal


leer(auto);
if (auto.anho>=2000) and (auto.anho<=2005) then
begin
case auto.marca of
1:begin precio:=12000; marc:='Tayet'; end;
2:begin precio:=15000; marc:='Sumari'; end;
3:begin precio:=18000; marc:='Macros'; end;
4:begin precio:=20000; marc:='Futura'; end;
end;
precio:=precio-(2005-auto.anho)*250;
if (auto.color='rojo') or (auto.color='negro') then precio:=precio+100
else if (auto.color<>'blanco') then precio:=precio+50;
cad:=cad+ 'El precio de un '+marc+' del año '+inttostr(auto.anho)+
' y de color '+auto.color+' es de '+inttostr(precio)+' dólares.';
end
else cad:='Lo sentimos pero no tenemos un auto con esas características.';
showmessage(cad);
End.

El siguiente programa muestra datos acerca de los Egresados de la Facultad de Ciencias:

Program registros_egresados;
Uses SysUtils, dialogs;
Type Alumnos = Record
Nombre : String;
Especialidad : String; // N1,N2,N3 ó N5
Ponderado : Byte;
End;

Prof. Ana Gabela 60


Instituto Superior Juan XXIII Programación 1

Promocion = Array [1..100] of Alumnos; vector = Array [1..100] of byte;


Var
promo: promocion; cad: string; op:char; N1,N2,N3,N5:vector; i,j1,j2,j3,j5,n: integer;

Function print(var Alm:Alumnos):string;


begin
print := #13 + alm.nombre + #9 + alm.especialidad + #9 + inttostr(alm.Ponderado);
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.

Prof. Ana Gabela 61


Instituto Superior Juan XXIII Programación 1

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;

De esta manera, en Amigo_Cromos.Tengui[20] guardaríamos si el amigo tiene o no el


cromo 20, y en Amigo_Cromos.Colecs.SonGoku pondríamos TRUE o FALSE
dependiendo de si tiene hecha la colección de cromos del Goku o no.

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,1.1 hacer el progra,a siguiente:

-1
2
-3

(-1)n*n

Prof. Ana Gabela 62


Instituto Superior Juan XXIII Programación 1

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.

Prof. Ana Gabela 63

S-ar putea să vă placă și