You are on page 1of 13

Etapas en la resolución de problemas

 Análisis: Estudio detallado del problema con el fin de obtener una serie de documentos o
especificaciones o requerimientos.
Preguntas comunes: ¿Qué entradas se requieren? ¿Cuál es la salida deseada? ¿Qué método
produce la salida deseada?

 Diseño: Definir algoritmo del problema planteado. modular, se divide el problema en


subproblemas menos complejos.

 Codificación (implementación): Codificar es escribir la solución del algoritmo en un lenguaje


de programación la solución.

 Compilación y ejecución: es la traducción del programa fuente a lenguaje de máquina.


Durante la compilación se detectan errores de sintaxis.
Depuración es el proceso de encontrar los errores y corregirlos.

 Mantenimiento: Actualización

 Documentación: Descripción del programa, manuales del usuario

¿Qué es un algoritmo?

Un algoritmo es un método para resolver un problema mediante una serie de pasos precisos,
definidos y finitos.

Los algoritmos son independientes tanto del lenguaje de programación en que se expresan como
de la computadora que los ejecuta.

Características del Algoritmo

 Preciso: debe especificar sin ambigüedad el orden en que se deben ejecutar las
instrucciones.
 Definido: Cada vez que se ejecute bajo las mismas condiciones, deberá proporcionar el
mismo resultado.
 Finito: Debe finalizar en algún momento, o sea, debe realizar un número finito de pasos
hasta lograr su objetivo.
Composición de un programa
.
 Tipos de datos: Todos los datos tienen un tipo asociado con ellos.
 Variables: Son valores que se pueden modificar durante la ejecución de un programa. Al
contrario de las constantes estas reciben un valor, pero este valor puede ser modificado
durante la ejecución o la compilación del programa.
 Constantes: Son valores que no pueden cambiar en la ejecución del programa. Recibe un valor
en el momento de la compilación del programa y este no puede ser modificado.
 Palabras reservadas: Son palabras que tienen un significado especial para el lenguaje.
 Comentarios: Los comentarios pueden aparecer en cualquier parte del programa.

Estructuras de control
Las estructuras de control de un lenguaje de programación se refieren a él orden en que las
instrucciones de un algoritmo se ejecutarán. Determinan el flujo de control.

El flujo normal de ejecución es el secuencial. Si no se especifica lo contrario, la ejecución de un


programa empezaría por la primera instrucción e iría procesando una a una en el orden en que
aparecen, hasta llegar a la última.

La mayor eficacia y utilidad de cualquier lenguaje de programación se deriva de la posibilidad de


cambiar el orden de ejecución según la necesidad de elegir uno de entre varios caminos en función
de ciertas condiciones, o de ejecutar algo repetidas veces, sin tener que escribir el código para
cada vez.

Las sentencias selectivas o alternativas se denominan así porque permiten seleccionar uno de
entre varios caminos por donde seguirá la ejecución del programa. En algunos casos esta selección
viene determinada por la evaluación de una expresión lógica. Este tipo de sentencias se clasifican
en tres:
 simples: SI (IF)
 dobles: SI-SINO (IF-ELSE)
 múltiples: SEGÚN-SEA (SWITCH, CASE)

Las sentencias repetitivas o iterativas permiten realizar algo varias veces (repetir, iterar). Dentro
de ellas se distinguen:
 DESDE (FOR)
 MIENTRAS – HACER (WHILE DO)
 REPETIR-HASTA-QUE (REPEAT UNTIL)

Las Instrucciones selectivas

Instrucción IF-THEN-ELSE

Se puede deducir directamente de la traducción del inglés de sus términos: si la expresión


booleana es evaluada a True entonces se ejecuta la instrucción-1 y en caso contrario (se evalúa a
False) se ejecuta la instruccion-2.
Un ejemplo típico en el que aparece una instrucción de selección podría ser el siguiente
segmento de programa que calcula el máximo de dos números, x e y, y lo almacena en la
variable Max:

If x > y Then
Max: = x
Else
Max: = y

Aunque, en principio, la instrucción If solo permite seleccionar entre dos alternativas, es posible
usarla para realizar una selección entre más de dos opciones: la idea consiste en el anidamiento,
esto es, el uso de una instrucción If dentro de una de las ramas Then o Else de otra instrucción If.
Como ejemplo supóngase que se quiere desarrollar un programa que asigne a cada persona una
etiqueta en función de su altura (en cm), el siguiente fragmento de código realiza la selección
entre tres posibilidades: que la persona sea de estatura baja, media o alta.

If altura < 155 Then


WriteLn ('Estatura Baja')
Else If altura < 185 Then
WriteLn ('Estatura Media')
Else
WriteLn ('Estatura Alta')

Instrucción CASE
La instrucción case permite la selección entre una cantidad variable de posibilidades, es decir, es
una sentencia de selección múltiple. Un ejemplo de esta selección en lenguaje natural podría ser
el siguiente \menú semanal": según sea el día de la semana, hacer lo siguiente: lunes, miércoles y
viernes comer pescado, martes, jueves y sábado comer carne, el domingo comer fuera de casa.
Esta instrucción consta de una expresión (llamada selector) y una lista de sentencias etiquetadas
por una o varias constantes del mismo tipo que el selector; al ejecutarse esta instrucción se evalúa
el valor actual del selector y se ejecuta la instrucción que tenga esa etiqueta, si no existe ninguna
instrucción con esa etiqueta se produce un error.

Una situación en la que es frecuente el uso de la instrucción CASE es cuando algunos programas se
controlan mediante menús, es decir, aparecen en pantalla las diferentes acciones que se pueden
ejecutar dentro del programa y el usuario elige, mediante un numero o una letra, aquella que
quiere utilizar.
Por ejemplo, supongamos un programa de gestión de una biblioteca. Tal programa proporcionara
en pantalla un menú con las siguientes acciones:

B. Búsqueda.
P. Petición préstamo.
D. Devolución préstamo.
S. Salir.

En un primer nivel de refinamiento, el programa podría escribirse de la siguiente forma:


Var
Opción: Char;
...
Mostrar el menú

Leer opción
Case opción of
'B': Busqueda.
'P': Petición Préstamo.
'D': Devolución Préstamo.
'S': Salir.
End

Instrucciones Iterativas

La instrucción While
En algunas ocasiones es necesario especificar una acción que se repite siempre que se cumpla una
determinada condición; una frase en lenguaje natural tal como mientras haga calor usar manga
corta es un ejemplo de este tipo de construcciones.
En Pascal esta construcción se hace mediante la instrucción While. Su diagrama sintáctico es
While Expresión booleana Do Instrucción cuya interpretación es: Mientras que la expresión
booleana sea cierta se ejecutará la instrucción, que se suele llamar cuerpo del bucle, indicada tras
el Do.
A continuación tenemos un fragmento de programa que calcula la suma de los n primeros
números naturales:

ReadLn(n);
Suma:= 0;
Contador:= 1;

While contador <= n Do Begin


Suma:= suma + contador;
Contador:= contador + 1
End; While

WriteLn (suma)

Una situación en que se puede producir este error surge cuando el cuerpo del bucle es una
secuencia de instrucciones y se olvida utilizar los delimitadores Begin y End. Por ejemplo, el
siguiente segmento de código no calcula la suma de los enteros desde el 1 hasta el n:

ReadLn(n);
Suma:= 0;
Contador:= 0;
While contador <= n Do
Suma:= suma + contador; (OJO: Fin de While)
Contador:= contador + 1;
WriteLn (suma)

Al olvidar delimitar el cuerpo del bucle, la instrucción por iterar termina antes de actualizar el valor
del contador, con lo cual el bucle se repite sin cesar y el programa se \cuelga". La corrección de tal
error se reduce a incluir un par Begin-End para delimitar la sentencia interior del bucle.

La instrucción Repeat
Comenzamos este apartado retomando el ejemplo en lenguaje natural con el que se presento la
instrucción While: mientras haga calor usar manga corta. La característica del While hace que este
consejo solo sea válido para gente previsora que comprueba el tiempo que hace antes de salir de
casa.
¿Cómo se podría modificar el ejemplo anterior para que fuera valido también para quien no sabe
qué tiempo hace fuera hasta que ya es demasiado tarde?
Una forma será llevar un jersey puesto hasta que haga calor; de este modo se evitaran bastantes
enfriamientos indeseados.
La instrucción Repeat permite la construcción de bucles similares al de este último ejemplo, con
características ligeramente distintas a la del bucle While. La forma general de la instrucción
Repeat obedece al esquema:

Repeat Lista de instrucciones Until Expresión booleana


Donde
Lista de instrucciones:= instrucción (; instrucción)

Por lo tanto, la interpretación de una instrucción Repeat es: repetir las instrucciones indicadas en
el cuerpo del bucle hasta que se verifique la condición que aparece tras Until.

En este tipo de bucles las palabras reservadas Repeat y Until funcionan


como delimitadoras, no siendo necesario usar Begin-End para delimitar la
lista de instrucciones.

En la ejecución de una instrucción Repeat se comienza ejecutando la lista de instrucciones y


después se comprueba si se cumple la condición (por eso el bucle es postprobado); si la condición
aún no se cumple entonces se repite el bucle, ejecutando la lista de instrucciones y comprobando
la condición. La iteración termina cuando la condición se hace verdadera, en cuyo caso se pasa a la
siguiente instrucción externa al bucle.

Repeat
WriteLn ('Introduzca un número positivo');
ReadLn (numero)
Until numero > 0

Podemos mejorar el ejemplo de aplicación a la gestión de una biblioteca usando la instrucción


Repeat para controlar el momento en el que se desea terminar la ejecución.
Mostrar el menú
(Elegir una acción según la opción elegida)

WriteLn ('Elija su opción: ');


ReadLn (opción);
Repeat
Case opción of
B: Busqueda.
P: Petición Préstamo.
D: Devolución Préstamo.
S: Salir.
End
Until (opción = 'S') or (opción =‘s’)

La instrucción For
La instrucción de repetición For se utiliza para crear bucles con un número predeterminado de
repeticiones. Se utiliza para resolver problemas en los cuales se conoce de antemano la cantidad
de veces que es necesario repetir las instrucciones que componen el bucle. El funcionamiento del
bucle For es el siguiente: primero se comprueba si el Índice rebasa el limite final, con lo que es
posible que el cuerpo del bucle no llegue a ejecutarse ninguna vez, en caso positivo se le asigna el
valor inicial a la variable de control, se ejecuta la instrucción interior una vez y se incrementa una
unidad el valor, si este nuevo valor está comprendido entre el valor inicial y el valor final, entonces
se vuelve a ejecutar la instrucción interior, y así sucesivamente hasta que variable alcanza el valor
Final.
Si en una instrucción For-to-do el valor inicial de la variable es posterior al valor final entonces no
se ejecutan las instrucciones interiores y se sale del bucle.
Var
N, i, suma: integer;
...
ReadLn (n);
Suma: = 0;
For i: = 1 to N do
Suma: =Suma + i;
WriteLn (Suma)
Definición de funciones
En programación, una función es una sección de un programa que
calcula un valor de manera independiente al resto del programa.

En escencia, una función es un mini programa: tiene una entrada, un


proceso y una salida.

Una función tiene tres componentes importantes:

 los parámetros, que son los valores que recibe la función como
entrada;
 el código de la función, que son las operaciones que realiza la
función; y
 el resultado o valor de retorno, que es el valor final que
entrega la función.

En un programa Pascal, las funciones deben ser definidas antes


del begin que indica el comienzo del programa.

La sintaxis para definir una función es la siguiente:

function {nombre}({parámetro}: {tipo}; ...): {tipo del resultado};


var
{variables locales}
begin
{código de la función}
end;
(La sección var es opcional). Por ejemplo, el polinomio f que declaramos
más arriba podemos escribirlo como una función de la siguiente manera:
function F(x: Real): Real;
begin
F := x * x * x * x * x + 1;
end;

Esta función tiene el nombre F, un parámetro x de tipo real, y un


resultado de tipo real.

El resultado es indicado dentro de la función asignando su valor al


nombre de la función.

Una vez que se ha definido la función, puede ser utilizada todas las
veces que se desee en un programa. Se le denomina llamar la
funcióna ocupar la función para obtener un valor. Por ejemplo, las
siguientes son todas llamadas válidas de la función F, junto con sus
resultados:

F(0); {→ 1.0}
F(-1.1 * 0.5); {→ 0.9496715625}
F(F(1.0)); {→ 33.0}
a := -1.0;
F(a * F(a)) {→ 1.0}

El programa completo que calcula la expresión que definimos al principio


para dos valores a y b ingresados por el usuario es el siguiente:

program FuncionF;
1
var
2
a, b: Real;
3
4
function F(x: Real): Real;
5
begin
6
F := x * x * x * x * x + 1;
7
end;
8
9
begin
10
Write('Ingrese a y b: ');
11
Read(a, b);
12
WriteLn(F(F(F(a)) + F(F(b))):3:3);
13
end.
14

Variables locales
Supongamos que ahora queremos reemplazar la misma expresión
original, pero reemplazando f por el polinomio g(x)=x99+1.
Para calcular x5, lo hacíamos con cinco multiplicaciones, pero
para x99conviene más usar un ciclo for. Para ello, necesitamos una
variable de control, que denominaremos i, y una variable para ir
guardando los resultados parciales de las multiplicaciones, que
denominaremos producto:
producto := 1;
for i := 1 to 99 do
producto := producto * x;
G := producto + 1;

Las variables producto e i sólo son usadas por la función G, y no por el


resto del programa. Por lo mismo, pueden ser declaradas dentro de la
función, y de este modo serán invisibles desde fuera de ella.
Las variables que son declaradas en una función se llaman variables
locales. Ellas existen sólo mientras la función es llamada. Una vez que
la función entrega su resultado, las variables locales dejan de existir, y
no pueden ser utilizadas desde el resto del programa. Los parámetros
de la función también son variables locales.

Las variables que son declaradas en la sección var del programa se


llaman variables globales, y pueden ser utilizadas en cualquier parte
del programa, incluso dentro de una función.
El programa modificado para usar la función g en lugar de la función fes
el siguiente:
program FuncionG;
1
var
2
a, b: Real;
3
4
function G(x: Real): Real;
5
var
6
producto: Real;
7
i: Integer;
8
begin
9
producto := 1;
10
for i := 1 to 99 do
11
producto := producto * x;
12
G := producto + 1;
13
end;
14
15
begin
16
Write('Ingrese a y b: ');
17
Read(a, b);
18
WriteLn(G(G(G(a)) + G(G(b))):3:3);
19
end.
20

En este programa, las variables a y b son globales, mientras que las


variables x, producto e i son locales de la función G.

Funciones que usan funciones


Ahora supongamos que queremos reemplazar la función g por el
polinomio h(x)=x99− 5x79+10x59− 5x29+1 .
Si definimos una función H, esto requerirá calcular cuatro productos
como los que calculamos en la función G. Para evitar tener que escribir
código repetido, podemos escribir una nueva función Potencia(x, n)que
calcule xn.
function Potencia(x: Real; n: Integer): Real;
var
i: Integer;
resultado: Real;
begin
resultado := 1;
for i := 1 to n do
resultado := resultado * x;
Potencia := resultado;
end;

El programa completo sería el siguiente:

program FuncionH;
1
var
2
a, b: Real;
3
4
function Potencia(x: Real; n: Integer): Real;
5
var
6
i: Integer;
7
resultado: Real;
8
begin
9
resultado := 1;
10
for i := 1 to n do
11
resultado := resultado * x;
12
Potencia := resultado;
13
end;
14
15
function H(x: Real): Real;
16
begin
17
H := Potencia(x, 99) - 5 * Potencia(x, 79) +
18
10 * Potencia(x, 59) - 5 * Potencia(x, 29) + 1;
19
end;
20
21
begin
22
Write('Ingrese a y b: ');
23
Read(a, b);
24
WriteLn(H(H(H(a)) + H(H(b))):3:3);
25
end.
26

Como vemos, la definición de la función H resulta muy simple ya que la


tarea de calcular las potencias ha sido encapsulada en otra función. En
general, siempre que haya operaciones que deben hacerse varias veces,
conviene definir una función para realizarla.
Procedimientos
Un procedimiento es una sección de un programa (al igual que una
función) que realiza varias sentencias de manera independiente al resto
del programa. La diferencia con una función es que un procedimiento no
entrega ningún valor como resultado.

Los procedimientos son útiles para agrupar secuencias de sentencias


que deben ser realizadas juntas. Usar procedimientos suele hacer que
los programas sean más fáciles de leer.

La sintaxis para crear un procedimiento es la siguiente:

procedure {nombre}({parámetro}: {tipo}; ...);


var
{variables locales}
begin
{código del procedimento}
end;

Por ejemplo, desarrollemos un programa que:

 pida al usuario que ingrese diez valores;


 calcule la expresión que definimos al principio de la página a todos
los pares consecutivos de valores, usando la función k(x)=x2− x+1 ;
 mostrar los resultados por pantalla.

El ingreso de los datos puede ser realizado por un


procedimiento LeerValores(n), que le pida al usuario que
ingrese n valores:

procedure LeerValores(m: Integer);


var
i: Integer;
begin
for i := 1 to m do
begin
Write('Ingrese valor ', i, ': ');
Read(valores[i]);
end;
end;

De la misma manera, uno puede crear procedimientos que se encarguen


de calcular los resultados y luego de imprimirlos.
El programa quedaría así:
1 program FuncionAPares;
2 const
3 N = 10;
4 var
5 valores: Array[1..N] of Real;
6 resultados: Array[1..N - 1] of Real;
7
8 function K(x: Real): Real;
9 begin
10 K := Sqr(x) - x + 1
11 end;
12
13 procedure LeerValores(m: Integer);
14 var
15 i: Integer;
16 begin
17 for i := 1 to m do
18 begin
19 Write('Ingrese valor ', i, ': ');
20 Read(valores[i]);
21 end;
22 end;
23
24 procedure CalcularResultados(m: Integer);
25 var
26 i: Integer;
27 a, b: Real;
28 begin
29 for i := 1 to m do
30 begin
31 a := valores[i];
32 b := valores[i + 1];
33 resultados[i] := K(K(K(a)) + K(K(b)));
34 end;
35 end;
36
37 procedure ImprimirResultados(m: Integer);
38 var
39 i: Integer;
40 begin
41 for i := 1 to m do
42 WriteLn(resultados[i]:3:3);
43 end;
44
45 begin
46 LeerValores(N);
47 CalcularResultados(N - 1);
48 ImprimirResultados(N - 1)
49 end.

Como puede verse, el programa principal queda muy corto y fácil de


entender:

LeerValores(N);
CalcularResultados(N - 1);
ImprimirResultados(N - 1)

You might also like