Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PROGRAMACIÓN DIGITAL 10
Escuela Básica
Facultad de Ingeniería
Universidad de Los Andes
Prof. Armando Borrero Molina
Marzo 2011
CONCEPTOS BÁSICOS
On désigne par algorithmique l‟ensemble des activités logiques qui relèvent des algorithmes ; en
particulier, en informatique, cette discipline désigne l'ensemble des règles et des techniques qui
sont impliquées dans la définition et la conception des algorithmes. Le mot vient du nom du
mathématicien Al Khuwarizmi (latinisé au Moyen Âge en Algoritmi), qui, au IXe siècle écrivit le
premier ouvrage systématique sur la solution des équations linéaires et quadratiques. Dans le cas
général, l‟algorithmique s‟effectue au moyen de calculs. Il est parfois fait usage du mot algorithmie,
bien que ce dernier ne figure pas dans la plupart des dictionnaires.
Información Automática
Funciones:
+ Desarrollo de nuevas máquinas
+ Desarrollo de nuevos métodos de trabajo
+ Construcción de aplicaciones informáticas
+ Mejora de los nuevos métodos y aplicaciones existentes.
Computador(a):
Concepto:
Memoria Auxiliar
CPU
Procesador
Unidad de Control
+
Dispositivos Unidad Aritmético - Lógica Dispositivos
de Entrada de Salida
Memoria Principal
Lenguajes de Programación.
Los programas interpretados suelen ser más lentos que los compilados, pero los
intérpretes son más flexibles como entornos de programación y depuración.
Lenguajes Intérpretes
Datos
Lógicos: es tipo de dato llamado lógico tiene como característica principal que
únicamente puede tomar dos valores: Verdadero (.V.) o Falso (.F.). Ejemplo:
HorasExtra = .V.
Variables
La variable es un dato cuyo valor puede ser modificado durante la ejecución del
programa. Una variable es una dirección de memoria y puede verse como una
pequeña caja donde se pueden guardar valores. Estos pueden ser de cualquiera
de los tipos vistos anteriormente (numéricos, alfabéticos, alfanuméricos, etc.).
Cuando se hace mención a una variable, se está refiriendo a una pequeña zona
de la memoria principal (conjunto de posiciones contiguas) donde se va a alojar un
valor. Si este valor se modifica en algún momento del programa, el nuevo valor
sustituirá al que existía anteriormente. Al conjunto de posiciones contiguas de
memoria se le da un nombre para poder identificarlo (nombre de la variable) y se
define su tipo (clase de caracteres que puede contener).
Expresiones Aritméticas
Operadores aritméticos
Los operadores aritméticos son de la siguiente manera:
Operador Nombre Tipo Descripción
+ Operador de adición (o suma) Binario Suma dos valores
- Operador de substracción (o resta) Binario Resta dos valores
- Operador de inversión Unario Proporciona el valor opuesto de un valor
* Operador de multiplicación Binario Multiplica dos valores
/ Operador de división Binario Divide dos valores
Proporciona el resultado entero de la división del
Div Operador de división entera Binario operando de la izquierda entre el operando de la
derecha
Da el historial completo de una división de dos
Mod Operador de módulo Binario
números
Uso de los paréntesis
Los operadores aritméticos se usan en un orden predefinido o de prioridad. Para
modificar la prioridad predefinida se deben usar paréntesis. Esta tabla muestra la
prioridad de los operadores:
Operadores Relacionales
= Igual a
<> Diferente; No igual a
> Mayor que
< Menor que
>= Mayor o igual que
<= Menor o igual que
Operadores lógicos
Programas
Concepto...
METODOLOGÍA PARA LA CONSTRUCCIÓN DE PROGRAMAS
Una versión simplificada del modelo en cascada comprende las etapas siguientes:
1) Formulación y Análisis del Problema
2) Diseño del programa
3) Codificación y Ejecución
4) Pruebas y Depuración.
Procesos: Se refiere a las operaciones o cálculos que deben realizarse con los
datos, para obtener la solución del problema planteado. También deben
especificarse las variables que van a contener los resultados de las operaciones
realizadas y cuales son sus tipos respectivos; así como también las restricciones a
tomar en cuenta, (si existe alguna).
Salidas: Se debe indicar en esta sección la manera como se desea presentar los
resultados obtenidos con las transformaciones indicadas en los Procesos. ¿Qué
comentarios se van a incluir? ¿De qué manera se van a presentar?
Recomendaciones:
- En las salidas, se deben colocar preferiblemente, los textos tal como se desea
que aparezcan posteriormente en pantalla, o mejor dicho, de la manera más
parecida a como se escribirán en el programa codificado. Esto es, los comentarios
encerrados entre comillas, con las variables intercaladas, separados por comas.
Estructuras de Control
Señalan o indican el flujo de control a seguir por las instrucciones que conforman
el programa. Son estructuras que utilizamos normalmente en nuestra vida diaria,
para resolver cualquier problema o ante cualquier situación. Por ejemplo, para
vestirnos seguimos una secuencia, para comer, para cambiar un caucho, etc.
Vamos a formalizar aquí las estructuras para utilizarlas en la construcción de
programas, para que nos sirvan en la resolución de problemas susceptibles de ser
resueltos con una computadora.
ALGORITMOS
Introducción
2. Algoritmo:
Definición:
“Es un conjunto finito de pasos en secuencia, que indican cómo se
resuelve un determinado problema”.
- Cada paso se inicia con un verbo, que indica sin lugar a dudas, sin
ambigüedades, la acción a realizar en dicho paso.
- Se utilizan las estructuras de control establecidas (Secuenciales, de Decisión y
de Repetición).
- Un Algoritmo puede tener cero ó más entradas y debe tener al menos una
salida y ésta debe ser tangible.
- Debe ser sencillo, legible.
- Modular
- Correcto.
DIAGRAMAS DE FLUJO
Función Figura
Conectores
Llamadas a subprogramas
Todas las figuras están unidas por flechas, que indican el flujo de control del
programa.
Estructuras Secuenciales
PROBLEMAS PROPUESTOS
l a
V=l*a*h
h A = 2 * (l * a + l * h + a * h)
6.- Dados tres valores A, B y C, intercambiar ente sí los valores de esas variables,
de tal manera que ninguna de ellas conserve su valor inicial.
7.- La tarifa que cobra una compañía telefónica por las llamadas locales que duran
hasta 3 minutos es de 250 Bs. El valor del minuto adicional es 90 Bs. Realizar
un programa que calcule el monto a pagar por llamada, si se conoce el tiempo
total por llamada.
8.- En un espectáculo público, el costo de las entradas es Bs. 15.000 niños y Bs.
30.000 los adultos. Elaborar un programa para calcular:
- Número total de asistentes.
- Monto recaudado por la asistencia de niños.
- Monto recaudado por la asistencia de adultos.
- Monto total recaudado.
15.- Cálculo del bono que recibirá un vendedor, sabiendo que se le paga el 13%
de las ventas realizadas.
22.- Calcular el precio de un paquete turístico, sabiendo que se pagan 500 Bs.
por cada kilómetro recorrido y 30.000 Bs. por cada noche de estadía.
23.- Se sabe que una empresa realizó ventas netas de 235.000 Bs. durante una
semana, en las cuales participaron tres vendedores. Se desea calcular el
sueldo de cada vendedor, sabiendo que los vendedores realizaron las
siguientes ventas: el primero vendió un tercio de las ventas netas el segundo la
tercera parte y el tercero el resto. Además a cada vendedor se le paga el 15%
del total de las ventas netas realizadas.
ESTRUCTURAS DE DECISIÓN
Como su nombre lo indica, son estructuras en las cuales se toma una decisión, de
acuerdo a la evaluación de una determinada condición construida en base a una
expresión lógica. Tienen una entrada y dos posibles salidas, de acuerdo al valor
que toma la condición establecida. En ellas se bifurca el flujo de control del
programa. También se les conoce como Estructuras Selectivas o Estructuras de
Selección, pues se selecciona un camino a seguir, de acuerdo al resultado de la
evaluación de una condición o expresión lógica.
Aux A
Nota: En este programa se utiliza el concepto
A B
de variable auxiliar, (la variable denominada
B Aux Aux), para intercambiar los valores de las
variables A y B, de tal manera que se evite la
pérdida de uno de los valores contenidos en
„Los valores las variables A o B. Pues como es bien sabido,
son‟, A,‟ y „,B la operación de asignación es destructiva, y al
asignar un valor a una variable, se pierde el
valor anteriormente contenido en la misma.
Fin
A B Aux
Ejemplo 1: Codificación en Turbo Pascal
Program Intercambio;
{Programa que intercambia los valores de dos números A y B si no están en orden
creciente y no hace nada si están ordenados}
Uses
Crt, DOS;
Var
A, B, Aux : Integer;
Begin
Writeln ('Introduzca los dos valores');
Readln (A,B);
If (A>B) then
Begin
Aux := A;
A := B;
B := Aux
End;
Writeln ('Los valores introducidos son ', A, ' y ', B);
Readln
End.
Estructuras de Decisión Doble:
Si Condición
Entonces
Sentencia 1
De lo contrario
Sentencia 2
{Fin Si}
Ejemplo 1: Programa para determinar si un número dado, introducido por teclado,
es par o impar.
Program Par;
{Programa para determinar si un numero n dado, es par o impar}
Uses
Crt;
Var
N : Integer;
Begin
Clrscr;
Writeln ('Introduzca un numero "n" diferente de cero');
Readln (N);
If (N mod 2 = 0)
Then
Writeln ('El numero ', n, ' es par ')
Else
Writeln ('El numero ', n, ' es impar ');
Readln
End.
Si 1 Si 1
Si 2
Si 3
Si 3
Si 2
Fin Si 3
Fin Si 3
Si 4
Fin Si 4
Fin Si 2 Si 4
Fin Si 1 Fin Si 1
Fin Si 2
Fin Si 4
Anidamiento Permitido Anidamiento No Permitido
Si 1 Si 1
Si 2
Si 3
Si 3 Si 2
Fin Si 3
Fin Si 3
Si 4
Fin Si 4 Si 4
Fin Si 2 Fin Si 1
Fin Si 1 Fin Si 2
Fin Si 4
Ejemplo 1: Programa para determinar el mayor de tres números cualesquiera
introducidos por teclado
Program Mayor;
{Programa que encuentra el mayor de tres enteros introducidos por teclado}
Uses
Crt;
Var
A, B, C : Integer;
Elmayor : Integer;
Begin
Clrscr;
Writeln ('Introduzca los tres números enteros');
Readln (A,B,C);
{Determinar el mayor}
If (A > B)
Then
If (A > C)
Then
Elmayor := A
Else
Elmayor := C
Else
If (B > C)
Then
Elmayor := B
Else
Elmayor := C;
Writeln ('El numero mayor es ', Elmayor);
Readln
End.
También se pueden diferenciar las estructuras de decisión de acuerdo al tipo de
condición, en Simples y Compuestas.
3.- El cuadrante en el cual se ubica una línea dibujada desde el origen está
determinado por el ángulo que la línea forma con el eje positivo de x en la
siguiente forma:
6.- Se desea saber si un año leído del teclado es bisiesto. (Cada año divisible
por 4 es bisiesto, con excepción de los años que finalizan en 00 - esto es,
divisible por 100 y no divisible por 400).
8.- Los empleados de una fábrica trabajan en dos turnos: diurno y nocturno.
Se desea calcular el sueldo diario de acuerdo a los siguientes puntos:
a) La tarifa de las horas diurnas es de Bs. 500.
b) La tarifa de las horas nocturnas es de Bs. 800.
c) En caso de ser domingo, la tarifa se incrementará en 200 Bs. el turno
diurno y 300 Bs. el turno nocturno.
Se ingresa por teclado el número de horas trabajadas por turno y el día.
9.- Averiguar si, dados dos números leídos del teclado, uno es divisor del otro.
10.- Se introduce por teclado la hora del día en horas, minutos y segundos.
Se desea escribir la hora correspondiente al segundo siguiente (ejemplo, 3h
45m 24s, un segundo después 3h 45m 25s).
12.- Escribir un programa que acepte dos números del teclado, calcule su
suma e imprima mensajes de acuerdo al resultado obtenido:
Suma <= 50
Suma > 50 y <= 100
Suma > 100 y <= 200
Suma > 200
Las estructuras de Control repetitivas son aquellas en las que una sentencia o
grupo de sentencias se repite muchas veces. Este conjunto de sentencias se
denomina bucle.
DISEÑO DE BUCLES
Para diseñar bucles es necesario tener en cuenta una serie de reglas, con el fin de
de evitar al máximo los errores, minimizar los errores.
Reglas de Funcionamiento
PSEUDOCÓDIGO
A aquellas estructuras cuyo cuerpo del bucle está conformado por una sola
sentencia, se les identifica como Sentencias Simples. A las sentencias cuyo
cuerpo del bucle contiene más de una sentencia, se les denomina Sentencias
Compuestas.
Nota: Las frases encerradas entre llaves, “{...}” deben ser interpretadas como comentarios.
Usados para aclarar. No representan instrucciones o sentencias ejecutables, no realizan
ninguna acción.
a.- Inicialización de la variable de control del bucle: Antes del comienzo del bucle,
se debe dar un valor inicial a la variable Contador, que es la variable que
controla el número de repeticiones. Si en el cuerpo del bucle se utiliza una
variable acumulador, ésta también deberá ser inicializada con anterioridad.
Como su nombre lo indica, una variable acumulador permite acumular valores.
c.- Incremento del valor de la variable de control del bucle: Cada vez que el cuerpo
de un bucle se ejecuta, el valor del contador se incrementa (normalmente en
uno (1)).
J=0 J=0
Mientras J < 5 Repita Mientras J <= 5 Repita
Sentencias Sentencias
: :
J=J+1 J=J+1
Fin Mientras Fin Mientras
J=1 J=1
Mientras J < 5 Repita Mientras J <= 5 Repita
Sentencias Sentencias
: :
J=J+1 J=J+1
Fin Mientras Fin Mientras
Incremento
V
Sentencias
:
Cuenta = Cuenta + 1
Ejemplo I.1.2: Calcular la suma de N números enteros leídos del teclado.
Inicio 1- Inicio
2- Escribir („¿Cuantos números desea sumar?‟)
3- Leer (N)
¿Cuántos
4- Asignar Contador = 0 {Inicialización de Variables}
números?
5- Asignar Suma = 0
6- Mientras Contador < N Repita
N 6.1- Escribir („Introduzca Sumando‟)
6.2- Leer (Num)
6.3- Hacer Suma = Suma + Num {Incrementar Acumulador}
6.4- Asignar Contador = Contador + 1 {Incrementar Contador}
Contador = 0 {Fin Repita Mientras}
Suma = 0 7- Escribir („La suma de los,‟N,‟números es:„, Suma)
8- Fin
F
Contador < N
V
Introduzca
Sumando
Num
Inicio
I.2.- Controlado por Pregunta
Sumando?
¿Número?
Recomendaciones:
- Deben colocarse todas las posibles respuestas
en mayúsculas y minúsculas o en
Num
combinaciones.
- Deben solicitarse respuestas cortas para
disminuir el número de combinaciones posibles.
Prod = Prod * Num - No es absolutamente necesario inicializar la
variable que contendrá la respuesta, sin embargo
es recomendable asignarle un valor inicial, (Resp
Continuar en este caso) para asegurar el ingreso al bucle.
S/N?
Resp
Suma
Fin
I.3.- Controlado por Valor Centinela
Num >= 0 F
Sumando?
Negativo
Detener
Num
Suma
Fin
I.4.- Controlado por Condición Inherente
Ejemplo I.4.1: Para continuar con un ejemplo similar a los mostrados en los
controles anteriores, se propone realizar un programa para calcular la suma de N
números introducidos por teclado, pero en este caso, se debe detener las
iteraciones cuando el valor de la suma sea superior un número cualquiera dado,
(10 en este caso).
Inicio
1.- Inicio
2.- Asignar Suma = 0 {Inicialización}
Suma = 0 3.- Mientras Suma < 10 Repita
3.1.- Escribir „Introduzca Sumando‟
3.2.- Leer Num
3.3.- Calcular Suma = Suma + Num
F {Fin Repita Mientras}
Suma < 10 4.- Escribir „La suma es „, Suma
5.- Fin
V
¿Sumando?
Num
Suma
Fin
Ejercicio I.4.2: Hacer un programa que lea un capital C y que calcule en cuántos
meses se duplica, si lo colocamos a un interés compuesto del X % mensual.
Inicio
1.- Inicio
2.- Inicializar Meses = 0
3.- Escribir ('Cual es el Capital a invertir?')
Meses = 0 4.- Leer (Capital_Ini)
5.- Escribir ('A que interés lo desea colocar?')
6.- Leer (Interes)
Capital a 7.- Calcular Capital_Fin = 2 * Capital_Ini
invertir? 8.- Mientras (Capital_Ini < Capital_Fin) Repita
8.1.- Calcular Capital_Ini = Capital_Ini*(1+Interes/100)
8.2.- Incrementar Meses = Meses + 1
Capital_Ini {Fin Repita Mientras}
9.- Escribir ('El capital se duplica a los ', Meses, ' meses');
10.- Fin
¿Interés?
Interes
Capital_Fin = Capital_Ini * 2
No
Capital_Ini < Capital_Fin
Si
Capital_Ini = Capital_Ini * (1 + Interes/100)
Meses = Meses + 1
„Capital se
duplica en „,
Meses
Fin
I.5.- Controlado por Interruptor o Bandera
Ejemplo I.5.1: Programa que verifica si un número introducido por teclado es primo
1.- Inicio
2.- Asignar a Primo = Verdadero
3.- Asignar a Divisor = 2
4.- Escribir „Introduzca un número entero > 0‟
5.- Leer (Numero)
6.- Mientras ((Divisor < Numero) y Primo) Repita
6.1.- Si Numero Mod Divisor = 0
Entonces
6.1.1.- Asignar a Primo = Falso
{Fin del Si}
6.2.- Asignar a Divisor = Divisor + 1
{Fin del Repita Mientras}
7.- Si Primo = Verdadero
Entonces
7.1.- Escribir (Numero,‟ es Primo‟)
De lo Contrario
7.2.- Escribir (Numero,‟ No es Primo‟)
{Fin del Si}
8.- Fin
Ejercicios Resueltos
Ejercicio I.1: Calcular cuántos de los N números enteros leídos del teclado, son
negativos, positivos o ceros.
¿Número?
Si
Num < 0 ContN = ContN + 1
No
Si
Num = 0 ContC = ContC + 1
No
ContP = ContP + 1
ContN
ContC
ContP
Fin
1.- Inicio
2.- Escribir („¿Cuantos números desea introducir?‟)
3.- Leer (N)
4.- Inicializar Contador = 0
5.- Inicializar ContN = 0 {Contador de negativos}
6.- Inicializar ContC = 0 {Contador de ceros}
7.- Inicializar ContP = 0 {Contador de positivos}
8.- Mientras Contador < N Repita
6.1.- Escribir („Introduzca número‟)
6.2.- Leer (Num)
6.3.- Comparar Si Num < 0
Entonces
6.3.1.- Incrementar ContN = ContN + 1
De lo contrario
6.3.2.- Comparar Si Num = 0
Entonces
6.3.2.1.- Incrementar ContC = ContC + 1
De lo contrario
6.3.2.2.- Incrementar ContP = ContP + 1
6.4.- Incrementar Contador = Contador + 1
{Fin Repita Mientras}
7.- Escribir („Negativos:‟,ContN,‟Ceros:‟,ContC,‟Positivos:„, ContP)
8.- Fin
Ejercicio I.2: Hacer un programa que lea N notas del teclado y determine cuál es la
mayor.
V
Nota: Se le asigna el menor valor posible a la
¿Nota? variable Mayor (cero en este caso), para
asegurarse de que cualquier nota que se
introduzca por teclado sea mayor que ésta nota
inicial.
Nota En caso de involucrarse en el problema a valores
negativos u otros, se le asignará al valor inicial, el
valor más negativo posible; siempre opuesto al
F común de los valores a ser introducidos por
Nota > Mayor teclado.
V
Mayor = Nota
Cont = Cont + 1
„La mayor
nota es‟,
Mayor
Fin
Ejercicio I.3: En un año X, (introducido por teclado), la ciudad A tiene 3.5 millones
de habitantes y una tasa de crecimiento del 7% anual y la ciudad B tiene 5
millones y una tasa de crecimiento del 5% anual. Si el crecimiento poblacional se
mantiene constante en las dos ciudades, hacer un programa que calcule en qué
año (o cuántos años después), la población de la ciudad A es mayor que la de la
ciudad B.
Cont = Año
No
A <= B
Si
A = A * 1.07
B = B * 1.05
Cont = Cont + 1
„Ciudad A >
Ciudad B en el
Año „, Cont
Fin
Ejercicio I.4: Hacer un programa que lea un número N, entero y positivo, de
cualquier número de dígitos, que calcule la suma de sus dígitos y que la imprima
en pantalla, junto con el número leído. Ej.: n = 53471, entonces la suma de sus
dígitos es suma = 5 + 3 + 4 + 7 + 1 =20.
F
N<>0
V
D = N Div 10
R = N - D * 10
Suma = Suma + R
N=D
Fin
I.a.- Codificación en Turbo Pascal
Program Sumar_Naturales;
{Programa que calcula la suma de N enteros leídos del teclado}
Uses
Crt;
Var
N, Contador, Num, Suma : Integer;
Begin
Clrscr;
Writeln(„Cuantos números desea sumar?‟);
Readln(N);
Contador := 0;
Suma:= 0;
While Contador < N Do
Begin
Writeln(„Introduzca Sumando‟);
Readln(Num);
Suma := Suma + Num;
Contador := Contador + 1
End;
Writeln(„La suma de los,‟N,‟números es : „, Suma);
Readln
End.
Ejemplo I.1.3: Calcular cuántos de los N números enteros leídos del teclado, son
negativos, positivos o ceros.
Program Cuenta_Numeros;
(* Programa que cuenta cuantos números positivos, ceros y negativos *)
(* se introducen por teclado *)
Uses
Crt;
Var
ContN, ContC, ContP, N, Cont, X : Integer;
Begin
Clrscr;
ContN := 0; {Contador de negativos}
ContC := 0; {Contador de ceros}
ContP := 0; {Contador de positivos}
Cont := 0;
Writeln ('Cuantos números va a introducir?');
Readln (N);
While Cont < N Do
Begin
Writeln ('Introduzca número');
Readln (X);
If X < 0
Then
ContN := ContN + 1
Else
If X = 0
Then
ContC := ContC + 1
Else
ContP := ContP + 1;
Cont := Cont + 1
End;
Writeln ('Números introducidos ', N,' Negativos ', CN,' Cero ', CC, ' Positivos',
CP);
Readln
End.
Ejemplo I.1.4: Hacer un programa que lea N notas del teclado y determine cuál es
la mayor.
Program Nota_Alta;
{Programa que determina cual es la mayor de un grupo de notas introducidas por
teclado}
Uses
Crt;
Var
X, CN, Mayor, Cont : Integer;
Begin
Clrscr;
Cont := 0;
Mayor := 0;
Writeln ('¿Cuantas notas desea introducir?');
Readln (N);
While Cont < N Do
Begin
Writeln ('Introduzca nota');
Readln (Nota);
If Nota > Mayor
Then
Mayor := Nota;
Cont := Cont + 1;
End;
Writeln('La mayor de las ', CN, ' notas es ', Mayor);
Readln
End.
Ejemplo I.2.1: Realizar un programa para calcular el producto de N números
introducidos por teclado.
Program Producto;
{Programa para calcular el producto de N números introducidos por teclado}
Uses
Crt;
Var
Prod, Num : Integer;
Resp : Char;
Begin
Clrscr;
Writeln („Cuantos factores tiene el producto?‟);
Readln (Num);
Prod := 1;
Resp := ´s‟;
While (Resp = „s‟) or (Resp = „S‟) Do
Begin
Writeln („Introduzca número‟);
Readln (Num);
Prod := Prod * Num;
Writeln („¿Desea continuar?‟);
Readln (Resp)
End;
Writeln („El producto de los „, N,‟ números es „, Prod);
Readln
End.
Ejemplo I.3.1: Calcular la suma de N números introducidos por teclado.
Program Suma_Centinela;
{Programa para Calcular la suma de N números introducidos por teclado.}
Uses
Crt;
Var
Suma, Num : Integer;
Begin
Clrscr;
Suma := 0;
Writeln („Introduzca Sumando‟);
Readln (Num);
While Num >= 0 Do
Begin
Suma := Suma + Num;
Writeln („Introduzca Sumando‟);
Writeln („Valor Negativo para detener‟);
Readln (Num);
End;
Writeln („El resultado de la suma es‟, Suma);
Readln
End,
Ejemplo I.4.1: Realizar un programa para calcular la suma de N números
introducidos por teclado, pero en este caso, se debe detener las iteraciones
cuando el valor de la suma sea superior un número cualquiera dado, (10 en este
caso).
Program Suma_Inherente;
{ …}
Uses
Crt;
Var
Suma, Num : Integer;
Begin
Clrscr;
Suma := o;
While Suma < 10 Do
Begin
Writeln („Introduzca Sumando‟);
Readln (Num);
Suma := Suma + Num;
End;
Writeln („La suma es „, Suma);
Readln
End.
Ejercicio I.4.2: Hacer un programa que lea un capital C y que calcule en cuántos
meses se duplica, si lo colocamos a un interés compuesto del X % mensual.
Program Capital;
{Programa que calcula en cuantos meses se duplica un capital si se coloca a un
interés compuesto de X % mensual}
Uses
Crt, Dos;
Var
Meses : Integer;
Capital_Ini, Capital_Fin, Interes : Real;
Begin
Meses := 0;
Writeln ('Cuál es el capital a invertir?');
Readln (Capital_Ini);
Writeln ('A que interés desea colocarlo?');
Readln (Interes);
Capital_Fin := 2 * Capital_Ini;
While (Capital_Ini < Capital_Fin) Do
Begin
Capital_Ini := Capital_Ini * (1 + Interesl/100);
Meses := Meses + 1
End;
Writeln ('El capital se duplica a los ', Meses, ' meses');
Readln
End.
Ejemplo I.4.3: En un año X, (introducido por teclado), la ciudad A tiene 3.5 millones
de habitantes y una tasa de crecimiento del 7% anual y la ciudad B tiene 5
millones y una tasa de crecimiento del 5% anual. Si el crecimiento poblacional se
mantiene constante en las dos ciudades, hacer un programa que calcule en qué
año (o cuántos años después), la población de la ciudad A es mayor que la de la
ciudad B.
Program Ciudades;
{....}
Uses
Crt;
Var
A, B : Real;
Anio, Cont : Integer;
Begin
A:= 3.5;
B := 5.0;
Writeln('Año de inicio? ');
Readln (Anio);
Cont := 1;
While (A <= B) Do
Begin
A := A * 1.07;
B := B * 1.05;
Cont := Cont + 1
End;
Writeln ('La población de A será > B ', Cont,' años después, en el año ', Anio + Cont);
Readln
End.
Ejercicio I.4.4: Hacer un programa que lea un número N, entero y positivo, de
cualquier número de dígitos, que calcule la suma de sus dígitos y que la imprima
en pantalla, junto con el número leído. Ej.: n = 53471, entonces la suma de sus
dígitos es suma = 5 + 3 + 4 + 7 + 1 =20.
Program Sumadigitos;
{Programa que calcula la suma de los dígitos de un número leído del teclado}
Uses
Crt;
Var
Suma, N, M, D, R : Integer;
Begin
Clrscr;
Suma := 0;
Writeln ('Introduzca el numero');
Readln (N);
M := N;
While N <> 0 Do
Begin
D := N Div 10;
R := N - D * 10;
Suma := Suma + R;
N := D;
End;
Writeln ('El numero es ', M,' y la suma de sus dígitos es ', Suma);
Readln
End.
Ejemplo I.5.1: Programa que verifica si un número introducido por teclado es primo
Program Num_Primos;
{Programa que verifica si un número introducido por teclado es primo}
Uses
Crt;
Var
Primo : Bolean;
Numero, Divisor : Integer;
Begin
Primo := True;
Divisor := 2;
Writeln („Introduzca un número entero > 0‟);
Readln (Numero);
While (Divisor < Numero) and Primo Do
Begin
If Numero Mod Divisor = 0
Then
Primo := False;
Divisor := Divisor + !
End;
If Primo = True
Then
Writeln (Numero,‟ es Primo‟)
Else
Writeln (Numero.‟ No es Primo‟);
Readln
End.
II.- La Estructura Repita Hasta
Estas estructuras son ideales para realizar la validación de los datos al momento
de ingresarlos.
Se pueden utilizar los mismos controles para detener las iteraciones, usados en la
estructura expuesta anteriormente, pero adaptados al mecanismo de esta
estructura. Estos controles son:
Se controlan las iteraciones haciendo uso de una variable que sirve como
Contador de las repeticiones del lazo. El mecanismo es muy parecido al utilizado
en la estructura Repita Mientras. Consta igualmente de tres partes, pero la
disposición en el programa cambia ligeramente. En este caso, la ubicación de las
componentes es la siguiente:
a.- Inicialización de la variable de control del bucle: De igual manera, se debe dar
un valor inicial a la variable Contador, (que es la variable que controla el
número de repeticiones), antes del comienzo del bucle. Si en el cuerpo del
bucle se utiliza una variable acumulador, ésta también deberá ser inicializada
con anterioridad. Como se ha dicho anteriormente, una variable acumulador se
utiliza para acumular una serie de valores.
b.- Incremento del valor de la variable de control del bucle: El valor del contador
debe incrementarse cada vez que el cuerpo de un bucle se ejecuta. Este
incremento se realiza antes de evaluar la condición. Es la instrucción que
permitirá cambiar el estado de la condición y evitará que el bucle se repita
indefinidamente.
Introduzca
Sumando
Num
F
Contador ≥ N
Inicio
II.2.- Controlado por Pregunta.
Num
„¿Desea Continuar?
(S/N)‟
Resp
F
Resp = „N‟
V
„El resultado es„,
Suma
Inicio
II.3.- Controlado por Valor Centinela
„Introduzca Sumando
Valor Negativo para
Detener „
Num
F
Num <= 0
V
„El resultado es„,
Suma
Inicio
II.4.- Controlado por Condición Inherente
En este caso, para controlar el lazo se construye y se evalúa una condición propia
al problema particular que se está tratando. La denominaremos condición
inherente, pues está unida al problema, concebida para resolverlo. La estructura
se repetirá hasta que la condición sea verdadera.
Inicio
1.- Inicio
2.- Asignar Suma = 0 {Inicialización}
Suma = 0 3.- Repita
3.1.- Escribir „Introduzca Sumando‟
3.2.- Leer Num
3.3.- Calcular Suma = Suma + Num
Hasta (Suma >= 10)
¿Sumando?
4.- Escribir „La suma es „, Suma
5.- Fin
Num
F
Suma >= 10
V
Suma
Fin
Ejemplo II.4.2: Se deja caer una pelota desde una altura X. Se sabe que cada
rebote es 10% menor que el anterior. Hacer un programa que lea la altura X, y que
calcule en cuál rebote, la pelota no alcanza la quinta parte de la altura inicial.
F
Altura < QP
V
„En „,Cont,
„ rebotes‟
Fin
II.5.- Controlado por Interruptor o Bandera
Una bandera o interruptor es una variable que se utiliza para conservar el estado
(verdadero o falso) de una condición. Se denomina bandera o interruptor por
asociarse a un interruptor (encendido o apagado) o a una bandera (arriba o abajo).
El valor de interruptor debe inicializarse antes de comenzar el bucle y debe
cambiar su estado (valor) dentro del cuerpo del bucle para preparar la siguiente
iteración.
F A>0 F
IAnd > 0 M + A >= X
V V
¿Monto F V
Inversión? Cont = 0
X ‘En’,Cont, ‘Negocio
’meses’ inmediato’
F
X>M
X>A
V
Fin
1
Program ManuelyAlexis;
{ ... }
Uses
Crt;
Var
M, A, X :Real;
Interes1, Interes2: Real;
Cont1, Cont2 : Integer;
Begin
Cont1:=0;
Cont2:=0;
Repeat
Writeln('Introduzca capital de Manuel');
Readln(M);
Writeln('A que interés coloca Manuel su Capital?');
Readln(Interes1);
Writeln('Introduzca capital de Alexis');
Readln(A);
Writeln('A que interés coloca Alexis su Capital?');
Readln(Interes2);
Writeln('Introduzca monto de la inversión');
Readln(X);
Until (X > M) and (X > A);
If (M + A) < X
Then
Begin
Repeat
M := M*(1 + Interes1/100);
A := A*(1 + Interes2/100);
Cont1 := Cont1 + 1;
Until ((M + A) >= X);
End;
If (Cont1 = 0)
Then
Writeln('Pueden realizar el negocio inmediatamente')
Else
Writeln('Deben esperar ',Cont1,' meses para hacer el negocio');
Readln
End.
Ejercicio II.2: Hacer un programa que lea un número entero, N, positivo, de cuatro
dígitos, que calcule su número inverso, y que lo imprima junto con el número leído.
Ej.: N = 1234, entonces su número inverso es Ni = 4321.
El programa debe permitir varias iteraciones, es decir, la introducción de números
de cuatro cifras en repetidas oportunidades.
Inicio
1.- Inicio
2.- Repita
2.1. Escribir ('Introduzca un número de 4 cifras')
2.2. Leer (N)
¿Número de 2.3. Calcular A = N Div 1000
4 cifras?
2.4. Calcular R = N - A * 1000
2.5. Calcular B = R Div 100
N 2.6. Calcular O = R - B * 100
2.7. Calcular C = O Div 10
2.8. Calcular D = O - C * 10
A = N DIV 1000 2.9. Calcular NI = A + B*10 + C*100 + D*1000
R = N - A * 1000 2.10. Escribir ('Número introducido: ',N,' y su inverso: ',NI)
B = R DIV 100 2.11. Escribir ('Desea introducir otro número? (S/N)')
O = R - B * 100 2.12. Leer (Resp)
C = O DIV 10 3.- Hasta que (Resp = 'N') ó (Resp = 'n')
D = O - C * 10 4.- Fin
„Número inicial‟, N,
„su inverso es ‟, NI
¿Otro número?
(S/N)
Resp
F
Resp = „N‟
V
Fin
Ejercicio II.3: La serie de Fibonacci es una secuencia numérica, en la cual, a partir
del tercero, cada elemento es igual a la suma de los dos anteriores.
Así: 0, 1, 1, 2, 3, 5, 8, 13, 21, ...
Hacer un programa que calcule e imprima todos los elementos de la serie de
Fibonacci que sean menores que un número X.
Inicio 1. Inicio
2. Repita
2.1. Imprimir ('Introduzca el número máximo ')
2.2. Leer (NMax)
¿Máximo? 3. Hasta que NMax>0
4. Asignar a = 0
NMax 5. Asignar b = 1
6. Asignar Fb = 0
7. Imprimir ('0 ')
F 8. Repita
NMax > 0
8.1. Calcular b = a + b
V 8.2. Asignar Fb = b
a=0 8.3. Calcular a = b - a
b=1 8.4. Si Fb <= NMax
Fb = 0 Entonces
8.4.1. Imprimir (Fb,' ')
De lo contrario
8.4.2. Asignar a Resp = 'S'
b=a+b 9. Hasta que Resp = 'S'
Fb = b 10. Fin
a=b-a
F
Fb<=n V
Resp = „S‟
Cont? Fb, „ „
Resp
F
Resp = ‘S’
V
Fin
II.a.- Codificación en Turbo Pascal
Program Sumar;
{ }
Uses
Crt;
Var
N, Num, Sum, Contador : Integer;
Resp : Char;
Begin
Suma := 0;
Contador := 0;
Repeat
Writeln(„Introduzca Sumando‟);
Readln(Num);
Suma := Suma + Num;
Writeln(„Desea Continuar?‟);
Readln(Resp);
Until (Resp = „N‟) or (Resp = „n‟);
Writeln(„La suma de los „, Contador, „números es „, Suma);
Readln
End.
Ejercicio II.4.2:
S = 1 + 1 + 1 + 1 + ………… + 1
2 3 4 N
Hasta que 1/N converja hacia e/100 o sea igual o mayor que un número “e”
cualquiera dividido entre 100.
Program Serie;
{Programa que ….}
Uses
Crt;
Var
Suma, X, N, e : Integer;
Begin
Clrscr;
Suma := 0;
X := 1;
N := 1;
Writeln(„Introduzca número e”);
Readln(e);
Repeat
Suma := Suma + X;
N := N + 1;
X := 1/N;
Until (X <= e/100);
Writeln(„El resultado de la sumatoria es „, Suma);
Readln
End.
Ejemplo II.3.- Codificación en Turbo Pascal
Program Fibonacci;
{Programa que muestra en pantalla la serie de Fibonacci hasta un número máximo
introducido por el usuario}
{Realizado por Diego Uzcategui}
Uses
Crt;
Var
NMax, a, b, Fb : Integer;
Resp : Char;
Begin
Clrscr;
Repeat
Writeln ('Introduzca el número máximo de la serie');
Readln (NMax);
Until NMax>0;
a := 0;
b := 1;
fb := 0;
Clrscr;
Write ('0 ');
Repeat
b := a + b;
Fb := b;
a := b - a;
If Fb <= NMax
Then
Write (Fb,' ')
Else
Resp := 'S';
Until Resp = 'S';
Readkey
End.
ESTRUCTURAS DE REPETICIÓN INDIZADAS Ó INDEXADAS
Son estructuras de control repetitivas controladas por un índice, (de allí su
nombre). Esto es, controladas por una variable que indica el número de
iteraciones que se deben realizar.
Este tipo de estructuras se utilizan cuando se conoce por anticipado el número de
iteraciones que se van a realizar. Es decir, se conoce con anticipación el número
de veces que se debe repetir el cuerpo del bucle.
Estas estructuras no se controlan con una condición. El control se ejerce con una
variable que funge como índice. Del cual debe conocerse: el valor inicial, el valor
final y el valor del incremento (o decremento). Así, se repite el cuerpo del bucle
desde que la variable de control, o índice, toma el valor inicial, hasta que llega a su
valor final. Esta estructura se identifica como Repita Para. Se realiza la primera
iteración cuando el índice toma el valor inicial, y se realizan tantas otras
repeticiones, como incrementos (o decrementos) con el valor indicado, puedan
realizarse a la variable en el intervalo establecido [valor inicial, valor final].
Una diferencia básica con las estructuras condicionales es que aquellas constan
de varias partes, (Inicialización, Condición, Incremento), que cambian de posición
de acuerdo al tipo de estructura y que son necesarias para ejercer el control de la
estructura. En tanto que en las estructuras indizadas, sólo se necesita la
instrucción de cabecera para controlar el lazo. En las estructuras condicionales
debe incluirse siempre en el cuerpo del bucle una instrucción o sentencia, que
permita cambiar el estado de la condición, para evitar caer en un lazo infinito. En
tanto que las estructuras indizadas todo lo necesario para el control del ciclo, está
incluido en la primera sentencia, denominada cabecera.
El mecanismo de ejecución de esta estructura es el siguiente:
1. Se asigna el valor inicial a la variable índice.
2. Se ejecuta el cuerpo del bucle.
3. Se realiza automáticamente el incremento (o decremento).
4. Así, hasta llegar al valor final. Se realiza la última iteración y se interrumpe el
ciclo. El flujo de control pasa a la instrucción inmediata siguiente después del
lazo.
PSEUDOCÓDIGO
Formato:
¿Sumando?
Num
Suma
Fin
Ejemplo 2: Calcular la suma 1 + 1/2 + 1/3 +... + 1/n (Serie Armónica).
Suma
Fin
Ejemplo 3: Calcular las Combinaciones y las Permutaciones de m elementos,
tomados en grupos de n, usando respectivamente las fórmulas siguientes:
m! m!
Cm,n = ------------------- Pm,n = --------------
n! * (m – n)! (m – n)!
Diagrama de Flujo Algoritmo
Inicio 1.- Inicio
2.- Repita {Validaciones}
2.1.- Escribir („Introduzca valor de m‟)
¿Valor m? 2.2.- Leer (m)
2.3.- Escribir („Introduzca valor de n‟)
2.4.- Leer (n)
m Hasta (m > n)
3.- Asignar Factm = 1 {Inicializaciones}
¿Valor n? 4.- Asignar Factn= 1
5.- Hacer Factmn = 1
6.- Para I = 1 hasta m Repita
n 6.1.- Factm = Factm * I
7.- Para J = 1 hasta n Repita
7.1.- Factm = Factm * J
F m>n 8.- Para K = 1 hasta (m – n) Repita
8.1.- Factm = Factm * K
V 9. - Calcular C = Factm / (Factn * Factmn)
Factm = 1 10.- Calcular P = Factm / Factmn
Factn = 1 11.- Imprimir „Cm,n = „, C
Factmn = 1 12.- Imprimir „Pm,n = „, P
13.- Fin
I = 1 hasta m
Factm = Factm * I
J = 1 hasta n
Factn = Factn * J
K = 1 hasta (m-n)
Factmn = Factmn * K
P = Factm / Factmn
C, P
Fin
Ejercicios Resueltos
Ejercicio III.1: Leer dos números enteros y positivos, A y B, donde B > A. Calcular
el factorial de los números comprendidos entre ellos, incluyéndolos, e imprimirlo
junto con el número correspondiente.
Inicio
1.- Inicio
2.- Repita {Validación}
¿Valor A? 2.1.- Escribir ('Introduzca el primer número (A)')
2.2.- Leer (A)
Hasta (A > =0) {Fin Repita Hasta}
A 3.- Repita {Validación}
3.1.- Escribir ('Atención B > A')
3.2.- Escribir ('Introduzca el segundo número (B)')
F A>0 3.3.- Leer (B);
Hasta (B > A) {Fin Repita Hasta}
V 4.- Asignar Fact = 1 {Inicialización}
5.- Para M = 2 hasta A Repita
¿Valor B? 5.1.- Calcular Fact = Fact * M
{Fin Repita Para}
5.2.- Escribir ('El factorial de ', A, ' es ', Fact)
B 6.- Para J = (A + 1) hasta B Repita
6.1.- Calcular Fact = Fact * J
F 6.2.- Escribir ('El factorial de ', J, ' es ', Fact)
B>A {Fin Repita Para}
7.- Fin
V
Fact = 1
M = 2 hasta A
Fact = Fact * M
„Factorial de „,
A, „ es „, Fact
J = (A + 1) hasta B
Fact = Fact * J
„Factorial de „,
J, „ es „, Fact
Fin
ESTRUCTURAS DE REPETICIÓN ANIDADAS
El anidamiento se refiere, a colocar una estructura de repetición dentro de otra.
Por tanto, anidar estructuras de repetición, significa construir un lazo externo, con
uno o más lazos internos. En ese caso, debe terminar primero el (o los) más
interno(s), porque de lo contrario se produce un error.
Si se tiene, por ejemplo, un lazo externo con tres (3) iteraciones y un lazo interno
con cuatro (4), se realizarán en total doce (12) iteraciones. Por cada una de las
tres (3) iteraciones del lazo externo se realizarán las cuatro del lazo interno.
F V
1. M = L
-
Ini „Se cumple
ci para „,M
o
2.
-
P
ar
a
I Fin
=
0
h
as
ta
9
R
e
pi
ta
2.
1.
-
P
ar
a
J
=
0
h
as
ta
9
R
e
Ejemplo IV.2: Hacer un programa que calcule el promedio de notas de cada
alumno de una sección de PD10, que presentaron tres (3) exámenes parciales con
el mismo peso c/u y el promedio de la sección.
Codificación en Turbo Pascal
Program factoriales;
{Programa que lee dos números enteros y positivos, A y B, donde B > A. Que calcula el
factorial de los números comprendidos entre ambos, incluyéndolos, y lo imprime junto
con el número correspondiente.}
Uses
Crt, Dos;
Var
A, B, M, J, Fact: Integer;
Begin
Writeln ('Introduzca el primer número (A)');
Readln (A);
Repeat
Writeln ('Atención B > A');
Writeln ('Introduzca el segundo número (B)');
Readln (B);
Until (B > A);
Fact:= 1;
For M:= 2 to A Do
Fact := Fact * M;
Writeln ('El factorial de ', A, ' es ', Fact);
For J := (A + 1) to B Do
Begin
Fact := Fact * J;
Writeln ('El factorial de ',J, ' es ', Fact);
End;
Readln
End.
Ejercicios Propuestos
1.- Hacer un programa que lea un capital C y que calcule en cuántos meses se
duplica, si lo colocamos a un interés compuesto del 5% mensual.
2.- Hacer un programa que calcule el promedio de notas de una sección que tiene
n estudiantes y el promedio de cada estudiante, si cada uno tiene 3 notas
parciales. Calcular además cuántos alumnos fueron aprobados y cuántos
reprobados.
3.- Hacer un programa que lea dos números enteros y positivos, N1 y N2, donde
N2 > N1. Que calcule el factorial de los números comprendidos entre ellos,
incluyéndolos, y lo imprima junto con el número correspondiente.
5.- Una pelota se deja caer desde una altura H, y en cada rebote sube 10% menos
que el anterior. Hacer un programa que lea H y calcule en cuál rebote la pelota
no alcanza a subir la quinta parte de la altura inicial.
6.- En 1980 la ciudad A tenía 3.5 millones de habitantes y una tasa de crecimiento
del 7% anual y la ciudad B tenía 5 millones y una tasa de crecimiento del 5%
anual. Si el crecimiento poblacional se mantiene constante en las dos
ciudades, hacer un programa que calcule en qué año la población de la ciudad
A es mayor que la de la ciudad B.
7.- Realizar un programa que lea n números y calcule cuantos son pares y cuantos
son impares.
8.- Realizar un programa que lea del teclado, n números enteros y positivos e
indique cuantos son primos. Recordemos que un número primo es una
cantidad entera positiva únicamente divisible por uno y por sí mismo.
9.- Hacer un programa que lea un número entero, n, positivo, de cuatro dígitos,
que calcule su número inverso, y que lo imprima junto con el número leído. Ej.:
n = 1234, entonces su número inverso es ni = 4321.
13.- El cajero de un banco solo dispone de billetes de 10.000 Bs., 20.000 Bs. y
100 Bs. Su función es cambiar los cheques, dándoles el menor número posible
de billetes. Asumiendo que todos los cheques son múltiplos de 100 Bs., hacer
un programa que lea del teclado el valor del cheque a cambiar y que le informe
al cajero cuantos billetes de cada denominación debe entregar. Como no sabe
cuántos clientes vienen en un día, el programa debe terminar cuando reciba
ceros como valor del cheque, y al final del día debe informar cuántos billetes de
cada denominación se gastaron.
14.- Hacer un programa que lea números enteros positivos y que calcule:
- Los números cuya suma de dígitos sea impar, y decir cuántos son.
- Los números que terminan en siete (7), y cuántos son.
- Todos los números que tengan más de cuatro dígitos.
22.- Calcular la suma de 1+ 1/(2!) + 1/(3!) + 1/(4!) + .... + 1/(n!) para un n dado.
Escriba el programa de tres formas diferentes: usando Repita mientras, Repita
hasta y Repita para.
24.- Los surtidores de una gasolinera registran las ventas por galones, pero el
precio de la gasolina está fijada en litros. El programa debe calcular lo que los
clientes deben pagar y el total recaudado por la gasolinera, tomando en cuenta
lo siguiente:
- Cada galón tiene 3,785 litros.
- El precio del litro es Bs. 50 para el Tipo A, Bs. 55 para el Tipo B y para el
Tipo C, Bs. 60.
- El programa finaliza cuando se introduce una D como tipo de gasolina.
ARREGLOS
Hasta ahora hemos creado programas que utilizan solo datos simples o básicos,
como son: enteros, reales, caracter, etc. Sin embargo, es conveniente resaltar que
existen problemas de programación en los cuales se necesita procesar una
colección de valores que están relacionados entre sí. Es decir, en la vida real
normalmente se necesita crear programas que utilizan datos que requieren una
cierta organización, programas que requieren usar datos que están relacionados
entre sí. A esta conformación de los datos, se le denomina estructura de datos.
Una estructura de datos es "una colección de datos organizados de un modo
particular”1. El procesamiento de estos conjuntos de datos se realiza basándose
en los conceptos matemáticos de vectores y matrices, utilizando la estructura de
datos básica llamada array.
1 c
Joyanes A., Luis. Programación en Turbo Pascal. M Graw Hill. 1993.
Arreglos Unidimensionales: Los Vectores
Lectura
Ejemplos:
Escritura
Nota: A menos que sea necesario, se debe evitar que todas las salidas del vector
aparezcan en la misma línea. Para eso, es recomendable hacer que se salte una
línea al imprimir, usando un comando de impresión en blanco.
Copia
Para escribir una matriz, se debe hacer referencia tanto a la fila como a la
columna. Se puede leer horizontalmente, (por filas), o verticalmente, (por
columnas). Así, en la lectura horizontal, se controlan las filas con el lazo externo y
las columnas con el lazo interno, como se muestra en el siguiente ejemplo. Se
utiliza una estructura Repita Para, para leer horizontalmente una matriz de tres (3)
filas y cuatro (4) columnas:
Columnas = 1
Mientras Columnas <= 4 Repita
Filas = 1
Mientras Filas <= 3 Repita
Leer (A[Columnas,Filas])
Filas = Filas + 1
{Fin Repita Mientras Filas}
Columnas = Columnas + 1
{Fin Repita Mientras Columnas}
Var
Nombre_arreglo : Nombre_tipo_arreglo;
Ejemplos:
Type
X = array [1..8] of real;
Type
Luces = (Rojo, Verde, Ámbar);
Type
DiasDeSemana=(Lunes, Martes, Miércoles, Jueves, Viernes, Sábado, Domingo);
ConjuntoDias = array
Type
Salarios = array [A..Z] of real;
(En este caso es de tipo real porque el salario es de ese tipo. El subíndice indica
que los salarios van de los empleados cuya inicial es A hasta la Z).
Las declaraciones de tipo arreglo no crea ninguna variable específica de tipo
arreglo, sino que proporciona información del arreglo como un todo.
Para declarar una variable tipo arreglo, se utiliza la siguiente sintaxis:
Type
Valores = array [1..10] of real;
Var
Precios : Valores;
En primer lugar se crea el tipo del arreglo y luego se declara la o las variables
referenciadas al arreglo.
Otro ejemplo de aplicación puede ser el siguiente:
Const
Max = 500;
Type
Texto = array [1..Max] of char;
Var
Palabras, Letras: Texto;
En este ejemplo se crean dos variables arreglo: Palabras y Letras. Las posiciones
del arreglo van de 1 a 500 y contendrán un valor tipo caracter.
Declaración en turbo Pascal de un arreglo bidimensional o Matriz
Promedio = Suma / 4
Promedio
Fin
Program Promedio;
Uses
Crt;
Var
Notas : Array [1..25,1..4] of Real;
I,J : Integer;
Suma, Prom : Real;
Begin
For I := 1 to 25 Do
Begin
Write (`Notas del estudiante: ´, I);
Writeln (`En una misma línea escriba todas las notas ´);
Suma := 0;
For J := 1 to 4 Do
Begin
Read (Notas[I,J]);
Suma := Suma + Notas[I,J]
End;
Readln;
Prom := Suma/4;
Writeln (`La nota promedio del estudiante `,I:1,´ es `,Prom:1:1)
End
End.
Ejercicios Resueltos
1.- H
Hacer un programa que lea N datos, guardando los positivos en un vector y los
negativos en otro. Que imprima los vectores y calcule la suma de los positivos y
negativos separadamente. Inicio
Sumap
„Vector de Negativos‟
I = 1 hasta Contn
Neg[I],‟ „
Suman
Fin
Program Sumaposynegativos;
Begin
Contp = 0;
Contn = 0;
Sumap = 0;
Suman = 0;
Repeat
Writeln ('Cuántos números?');
Readln(N)
Until (N > 0);
For I := 1 to N do
Begin
Writeln ('Introduzca número');
Readln(x)
If X >= 0
Then
Begin
Contp := Contp + 1;
Pos[Contp] := X;
Sumap := Sumap + X
End
Else
Begin
Contn := Contn + 1;
Neg[Contn] := X;
Suman := Suman + X
End;
End;
Writeln ('Vector de Positivos');
For I := 1 to Contp
Writeln (Pos[I], ' „);
Writeln ('Suma de positivos = ', Sumap);
Writeln ('Vector de Negativos');
For I := 1 to Contn
Writeln (Neg[I], ' „);
Writeln ('Suma de negativos = ', Suman);
Readln
End.
2.- Realizar un programa que lea N datos, con los cuales forme 2 vectores, c/u de 100
datos máximo. El primer vector con los datos pares, el segundo con los datos
impares. Si los N datos no alcanzan para llenar los vectores de 100 datos,
complete el vector de pares con el número 2 y el de impares con el número 1.
Imprímalos.
Program completarvectores;
Uses Crt;
Var
par, impar : Array[1..50] of Integer;
n, contp, conti, i : Integer;
Begin
Clrscr;
Writeln('Cuantos números desea introducir?');
Readln(n);
contp := 1;
conti := 1;
For i := 1 to 10 do
Begin
Par[i]:=2;
Impar[i]:=1
End;
For i := 1 to n do
Begin
Writeln ('Introduzca número');
Readln(n);
If n mod 2 = 0
Then
Begin
par[contp] := n;
contp := contp + 1;
End
Else
Begin
impar[conti] := n;
conti := conti + 1;
End;
End;
Writeln('Vector Par');
For I := 1 to 10 do
Write(par[i],' ');
Writeln;
Writeln('Vector Impar');
For i := 1 to 10 do
Write(impar[i],' ');
Writeln;
Readln;
End.
3.- Hacer un programa que lea un vector A de N elementos, calcule e imprima cuál es
el mayor y en qué posición se encuentra y cuál es el menor y en qué posición se
encuentra.
Program vector;
{… }
Uses
Crt, Dos;
Var
VectorA : array[1..10] of Integer;
I, numero, may, men, posmay, posmen : Integer;
Begin
Repeat
Writeln ('Cuantos números desea introducir?');
Readln (numero);
Until numero > 0;
For I := 1 to numero do
Begin
Writeln ('Introduzca elemento ‟, I,‟ del vector');
Readln (vectorA[i]);
End;
may := VectorA[1];
men := VectorA[1];
posmay := 1;
posmen := 1;
For I := 2 to numero do
Begin
If VectorA[i] > may
then
Begin
may:= VectorA[i];
posmay:=i;
End
else
If VectorA[i] < men
then
Begin
men := vectorA[i];
posmen:= i;
End
End;
Writeln ('El mayor es ', may,' y está en la posición ', posmay,' del vector');
Writeln ('El menor es ', men,' y está en la posición ', posmen,' del vector');
Readln
End.
Program PromediosSec;
{Programa para calcular el promedio de n estudiantes y el promedio por materia}
Uses
Crt;
Type
Matriz = Array[1..50,1..50] of Integer;
Vector_caracteres = Array[1..50] of String[30];
Vector_Promedios = Array[1..50] of Real;
Var
N, Estudiantes, Materias, ContMaterias, i, j, k, l, sumaest, SumaMat : Integer;
promest, proMat : Real;
Notas : Matriz;
Nombre,Nombre_Materias : Vector_caracteres;
Promedios : Vector_Promedios;
Begin
Clrscr;
Estudiantes := 1;
Repeat
Writeln('Cuantos estudiantes tiene la sección?');
Readln(N);
Until n > 0;
Repeat
Writeln(' Cuantas materias tienen los estudiantes? ');
Readln(Materias)
Until Materias > 0;
ContMaterias:= 1;
Repeat
Writeln(' Nombre de la materia? ', ContMaterias);
Readln(Nombre_Materias[ContMaterias]);
ContMaterias := ContMaterias + 1
Until ContMaterias > Materias;
While (Estudiantes <= N) do
Begin
Writeln(' Nombre del estudiante?');
Readln(Nombre[Estudiantes]);
ContMaterias := 1;
Sumaest := 0;
While ContMaterias <= Materias Do
Begin
Repeat
Writeln('Nota estudiante ', Nombre[Estudiantes],' en la Materia ',
Nombre_Materias[ContMaterias]);
Readln(Notas[Estudiantes,ContMaterias]);
Until (( 0 <= Notas[Estudiantes,ContMaterias]) and
(Notas[Estudiantes,ContMaterias] <= 20));
Sumaest := (sumaest + Notas[Estudiantes,ContMaterias]);
ContMaterias := ContMaterias + 1
End;
Promedios[Estudiantes] := Sumaest/Materias;
Estudiantes := Estudiantes + 1
End;
Clrscr;
For I := 1 to n Do
Begin
Writeln('El promedio del estudiante ', Nombre[I], ' es ', Promedios[I]:5:2,' pts');
Writeln;
Write ('Sus notas son ');
For J:= 1 to Materias Do
Write (' ', Notas[i,j]);
Writeln
End;
Writeln;
Writeln('Promedios por Materias');
For K := 1 to Materias Do
Begin
SumaMat:= 0;
For L:= 1 to N do
SumaMat:= SumaMat + Notas[L,K];
Promat:= SumaMat/N;
Writeln('El promedio de la materia ', Nombre_Materias[K],' es ',Promat:5:2);
Writeln;
End;
Readln
End.
Ejercicio: Hacer un programa que lea una matriz cuadrada A de m filas y n
columnas. Calcular e imprimir la suma de: Diagonal Principal, Triangular Inferior,
Triangular Superior y Diagonal Secundaria.
Program Diagonal_Principal;
{... }
Uses
Crt;
Type
Matriz = Array[0..100,0..100] of Integer ;
Var
N, I, J, DP, TS, TI, DS: Integer ;
A : Matriz;
Begin
Clrscr;
Repeat
WriteLn('Introduzca el Orden de la Matriz');
ReadLn(N)
Until N>0;
For I := 1 To N do
For J := 1 To N do
Begin
WriteLn('Introduzca el elemento A(',I,J,') de la matriz');
ReadLn(A[I,J])
End;
DP := 0;
TS := 0;
TI := 0;
DS := 0;
For I := 1 To N do
For J := 1 To N do
Begin
If I = J Then
DP := DP + A[I,J]
Else
If I < J Then
TS := TS + A[I,J]
Else
TI := TI + A[I,J];
If (I + J) = (N + 1) Then
DS := DS + A[I,J]
End;
WriteLn('Los elementos de la matriz son: ');
For I := 1 To N do
Begin
For J := 1 To N do
Write(A[I,J],' ');
WriteLn
End;
WriteLn('La suma de los elementos de: ');
WriteLn('La Diagonal Principal es ',DP,' , de la Triangular Superior es ',TS);
WriteLn('De la Triangular Inferior es ',TI,' y de la Diagonal Secundaria es ',DS);
ReadLn
End.
Program PromediosSec;
{Programa para calcular el promedio de n estudiantes, el promedio por materia y el
promedio del curso}
Uses
Crt;
Type
Matriz = Array[1..50,1..50] of Integer;
Vector_caracteres = Array[1..50] of String[30];
Vector_Promedios = Array[1..50] of Real;
Var
N, Estudiantes, Materias, ContMaterias, i,j,k,l, sumaest,SumaMat : Integer;
promest, proMat : Real;
Notas : Matriz;
Nombre,Nombre_Materias : Vector_caracteres;
Promedios : Vector_Promedios;
Begin
Clrscr;
Estudiantes := 1;
Repeat
Writeln('Cuantos estudiantes tiene la seccion?');
Readln(N);
Until n > 0;
Repeat
Writeln(' Cuantas materias tienen los estudiantes? ');
Readln(Materias)
Until Materias > 0;
ContMaterias:= 1;
Repeat
Writeln(' Nombre de la materia? ', ContMaterias);
Readln(Nombre_Materias[ContMaterias]);
ContMaterias := ContMaterias + 1
Until ContMaterias > Materias;
While (Estudiantes <= N) do
Begin
Writeln(' Nombre del estudiante?');
Readln(Nombre[Estudiantes]);
ContMaterias := 1;
Sumaest := 0;
While ContMaterias <= Materias Do
Begin
Repeat
Writeln('Nota estudiante ', Nombre[Estudiantes],' en la Materia ',
Nombre_Materias[ContMaterias]);
Readln(Notas[Estudiantes,ContMaterias]);
Until (( 0 <= Notas[Estudiantes,ContMaterias]) and
(Notas[Estudiantes,ContMaterias] <= 20));
Sumaest := (sumaest + Notas[Estudiantes,ContMaterias]);
ContMaterias := ContMaterias + 1
End;
Promedios[Estudiantes] := Sumaest/Materias;
Estudiantes := Estudiantes + 1
End;
Clrscr;
For I := 1 to n Do
Begin
Writeln('El promedio del estudiante ', Nombre[I], ' es ', Promedios[I]:5:2,'
puntos');
Writeln;
Write ('Sus notas son ');
For J:= 1 to Materias Do
Write (' ', Notas[i,j]);
Writeln
End;
Writeln;
Writeln('Promedios por Materias');
For K := 1 to Materias Do
Begin
SumaMat:= 0;
For L:= 1 to N do
SumaMat:= SumaMat + Notas[L,K];
Promat:= SumaMat/N;
Writeln('El promedio de la materia ', Nombre_Materias[K],' es ',Promat:5:2);
Writeln;
End;
Readln
End.
program promedia;
{Programa que lee una lista de calificaciones, calcula su media e imprime una
lista de calificaciones mayores que la media}
const
limite = 100; {numero de alumnos}
var
Notas : array[1..limite] of real;
Num, i : integer;
suma, media : real;
begin
Repeat
Writeln('Introduzca el numero de calificaciones');
Readln(Num);
If num > 100 then Writeln ('El maximo es 100');
until Num <= 100;
suma := 0;
For i := 1 to Num do
begin
repeat
Writeln('Introduzca la ',i,'a nota');
Readln(Notas[i]);
If (Notas[i] < 0) or (Notas[i] > 20)
then
Writeln('Las notas deben estar entre 0 y 20');
until (Notas[i] >= 0) and (Notas[i] <= 20);
suma := suma + Notas[i];
end;
media := suma/Num;
Writeln ('La media es ', media:3:1);
Writeln;
Writeln('Lista de calificaciones > media');
For i:= 1 to Num do
If Notas[i] >= media
then
Writeln(Notas[i]:3:1);
Readln
end.
program sumaposyneg;
{programa que toma n datos, guardando los positivos en un vector,
los negativos en otro vector; también halla sus sumas y mayor y menor}
uses
Crt, Dos;
var
Pos, Neg : array[1..50] of integer;
N, x, contp, contn, sumap,suman, i, may, men: integer;
begin
contp:= 0;
contn:= 0;
sumap:= 0;
suman:= 0;
may := 0;
men := 9999;
Writeln('Cuantos numeros desea introducir?');
Readln(n);
For i:= 1 to N do
begin
Writeln('Introduzca numero');
Readln(x);
If x >= 0
then
begin
contp := contp + 1;
pos[contp] := x;
end
else
begin
contn := contn + 1;
neg[contn] := x;
end;
If x > may
then
may := x
else
If x < men
then
men := x;
end;
For i := 1 to contp do
sumap := sumap + pos[i];
Writeln('La suma de los positivos es ', sumap);
For i := 1 to contn do
suman := suman + neg[i];
Writeln('La suma de los negativos es ', suman);
Writeln('El mayor es ', may, ' y el menor es ', men);
Readln
end.
Program Principal;
{Programa que calcula el producto de dos matrices}
Type
Matriz = Array[0..255,0..255] of Integer ;
Var
N, M, K, L, I, J, X : Integer ;
A, B,C : Matriz;
Begin {Principal}
Repeat
WriteLn('Número de Filas y columnas matriz A?');
ReadLn(N);
ReadLn(M)
Until (N > 0) and (M > 0);
Repeat
WriteLn('Número de Filas y columnas matriz B?');
ReadLn(K);
ReadLn(L)
Until (K > 0) and (L > 0);
If M = K Then
Begin
Writeln(„Elementos de la matriz A‟);
For I := 1 To N do
For J := 1 To N do
Begin
WriteLn('Introduzca numero');
ReadLn(A[i,j])
End;
Writeln(„Elementos de la matriz B‟);
For I := 1 To N do
For J := 1 To N do
Begin
WriteLn('Introduzca Número');
ReadLn(B[I,J])
End
{Calculo del producto}
For I := 1 To N do
For J := 1 To L do
Begin
C[I,J] := 0;
For X := 1 To N do
C[I,J] := C[I,J] + A[I,X]*B[X,J]
End;
End
Else
WriteLn('El producto no es posible');
{Presentacion de resultados}
If M = K Then
Begin
WriteLn('Matriz producto');
For I := 1 To N do
For J := 1 To N do
WriteLn(C([,J])
End
End.
Problemas Propuestos
1.- Hacer un programa que lea una lista de calificaciones, calcule la media e
imprima una lista de calificaciones mayores que la media.
2.- Hacer un programa que lea un vector A de N elementos, calcule e imprima cuál
es el mayor y en qué posición se encuentra y cuál es el menor y en qué
posición se encuentra.
3.- Realizar un programa que lea N datos, con los cuales forme 2 vectores, cada
uno de 100 datos máximo. El primer vector con los datos pares, el segundo con
los datos impares. Si los N datos no alcanzan para llenar los vectores de 100
datos, complete el vector de pares con el número 2 y el de impares con el
número 1. Imprímalos.
4.- Hacer un programa que lea un vector de N elementos y que calcule e imprima
el valor de la siguiente sumatoria:
S = A(1) + A(2) + A(4) + A(7) + A(11) + A(16) + A(22) + A(29) + …
5.- Realizar un programa que lea N datos, guardando los positivos en un vector,
los negativos en otro vector halle las sumas de los negativos y los positivos
separadamente, y busque además el mayor y el menor de todos los números.
6.- Un instituto desea controlar los resultados de los alumnos en las diferentes
asignaturas de un semestre de la carrera de informática. Hacer un programa
que lea el nombre del estudiante y las calificaciones obtenidas en las distintas
asignaturas, luego mostrar en pantalla el nombre de cada estudiante, la media
obtenida y la lista de calificaciones de ese estudiante. El programa deberá
también calcular el promedio de todos los estudiantes en cada asignatura, es
decir la media por asignatura.
7.- Realizar un programa que obtenga a partir de una serie de 100 datos
estadísticos (Xi), las medidas más generalizadas de centralización y dispersión.
Medidas básicas de centralización y dispersión:
Valor mínimo: Xmin Valor máximo: Xmax
Rango: R= Xmax - Xmin Media aritmética: = 1/n∑ Xi
Varianza: S2 =1/n∑(Xi - X)2 = 1/n∑Xi 2- X2
Desviación típica: S = √(1/n∑Xi 2- ¯X2 )
Coeficiente de variación: r = s/X¯
8.- Para una muestra de N personas se recogen los siguientes datos: cédula,
sexo, valor del cociente intelectual dependiendo de las siguientes edades 15,
20, 30 45 años. Se desea saber:
- Cociente intelectual promedio de las personas entrevistadas.
- Cociente intelectual promedio de los hombres y de las mujeres.
- Quiénes tienen mayor cociente intelectual los hombres o las mujeres.
- A la edad de 15 años cuantos tienen un cociente intelectual mayor que 120.
- Diferencia entre los cocientes intelectuales de los que poseen 15 años y los de
45 años.
- Indicar los datos de la persona que tiene mayor cociente intelectual, en caso de
coincidir varias con el mismo cociente indicar el listado con los datos de las
mismas.
12.- Dados dos vectores, A[I], I = 1..N y B[J], J = 1..M; que no tienen números
repetidos, elaborar un programa que cree un vector C con los términos
comunes a ambos vectores. Por ejemplo: A[I] = 5,8,3,7,2 B[J] = 1,9,5,3,6,2
C[K] = 5,3,2
16.- Hacer un programa que lea una matriz A de m filas y n columnas. Calcular e
imprimir la suma de cada una de sus filas y de cada una de sus columnas.
17.- Hacer un programa que lea una matriz cuadrada A de m filas y n columnas.
Calcular e imprimir la suma de: Diagonal Principal, Triangular Inferior,
Triangular Superior y Diagonal Secundaria.
18.- Hacer un programa que lea una matriz de m filas y n columnas. Calcular e
imprimir la suma de todos los elementos periféricos:
A(1,1) + A(1,2) + A(1,3) + ... + A(1,n) + A(2,1) + A(2,n) + A(3,1) + A(3,n) + A(4,1) +
A(4,n) + ... + A(m,1) + A(m,2) + A(m,3) + ... + A(m,n).
1 1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3 3
4 4 4 4 4 4 4 4 4
5 5 5 5 5 5 5 5 5
6 6 6 6 6 6 6 6 6
7 7 7 7 7 7 7 7 7
8 8 8 8 8 8 8 8 8
9 9 9 9 9 9 9 9 9
24.- Una empresa tiene 250 empleados, por cada uno de ellos se tiene un
registro que tiene dos datos, el nombre del empleado y su correspondiente
salario mensual. Hacer un programa que determine cuántos empleados ganan
más del promedio salarial de la empresa.
27.- Escriba un programa que almacene en un vector los números pares del 1
al 10.
28.- Escriba un programa que lea diez números enteros y los invierta.
29.- Escriba un programa que lea las dimensiones de una matriz, las lea,
visualice la matriz y que encuentre el menor y mayor elemento de esa matriz y
sus posiciones.
31.- Escribir un programa que en una matriz almacene los números primos del 1
al 100.
33.- Escriba un programa que almacene en una matriz los números pares del 1
al 40 y los imprima.
ORDENAMIENTO
Método
For I = 1 to (N – 1) Do
For J = 1 to (N – I) Do
If A [J] > A [J + 1]
Then
Begin
Aux = A[J]
A[J] = A[J + 1]
A[J + 1] = Aux
End;
Programación Modular y Programación Estructurada
Uno de los métodos más conocidos para resolver un problema es dividirlo en
problemas mas pequeños, llamados subproblemas. De esta manera, en lugar de
resolver una tarea compleja y tediosa, resolvemos otras más sencillas y a partir de
ellas llegamos a la solución. Esta técnica se usa mucho en programación ya que
programar no es mas que resolver problemas, y se le suele llamar diseño
descendente, metodología del divide y vencerás o programación de arriba abajo
(top-down). La programación modular es uno de los métodos de diseño más
flexibles y potentes para mejorar la productividad de un programa.
Es evidente que…
Programación Modular y Programación Estructurada
Uno de los métodos más conocidos para resolver un problema es dividirlo en
problemas mas pequeños, llamados subproblemas. De esta manera, en lugar de
resolver una tarea compleja y tediosa, se resuelven otras más sencillas, y a partir
de ellas se llega a la solución. Esta es una técnica muy usada en programación,
puesto que programar no es más que elaborar programas para resolver problemas
usando el computador. A dicha técnica se le conoce como Diseño Descendente,
Metodología de Divide y Vencerás o Programación de Arriba a Abajo (Top-
Down). La programación modular es uno de los métodos de diseño más flexibles y
potentes para mejorar la productividad de un programa.
Puesto que esta metodología nos lleva a tratar con sub-problemas, entonces para
resolverlos, evidentemente hay que trabajar con subprogramas. A estos últimos
también se les conoce como módulos, de ahí el nombre de Programación
Modular.
Notas Alumnos
Formato:
Nombre_de_función (argumento1, argumento2,…)
Cada una de estas funciones devuelve un resultado para cada valor particular de
x. Así, para x = 1, las funciones se representan por f(1), h(1) y sus valores son:
f(x) = 1
h(x) = 4/1 = 4
Tipos de Funciones
Son las funciones que vienen incluidas, o que son aceptadas por el lenguaje....
Entre las funciones predefinidas, se tienen las matemáticas, las ....
Funciones aritméticas ó matemáticas
Funciones Matemáticas
Nombre Argumento Descripción
Abs(x) Real o Integer Devuelve el valor absoluto del argumento
ArcTan(x)* Real o Integer Devuelve el arco tangente del argumento
Cos(x)* Real o Integer Devuelve el coseno del argumento
Exp(x) Real o Integer Devuelve el exponencial del argumento
Frac(x) Real Devuelve la parte decimal del argumento
Int(x) Real Devuelve la parte entera del argumento
Ln(x) Real o Integer Devuelve el logaritmo natural del argumento
Pi Real Devuelve el valor de Pi (3.1415926535897932385)
Odd(x) Integer Devuelve un resultado lógico si el argumento es impar
Round(x) Real o Integer Devuelve el entero mas próximo del argumento
Sin(x)* Real o Integer Devuelve el Seno del argumento
Sqr(x) Real o Integer Devuelve el cuadrado del argumento
Sqrt(x) Real o Integer Devuelve la raiz cuadrada del argumento
Trunc(x) Real Devuelve la parte entera de su argumento
* El argumento de estas funciones es siempre en radianes
Funciones Ordinales
Función Definición
ord(x) Devuelve el numero ordinal correspondiente al argumento x.
chr(x) Devuelve el caracter en el código ASCII correspondiente al argumento x.
succ(x) Devuelve el sucesor del argumento; produce un error si no tiene sucesor.
pred(x) Devuelve el predecesor del argumento
Funciones Exponenciales o Logarítmicas
XY = Exp(Y * Ln(X))
Deducción:
XY = t
Ln(XY) = Ln t
Y * Ln(X) = Ln t
Exp(Y * Ln(X)) = t = XY
Estas son, como su nombre lo indica, las que el propio usuario declara, define o
establece para realizar una tarea específica. Las funciones nacen con el propósito
de ser subprogramas que siempre tienen que devolver algún valor.
Ejemplos
Program Cubo_de_numero;
Uses
Crt;
Var
Num, valor: Integer;
Begin
Clrscr;
Writeln('Introduzca un numero entero');
Readln(Num);
Valor:= Cubo(Num);
Writeln('El cubo de ',Num,' es ', valor);
Readln
End.
Program Cubo_de_numero;
{Programa que calcula el cubo de un número, utilizando una función}
Uses
Crt;
Var
Num, Valor : Integer;
Begin
Clrscr;
Writeln('Introduzca un numero entero');
Readln(Num);
Valor:= Cubo(Num);
Writeln('El cubo de ',Num,' es ', Valor);
Readln
End.
Program Principal; { <-- Programa Principal --> }
{Programa para explicar el uso de funciones}
Uses
Crt;
Var
a, b, s, m, listo: Integer ;
Begin {Principal}
Clrscr;
WriteLn('Introduzca dos valores:');
ReadLn(a);
ReadLn(b);
s := suma(a,b);
m := multiplica(a,b);
listo := Imprimir(s,m); {Utilicé este subterfugio para convertir un procedimiento en
función}
Readln
End.
Program Sumatoria;
{Programa que calcula la suma 1 + 2 +... + n usando una función donde n es una
variable que pasa a la función como parámetro formal}
Uses
Crt;
Var
Resultado, Num : Integer;
Function Suma(N:Integer):Integer;
{Esta es la funcion que calcula la sumatoria}
Var
Total, J :Integer;
Begin
Total := 0;
For J:= 1 to N Do
Total := Total + J;
Suma:= Total
End; {Fin de la funcion}
{Programa Principal}
Begin
Clrscr;
Writeln('Introduzca el numero de términos de la sumatoria');
Readln(Num);
Resultado:=Suma(Num);
Writeln('El valor de la suma es de los primeros ',Num, ' naturales es ',
Resultado);
Readln
End.
Program Mayor_funcion;
{Programa que calcula el mayor de tres números, usando una función}
Uses
Crt;
Var
Mayor,A,B,C : Integer;
Function Max3(N1,N2,N3:Integer):Integer;
{Funcion que calcula el mayor}
Var
Maximo: Integer;
Begin
{Encontrar el mayor de a y b}
If A > B
Then
Maximo := A
Else
Maximo := B;
{Ahora compara el mayor de a y b con c}
If Maximo > C
Then
Max3 := Maximo
Else
Max3 := C
End;
{Programa Principal}
Begin
Clrscr;
Writeln('Introduzca los tres valores ');
Readln(A,B,C);
Mayor:= Max3(A,B,C);
Writeln('El mayor de los tres números es ', Mayor);
Readln
End.
Program Anio_Bisiesto;
{Programa que determina si un año es bisiesto. Un año es bisiesto si es múltiplo
de 4;(por ejemplo 1984). Los años múltiplos de 100 no son bisiestos, salvo si ellos
son también múltiplos de 400 (2000 es bisiesto pero 1800 no lo es}
Uses
Crt;
Var
Anio : Integer;
Resultado : Integer;
Function Bisiesto(Anno:Integer):Integer;
Begin
bisiesto:= 0;
If Anno mod 4 = 0
Then
bisiesto := 1
Else
bisiesto := 0;
If (Anno mod 100 = 0) and (Anno mod 400 <> 0)
Then
bisiesto := 0;
End;
Program Anio_Bisiesto;
{Programa que determina si un año es bisiesto. Un año es bisiesto si es múltiplo
de 4;(por ejemplo 1984). Los años múltiplos de 100 no son bisiestos, salvo si ellos
son también múltiplos de 400 (2000 es bisiesto pero 1800 no lo es}
{En este programa la función produce un resultado que es una cadena de
caracteres }
Uses
Crt;
Var
Anio : Integer;
Resultado : String[15];
Function Bisiesto(Anno:Integer):String;
Var
Esbisiesto : Integer;
Begin
Esbisiesto:= 0;
If Anno mod 4 = 0
Then
Esbisiesto := 1
Else
Esbisiesto := 0;
If (Anno mod 100 = 0) and (Anno mod 400 <> 0)
Then
Esbisiesto := 0;
If Esbisiesto <> 0
Then
Bisiesto := 'Es Bisiesto'
Else
Bisiesto := 'No es Bisiesto';
End;
{Programa Principal}
Begin
Clrscr;
Writeln('Cual es el año?');
Readln(Anio);
Resultado := Bisiesto(Anio);
Writeln('El año ', Anio,' ', Resultado);
Readln
End.
Comparación entre Funciones y Procedimientos
Nombre_función := valor_función
Ejemplo:
Program Cubo_Numero;
{Programa que calcula el cubo de un número, usando una función}
Uses
Crt;
Var
Numero, Valor: Integer;
{Programa Principal}
Begin
Write ('Introduzca un número entero: ');
Readln (Numero);
Valor := Cubo(Numero);
Write ('El cubo de ',Numero,' es ',Valor);
End.
Llamadas a una Función
Una función definida por el usuario, se invoca de igual modo que una función
Pascal estándar, (predefinida); haciendo referencia a ella en una extensión.
La llamada se realiza con el identificador de la función (designador) o nombre de
la función, acompañado por la lista de parámetros, en una sentencia de asignación
o en una sentencia de salida (escritura)
Formato:
Nombre_de_Función(lista de parámetros actuales)
Reglas:
- Los parámetros actuales deben estar separados por comas
- El número de parámetros actuales y formales debe ser el mismo, y
además los parámetros correspondientes, deben ser de
igual tipo.
Los parámetros actuales pa1, pa2, pa3, … contienen los valores que se pasan al
subprograma identificado como Nombre_subprograma.
4.1 Procedimientos
4.1.1 Concepto
Al igual que los identificadores, los procedimientos deben declararse dentro del
cuerpo del programa. La declaración de un procedimiento NO indica a la
computadora que ejecute las instrucciones dadas, sino que indica a la
computadora cuáles son estas instrucciones y dónde están localizadas cuando
sea necesario.
El formato del procedimiento es el siguiente:
Procedure nombreproc;
Declaraciones locales
Begin
Cuerpo del procedimiento
End;
Ejemplo:
Program Recuadro;
Var I : Integer;
Procedure Estrellas;
(* Este procedimiento visualiza 15 asteriscos *)
Begin
For I := 1 to 15 do
Write (`*´)
End;
Begin
Estrellas; (* Llamado del procedure *);
Write (`Mensajes´);
Estrellas; (* Nuevo llamado del procedure *);
End.
16. Parámetros
Concepto
Ejemplo 2:
(Parámetros de entrada/salida)
El procedimiento Geometria recibe la longitud y anchura de un rectángulo, calcula
el área y perímetro del rectángulo y devuelve los valores obtenidos al programa
principal.
Procedure Geometria (Longitud, Anchura : Real; Var Area, Perímetro : Real);
Begin
Area := Longitud * Anchura;
Perimetro := 2 * (Longitud + Anchura)
End;
Los parámetros actuales pa1, pa2, pa3, ... deben tener unos valores que se pasan
al procedimiento nombreproc.
En la declaración de un procedimiento cuando se incluyen parámetros, éstos se
denominan parámetros formales o ficticios (pf1, pf2, pf3, ...). Ellos sirven para
contener los valores de los parámetros actuales cuando se invoca el
procedimiento.
Procedure nombreproc (pf1, pf2, pf3, ...)
Program Correspondencia;
Uses Wincrt;
Var
X,Y,A,P : real;
Procedure Geometria (Longitud, Anchura : Real; Var Area, Perimetro : Real);
Begin (* Geometría *)
Area := Longitud * Anchura;
Perimetro := 2 * (Longitud + Anchura)
End;
Begin
WriteLn ('Introducir longitud: ');
Readln (X);
WriteLn ('Introducir anchura: ');
Readln (Y);
Geometria (X,Y,A,P); (* Llamada al procedimiento *)
WriteLn ('El área es: ', A:6:2);
WriteLn ('El perímetro es: ', P:6:2)
End.
Parámetros valor
Parámetros variable
Program EjemploParametros;
Uses Wincrt;
Var
A,B,C : Integer;
Begin
A := 2;
B := 3;
C := 4;
WriteLn ('Antes de llamar al procedimiento Pasar');
Imprimir (A, B, C);
Pasar(A, B, C);
WriteLn ('Después de llamar al procedimiento Pasar');
Imprimir (A, B, C);
End.
4.2.1 Ejemplo
En este ejemplo los parámetros formales a y b recibe, cuando son llamados, los
valores contenidos en los parámetros actuales de x e y.
Program Calculo;
Uses wincrt;
Var
x,y : real;
Procedure mayor (a,b : real);
Var
max : real;
Begin
if a > b then
max := a
else
max := b;
writeln ('El mayor de los dos números es ',max:4:2);
End;
Begin
repeat
write ('Introduzca dos números ');
readln (x,y);
mayor (x,y)
until x = 0
End.
4.2.2 Ejemplo
Program Intercambio;
Uses wincrt;
Var
x,y : real;
resp : char;
Procedure cambio (var a,b : real);
Var
aux : real;
Begin
aux := a;
a := b;
b := aux;
writeln ('Ahora el valor de a es ',a:5:2,' y el valor de b es ',b:5:2);
End;
Begin
repeat
clrscr;
write ('Introduzca el valor para x ');
readln (x);
write ('Introduzca el valor para y ');
readln (y);
cambio(x,y);
writeln;
write ('Desea continuar (S/N)?');
readln (resp);
until (resp = 'N') or (resp = 'n')
End.
Práctica general
3. Diseñe un programa que mediante una función calcule la suma de los números
que están en un rango establecido. (Por ejemplo de 1 a 100). Pruebe con varios
rangos.
4. Escribir un programa que, mediante una función devuelva el valor del día de la
semana en respuesta a la entrada de la letra inicial de dicho día.
Respuesta No 1.
Program Salario;
Uses crt;
Var
id_empleado,i,n : integer;
nom_empleado : string [40];
sal_bruto,salario_neto,tod_ded: real;
resp : char;
Respuesta No. 3.
Program sumas;
Uses wincrt;
Var i,n:integer;
Function Sumar (N : integer) : integer;
Var suma : integer;
Begin
Suma := 0;
For i:= 1 to N do
suma := suma + i;
Sumar := Suma;
Write ('La suma de los números del 1',' al ',n, ' es: ',suma);
Readln;
End;
Begin
Write ('Digite el número máximo: ');
Readln (N);
Sumar (N);
End.
Respuesta No. 6.
Program TestPrimos;
Uses Wincrt;
Var
N : integer;
Function Primo (Q : integer) : boolean;
Var
D : integer;
P : boolean;
Begin
If Q < 4 then
Primo := True
Else
Begin
P:= True;
D := 2;
While P and (D<=Q div 2) do
Begin
P := Q mod D <> 0;
D := D + 1
End;
Primo := P
End
End;
Begin
Writeln ('Introduzca un entero positivo o cero para terminar: ');
Readln (N);
While N > 0 do
Begin
If Primo (N) then
Writeln (N,' es primo')
Else
Writeln (N,' no es primo');
Writeln ('Introduzca otro entero');
Readln (N);
End;
Writeln
End.