Sie sind auf Seite 1von 63

Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I

Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez



1
Introduccin a la programacin




PROLOGO

La programacin de software no es una tarea muy sencilla. Concebimos a sta como un
concepto, una idea abstracta cuyo resultado es el software. Aquel intrincado programa de
computadora que nadie entiende como funciona pero que si puede explicar las tareas que
realiza.


A nuestros estudiantes, nuestros ms sinceros deseos de que completis vuestro aprendizaje y
de que vuestros deseos y esmeros se vean completados. Que el cielo os ilumine y la
esperanza de poder Contemplarle os anime a caminar vuestra senda; y que en la hora oscura,
al levantar los ojos al infinito vuestras desazones sean apagadas por el calor del Sol de
vuestros corazones.




vuestro amigo




Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

2
Introduccin a la programacin

CAPITULO I: INTRODUCCION A LA PROGRAMACION


LENGUAJES DE PROGRAMACION
Desde los inicios de las primeras computadoras, los programadores han tenido que lidiar con
infinidad de problemas, todos ellos relacionados con un problema fundamental: Cmo hacer
que la computadora procese informacin?

Y es que en los inicios los programadores deban, adems de poseer geniales aptitudes de
razonamiento lgico, conocimientos relativos a la arquitectura interna de una computadora.
Solamente un gran conocedor de tal estructura interna de una PC poda realmente realizar
programas ejecutables por esto.

Los primeros programadores debieron necesariamente que lidiar con el lenguaje mquina,
aquel difcil e incomprensible mundo de los unos y ceros que explicaban y ordenaban a la PC
ejecutar alguna accin.

Gracias al ingenio y al deseo de facilitar las tareas de programacin, apareci lo que se conoce
como lenguaje ensamblador, que facilitaba en algo las tareas de programacin, aunque an se
requera que el programador poseyera conocimientos de la arquitectura de una computadora.

Cada lenguaje es ideal para un tipo de aplicaciones
Acerca de cada lenguaje se puede decir que cada uno de ellos puede ser utilizado con mayor
versatilidad en algunos tipos de aplicaciones tal como se indica en el siguiente cuadro:

TIPO DE
APLICACIN
EJEMPLO
LENGUAJE DE
PROGRAMACIN
Aplicaciones de
clculos cientficos
Calculo de integrales, Derivadas,
Optimizacin lineal y no lineal.
Clculo de trayectorias de misiles,
etc.
Fortran, Matlab, C++, Delphi
Aplicaciones de
manejo de bases de
datos
Administracin de Hotel, Registro de
Matriculas, Administracin de
Consultas mdicas
Visual Basic, Delphi, Power
Builder, Java
Aplicaciones Web
(Internet)
Ventas por Internet, sistemas tipo e-
procurement
PHP, AJAX, HTML, Java,
Pyton
Aplicaciones para
Gestores de Bases de
Datos
Programacin en el Servidor de
Bases de datos (Procedimientos
almacenados, triggers)
SQL, Transact SQL,PL/SQL
Aplicaciones de
Graficacin (Ej.
Autocad)
En Autocad usamos el Lisp para
programar extensiones del autocad
Lisp



COMPILADORES
Surgi, como respuesta inmediata al gran deseo de abstraccin de los programadores,
conceptos tales como los de compiladores y programas compiladores
1
. Qu eran estos?
pues simplemente programas que servan para escribir programas.

Estos programas permitan al usuario, escribir instrucciones y mandos ajustados a una sintaxis
y gramtica preestablecida, la cual poda variar segn el parecer de sus creadores. Estos
compiladores nos permitan tener programadores que no tuviese grandes conocimientos
especializados en la arquitectura de computadoras, es ms, cualquier individuo con un mnimo
de instruccin sobre tales temas poda escribir programas elementales (sencillos) para una
computadora.

1
Compilador, en el contexto de este curso, debe ser entendido como un programa que a partir de un
programa fuente, puede generar el respectivo programa objeto (programa ejecutable).
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

3
Introduccin a la programacin

Actualmente existen muchos programas compiladores en el mercado, y debido a que la sintaxis
permitida en la escritura de instrucciones (o tambin dicho lenguaje de programacin) es nica,
cuando hablamos sobre lenguajes de programacin, necesariamente hacemos alusin al
programa que permite tal lenguaje. Actualmente podemos or que mucho se habla respecto a
los usos de los diferentes lenguajes de programacin: Pascal, C, C++, Visual Basic, Visual
C++, Delphi, Power Builder, Visual Fox Pro, etc. Cul de ellos usted usar?. Los vendedores
de estos productos pretenden responder por usted con respuestas tales como:
- El ms veloz
- El ms legible
- El ms portable
- El ms usado,
- Etc.

No se preocupe si por el momento no tiene respuesta alguna, en adelante, usted podr elegir.

Tipos de Lenguajes de Programacin
De acuerdo al nivel de abstraccin que permiten los lenguajes de programacin, se han
clasificado stos en dos niveles muy diferenciados:
- Lenguajes de bajo nivel, donde se ubican el lenguaje mquina as como las distintas
versiones de ensamblador.
- Lenguajes de alto nivel, donde podemos encontrar a la diversidad de programas tales
como Delphi, C++, Visual Basic, Pascal, etc.


Figura 1.1 Es bsicamente el lenguaje mquina el nico lenguaje que reconoce
una computadora. Los lenguajes de alto nivel nicamente ofrecen niveles de
abstraccin, para un programa sea entendible por la computadora, ste debe
ser transformado a su equivalente en lenguaje mquina.

Tipos de Programas
Segn la naturaleza de la utilidad del programa creado, los programas pueden dividirse en dos
grandes grupos:
Programa Fuente: se refiere al programa cuyo texto es legible a la vista del
programador. Es el programa que contiene caracteres que se ajustan a una sintaxis y
estructura estndar.
Programa Objeto: es el programa generado cuando se toma como materia prima el
programa fuente. Normalmente se encuentra en formato binario. Los archivos que
contienen este tipo de programa normalmente son ilegibles a la vista del programador.
Su contenido es solamente entendible por la computadora.

Lenguaje mquina Ensamblador
C++
Visual Basic
Delphi
Power Builder
MVI AX, 32
ADD BX
1 0 0 1 0 0 1 0
1 0 1 0 1 1 0 0
Lenguajes de Bajo Nivel
Lenguajes de Alto Nivel
USUARIO
Computadora
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

4
Introduccin a la programacin
Programa
FUENTE
Programa
OBJETO
Compilador
#include<iostream.h>
#include<conio.h>
void main()
{ int a,b;
cin>> a ;
cin>> b ;
c = a+ b ;
cout<< c ;
getch( );
}
#"g/0?22g>>
%&/(2m!
!='$&/()31
progr1.cpp
progr1.exe

El archivo que contiene el programa Objeto es generado a partir del archivo que contiene el
programa objeto. Existe una relacin de equivalencia entre ambos archivos

De los dos tipos de programa, solamente los programas objeto contienen el cdigo binario que
puede ser interpretado por la computadora.

Tipos de archivos
Normalmente, la extensin del nombre de los archivos hace referencia a lo que contiene cada
archivo: si contiene DATOS o contiene algn PROGRAMA (cdigo binario que contiene
instrucciones ejecutables por el computador). A continuacin mencionamos algunos ejemplos:
Nombre de archivos de datos (Ejemplos)
Nombre de archivos de programa
(Ejemplos)
Miprog.cpp (prog. Fuente C++) Miprogram.EXE
Informe.doc (Datos de documento Word) Pepe.EXE
Foto23.bmp (Archivo de imagen) Winword.EXE
Hoja.XLS (Archivo de hoja de clculo) Odbdrv.OCX
Mipresent.ppt (Presentacin)
Todos los archivos de extensin *.OCX,
*.DLL, *.OBJ



Funciones de un compilador
Las funciones bsicas de un compilador son las siguientes:
- Edicin del programa fuente. El compilador debe incluir el respectivo entorno de edicin
del programa fuente (el programa entendible por el programador). Es decir, permiten la
escritura de programas
- Compilacin del programa fuente. Bsicamente son las funciones relacionadas con las
tareas de deteccin de errores en la escritura de los programas fuentes. Tambin se
incluyen aqu las tareas de enlazado (linker), que permiten al compilador unir las diferentes
partes del programa fuente (mdulos y archivos) para dar lugar a un nico programa objeto
(el programa ejecutable). Es decir, permiten la respectiva generacin del programa objeto a
partir del programa fuente.
Lenguaje de alto nivel
Lenguaje mquina
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

5
Introduccin a la programacin
Figura 1.2. La tarea de un compilador, principalmente, es la de generar,
a partir del archivo que contiene un programa fuente, otro archivo conteniendo el respectivo programa
objeto equivalente, el mismo que puede ser un archivo ejecutable (archivo *.exe)


LOS TRADUCTORES DE LENGUAJE
2

Para poder describir los programas escritos en un lenguaje de programacin por el
programador y que posteriormente puedan ser entendidos por la computadora, se requieren
traductores de lenguajes. Tradicionalmente, los traductores se dividen en dos clases:
intrpretes y compiladores.

Un intrprete traduce cada sentencia del cdigo fuente (escrito en el lenguaje de programacin)
en instrucciones en cdigo mquina que son ejecutadas inmediatamente por la mquina.
Algunas versiones primitivas de C fueron implementadas sobre traductores de tipo intrprete.
Sin embargo, sus inconvenientes para construccin de grandes proyectos, pese a sus
innegables ventajas, han eliminado prcticamente su uso. Hoy en da, casi todos los
traductores de lenguajes se construyen utilizando tcnicas similares a las que corresponden a
la construccin de compiladores.

Un compilador traduce todo el cdigo fuente directamente en lenguaje ensamblador o
instrucciones mquina, denominado cdigo objeto
3
.


EDICION DE PROGRAMAS FUENTES
Una versin muy utilizada de C++ es Turbo C++ 5.0 de la Borland. Proporciona un entorno
integrado que le permite gestionar todas las etapas de desarrollo de un programa, incluyendo
la edicin.

Al nombrar un archivo fuente, se necesita utilizar un sufijo adecuado para identificar el archivo
como un archivo C++. El sufijo consta de un punto seguido por un carcter o grupo de
caracteres llamado extensin.

Nota: Por cuestiones meramente didcticas se est prefiriendo el entorno de
programacin Borlanc C++ 5.0 para las prcticas


2
Luis Joyanes Aguilar, C++ a su alcance, un enfoque orientado a objetos, pp. 22, 23
3
O tambin dicho: programa objeto.
Programa
fuente
Programa
objeto
Compilador
*.h
*.cpp
*.pas
*.frm
*.obj
*.exe
*.com
*.dll
*.ocx
Turbo C++
Pascal
Visual Basic
Delphi
Conversin
Entrada
Salida
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

6
Introduccin a la programacin
Figura 1.3. Nombre y extensin de un archivo fuente

La extensin que se utiliza depende de la implementacin C++. La siguiente tabla muestra las
extensiones tpicas.

Compilador C++ Extensin del cdigo fuente
UNIX AT&T
Borland, Turbo
4

Visual C++ (Microsoft)
Zortech
C, cc, cxx, c
Cpp
Cpp
Cxx
Figura 1.4.a Extensiones tpicas de un archivo fuente


Extensin de archivos de datos Extensin de archivos binarios
(programas Ejecutables)
c, cc, cxx, cpp,
pas,
Doc (de Word), ppt (Power Point),
Xls(Excel), bmp, jpg
Bin, exe, com,
tcu, dcu, dll, ocx

Figura 1.4. b Extensiones de archivos de datos versus archivos ejecutables

4
Este es el compilador usado en las clases tericas (Turbo C++ 3.0)
prueba . cpp
Extensin del nombre del archivo
fuente en C++
punto
nombre del archivo
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

7
Introduccin a la programacin
CAPITULO II: LO BASICO DE C++

PROPSITO DE C Y C++
5

Qu clase de programas y aplicaciones se pueden crear usando C y C++? La respuesta es
muy sencilla: TODOS. Tanto C como C++ son lenguajes de programacin de propsito
general. Todo puede programarse con ellos, desde sistemas operativos y compiladores hasta
aplicaciones de bases de datos y procesadores de texto, pasando por juegos, aplicaciones a
medida, etc.

Oirs y leers mucho sobre ste tema. Sobre todo diciendo que estos lenguajes son
complicados y que requieren pginas y pginas de cdigo para hacer cosas que con otros
lenguajes se hacen con pocas lneas. Esto es una verdad a medias. Es cierto que un listado
completo de un programa en C o C++ para gestin de bases de datos (por poner un ejemplo)
puede requerir varios miles de lneas de cdigo, y que su equivalente en Visual Basic slo
requiere unos pocos cientos. Pero detrs de cada lnea de estos compiladores de alto nivel hay
cientos de lneas de cdigo en C, la mayor parte de estos compiladores estn respaldados por
enormes libreras escritas en C. Nada te impide a ti, como programador, usar libreras, e
incluso crear las tuyas propias.

Una de las propiedades de C y C++ es la reutilizacin del cdigo en forma de libreras de
usuario. Despus de un tiempo trabajando, todos los programadores desarrollan sus propias
libreras para aquellas cosas que hacen frecuentemente. Y adems, raramente piensan en ello,
se limitan a usarlas.

Adems, los programas escritos en C o C++ tienen otras ventajas sobre el resto. Con la
excepcin del ensamblador, generan los programas ms compactos y rpidos. El cdigo es
transportable, es decir, un programa ANSI en C o C++ podr ejecutarse en cualquier mquina y
bajo cualquier sistema operativo. Y si es necesario, proporcionan un acceso a bajo nivel de
hardware slo igualado por el ensamblador.

Otra ventaja importante, C tiene ms de 30 aos de vida, y C++ casi 20 y no parece que su uso
se debilite demasiado. No se trata de un lenguaje de moda, y probablemente a ambos les
quede an mucha vida por delante. Slo hay que pensar que sistemas operativos como Linux,
Unix o incluso Windows se escriben casi por completo en C.

Por ltimo, existen varios compiladores de C y C++ gratuitos, o bajo la norma GNU, as como
cientos de libreras de todo propsito y miles de programadores en todo el mundo, muchos de
ellos dispuestos a compartir su experiencia y conocimientos.

DECLARACIONES Y CONSTANTES
Se presentan los tipos fundamentales (char, int, float, etc.) y las formas bsicas de derivar
nuevos tipos (funciones, arreglos, punteros etc.)

Declaraciones.
Antes de usar un nombre se debe declararlo
Ejemplo:
char car;
int cuenta = 1;
char* nombre = Joel;
struct complejo {float re, im;},
complejo varcom;
extern complejo sqrt(complejo);
extern int nmero_error;
typedef complejo punto;
float real(complejo* p) {return p->re; };
const double pi=4.1415926535897932385;
struct usuario;
template<class T> abs(T,a) {return a<0 ? -a:a;}
enum perro {Bulldog, Chihuahua, Terrier };

5
Salvador Pozo Coronado, Curso de C++, p. 11
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

8
Introduccin a la programacin

Las declaraciones pueden ser definiciones.
Las declaraciones pueden o no definir un valor por ejemplo,
char car;
complejo varcom;


no definen ningn valor
int cuenta = 1;
char* nombre = Joel;
struct complejo {float re, im;},
typedef complejo punto;
float real(complejo* p) {return p->re; };
template<class T>abs(T, a) {return a<0 ? -a : a; }
enum perro {Bulldog, Chihuahua, Terrier };

Las variables generalmente cambian su valor dentro del programa, sin embargo otras
se definen como constantes, es decir, su valor no cambiar, por ejemplo,
const double pi=4.1415926535897932385;

Otras declaraciones no son definiciones, por ejemplo:
extern complejo sqrt(complejo);
extern int nmero_error;
struct usuario;

Existen otras tipos de definiciones, por ejemplo:
typedef complejo punto;

Permite que punto sea sinnimo de complejo; es decir
complejo varcom;

es equivalente a:
punto varcom;

template<class T>abs(T, a) {return a<0 ? -a : a; }
permite que a la funcin abs se le ingrese el tipo como parmetro.

enum perro {Bulldog, Chihuahua, Terrier };
es otra forma de enumerar entero.

Las variables no se pueden definir ms de una vez, ejemplo
char car;
char car; // error !.

en este caso no hay error
extern char car;
extern char car;
Porque es una declaracin, la definicin est en otro archivo.



Si en una declaracin no concuerdan los tipos, se produce un error, por ejemplo,
extern int nmero_error;
extern short nmero_error;






Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

9
Introduccin a la programacin
Alcance. (Variables Globales y locales)
Una declaracin slo es vlida dentro del bloque. Por ejemplo:
int x;

void f()
{ int x;
x=1;
{ int x;
x=2;
}
x=3;
}

int* p = &x;

La primera definicin es vlida para todo el programa, sin embargo en los bloques siguientes se
redefine x, y se hace vlida para cada bloque. Se recomienda no usar variables globales u
ocultas con nombre como x o i, porque pueden llevar a confusin.

Se puede usar el operador :: para referirse a variables globales. Por ejemplo:
int x;
void f2()
{ int x=1;
:: x=2;
}

OBSERVACIN: No existe la forma de usar un nombre local desde el exterior,
Un error comn es:
void f(int x)
{
int x;
}

Tiempo de vida de una variable.
Una variable nace cuando se declara y muere cuando se termina el bloque dentro del cual fue
declarado.

Una forma de declarar nombre globales dentro de un bloque es usando la palabra static y
aunque se declare dentro de una funcin que se invoca muchas veces, slo se iniciar una
vez.

Ejemplo: El programa:
int a=1;
void f()
{ int b=1;
static int c=a;
cout<< a = << a++
<< b = << b++
<< c = << c++ << \n;
}

int main()
{ while (a<4) f();
}

produce las salidas
a = 1 b =1 c = 1
a = 2 b =1 c = 2
a = 3 b =1 c = 3


Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

10
Introduccin a la programacin
CADENAS DE CARACTERES
Antes de entrar en el tema de los "arrays" tambin conocidos como arreglos, tablas o matrices,
veremos un caso especial de ellos. Se trata de las cadenas de caracteres o "strings".

Una cadena en C es un conjunto de caracteres, o valores de tipo "char", terminados con el
carcter nulo, es decir el valor numrico 0. Internamente se almacenan en posiciones
consecutivas de memoria. Este tipo de estructuras recibe un tratamiento especial, y es de gran
utilidad y de uso continuo.

La manera de definir una cadena es la siguiente:
char <identificador> [<longitud mxima> ];

En este caso los corchetes no indican un valor opcional, sino que son realmente corchetes, por
eso estn en negrita.

Cuando se declara una cadena hay que tener en cuenta que tendremos que reservar
una posicin para almacenar el carcter nulo, de modo que si queremos almacenar la
cadena "HOLA", tendremos que declarar la cadena como:
char Saludo[5];
Cuatro caracteres para "HOLA" y uno extra para el carcter '\000'.

Tambin nos ser posible hacer referencia a cada uno de los caracteres individuales
que componen la cadena, simplemente indicando la posicin. Por ejemplo el tercer
carcter de nuestra cadena de ejemplo ser la 'L', podemos hacer referencia a l como
Saludo[2].

Los ndices tomarn valores empezando en el cero, as el primer carcter de nuestra
cadena sera Saludo[0], que es la 'H'. Una cadena puede almacenar informaciones
como nombres de personas, mensajes de error, nmeros de telfono, etc.

La asignacin directa slo est permitida cuando se hace junto con la declaracin. Por
ejemplo:
char Saludo[5];
Saludo = "HOLA"

Aunque no produzca un error en el compilador, no est haciendo lo que nosotros
probablemente pretendemos, como veremos en el captulo de "arrays" o arreglos. La
manera correcta de asignar una cadena es:
char Saludo[5];
Saludo[0] = 'H';
Saludo[1] = 'O';
Saludo[2] = 'L';

Introduccin a las funciones:
Una Funcin es una parte del cdigo independiente del programa que se llama dentro de l,
como dijimos anteriormente C no tiene procedimientos solamente funciones los procedimientos
los simula con funciones que no devuelven nada (void) la estructura de la funciones en C y es
los elementos ms fuertes del lenguaje.

El desarrollo de una funcin es:
Tipo_de_valor_retorno nombreFuncin(lista de argumentos)
{declaracion de variables locales a la funcin
codigo ejecutable
return ( exprecion ) // optativo
}

las variables de nuestras funciones son locales es decir que solamente viven cuando se est
ejecutando la llamada a la funcin; el cdigo ejecutable son las sentencias que el programa
utiliza para funcionar y el valor de retorno es el resultado que va a devolver la misma funcin (
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

11
Introduccin a la programacin
si se dice que una funcin retorna un entero en el return se debe poner un entero como valor
de devolucin
Ejemplo: esta funcin de ejemplo cuenta cuantos caracteres existen dentro de una
variable que se le pase como parmetro.

int cuentacaracteres( char cadena[] )
{int cont =0; // defino una variable local para la funcin
for (cont=0; cadena[cont]!= \0; cont++)
{ ;; }
return (cont);
}

Analicemos la funcin expuesta primero decimos que la funcin devuelve un int entero y el
nombre de la funcin es cuentacaracteres y como argumento se le pasa una cadena. Dentro
de la funcin se define una variable local que solamente funciona para esta funcin y es de tipo
entero despus recorro la cadena pasada como parmetro buscando el fin de lnea (\0)
cuando lo encuentro retorno el valor de cont que tiene la cantidad de caracteres que contiene
la cadena. ;) Y dentro de nuestro programa se debe definir las funciones de esta manera.

Valor_de_retorno nombrefuncion( lista de argumentos);
Main()
{ ....
....
}
valor_de_retorno nombrefuncion( lista de argumentos)
{ variables locales
codigo ejecutable ...
...
...
return valor_de_retorno
};

A continuacin se muestra un ejemplo de una funcin que dibuja un cuadrado en la pantalla
solamente con pasarle las coordenadas de x,y -x1,y1 esta funcin no devuelve nada.
/*
Esta funcin dibuja un cuadrado simple y un cuadrado doble
especificando las coordenadas de x y ,x1 ,y1
*/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>

void cuadro( int x, int y, int x1 , int y1 ,int tipo)
{
int cont, lin_hor, lin_ver, sup_izq, sup_der, inf_izq,
inf_der;
if (tipo ==1)
{ lin_hor =196; lin_ver =179;
sup_der =218; sup_izq =191;
inf_der =192; inf_izq =217;
}
else
{ lin_hor =205; lin_ver =186;
sup_der =201; sup_izq =187;
inf_der =200; inf_izq =188;
}
for (cont=x ;cont <= x1 ;cont++)
{ gotoxy(cont,y ); cprintf("%c",lin_hor);
gotoxy(cont,y1); cprintf("%c",lin_hor);
}
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

12
Introduccin a la programacin

for (cont=y ;cont <=y1 ;cont++)
{ gotoxy(x, cont); cprintf("%c",lin_ver);
gotoxy(x1, cont); cprintf("%c",lin_ver);
}
gotoxy(x ,y ); cprintf("%c",sup_der);
gotoxy(x1,y ); cprintf("%c",sup_izq);
gotoxy(x ,y1); cprintf("%c",inf_der);
gotoxy(x1,y1); cprintf("%c",inf_izq);
}

void main()
{ clrscr();
cuadro(1,1,80,24,1);
cuadro(5,5,75,19,2);
}




Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

13
Introduccin a la programacin

ALGORITMOS Y DIAGRAMAS DE FLUJO

DEFINICION
Un algoritmo es un conjunto finito de instrucciones o pasos que sirven para ejecutar una tarea o
resolver un problema. La palabra algoritmo deriva del nombre del matemtico arabe Al-
Khwarizmi
6
, que vivi entre los siglos VII y VIII.

En la vida cotidiana empleamos algoritmos en multitud de ocasiones para resolver diversos
problemas como por ejemplo para poner una lavadora (conjunto de instrucciones pegadas en
la tapa de la mquina), para tocar msica (partituras), para construir un aeroplano a escala
(expresados en las instrucciones), para hacer trucos de magia (pasos para hacer el truco) o,
incluso, para hacer recetas de cocina (pasos de la receta). Otros ejemplos, como el algoritmo
de la divisin para calcular el cociente de dos nmeros o el algoritmo de Euclides para calcular
el mximo comn divisor de dos enteros positivos pertenecen al mbito de las matemticas.

De un modo ms formal, un algoritmo es una secuencia finita de instrucciones realizables, no
ambiguas, cuya ejecucin conduce a una resolucin de un problema. El algoritmo nos da la
solucin genrica a un problema y lo podremos emplear todas las veces que se nos presente
ese mismo problema: por ejemplo el algoritmo de la divisin es genrico e independiente de los
nmeros que tengamos que dividir.

Una vez descubierto un algoritmo para efectuar una tarea, la realizacin de sta ya no requiere
entender los principios en que se basa dicho algoritmo, pues el proceso se reduce a seguir las
instrucciones del mismo. Por ejemplo, podemos hacer una divisin siguiendo el algoritmo sin
entender por qu funciona el algoritmo. La inteligencia requerida para llevar a cabo la tarea
est codificada en el algoritmo.



ALGORITMOS
Entendemos como algoritmo al conjunto de procedimientos ordenados que describen una
forma de ejecutar una serie de operaciones o acciones para resolver un modelo matemtico y/o
lgico.





Figura 1.6 Todo problema que ha de ser resuelto computacionalmente,
forzosamente debe generar un algoritmo, el cual describe su solucin

NOTA: un problema est computacionalmente resuelto cuando podemos expresar el modelo
matemtico y/o lgico mediante un algoritmo que ha sido validado (se ha verificado su
solucin).

As pues, si queremos que un computador efecte una tarea, primero debemos descubrir un
algoritmo para llevarla a cabo; programar el algoritmo en la mquina consiste en representar
ese algoritmo de modo que se pueda comunicar a una mquina. En otras palabras, debemos
transformar el algoritmo conceptual en un conjunto de instrucciones y representar estas ltimas
en un lenguaje sin ambigedad.


6
Abu Abdallah Muammad ibn Ms al-Jwrizm (Abu Y'far) (
), conocido generalmente como al-Jwrizm matemtico, astrnomo y gegrafo persa
musulmn chi, vivi aproximadamente entre 780 y 850. Estudi y trabaj en Bagdad en la primera mitad
del siglo IX, en la corte del califa al-Mamun. Para muchos, fue el ms grande de los matemticos de su
poca
Problema Modelo matemtico
y/o lgico
Algoritmo
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

14
Introduccin a la programacin


FIN
Hay
errores?
INICIO
Obtener computadora
Inspirarse
Redactar una historia
en la computadora
Imprimir versin preliminar
Verificar redaccin
Imprimir N Libros
Imprimir
versin final
Leer N
cantidad de libros
Distribuir y
vender Libros
NO SI



Ejemplos de problemas computarizables resueltos
a travs de algoritmos expresados en diagramas de flujo


DISEO DE ALGORITMOS
El diseo de algoritmos es un paso esencial en el proceso de computarizar problemas, es
decir, en el proceso de la programacin.

Est rico?
Fin
INICIO
Comprar verduras
Encender la cocina
Colocar la olla en la cocina
Ajustar el fuego y esperar
Servir en el plato
Comer todo
SI
NO
Problema computacional: Comer
un delicioso plato de comida
Problema computacional:
Escribir y vender un libro
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

15
Introduccin a la programacin
Tras una adecuada fase de anlisis, para poder solucionar problemas sobre una computadora,
debe conocerse cmo disear algoritmos. En la prctica sera deseable disponer de un mtodo
para escribir algoritmos. El diseo de algoritmos es un proceso creativo
7
. Sin embargo existen
una serie de pautas o lneas a seguir que ayudarn al diseo de algoritmos. Algunas de ellas
son las siguientes:

1. Formular una solucin precisa del problema que debe solucionar el algoritmo.
2. Ver si existe ya algn algoritmo para resolver el problema o bien se puede adaptar
uno ya existente (algoritmos conocidos).
3. Buscar, si existen, tcnicas estndar que se puedan utilizar para resolver el problema.
4. Elegir una estructura de datos adecuada.
5. Dividir el problema en subproblemas y aplicar el mtodo a cada uno de los
subproblemas.
6. Si todo lo anterior falla, comience con el paso 1.

De cualquier forma, antes de iniciar el diseo de algn algoritmo, es preciso asegurarse que el
programa est bien definido.
- Especificaciones precisas y completas de las entradas necesarias.
- Especificaciones precisas y completas de la salida.
- Cmo debe reaccionar el programa ante datos incorrectos?
- Se emiten mensajes de error? se detiene el proceso?, etc.
- Conocer cundo y cmo debe terminar un programa.







Figura 1.5 Los algoritmos nos permiten poder implementar el respectivo programa


Las formas estndares de expresar los algoritmos es a travs de diagramas de flujo o
pseudocdigos. Ambas formas son vlidas.


El algoritmo es de carcter general y puede aplicarse a cualquier operacin matemtica o a
cualquier problema.

La formulacin de algoritmos fue uno de los ms grandes adelantos dentro de la ciencia
matemtica ya que a partir de ello se pudieron resolver infinidad de problemas.

Landa, matemtico ruso, quien ha investigado mucho al respecto nos dice que "la ciencia
matemtica, en el proceso de su desarrollo, ha tratado de encontrar los algoritmos ptimos ms
generales para resolver los problemas que permitan la solucin uniforme de clases ms
amplias de problemas de una manera, es decir, empleando siempre el mismo sistema de
operacin.

La realizacin de algoritmos es natural e innata en el hombre y en la mayora de los casos es
de tipo inconsciente, en otras palabras, las personas suelen resolver problemas sin tener que
recurrir a la aplicacin de cierto algoritmo.

No obstante al encontrarse con problemas de un grado de dificultad mayor es necesario
detenerse a analizar y pensar en la solucin de ste, por lo tanto es necesario incluir en todas
las materias una hora de problemas que impliquen aplicar, con mtodo de solucin los
algoritmos.

7
Para un mismo problema pueden plantearse distintos algoritmos que proporcionen la solucin al mismo
problema
Problema Algoritmo/
Diagrama de Flujo
Programa
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

16
Introduccin a la programacin
DIAGRAMAS DE FLUJO
Es una representacin grfica del proceso de desarrollo de un algoritmo para resolver un
problema; se expresa mediante un organigrama.

Tambin puede decirse que es una combinacin de figuras geomtricas que representan
grficamente el desarrollo, paso a paso, de un algoritmo. Cada figura representa una accin o
una operacin. A cada figura que representa un paso del algoritmo, le corresponde una
instruccin del programa.

SIMBOLO DESCRIPCION




























Figura 1.7 Principales smbolos utilizados en los diagramas de flujo




SEUDOCODIGO
Es una forma de describir un algoritmo paso a paso, donde se emplean las estructuras de
control lgicas de los lenguajes de programacin (instrucciones secuenciales, alternativas,
iterativas); tambin se le llama lenguaje algortmico.

Forma de escribir un seudocdigo
1. Se comienza el seudocdigo de programacin con una etiqueta de nombre del algoritmo a
desarrollar.
2. Cada lnea ejecuta un paso del algoritmo.
3. Si un paso inicia una seleccin alternativa, o alguna estructura iterativa, los pasos que le
suceden se consideran subordinados a l. Estas lneas estarn escritas en forma
desplazada a la derecha (es decir con indentacin).
4. Si existen otros pasos subordinados a los anteriormente subordinados, tambin se
describirn desplazados; as sucesivamente para los siguientes subordinados.
5. Las lneas que tienen la misma columna de desplazamiento (sangrado o indentacin) son
del mismo nivel.
Smbolo que representa el inicio o trmino de un
programa

Smbolo que indica la entrada o salida de datos

Smbolo que indica un proceso u operacin aritmtica.
Tambin se utiliza para inicializar un campo de datos o
transferencia de datos.

Smbolo que se utiliza para realizar comparaciones o
verificaciones.
Tambin se utiliza para la toma de decisiones o
alternativas, y en estructuras de control iterativa.

Smbolo que se utiliza para conectar partes de un
diagrama

Smbolo conector entre pginas, que indica continuidad
en el diagrama.

Smbolo utilizado para expresar bucles iterativos para
los que se conoce el nmero total de iteraciones.

Smbolo utilizado para expresar la ejecucin de un
procedimiento predefinido
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

17
Introduccin a la programacin
Todo seudocdigo de programacin termina con la palabra END, ubicndose sta en la ltima
lnea del seudocdigo.


Algoritmo: <Nombre del algoritmo>

Leer .....
Paso 1
Paso 2
IF <Condicin> THEN
Paso 3
ELSE
Paso 4
ENDIF
Paso 5
Paso 6
WHILE <Condicin>
Paso 7
Paso 8
Paso 9
WEND
Paso 10
PASO 11
Escribir ......
END.


Figura 1.8 Ejemplo de la estructura de un seudocdigo


Toda solucin computacional de un problema, implica un anlisis previo, anlisis donde se
define el modelo matemtico, las variables, y el mismo algoritmo.

Figura 1.9 Pasos bsicos en la solucin computacional de un problema
Fin del IF
Fin del WHILE
Datos y/o
variables
Modelo matemtico
y/o lgico
Desarrollo del
algoritmo
Codificacin
Uso de la
computadora
Problema
Anlisis del problema
Uso de la computadora
diagrama de flujo,
seudocdigo
Uso de lenguajes
Visual basic,
C++, Pascal, Fox, etc..
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

18
Introduccin a la programacin
EJEMPLO
Calcular el rea de un tringulo conociendo la base B y la altura H


H


B

Solucin
1. Identificamos el problema(anlisis)
a) Datos: B, Base del tringulo
H, Altura del tringulo

b) Modelo matemtico: A = ( B x H ) /2
c) Informacin de salida: el valor de A

2. Describimos del algoritmo

a) Utilizando un diagrama de flujo b) Utilizando seudocdigo

NOTA: Al utilizar seudocdigo, algunos acostumbran asignar un nmero a cada lnea de
instruccin principal (por ejemplo 1, 2, 3, 6, 12, etc.), mientras que a cada instruccin sub-
ordinada la enumeran con ms de un solo nmero (por ejemplo 1.2, 1.2.1 , 3.4 , 5.6, 4.5.7,
etc.)













Figura 1.10 Ejemplo de la estructura de un pseudocdigo
Algoritmo: Clculo del rea de un tringulo

1. INICIO

2. Leer: B;
3. Leer: H;
4. A:= ( B x H ) / 2
5. Imprimir: A;

6. END;

Algoritmo <Nombre del algoritmo>
1. Instruccin 1
1.1. Subinstruccin 1.1;
1.2. Subinstruccion 1.2;
2. Instruccin 2
2.1. Subinstruccin 2.1;
2.2. Subinstruccin 2.2;
3. Instruccin 3;
4. Instruccin 4;

END;
INICIO
Leer:
B, H
A = (B x H) / 2
FIN
Imprimir:
A
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

19
Introduccin a la programacin
PROPIEDADES DE LOS ALGORITMOS
1. Todo algoritmo no debe ser ambiguo. Es decir, debe ser claro y preciso.
Por ejemplo, si ordeno a alguien que compre panes, debo precisar claramente el lugar
de compra, el precio que debe buscar, etc.

2. Debe tener un trmino o fin para lograr un resultado o indicar que no se va ha lograr. Es
decir, deben ser finitos, debe indicarse claramente que el proceso debe acabar en el
momento dado.



CARACTERISTICAS DE UN PROBLEMA COMPUTARIZADO
Se debe considerar lo siguiente:
a) Identificar los datos y las variables
b) Identificar las relaciones existentes entre las variables (construccin del modelo
matemtico y/o lgico)
c) Resolver el modelo matemtico y/o lgico mediante un algoritmo, proceso en el cual se
debe considerar lo siguiente:
- Se debe definir un conjunto de instrucciones paso a paso.
- Debe tener un nmero exacto de instrucciones, donde cada uno de ellos es
una accin o una operacin perfectamente definida.

d) Obtener el objetivo del problema, es decir, la solucin.



ESTRUCTURAS DE CONTROL UTILIZADAS PARA LA EJECUCION DE ALGORITMOS
Las estructuras de control bsicas, en las cuales se ejecutan los algoritmos, bsicamente son
tres:
- Estructuras secuenciales. Toda instruccin se ejecuta a continuacin de la siguiente.
- Estructuras alternativas. Las operaciones son opcionales, alternativas. Por ejemplo, en
programas de evaluacin de sueldos de empleados, se han de considerar las horas no
trabajadas, la categora del trabajador, etc.
- Estructuras iterativas (o repetitivas). Las operaciones se repiten



Estructuras secuenciales
Las instrucciones se ejecutan una a continuacin de la otra.

Figura 1.11 Ejemplo de una estructura secuencial

Paso 1
Paso 2
Paso 3
Diagrama de flujo
Pseudocdigo
1. Paso 1
2. Paso 2
3. Paso 3
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

20
Introduccin a la programacin
Estructuras alternativas o de Seleccin (Tipo IF THEN ELSE )
Este tipo de estructura es muy utilizado y se presenta en la descripcin de un algoritmo donde
existe una condicin, donde se indica si una instruccin se ejecuta o no.

Tiene las siguientes componentes:
a) si (IF) que indica que la condicin es verdadera, y el entonces (THEN)
8
, que seala el paso
que se debe ejecutar
b) Caso Contrario (ELSE) se ejecuta cuando no se ejecuta la instruccin anterior.

Figura 1.12 Ejemplo de estructura Alternativa (o de Seleccin)



NOTA: La importancia de los algoritmos con proceso alternativos o de seleccin, es que
permiten seguir diferentes direcciones de paso, de acuerdo a las condiciones que se plantean.

Podemos describir el algoritmo con la siguiente disposicin de pasos:
a) Si (IF) la condicin es verdadera, se ejecuta el paso A
b) Caso contrario (ELSE) si la condicin es falsa, se ejecuta el paso B
c) Terminada la alternativa, se contina con el paso siguiente.

Explicacin de la grfica
a) En la caja en forma de ROMBO, se coloca la condicin que debe verificarse
mediante una variable de control.
b) Si la condicin es verdadera:
c) Caso contrario
d) Se contina con el paso C, que est fuera de la estructura IF THEN ELSE .


Ejemplo
Una empresa tiene dos trabajadores y desea bonificarles si es que tienen ms de seis meses
de trabajo. Describir el algoritmo.

Anlisis
a) Datos:
M1 = Meses de trabajo del primer trabajador
M2 = Meses de trabajo del segundo trabajador

b) Procedimiento
Si # Meses>6
Entonces le corresponde bonificacin
Caso contrario
No le corresponde bonificacin

8
La instruccin ENTONCES (THEN), en C++ est implcita cuando se hace referencia a la instruccin
IF. Es decir, no se incluye la palabra THEN en ningn lado del cdigo fuente.
B A
IF
( Y )
C
SI
NO
PSEUDOCODIGO
1. Paso 1
2. Si < condicin > entonces:
Ejecutar Paso A
3. Caso contrario:
Ejecutar Paso B
4 . continuamos con paso C
DIAGRAMA DE FLUJO
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

21
Introduccin a la programacin
Algoritmo
Datos: M1, M2
Para el primer trabajador:
- Si M1>6, entonces
Le corresponde bonificacin
- Caso contrario
NO le Corresponde bonificacin
- Continuar con otro trabajador

Para el segundo trabajador:
- Si M2>6, entonces
Le corresponde bonificacin
- Caso contrario
NO le Corresponde bonificacin
- Terminar con el proceso
FIN

Estructuras iterativas
Cuando existen algoritmos en donde se repiten pasos, se debe precisar esta repeticin de
pasos que se llama cuerpo del ciclo, los cuales deben tener las siguientes caractersticas.
a) Se comienza definiendo una condicin que debe cumplirse para que se ejecute el
ciclo.
b) Definir bien el cuerpo del ciclo o los pasos que se van ha repetir.
Se deben escribir los pasos que forman el cuerpo del ciclo, uno a continuacin del
otro, utilizando una secuencia desplazada para que se note claramente,
diferencindose del resto del algoritmo.

Tambin se debe verificar que los ciclos de iteracin finalicen para ciertas condiciones. La
forma de describir el algoritmo es:
a) Mientras (WHILE) la condicin sea verdadera
b) Cuando la condicin sea falsa, termina el proceso iterativo.
No bonificar
INICIO DEL PROCESO
Bonificar
IF
M1>6
Bonificar No bonificar
IF
M2>6
FIN DEL PROCESO
NO SI
SI
NO
Figura 1.13 Algoritmo de
bonificacin de trabajadores
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

22
Introduccin a la programacin


Figura 1.14 Estructura iterativa

EXPLICACION
Este tipo de proceso necesita:
1. Definir una variable de cambio ( i ) con un valor inicial, estando esta asignacin en
una caja rectangular.
2. Despus, dentro de una caja en un rombo, se verifica la condicin, la cual est
dada por la condicin del valor actual de la variable de cambio con respecto a un
valor predefinido.
3. Mientras (WHILE) sea verdadera la condicin, se ejecuta el mdulo B (Cuerpo del
ciclo).
4. A continuacin se representa en una caja rectangular la modificacin de la variable
de cambio, regresando el flujo a la caja de WHILE para verificar la condicin
5. Cuando la condicin en la caja de WHILE sea falso, termina el proceso iterativo. El
flujo sale del mdulo WHILE, ejecutndose el siguiente paso (es decir, el paso C),
el cual est fuera del bucle.


OTRAS ESTRUCTURAS
En 1966 Bohm y Jacopini demostraron el teorema de la programacin estructurada, que dice
que :
Todo algoritmo puede ser escrito utilizando solamente tres tipos de estructuras de control:
secuencial, alternativa y repetitiva (iterativa)

Aunque no se ha mencionado, en lneas atrs, para evitar confusiones, podemos decir que:
a) Las estructuras de control alternativas se pueden clasificar como:
- Simple, utilizando la estructura IF THEN ELSE
- Doble, utilizando la estructura IF THEN ELSE
- Mltiple, utilizando la estructura IF THEN ELSE o la estructura SELECT CASE
OF

b) Las estructuras de control iterativas o repetitivas pueden ser de tres tipos
- Estructura FOR, en esta estructura el nmero de repeticiones se conoce antes de
realizar el bucle, por medio de sus ndices.
WHILE
( i )
i = Modificar ( )
B
C
i = Valor Inicial
Hacer
Condicin
Estructura Iterativa
Instrucciones
Fuera del bucle
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

23
Introduccin a la programacin
- Estructura WHILE, que repite las acciones mientras la condicin de control del
bucle sea cierta, esta condicin est colocada al principio del bucle, mucho antes
de que esta se inicie.
- Estructura REPEAT, que repite las acciones mientras la condicin de control del
bucle sea falsa, esta condicin est colocada al final del bucle.

Accin 1
Accin 2
Accin 3
Accin 1
Accin 2
Condicin Condicin
Acciones
Falso
Cierto
Falso Cierto
SECUENCIAL ALTERNATIVA
ITERATIVA

Figura 1.15 Estructuras de control



Condicin
Accin 1
Condicin
Accin 1
Accin 2
Selector
CASE(i)
Accin 1
Accin n
Accin 2
Falso
Cierto
Falso Cierto
...
.
i=1 i=2
i=n
SIMPLE DOBLE MULTIPLE

Figura 1.16 Estructuras de control alternativas




Indices
Acciones
Condicin
Acciones
Condicin
Acciones
Falso
Cierto
Falso
Cierto
FOR
WHILE
REPEAT

Figura 1.17 Estructuras de control iterativa (o repetitivas)

Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

24
Introduccin a la programacin


EJERCICIOS:
Creacin de diagramas de flujo
Para cada ejercicio escriba su algoritmo en pseudocodigo y su flujograma.
1. Escribe un programa que calcule el rea de un crculo de cualquier radio.
2. Escribe un programa que lea una cantidad depositada en un banco y que calcule la
cantidad final despus de aplicarle un 20% de inters.
3. Un maestro desea saber qu porcentaje de hombres y que porcentaje de mujeres hay
en un grupo de estudiantes.
4. Un alumno desea saber cul ser su calificacin final en la materia de Lgica
Computacional. Dicha calificacin se compone de tres exmenes parciales cuya
ponderacin es de 30%, 30% y 40%
5. Una farmacia aplica al precio de los remedios el 10% de descuento. Hacer un
programa que ingresado el costo de los medicamentos calcule el descuento y el precio
final

Estructuras selectivas
Elabora programa en Dev-C++ para los ejercicios siguientes:
1. Dado un nmero introducido por el usuario, indicar si ste es positivo, negativo o nulo.
Resulvelo usando estructura selectiva simple.
2. Calcular el mayor de dos nmeros ledos del teclado y visualizarlo en pantalla. Utiliza la
forma if else.
3. Escriba un programa que pida un nmero y a continuacin escriba si es par o impar
usando la instruccin mod.
4. Calcular el promedio de calificaciones de un alumno. Las dos primeras notas valen
30% cada una y la tercera 40%. Si el promedio es mayor o igual a 7 imprimir
aprobado, de lo contrario dir reprobado. Si el promedio es igual a 10, dir alumno
excelente. Se desea imprimir el nombre del alumno, cdigo de la materia y el promedio
obtenido.



Estructuras selectivas mltiples
1. La empresa Milagrito S.A. tiene la siguiente tabla de parmetros para pagar las comisiones
de sus ejecutivos de ventas:
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

25
Introduccin a la programacin


Escriba un programa que al introducir la cantidad vendida por el ejecutivo de ventas,
calcule de cunto ser su comisin.

2. En base al valor de dos nmeros enteros, determine si estos son:
A. Iguales.
B. No iguales.
C. El primero es mayor que el segundo.
D. El segundo es mayor que el primero.
E. El primero es mayor o igual que el segundo.
F. El segundo es mayor o igual que el primero.

3. Un restaurante, desea dar a conocer a sus clientes el plato que se ha preparado para cada
uno de los tiempos de comida desayuno, almuerzo y cena. El restaurante prepara un plato
nico para cada uno de los tiempos. Cuando el cliente seleccione entre los tiempos de
comida (desayuno, almuerzo o cena) se debe desplegar el detalle de este.

Ejemplo:
Seleccione su tiempo de Comida: desayuno
Detalle
Pltanos, Frijoles, Queso, Crema, Pan y Caf.

4. Elabore un programa que pida dos nmeros y que permita mostrar un men con las cuatro
operaciones bsicas, donde el usuario pueda seleccionar la operacin que desea realizar
(basta con que seleccione el nmero).


Ejercicios Propuestos con For / While
Los siguientes ejercicios debern ser resueltos por partida doble: una solucin con "for", otra
con "while"
1. Determinar el nmero mayor de 10 nmeros ingresados
2. Determinar el nmero menor de 12 nmeros ingresados
3. Calcular el factorial de un nmero dado (El programa solo admite datos entre 3 y 8)
4. Implemente el siguiente juego: el programa seleccionar un nmero aleatorio entre 0 y 100
y el jugador debe acertarlo. En cada intento el jugador propondr una solucin y se le
informar si el nmero a acertar es menor o mayor que el propuesto. El juego termina
cuando se acierte la cifra o haya realizado un mximo de 12 intentos en cuyo caso se le
mostrar al jugador la calificacin obtenida segn la siguiente tabla:

Nmero de intentos Categora
1-3 Suertudo
4-6 Genio
7 No est mal
8 Se puede mejorar
>= 9 Que pasa amigo

5. Realizar un programa que cuente las vocales cuando se ingresa una cadena de textos con
getchar()

6. Idem al anterior pero contar las consonantes


Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

26
Introduccin a la programacin
Ms ejercicios de bucles
7. Hacer un programa que de vueltas y en cada vuelta realice las potencias de 5.
En cada vuelta se pide al operador SI DESEA CONTINUAR (1 o 0) si el operador
ingresa un cero ya no continuar dando vueltas.
8. Hacer un programa que lea 100 nmeros y se desea saber cul fue el numero mayor.
9. Hacer un programa que lea 500 nmeros y se desea saber cul fue el nmero menor.
10. Hacer un programa que lea 200 nmeros y se desea saber en cuanto difiere el mayor del
mayor.
11. Hacer un programa que registre las totales de crditos por alumno y el nmero de cursos
por alumno que llevan cada alumno de la universidad, se desea saber cul es el promedio
de crditos que suelen llevar los alumnos en la universidad, y se desea saber el promedio
de cursos que suelen llevar los alumnos de la universidad.
12. En el ejercicio anterior diga en cuales nmeros de matricula se registraron alumnos con un
solo curso (use un contador matricula = matricula + 1).
13. En el ejercicio anterior diga en cuales nmeros de matricula se registraron alumnos con
ms de un curso. (use un contador matricula = matricula + 1).
14. Realice los ejercicios con desde, mientras y repetir.




USOS COMUNES DE LAS ESTRUCTURAS DE CONTROL

Bucles FOR
Se usan normalmente cuando se desean realizar operaciones iterativas acerca de las cuales se
conoce el INICIO y el FINAL.
Ejemplos:


Ejemplo 1: Imprimir 20 veces el saludo Hola
en pantalla
Print: "Hola"
INICIO
FIN
For k = 1 ---> 10


Ejemplo 2: Leer N elementos de un array
Leer: A [ k ]
INICIO
FIN
For k = 1 ---> N
Leer: N




Bucles WHILE
Se usan normalmente cuando se desean realizar operaciones iterativas acerca de las cuales
NO SE conoce el INICIO y el FINAL. Es decir no se tiene nocin a priori acerca del nmero de
iteraciones que deban realizarse.
Ejemplo:

INICIO = 1
FIN = 10
INICIO = 1
FIN = N
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

27
Introduccin a la programacin

Ejemplo 1: Imprimir repetidamente el
saludo Hola en pantalla, hasta que el
usuario presione la tecla ESC
Print: "Hola"
INICIO
FIN
WHILE
chr<>ESC
Leer: chr
Leer: chr
Hacer


Ejemplo 2: Imprimir los 3 primeros nmeros pares de
un array de N Elementos
WHILE
(cont<3)
IF
A[k] % 2 = 0 ?
FIN
cont = 0
k = 0
cont = cont + 1
Print: A[k]
Hacer
SI
NO



Tambin se puede usar para reemplazar una estructura FOR
Imprimir N Veces el saludo Hola
Print: "Hola"
INICIO
FIN
For k = 1 ---> N
Leer: N

Imprimir N Veces el saludo Hola usando el
bucle WHILE
WHILE
cont <= N
Print: "Hola"
INICIO
FIN
Leer: N
cont = cont + 1
cont = 0

NOTA: Cuando el bucle WHILE reemplaza a un bucle FOR, normalmente se utiliza un contador
de ciclos, el mismo que se utiliza para verificar la finalizacin del bucle.

Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

28
Introduccin a la programacin
Configuracin ACUMULADOR
En este tipo de configuracin, se utiliza una variable cuyo valor debe ser inicializado antes de
actuar como acumulador al interior del bucle.
Crear un programa que resuelva la siguiente
ecuacin x i x f
N
i

=
=
1
2 ) ( , donde N=20
Print: Suma
INICIO
FIN
For i = 1 ---> N
Suma = 0
Leer: x
Suma = Suma + (2 * i * x)
N = 20

Crear un programa que resuelva la siguiente
ecuacin
x i x f
N
i

=
=
1
3 ) (
, donde N=9
Print: P
INICIO
FIN
For i = 1 ---> N
P = 1
Leer: x
P = P * (3 * i * x)
N = 9



Configuracin LEER HASTA QUE
En esta configuracin, tpicamente utilizamos un bucle
condicional, por ejemplo, el bucle WHILE parece ser el
ms adecuado

Este tipo de bucle podemos usarlo cuando tratemos de
realizar mens que se muestran y que luego se ocultan
para ejecutar alguna opcin seleccionada por el
usuario.












WHILE
C <> "0"
Print: "Hola"
INICIO
FIN
Leer: C
Leer: C
Otras instrucciones
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

29
Introduccin a la programacin
ESQUEMA DE LA MEMORIA

Todo dato o variable que se define en un diagrama, en un seudocdigo, o un programa,
ocupan una posicin de memoria. Lgicamente se entiende como celdas o casilleros.
Figura. Cada variable almacena su informacin en una celda de memoria


FORMAS DE ALMACENAMIENTO
La generalidad de lenguajes de almacenamiento manejan tipos de datos bsicos: Enteros,
reales, cadenas y caracteres. La diferenciacin entre ellos, se debe a la estructura de
almacenamiento que posee cada uno de ellos. Por ejemplo, en C, los tipos char y unsigned
char se almacenan en la forma de un byte (8 bits), los tipos int o enteros en 2 bytes (12 bites);
los tipos float o nmeros reales se almacenan en 4 bytes (32 bites). Es decir, cada uno de los
tipos de datos se almacenan con una estructura diferente. Los tipos de datos bsicos en C y
Pascal son los siguientes:

Tipo Longitud Rango
Unsigned char
char
enum
unsigned int
short int
int
unsigned long
long
float
double
long double
8 bits
8 bits
16 bits
16 bits
16 bits
16 bits
32 bits
32 bits
32 bits
64 bits
80 bits
0 a 255
-128 a 127
-32,768 a 32,767
0 a 65,535
-32,768 a 32,767
-32,768 a 32,767
0 a 4,294,967,295
-2,147,483,648 a 2,147,483,647
3.4 * (10**-38) a 3.4 * (10**+38)
1.7 * (10**-308) a 1.7 * (10**+308)
3.4 * (10**-4932) a 1.1 * (10**+4932)
Figura. Formas de almacenamiento de tipos de datos bsicos en C++

Tipo Longitud Rango
Shortint
Integer
Longint
Byte
Word
Boolean
WordBool
LongBool
ByteBool
con signo 8-bit
con signo 16-bit
con signo 32-bit
sin signo 8-bit
sin signo 16-bit
8 bits (tamao de Byte)
16 bits (tamao de Word)
32 bits (tamao de Longint)
8 bits (tamao de Byte)
-128 a 127
-32768 a 32767
-2147483648 a 2147483647
0 a 255
0 a 65535
s, no
s, no
s, no
s, no
Figura. Formas de almacenamiento de tipos de datos bsicos en Pascal
N I R A Posiciones de memoria
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

30
Introduccin a la programacin

VECTORES
Cuando se tiene una sucesin de valores que representan un conjunto de datos homogeneos,
como por ejemplo peso, tamao, edad, etc., se permite expresar esta sucesin de valores con
un subndice.

Ejemplo:
Sean las edades de 4 personas, 18, 19, 31 y15, se puede usar una sola variable, pero con un
subndice, de la siguiente forma:

A(1) = 18 Edad de la primera persona
A(1) = 19 Edad de la segunda persona
A(1) = 31 Edad de la tercera persona
A(1) = 15 Edad de la cuarta persona

En forma general, diremos que la variable A(i) indica para este caso, la edad correspondiente a
la 1, 2, 3 y 4 persona segn el valor de i. Sabiendo que i puede tomar cualquiera de los
siguientes valores: 1, 2, 3 4.


DEFINICION DE VECTORES (Matemtica)
Definiremos un vector como un conjunto ordenado de valores que lo expresamos como A(i),
donde el subndice i indica el orden que ocupa el elemento dentro del conjunto.

Ejemplo:
Figura 2.1 Representacin de un arreglo de N elementos



SUMA DE VECTORES
Sean los vectores U y V (dos vectores) con igual nmero de elementos, la suma de los dos
vectores ( U + V ), es otro vector que tiene el mismo nmero de elementos y est expresado
como:
S ( i ) = U ( i ) + V ( i )

Un elemento de la suma es igual a la suma de los elementos correspondientes de U y V.

Ejemplo:
Dados los siguientes vectores U y V:

U = ( U ( 1), U( 2 ), U(3) )
V = ( V ( 1), V( 2 ), V(3) )

El vector suma ser: S = (S(1), S(2), S(3) )

Donde S(1) = U(1) + V(1)
S(2) = U(2) + V(2)
S(3) = U(3) + V(3)

Es decir,
S = ( S(1) = U(1)+ V(1), S(2) = U(2)+ V(2), S(3) = U(3)+ V(3) )
A = ( A (1), A (4), A (3), . . . , A (N) )
1 elemento
2 elemento
3 elemento
ensimo elemento
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

31
Introduccin a la programacin
A ( 3 )
Subndice, 3er elemento (posicin del arreglo)
Nombre de la variable
A ( 3 ) A ( i ) A ( 2 i + 3 )
Valor entero Variable entera
Expresin entera
si " i " es entero

VARIABLES CON UN SUBINDICE
(Arreglos unidimensionales)

Precisiones
1. Una forma de expresar los datos, era tratndolos como una sucesin de valores con un
mismo nombre de variable, pero afectndolo por un subndice. Ejemplo:
A(1) = 2
A(2) = 3
A(3) = 7
A(4) = 5
A(5) = 20

2. De estos valores, se dijo que forman parte de un vector A (Array unidimensional = arreglo
unidimensional).
3. Decimos que la variable A es un arreglo unidimensional y que es un conjunto de valores
que ocupan en la memoria de la memoria, posiciones consecutivas.

Por ejemplo: si tenemos A=( A(1), A(2), A(3), A(4), A(5) ) y B = ( B(1), B(2), B(3) ),
entonces los datos tomarn la siguiente disposicin en la memoria de la computadora:
Figura 2.2 Representacin de arrays bidimentsionales (matrices)

Observaciones
El subndice del arreglo indica la posicin (ordenamiento) de un elemento dentro
del vector.





El subndice puede ser un valor entero, una constante entera, una variable entera
expresiones que den (como resultado) valores enteros.








Los subndices no son parte del nombre de una variable subindizada.

A(1) A(2) A(3) A(4) A(5) B(1) B(2) B(3)
Vector
A
Vector
B
A ( i ) A ( k )
Es la misma variable
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

32
Introduccin a la programacin
A(1) A(2) A(3) A(4) A(5)
8 23 34 67 9
Ejemplos:
a) Si tenemos el vector A ( 2, 3, 7, 5, 20 )
A ( i ) para i = 2 tiene el valor A ( 3 ) = 7
A ( k ) para k = 2 tiene el valor A ( 3 ) = 7

b) Sean los vectores V ( 6, 8, 9, 4, 56, 78, 1 ) y Z ( 5, 7, 2, 88, 67)
V ( i ) para i = 3 tiene el valor V ( 3 ) = 9
Z ( k ) para k = 3 tiene el valor Z ( 3 ) = 2


LECTURA DE DATOS DE UN ARRAY UNIMENSIONAL
a) Dado que un array es una estructura de datos donde cada elemento ocupa una posicin
de memoria consecutiva de la forma A = ( A ( 1 ), A ( 2 ) , A ( 3 ), ... , A ( N ) ), podemos
referenciar individualmente a cada elemento del arreglo nicamente seleccionando el
ndice que hace mencin a la posicin que el elemento ocupa dentro del arreglo.

Ejemplo:
Se desea almacenar los siguientes datos: 8, 23, 34, 67, 9 en un arreglo A que puede
contener cinco elementos como mximo. Represente la forma en la cual estos datos
estaran almacenados en este arreglo.
Rpta:




b) Este arreglo puede ser expresado como una variable unidimensional, como:
A ( i ), para i = 1... 5

c) Para que los datos puedan ser guardados en memoria, deben ser ledos. Por consiguiente,
desarrollamos a continuacin el mdulo de lectura de los datos, utilizando la estructura de
control iterativa FOR.
EJEMPLO
Se leen notas de un alumno, las que se guardan en dos vectores: Notas Aprobadas (NA) y
Notas Desaprobadas (ND). Se pide mostrar en pantalla el vector de las NA y el vector de las
notas desaprobadas (ND). Supngase que se debe procesar un total de cinco notas.
Solucin:
Sean cinco las notas, entonces, N = 5
Sean las notas: 13, 09, 18, 15, 10
Entonces:
El vector de las notas aprobadas es: 13, 18, 15
El vector de las notas Desaprobadas es: 09, 10
INICIO
FIN
FOR i = 1 hasta N Hacer
Leer: N
Datos:
N= Nmero total de elementos
A ( i ) = Cada uno de los
elementos del array
Leer: A ( i )
Figura 2.3 Lectura de los
elementos de un arreglo de
N elementos
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

33
Introduccin a la programacin
Anlisis
a) Las notas deben ser ledas y almacenadas en un vector A ( i )
b) Se debe acceder a cada nota A ( i ) mediante un proceso iterativo, y verificar si es
nota aprobatoria o desaprobatoria.
Si A ( i ) > 10 (IF THEN)
* la nota es aprobatoria y se debe guardar en un vector NA(k)
Caso contrario (ELSE)
* la nota es desaprobatoria y se debe guardar en un vector ND(m)
c) Los subndices k y m son contadores (acumuladores de suma)
Figura 2.4 Algoritmo del ordenamiento de las notas de los alumnos

INICIO
FIN
k = 0
m = 0
IF
A(i)>10
k = k + 1
NA(k) = A (i )
m = m + 1
ND(m) = A (i )
FOR i = 1 hasta N Hacer
FOR i = 1 hasta N Hacer
FOR i = 1 hasta m Hacer
FOR i = 1 hasta k Hacer
Leer: N
Leer: A ( i )
Escribir NA ( i )
Escribir ND ( i )
SI NO
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

34
Introduccin a la programacin

CONCEPTOS BASICOS DE C++

Un programa C++ debe ajustarse a una estructura estndar.


#include<iostream.h>
#include<conio.h>


#define PI 3.1415;
#define true 1;
#define false 0;


int Area;


int sumar();
void operar();


void main()
{ int A,B,C;
int k, i;
// ...
cout<<"\n fin ...";
getch();

}


int sumar()
{ // ...
return 1;
}

void operar()
{
// ...
}


Archivos de cabecera
En esta seccin se coloca la referencia a los archivos en los cuales estn contenidos alguno de
los smbolos utilizados en el programa. Por ejemplo,
#include<iostream.h>
#include<conio.h>
...
...
...

Variables Globales
Constantes Globales
Archivos de cabecera (Libreras y/o archivos)
Declaracin de prototipos
Programa Principal
(Este procedimiento es obligatorio)
Implementacin de los prototipos
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

35
Introduccin a la programacin
ORDENAMIENTO
(Mtodo de la Burbuja)


El ordenamiento de datos es una tarea muy comn en el procesamiento de informacin. Uno
de los mtodos de ordenamiento ms utilizados es el mtodo de intercambio por burbuja, o
simplemente mtodo de la burbuja.

Explicacin del algoritmo
Sean los datos A(1), A(2), A(3), ... , A(N), se requiere ordenarlos de menor a mayor. El
procedimiento es el siguiente:

a) Se toma como elemento base de comparacin A(1), y lo comparo con el que est a su
costado, es decir, A(2) (para j =2).
* Si A(1) < A(2) entonces en A(1) se encuentra el nmero menor.
b) Se contina comparando el elemento base A(1) con el siguiente, es decir, con A(3)
(para k = 3)
Si A(1) < A(3) entonces en A(1) sigue estando el nmero menor.
Caso contrario se debe intercambiar

Luego, el proceso de comparacin contina comparando A(1) con A(4) para k=4, luego,
con A(5) para k=5; luego con A(6) para k=6, y finalmente con A(N) para k = N. Es decir,
las veces que sea necesario se realizarn los intercambios correspondientes.

c) Para la segunda serie de comparaciones, tomamos como elemento base A(2) (para i = 2)
y lo comparamos con A(3) (para k=3); con A(4) (para k=4); con A(5) (para k=5); hasta ....
con A(N) (para k=N)
d) Para la tercera serie de comparaciones, tomamos como elemento base A(3) (para i = 3) y
lo comparamos con A(4) (para k=4); con A(5) (para k=5); hasta .... con A(N) (para k=N)
e) Para la ltima serie de comparaciones se toma como elemento base A(N1) (para k=N
1); que se compara con A(N) para k=N.

A(1) A(2) A(3) A(N)
A(1) A(2) A(3) A(N)
a * b A(N)
b * a A(N)
a
........
Si A(1) < A(2) => en A(1) est el menor
........
Si A(1) < A(3) => en A(1) est el menor
caso contrario se debe intercambiar
........
Hacemos: T = A(1)
luego, A(1) = A(3)
luego, A(3) = T
Paso 3: Intercambio
........
Paso 1 :comparacin
Paso 2: comparacin
al terminar tendremos:
A(1)
A(2)
A(3)
A(1)
A(2) A(3)
T
T
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

36
Introduccin a la programacin
La comparacin genrica es:
Si A( i ) < A(k) entonces el menor est en A(i)
Caso contrario se intercambian los valores de la forma:
T = A(i)
A(i) = A(k)
A(k) = T

Donde i = 1 .... (N1)
K = i + 1 .... N








Figura 2.5 Algoritmo del mtodo de la burbuja
INICIO
Leer:
N
FIN
T = A [ i ]
A [ i ] = A [ k ]
A [ k ] = T
Imprimir:
A [ i ]
Leer:
A [ i ]
For i:=1 a N hacer
if
For i:=1 a N-1 hacer
For k:= i + 1 a N hacer
For i:=1 a N hacer
No S Mtodo de
la Burbuja
A(i)<A(k)
Guarda datos
en memoria
PSEUDOCODIGO
MetodoBurbuja (A:Array; N:Entero)
Para i = 1 hasta N 1 hacer
Para k = i + 1 hasta N hacer
Si A[i] > A[k] Entonces
Tem = A[i]
A[i] = A[k]
A[k] = Tem
{Fin del condicional SI}
{ Fin del bucle Para hasta}
{ Fin del bucle Para hasta }
DATOS:

N = Nmero total de elementos
A ( i ) = Cada uno de los elementos
del vector.
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

37
Introduccin a la programacin
Ejemplo:
Dado el siguiente arreglo, se desea realizar el ordenamiento de los datos de manera
ascendente: 34 25 5 6 7 9 12 30

Solucin:

Figura 2.6 Pasos secuenciales dados durante un proceso de ordenamiento usando el
mtodo de la burbuja

Primera iteracin: Se toma como pivot el primer elemento
A1 A2 A3 A4 A5 A6 A7 A8
Para k=2 tenemos: 34 25 5 6 7 9 12 30
Para k=3 tenemos: 25 34 5 6 7 9 12 30
Para k=4 tenemos: 5 34 25 6 7 9 12 30
Para k=5,6,7,8 ten.: 5 34 25 6 7 9 12 30
Segunda iteracin: Se toma como pivot el segundo elemento
A1 A2 A3 A4 A5 A6 A7 A8
Para k=3 tenemos: 5 34 25 6 7 9 12 30
Para k=4 tenemos: 5 25 34 6 7 9 12 30
Para k=5,6,7,8 ten.: 5 6 34 25 7 9 12 30
Tercera iteracin: Se toma como pivot el tercer elemento
A1 A2 A3 A4 A5 A6 A7 A8
Para k=4 tenemos: 5 6 34 25 7 9 12 30
Para k=5 tenemos: 5 6 25 34 7 9 12 30
Para k=6,7,8 tenem.: 5 6 7 34 25 9 12 30
Cuarta iteracin: Se toma como pivot el cuarto elemento
A1 A2 A3 A4 A5 A6 A7 A8
Para k=5 tenemos: 5 6 7 34 25 9 12 30
Para k=6 tenemos: 5 6 7 25 34 9 12 30
Para k=7,8 tenemos: 5 6 7 9 34 25 12 30
Quinta iteracin: Se toma como pivot el quinto elemento
A1 A2 A3 A4 A5 A6 A7 A8
Para k=6 tenemos: 5 6 7 9 34 25 12 30
Para k=7 tenemos: 5 6 7 9 25 34 12 30
Para k=8 tenemos: 5 6 7 9 12 34 25 30
Sexta iteracin: Se toma como pivot el sexto elemento
A1 A2 A3 A4 A5 A6 A7 A8
Para k=7 tenemos: 5 6 7 9 12 34 25 30
Para k=8 tenemos: 5 6 7 9 12 25 34 30
Setima iteracin: Se toma como pivot el setimo elemento
A1 A2 A3 A4 A5 A6 A7 A8
Para k=8 tenemos: 5 6 7 9 12 25 34 30
finalmente tenemos: 5 6 7 9 12 25 30 34
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

38
Introduccin a la programacin

DETERMINACION DEL MENOR Y MAYOR VALOR DE UN VECTOR

DETERMINACION DEL MENOR VALOR DE UN VECTOR
a) Si suponemos que el menor es el primer valor de un vector A. Entonces lo guardo en un
casillero MENOR (Es decir, MENOR = A(1)).
Figura 2.7 Disposicin de celdas para la determinacin del menor valor de un vector

b) Se compara MENOR con el siguiente valor, es decir, con A(2), para K =2
Si MENOR<A(2) entonces el menor es en A(1)
Caso contrario, se cambia el valor contenido en MENOR; es decir se hace
MENOR = A(2)
Figura 2.8 Intercambio de valores durante el
proceso de obtencin del menor valor de un vector

c) El proceso contina. Es decir, se compara MENOR con A(3) para k=3; luego con A(4) (
para k=4), y as sucesivamente hasta comparar con A(N) (para k=N)

El intercambio genrico se da de la siguiente forma:

Si MENOR < A ( k )
* el menor est en MENOR
Caso contrario
* Se realiza el cambio, haciendo MENOR = A (k)

donde: k = 1... N



DETERMINACION DEL MAYOR VALOR DE UN VECTOR
a) Si suponemos que el menor es el primer valor de un vector A. Entonces lo guardo en un
casillero MAYOR (Es decir, MAYOR = A(1)).
Figura 2.9 Disposicin de celdas para la determinacin del mayor valor de un vector

b) Se compara MAYOR con el siguiente valor, es decir, con A(2), para K =2
Si MAYOR<A(2) entonces el menor es en A(1)
Caso contrario, se cambia el valor contenido en MAYOR; es decir se hace
MAYOR = A(2)
MENOR
A(1) A(2) A(3) ..... A(N)
A (1)
MENOR A(1) A(2) A(3) ..... A(N)
MENOR < A(2) k=2
MENOR< A(3) k=3
MENOR< A(N) k=N
MAYOR
A(1) A(2) A(3) ..... A(N)
A (1)
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

39
Introduccin a la programacin
Figura 2.10 Intercambio de valores durante el
proceso de obtencin del mayor valor de un vector

c) El proceso contina. Es decir, se compara MAYOR con A(3) para k=3; luego con A(4) (
para k=4), y as sucesivamente hasta comparar con A(N) (para k=N)

El intercambio genrico se da de la siguiente forma:

Si MAYOR > A ( k )
* el mayor est en MAYOR
Caso contrario
* Se realiza el cambio, haciendo MAYOR = A (k)

donde k = 1... N

Figura 2.11 Algoritmo de obtencin del menor y el mayor valor de un arreglo(vector)
MAYOR A(1) A(2) A(3) ..... A(N)
MAYOR > A(2) k=2
MAYOR > A(3) k=3
MAYOR > A(N) k=N
INICIO
MENOR = A(1)
MAYOR = A(1)
IF
MENOR<A(k )
MENOR = A (k)
FOR k = 1 hasta N Hacer
IF
MAYOR>A(k )
MAYOR = A (k)
FIN
FOR k = 1 hasta N Hacer
Leer: N
Leer: A ( k )
SI
NO
SI
NO
Escribir:
El menor val or es: MENOR
El mayor val or es: MAYOR
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

40
Introduccin a la programacin
MATRICES

DEFINICION
Una matriz numrica es un cuadro de nmeros dispuestos en filas y en columnas. Lo
denotaremos simblicamente por A.

A = a
11
a
12
a
13
1 fila
a
21
a
22
a
23
2 fila
a
31
a
32
a
33
3 fila


1 columna 2 columna 3 columna

- Para el ejemplo anterior se ha definido una matriz A de 03 filas y 03 columnas.
- Cada nmero del cuadro anterior se llama elemento de la matriz. Su ubicacin est
determinado por dos subndices; en forma genrica se expresa por:

a
i , k


Subndice que indica la fila Subndice que indica la columna

Ejemplo:
A32 es el elemento que est en la 3 fila y 2 columna
A13 es el elemento que est en la 1 fila y 3 columna
A23 es el elemento que est en la 2 fila y 3 columna
A33 es el elemento que est en la 3 fila y 3 columna
A21 es el elemento que est en la 2 fila y 1 columna


ORDEN DE UNA MATRIZ
El nmero de filas y el nmero de columnas de una matriz, determinan el orden de la matriz, se
expresan por:
A M x N

Nmero total de filas Nmero total de columnas


Ejemplo
A 3 x 3 indica una matriz que tiene 3 filas y 3 columnas
A 2 x 3 indica una matriz que tiene 2 filas y 3 columnas

En forma desarrollada tendramos:

A 2 x 3 = a
11
a
12
a
13

a
21
a
22
a
23





TIPOS DE MATRICES
Matriz cuadrada
Es aquella matriz donde se cumple que:
Nmero de filas = Nmero de columnas
Es decir M = N

Ejemplo: A 3 x 3 , A 2 x 2, A 4 x 4 , A 7 x 7


Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

41
Introduccin a la programacin
Matriz columna
Es la matriz que tiene una sola columna
Ejemplo: A 3 x 1 , A 2 x 1, A 4 x 1 , A 7 x 1

a
11

A 3 x 1 = a
21

a
31



Matriz Fila
Es la matriz que tiene una sola fila
Ejemplo: A 1 x 3 , A 1 x 2, A 1 x 4 , A 1 x 7

A 1 x 3 = a
11
a
12
a
13




IGUALDAD DE MATRICES
Si tenemos las matrices A y B, decimos que las matrices son iguales ( A = B) si son del mismo
orden y si los elementos correspondientes son iguales. Simblicamente se expresa como:

Si A = a
i j
B = b
i j
son dos matrices

Entonces A = B si a
i j
= b
i j



Ejemplo
Sean las matrices:
1 2 3 1 2 3
A 2x3 = 6 5 8 B 2x3 = 6 5 8

Como tenemos que:
a
11
= b
11
, a
12
= b
12
, a
13
= b
13
, a
21
= b
21
, a
22
= b
22
, a
23
= b
23


entonces podemos decir que A 2 x 3 = B 2 x 3



SUMA DE MATRICES
Sean A y B dos matrices del mismo orden, la sumatoria A + B es otra matriz C del mismo
orden, tal que:

c
i j
= a
i j
+ b
i j


se suman un elemento de A con el correspondiente elemento de B, para as determinar el
respectivo nuevo elemento de C.


Ejemplo:
Sean las siguientes matrices A y B

3 4 1 2
A 3x2 = 1 5 B 3x2 = 6 7
8 6 9 4
3 x2 3 x2
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

42
Introduccin a la programacin


3 4 1 2 (3 + 1) (4+2) 4 6
C = A + B = 1 5 + 6 7 = (1 + 6) (5+7) = 7 12
8 6 9 4 (8 + 9) (6 +4) 17 10


En forma genrica es posible escribir:



a
11
a
12
b
11
b
12

Sean A = a
21
a
22
y B = b
21
b
22

a
31
a
32
b
31
b
32



Entonces

c
11
= a
11
+ b
11
c
12
= a
12
+ b
12

C = A + B = c
21
= a
21
+ b
21
c
22
= a
22
+ b
22

c
31
= a
31
+ b
31
c
32
= a
32
+ b
32


donde

c
11
c
12

C = c
21
c
22

c
31
c
32


Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

43
Introduccin a la programacin
VARIABLES CON DOS SUBINDICES
(ARREGLOS BIDIMENSIONALES)

Cuando se deba de almacenar y procesar datos que estn caracterizados por dos atributos, se
utilizarn variables con dos subndices.

Por ejemplo: El almacenamiento de las notas de varios alumnos correspondientes a varios
cursos:

Curso 1 Curso 2 Curso 3
Alumno 1 12 15 20
Alumno 2 11 13 16
Alumno 3 14 17 18
Alumno 4 09 10 07


Los arreglos bidimensionales se esquematizan bajo el modelo matemtico llamado matriz.
Expresaremos las variables bidimensionales con dos subndices:

Ejemplo: A (i,j)

Donde el subndice i es usado para indicar la fila, y el subndice j es usado para sealar la
columna donde se encuentra el elemento.


Una visualizacin del esquema de la memoria seran posiciones de memoria A(i,j)
dispuestas en forma de una tabla o cuadro.
Figura 2.12 Esquema de la memoria en donde
se almacenan los arreglos bidimensionales



Fsicamente las posiciones de memoria se implementan las unas a continuacin de las otras.

Figura 2.12 Esquema de la memoria en donde
se almacena un arreglo unidimensional


A(1,1) A(1,2) A(1,3) .....
A(2,1) A(2,2) A(2,3) .....
A(3,1) A(3,2) A(3,3) ....
A(1,1) A(1,2) A(1,3) A(2,1) ........... A(3,3)
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

44
Introduccin a la programacin
A(1,1) A(1,2) A(1,3)
A(2,1) A(2,2) A(2,3)
A(3,1) A(3,2) A(3,3)
5 8 9
A(1,1) A(1,2) A(1,3)
A(2,1) A(2,2) A(2,3)
A(3,1) A(3,2) A(3,3)
5 8 9
7 4 6
ALMACENAMIENTO EN MEMORIA PARA LAS
VARIABLES CON DOBLE SUBINDICE

ALMACENAMIENTO POR FILAS
De acuerdo a la visualizacin del esquema de la memoria, el almacenamiento puede ser por
filas.

EJEMPLO:
Sea la siguiente matriz, se desea almacenarla en memoria, describir un proceso de
almacenamiento en memoria por filas:

5 8 9
A = 7 4 6 NOTA: se almacenar en A = a
i,j

1 3 2


el procedimiento de almacenamiento por filas sera:
a) Para la 1 fila fijamos i=1
Y hacemos variar j (j = 1,2,3). As, se generan sucesivamente las posiciones de
memoria A(1,1), A(1,2) y A(1,3) y se guardan los valores respectivos en las columnas 1, 2
y 3 (es decir los valores 5, 8 y 9 respectivamente)









b) Para la 2 fila fijamos i=2
Y hacemos variar j (j = 1,2,3). As, se generan sucesivamente las posiciones de
memoria A(2,1), A(2,2) y A(2,3) y se guardan los valores respectivos en las columnas 1, 2
y 3 (es decir los valores 7, 4 y 6 respectivamente)










c) Para la 3 fila fijamos i =3
Y hacemos variar j (j = 1,2,3). As, se generan sucesivamente las posiciones de
memoria A(3,1), A(3,2) y A(3,3) y se guardan los valores respectivos en las columnas 1, 2
y 3 (es decir los valores 1, 2 y 3 respectivamente)
A(1,1) A(1,2) A(1,3)
A(2,1) A(2,2) A(2,3)
A(3,1) A(3,2) A(3,3)
5 8 9
7 4 6
1 3 2
Figura 2.13
Figura 2.14
Figura 2.15
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

45
Introduccin a la programacin
ALGORITMO DEL ALMACENAMIENTO POR FILAS

Para este caso, definiremos las variables a utilizar:
M = Nmero total de filas de la matriz
N = Nmero total de columnas de la matriz
i = variable temporal, tal que i= 1..M
j = variable temporal, tal que j= 1..N
A(i,j) = la matriz


a
11
a
12
... a
1j
.... a
1N

a
21
a
22
... a
2j
.... a
2N

a
31
a
32
... a
3j
.... a
3N

A = A
i,j
= ... ... ... ... .... ...
a
i1
a
i2
... a
ij
.... a
iN

... ... ... ... .... ...
a
M1
a
M2
... a
Mj
.... a
MN
MxN


Figura 2.16 Matriz de grado MxN


Mostraremos un mdulo de lectura de datos utilizando dos estructuras de control FOR, la
exterior para el caso de las filas y el FOR interior para el cambio de columnas

Figura 2.17 Algoritmo de lectura de los elementos de una Matriz de grado MxN
INICIO
FIN
FOR i = 1 hasta M Hacer
FOR j = 1 hasta N Hacer
Leer A(i,j)
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

46
Introduccin a la programacin
OPERACIONES CON MATRICES: SUMA DE MATRICES

EJEMPLO
Calcular la suma de la matriz A mas la matriz B y almacenar el resultado en la matriz C (es
decir, hacer C = A + B)

Anlisis
La suma de matrices es un proceso iterativo donde la matriz suma C = A + B est definido
por:
C(i,j) = A(i,j) + B(i,,j)
Donde:
M = Nmero total de filas
N = Nmero total de columnas
i = 1...M
j = 1...N


Figura 2.18 Algoritmo de suma de dos matrices A y B de grado MxN
INICIO
FIN
1
1
C(i,j) = A(i,j)+ B(i,j)
FOR i = 1 hasta M Hacer
FOR j = 1 hasta N Hacer
Leer A(i,j)
FOR i = 1 hasta M Hacer
FOR j = 1 hasta N Hacer
Leer A(i,j)
FOR j = 1 hasta N Hacer
FOR i = 1 hasta M Hacer
FOR j = 1 hasta N Hacer
Escribir C(i,j)
FOR i = 1 hasta M Hacer
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

47
Introduccin a la programacin
TAREA:
Implemente un programa que realice la suma de dos matrices y el resultado sea almacenado
en una tercera matriz (es decir, hacer C = A + B)
La pantalla debe parecerse a la siguiente:

SUMA DE MATRICES
Ingrese el nmero total de filas : ___ 2
Ingrese el nmero total de columnas: ___ 2

Ingresa la primera matriz
2 4
5 7
Ingresa la segunda matriz
3 5
9 1
Resultados:
La matriz suma es:
5 9
14 8
** Fin del proceso **

#include <iostream.h>
#include <conio.h>
typedef int TMatriz[20][20];

void main()
{ TMatriz A, B, C;
int M,N;
int i,j;
cout<<" SUMA DE MATRICES\n";
cout<<"Ingrese el numero total de filas :"; cin>>M;
cout<<"Ingrese el numero total de columnas : "; cin>>N;
/* INGRESO DE LA PRIMERA MATRIZ */
cout<<"Ingrese la primera Matriz (Matriz A) \n";
for (i=1;i<=M;i++)
for (j=1;j<=N;j++)
{cout<<"A["<<i<<","<<j<<"] :";
cin>>A[i][j];
}
/* INGRESO DE LA SEGUNDA MATRIZ */
cout<<"Ingrese la segunda Matriz (Matriz B) \n";
for (i=1;i<=M;i++)
for (j=1;j<=N;j++)
{cout<<"B["<<i<<","<<j<<"] :";
cin>>B[i][j];
}
/* PROCESO MATEMATICO : C = A + b */
for (i=1;i<=M;i++)
for (j=1;j<=N;j++)
C[i][j]= A[i][j] + B[i][j];
/* PRESENTACION DE RESULTADOS*/
cout<<"\n RESULTADOS:";
cout<<"\n La matriz suma es:";
for (i=1;i<=M;i++)
{ cout<<endl;
for (j=1;j<=N;j++) cout<<C[i][j]<<" ";
}
cout<<"\n ** FIN DEL PROCESO **";
getch();
}
Figura 2.19 Programa de suma de dos matrices A y B de grado MxN
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

48
Introduccin a la programacin
RECURSIVIDAD

La recursin es un instrumento muy til en programacin. El problema de cmo se efecta
realmente en una computadora, ha de distinguirse con demasiado cuidado de lo referente al
uso de la recursin en el diseo y anlisis de algoritmos. En la fase de diseo, en la fase de
diseo, emplearemos todos los mtodos de solucin de problemas que resulten apropiados, y
la recursin es una de las herramientas ms flexibles y potentes. En la fase de implantacin
puede que necesitemos preguntar cul de los mtodos es el ms adecuado en las
circunstancias presentes. Se dispone de dos tcnicas por lo menos para realizar la recursin
en los sistemas de computacin.

Un subprograma que se llama a s mismo se dice que es recursivo.

La recursin puede darse de dos maneras diferentes:
a) Directa: el subprograma se llama directamente a s mismo. Por ejemplo, observe que en
la figura 2.1 P es un subprograma y en alguna parte de l aparece una llamada a s
mismo.
b) Indirecta: el subprograma llama a otro subprograma, y ste a su vez llama al primero. Por
ejemplo, en la figura 2.2 (a) el subprograma P llama al subprograma Q y ste a su vez
invoca al primero; es decir, el control regresa a P. Tambin se da la recursin indirecta
cuando un subprograma llama a otro y ste a un tercero. Una vez ejecutado, el control
regresa al subprograma que lo llamo, lo mismo sucede en todos los niveles. Por ejemplo,
en la figura 2.2 (b) el subprograma P llama al subprograma Q, y este llama al subprograma
V. Cuando V concluye, el control regresa a Q; y al terminar este, el control se transfiere a
P.
En toda definicin recursiva de un problema debe establecerse un estado bsico. Es decir, un
estado en el cual la solucin no se presenta de manera recursiva, sino directamente. Adems
la entrada (datos) del problema debe ir acercndose al estado bsico.



- - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
L l a m a d a a P
- - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
S u b p r o g r a m a P
Figura 3.1 Recursin directa
S u b p r o g r a m a P
S u b p r o g r a m a Q
L l a m a d a a Q
L l a m a d a a P
S u b p r o g r a m a P
L l a m a d a a Q
S u b p r o g r a m a Q
L l a m a d a a V
S u b p r o g r a m a V
( a )
( b )
Figura 3.2
Recursin
Directa
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

49
Introduccin a la programacin
EJEMPLOS DE RECURSION
Factorial de un nmero
El factorial de un nmero entero positivo n se define como el producto de los nmeros
comprendidos entre 1 y n. La expresin n! Simboliza el factorial de n.

Por definicin:
0! = 1
1! =1
2! = 1 x 2 = 2
3! = 1 x 2 x 3 = 6
4! = 1 x 2 x 3 x 4 = 24
.
.
n! = 1 x 2 x 3 x 4 x ....... x (n - 1) x n

Esto tambin pudo haberse escrito
Factorial(0) = 1
Factorial(1) = 1 * Factorial(0)
Factorial(2) = 2 * Factorial(1)
Factorial(3) = 3 * Factorial(2)
Factorial(4) = 4 * Factorial(3)

Generalizando obtenemos la ecuacin recursiva:
Factorial(N)=N * Factorial(N 1)

Algoritmo de factorial
Este algoritmo calcula el factorial de un nmero N, donde N es un valor numrico entero
positivo o cero. Se hace uso de la ecuacin recursiva. El algoritmo de factorial aplicando
recursin es:


Factorial(N: Entero)
Si N = 0
Entonces
Hacer Factorial = 1;
Sino
Hacer Factorial = N x Factorial(N-1) //Llamada recursiva
Fin del condicional

Figura 3.3 Algoritmo de obtencin del factorial de un nmero


Serie de Fibonacci
La conocida serie de Fibonacci es: 0, 1, 1, 2, 3, 5, 8, 13, 21 , ....., etc. Recurdese que el
Fibonacci de un nmero se obtiene de la suma de los dos nmero Fibonacci anteriores.

A continuacin se ilustra el concepto de nmeros Fibonacci.

Fibonacci(0) = 0
Fibonacci(1) = 1
Fibonacci(2) = Fibonacci(1) + Fibonacci(0) = 1 + 0 = 1
Fibonacci(3) = Fibonacci(2) + Fibonacci(1) = 1 + 1 = 2
Fibonacci(4) = Fibonacci(3) + Fibonacci(2) = 2 + 1 = 3
Fibonacci(5) = Fibonacci(4) + Fibonacci(3) = 3 + 2 = 5


Lo cual puede generalizarse a
Fibonacci(N) = Fibonacci(N1) + Fibonacci(N 2)
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

50
Introduccin a la programacin

Algoritmo de la serie de Fibonacci
Este algoritmo calcula el nmero Fibonacci correspondiente a N, donde N es un valor numrico
entero positivo o cero


Fibonacci(N:Entero)
Si (N=0) (N=1)
Entonces
Hacer Fibonacci = N //Estado bsico
Si no
Hacer Fibonacci = Fibonacci(N-1) + Fibonacci(N-2)
// Llamada recursiva
Fin del condicional

Figura 3.4 Algoritmo de obtencin de un nmero Fibonacci

En general, una versin no recursiva de un programa ser ejecutada ms eficientemente en
trminos de tiempo y espacio que una versin recursiva. Esto se debe a que la sobrecarga
comprendida al entrar y salir de un bloque es eliminada en la versin no recursiva. Sin
embargo, vemos que algunas veces una solucin recursiva es la ms natural y lgica para
resolver algn problema. Por lo tanto, se nos presenta un conflicto entre la eficiencia de la
mquina y la eficiencia del programador. Teniendo en cuenta que el costo de programacin
aumenta contnuamente y el costo de la computacin disminuye, hemos llegado al punto en el
cual en muchos casos no se justifica gastar tiempo de programacin para construir una
solucin que sea no recursiva a un problema que puede ser resuelto en forma ms natural a
travs de un sistema recursivo.
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

51
Introduccin a la programacin
DIVIDIR PARA REINAR

Una forma comn de resolver un problema consiste en dividirlo en dos o ms subproblemas,
cada uno semejante al problema original pero de menores dimensiones. Se obtiene
posteriormente la solucin para estos subproblemas y finalmente se combinan para producir la
solucin final del problema inicial.

Esta tcnica consiste bsicamente en descomponer un programa grande en submdulos, y
stos a su vez en otros submdulos.

En pginas anteriores le hemos dado una mayor explicacin a esta idea, por lo cual
obviaremos ms comentarios.

PROBLEMA: Las torres de Hanoi
9

Este famoso juego (y/o acertijo que a continuacin se describe) va ha permitir aplicar la tcnica
divide y vencers en la resolucin de un problema. El juego dispone de tres postes A, B, C.
En el poste A se encuentran n discos de tamao decreciente. El objetivo del juego es mover
uno a uno los discos desde el poste A al poste C utilizando el poste B como auxiliar. Adems,
existe una restriccin, nunca podr haber un disco de mayor radio encima de otro de menor
radio.


Vamos a plantear la solucin de tal forma que el problema se vaya dividiendo en problemas
ms pequeos, y a cada uno de ellos aplicarles la misma solucin. En lenguaje natural lo
podemos expresar as:
1. El problema de mover n discos de A a C consiste en:
Mover los n 1 discos superiores de A a B
Mover el disco n de A a C
Mover los n 1 discos de B a C


Un problema de tamao n ha sido transformado en un problema de tamao n 1. A su
vez, cada problema de tamao n 1 se transforma en otro de tamao n 2 (empleando
el poste libre como auxiliar).

2. El problema de mover los n 1 discos de A a B consiste en:
Mover los n 2 discos superiores de A a C
Mover el disco n-1 de A a B
Mover los n 2 discos de C a B

De este modo se va progresando, reduciendo cada vez un nivel la dificultad del problema
hasta que el mismo slo consista en mover un solo disco. La tcnica consiste en ir
intercambiando la finalidad de los postes, ORIGEN, DESTINO y AUXILIAR. La condicin
de terminacin es que e nmero de discos sea 1. Cada accin de mover un disco realiza
los mismos pasos, por lo que puede ser expresada de manera recursiva.


9
Luis Joyanes Aguilar, Estructura de datos, pp. 267-268
A
B
C
Figura 3.5 Problema de las torres de
Hanoi. Hay tres postes, el poste A tiene
N platillos. Se deben pasar todos los
platillos, uno a uno hacia el poste V.
Las restricciones son las siguientes:
Los platillos de la parte superior son ms
pequeos que los de la parte inferior. Se
puede usar el poste C como un poste
temporal.
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

52
Introduccin a la programacin

El procedimiento recursivo puede ser escrito como se describe a continuacin:


Procedure TorresH(N:Integer; A,B,C: Char);
Procedure Movimiento(N:Integer; A,C: Char);
Begin
Writeln(Mover disco , N, de , A, a ,C);
End;
Begin
If N=1
Then Movimiento (N, A, C)
Else Begin
TorresH(N-1, A, C, B);
Movimiento(N, A, C)
TorresH(N-1, B, A, C);
End;
End;


Figura 3.6 Algoritmo recursivo que resuelve el problema de las Torres de Hanoi



EJEMPLO DE ALGORITMO RECURSIVO
10


Para ejemplificar la tcnica de recursin utilizaremos un caso imaginario. Se dispone de una
caja dentro de la cual hay seguramente una bolilla de algn color y posiblemente otra caja con
las mismas caractersticas. La tarea es examinar todas las cajas hasta encontrar una bolilla
blanca. Para ello es necesario comenzar la tarea abriendo la caja exterior y viendo el color de
la bolilla; si es blanca, informar el xito, si no, ver si hay otra caja adentro; si hay otra caja
adentro, examinarla como la actual, si no, informar que no se ha encontrado la bolilla buscada.
Finalmente, terminar la tarea cerrando la caja.

Como se ve, el fin del proceso ocurre cuando se encuentra una bolilla blanca o bien cuando no
hay ms cajas para examinar. Obsrvese que ambas verificaciones forman parte del cuerpo
principal de acciones y se realizan cuando stas estn an inconclusas (en este caso, antes de
cerrar la caja). Si nos representamos mentalmente este algoritmo, vemos que se avanza
abriendo una caja tras otra -y dejndolas abiertas- hasta llegar a una en la que se da la
condicin de fin (se hall la bolilla o no hay otra caja adentro). En ese momento no se abren
ms cajas y se completan los procedimientos pendientes cerrando las cajas en el orden inverso
en que fueron abiertas. Este desarrollo hacia adentro es tpico de los algoritmos recursivos.

El siguiente programa en C simula el problema de las cajas informando que se encontr una
bolilla blanca o, el fracaso de la misin. La funcin auxiliar llenar_cajas() recibe como
parmetro un vector de cajas "vacas" y su tamao, y recorre iterativamente todas las cajas
dndole un "color" aleatorio a cada bolilla y "metiendo" cada caja dentro de la anterior. La
funcin principal buscar_bolilla() recibe como parmetros un apuntador a una caja y un
nmero de orden y revisa recursivamente las cajas interiores hasta dar con la bolilla blanca o
encontrarse con que no hay ms cajas.

En la pgina siguiente se muestra el cdigo fuente de este programa.

10
Este ejemplo est disponible en la Web. Si desea ms informacin, le informamos que este ejemplo fue
descargado desde la siguiente direccin Web :
http://www.algoritmica.com.ar/cgi-bin/framed/2675/alg/ord/ordbus.htm
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

53
Introduccin a la programacin
/* BOLILLA.CPP */

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>

#define CANT_CAJAS 5

enum Color // Enumeracin de los colores.
{ VERDE, BLANCO, ROJO, AZUL };

struct Caja // Estructura que representa una caja.
{
int bolilla; // bolilla es igual a uno de los "colores".
Caja *caja; // El apuntador caja representa la caja interior.
}; // Cuando no hay ninguna caja interior, caja es nulo.

void llenar_cajas (Caja *c, int cant);
void buscar_bolilla (Caja *c, int orden);

void llenar_cajas (Caja *c, int cant) // Funcin iterativa.
{
c->bolilla = random (4); // La funcin random (num) retorna un
while (--cant) // nmero aleatorio entre 0 y num - 1
(en
{ // este caso, entre 0 y 3).
c->caja = c + 1; // La caja interior apunta a la siguiente.
(++c)->bolilla = random (4);
}
c->caja = 0; // La ltima caja no apunta a ninguna.
}

void buscar_bolilla (Caja *c, int orden) // Funcin recursiva.
{
printf ("Abriendo caja %d\n", orden); // En principio se "abre" esta
caja.
if (c->bolilla == BLANCO) // Si se encuentra una bolilla
printf ("\tHallada bolilla blanca\n"); // blanca, se informa el xito.
else // Si la bolilla no es blanca:
if (c->caja) // si hay una caja interior la
buscar_bolilla (c->caja, orden + 1); // funcin se llama a s misma,
else // si no, se informa que no hay
printf ("\t No hay ms cajas\n"); // ms cajas.
printf ("Cerrando caja %d\n", orden); // Finalmente se "cierra" esta
caja.
}

/* PROGRAMA PRINCIPAL */

int main ()
{
Caja cajas [CANT_CAJAS]; // Vector de cajas vacas.

clrscr ();
randomize (); // La funcin randomize () inicializa la
// secuencia de nmeros aleatorios.
llenar_cajas (cajas, CANT_CAJAS);
buscar_bolilla (cajas, 1);

return 0;
}
Figura 3.7 Programa en donde se utiliza la recursividad para resolver un problema
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

54
Introduccin a la programacin
TOPICOS DE PROGRAMACION

DISEO DESCENDENTE
Cuando se escriben programas de tamao y complejidad moderada, nos enfrentamos a la
dificultad de escribir dichos programas. La solucin para resolver estos problemas y,
naturalmente, aquellos de mayor tamao y complejidad, es recurrir a la modularidad mediante
el diseo descendente. Qu significa diseo descendente?

La filosofa del diseo descendente, reside en que se descompone una tarea en sucesivos
niveles de detalle. Para ello se divide el programa en mdulos independientes
(procedimientos, funciones y otros bloques de cdigo), como se observa en la figura 3.8.
Figura 3.8 Un programa dividido en mdulos independientes

El concepto de solucin modular se aprecia en la aplicacin de la figura 1.2, que busca
encontrar la nota media de un conjunto de notas de una clase de informtica. Existe un mdulo
del ms alto novel que se va refinando en sentido descendente para encontrar mdulos
adicionales ms pequeos. El resultado es una jerarqua de mdulos: cada mdulo se refina
por los de bajo nivel que resuelve problemas ms pequeos y contiene ms detalles sobre los
mismos. El proceso de refinamiento contina hasta que los mdulos de nivel inferior de la
jerarqua sean tan simples como para traducirlos directamente a procedimientos, funciones y
bloques de cdigo en Pascal o C, que resuelven problemas independientes ms pequeos. De
hecho, cada mdulo de nivel ms bajo debe ejecutar una tarea bien definida. Estos mdulos
se denominan altamente cohesivos.

Cada mdulo se puede dividir en subtareas. Por ejemplo, se puede refinar la tarea de leer las
notas de una lista, dividindolo en subtareas. Por ejemplo, se puede refinar la tarea de leer
las notas de la lista en otras dos subtareas: pedir al usuario una nota y situar la nota en la lista.



ABSTRACCION PROCEDIMENTAL
Cada algoritmo que resuelve el diseo de un mdulo equivale a una caja negra que ejecuta
una tarea determinada. Cada caja negra especifica lo que hace, pero no cmo lo hace, y de
igual modo cada caja negra conoce cuantas cajas negras existen y lo que hacen

Normalmente, estas cajas negras se implementan como subprogramas. Una abstraccin
procedimental separa el propsito de un subprograma de su implementacin. Una vez que un
subprograma se haya escrito o codificado, se puede usar sin necesidad de conocer su cuerpo y
basta con su nombre y una descripcin de sus parmetros.
La modularidad y la abstraccin procedimental son complementarios. La modularidad implica
romper una solucin en mdulos; la abstraccin procedimental implica la especificacin de
cada mdulo antes de su implementacin en Pascal. El mdulo implica que se puede cambiar
su algoritmo concreto sin afectar el resto de la solucin.

La abstraccin procedimental es esencial en proyectos complejos, de modo que se pan utilizar
subprogramas escritos por otras personas, sin necesidad de tener que conocer sus algoritmos.

P r o g r a m a p r i n c i p a l
F u n c i n F 1 P r o c e d i m i e n t o P 1 F u n c i n F 2
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

55
Introduccin a la programacin
Figura 3.9 Diagrama de bloques que muestra la jerarqua de mdulos



MODULARIDAD MEDIANTE DISEO DESCENDENTE
La programacin modular tiene muchas ventajas. A medida que el tamao de un programa
crece, muchas tareas de la programacin se hacen ms difciles. La diferencia principal entre
un programa modular pequeo y un programa modular grande es, simplemente, el nmero de
mdulos que cada uno contiene, ya que el trabajo con programas modulares es similar y slo
se ha de tener presente el modo en que unos mdulos interactan con otros.

La modularidad tiene un impacto positivo en los siguientes aspectos de la programacin:
- Construccin del programa. La descomposicin del programa en mdulos permite
que los diversos programadores trabajen en modo independiente en cada uno de sus
mdulos. El trabajo de mdulos independientes convierte la tarea de escribir un
programa grande en la tarea de escribir muchos programas pequeos.
- Depuracin del programa. La depuracin de programas grandes puede ser una tarea
enorme, de modo que se facilitar esa tarea, al centrarse en la depuracin de
pequeos programas ms fciles de verificar.
- Legibilidad. Los programas grandes son muy difciles de leer, mientras que los
programas modulares son ms fciles de leer.
- Eliminacin de cdigo redundante. Otra ventaja del diseo modular es que se
pueden identificar operaciones que suceden en muchas partes diferentes del programa
y se implementan como subprogramas. Esto significa que el cdigo de una operacin
aparecer slo una vez, produciendo como resultado un aumento en la legibilidad y
modificabilidad.



ESTILO DE PROGRAMACION
Una de las caractersticas ms importantes en la construccin de programas, sobre todo los de
gran tamao, es el estilo de programacin. La buena calidad en la produccin de programas
tiene relacin directa con la escritura de los mismos, su legibilidad y comprensibilidad. Un buen
estilo de programacin suele venir con la prctica, pero el requerimiento de unas reglas de
escritura del programa, al igual que sucede con la sintaxis de escritura y las reglas de escritura
de un lenguaje natural humano, debe buscar esencialmente que no solo sean legibles y
modificables por las personas que lo han construido, sino tambin, y esencialmente, puedan
ser ledos y modificados por otras personas distintas. No existe una forma mgica que
garantice programas legibles, pero existen diferentes reglas que facilitarn la tarea y con las
que prcticamente suelen estar de acuerdo casi todos, desde programadores novatos a
ingenieros de software experimentados.

Naturalmente, las reglas de estilo para construir programas claros, legibles y fcilmente
modificables, depender del tipo de programacin y lenguaje elegido. En nuestro caso, hemos
recomendado el uso de Pascal y/o C++

O r d e n a r l a l i s t a
E n c o n t r a r l a m e d i a
O b t e n e r e l e l e m e n t o
c e n t r a l d e l a l i s t a
L e e r l a s n o t a s
d e l a l i s t a
P e d i r a l u s u a r i o u n a l i s t a S i t u a r l a n o t a e n l a l is t a
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

56
Introduccin a la programacin
Reglas de estilo de programacin
1. Modularizar un programa en partes coherentes (uso amplio de subprogramas)
2. Evitar variables globales en subprogramas.
3. Usar nombres significativos para identificadores.
4. Definir constantes con nombres al principio del programa.
5. Evitar el uso del goto y no escribir nunca cdigo espagueti (cdigo con saltos y
retornos difcles de controlar)
6. Escribir subrutinas cortas que hagan una sola cosa y bien.
7. Uso adecuado de parmetros variable.
8. Usar declaraciones de tipos.
9. Presentacin (comentarios adecuados)
10. Manejo de errores
11. Legibilidad
12. Documentacin.


DISEO DE ALGORITMOS
Tras una adecuada fase de anlisis, para poder solucionar problemas sobre una computadora,
debe conocerse cmo disear algoritmos. En la prctica sera deseable disponer de un mtodo
para escribir algoritmos. El diseo de algoritmos es un proceso creativo. Sin embargo existen
una serie de pautas o lneas a seguir que ayudarn al diseo de algoritmos. Algunas se ellas
son las siguientes:


1. Formular una solucin precisa del problema que debe solucionar el algoritmo.
2. Ver si existe ya algn algoritmo para resolver el problema o bien se puede adaptar
uno ya existente (algoritmos conocidos).
3. Buscar, si existen, tcnicas estndar que se puedan utilizar para resolver el problema.
4. Elegir una estructura de datos adecuada.
5. Dividir el problema en subproblemas y aplicar el mtodo a cada uno de los
subproblemas.
6. Si todo lo anterior falla, comience con el paso 1.



De cualquier forma, antes de iniciar el diseo de algn algoritmo, es preciso asegurarse que el
programa est bien definido.
- Especificaciones precisas y completas de las entradas necesarias.
- Especificaciones precisas y completas de la salida.
- Cmo debe reaccionar el programa ante datos incorrectos?
- Se emiten mensajes de error? se detiene el proceso?, etc.
- Conocer cundo y cmo debe terminar un programa.



ERRORES TIPICOS EN LA PROGRAMACION
- Errores de sintaxis (o en tiempo de compilacin). Se producen cuando existen errores en
la sintaxis del programa, tales como signos de puntuacin incorrectos, palabras mal
escritas, ausencia de separadores (signos de puntuacin), o de palabras reservadas
(ausencia de un end). Si una sentencia tiene un error de sintaxis, no puede ser traducida y
su programa no se ejecutar. Cuando se detecta un error, el depurador, por lo general, le
informa al usuario acerca del error detectado

Normalmente, estos tipos de errores son fciles de encontrar. El siguiente ejemplo
presenta dos errores de sintaxis: el punto y coma que falta al final de la primera lnea y la
palabra Writaln mal escrita, debera ser Writeln.


Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

57
Introduccin a la programacin




Suma:= 0
For I:=0 to 10 do
Suma := Suma + A[I];
Writaln (Suma/19);

Figura 3.10 Tpico error de sintaxis

- Errores en tiempo de ejecucin (runtime error). Suceden cuando el programa trata de
hacer algo imposible o ilgico. Los errores de ejecucin slo se detectan en la ejecucin.
Errores tpicos son: la divisin por cero, intentar un ndice fuera de los lmites definidos en
un array, intentar acceder a zonas de la memoria que no han sido inicializadas y/o
apartadas para un uso especial.
- Errores lgicos. Son errores del algoritmo o de la lgica del programa. Son difciles de
encontrar porque el compilador no produce ningn mensaje de error. Se producen cuando
el programa es perfectamente vlido y produce una respuesta.

Por ejemplo:
Calcular la media de todos los nmeros ledos del teclado


Suma := 0;
For I:=0 to 10 do
Begin Readln(Num);
Suma := Suma + Num;
End;
Media := Suma/10;


Figura 3.11 Ejemplo tpico de un error lgico.


En este ejemplo, la media est mal calculada, ya que existen once nmeros (0 a 10) y no
diez como se ha escrito


Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

58
Introduccin a la programacin
PROCEDIMIENTOS Y FUNCIONES

SubPrograma
O tambin llamada subrutina, bsicamente una Subrutina es un segmento de cdigo que se
escribe slo una vez pero puede invocarse o ejecutarse muchas veces. Existen dos tipos:
Procedimientos y Funciones.


Procedimientos
Son un tipo de subrutina que ejecuta un conjunto de acciones sin devolver valor alguno como
resultado de dichas operaciones. Estos se identifican por su declaracin void().

void sumar()
{ int A, B, C;
cin>>A;
cin>>B;
C = A + B;
cout<<C;
}

void main()
{ sumar();

}

Funciones
A diferencia de los procedimientos, las funciones despus de ejecutar un conjunto de acciones
devuelven slo un valor del tipo usado en la declaracin de sta por medio de return().

int sumar(int A, int B)
{ int C;
C = A + B;
return C;
}

void main()
{ int A, B, C;
cin>> A;
cin>> B;
C = sumar();
cout<<C;
}


La clusula return() slo devuelve un valor. Si se desea que la funcin devuelva ms de un
valor debe usarse otro mecanismo.


Alcance de las variables locales y variables globales.
Las variables que se declaran dentro de una subrutina se llaman locales mientras que las
variables globales se conocen a travs del programa entero y se pueden usar en cualquier
segmento de cdigo manteniendo su valor. Se pueden declarar variables globales
declarndolas fuera de cualquier funcin.

Cualquier funcin puede acceder a ellas sin tener en cuenta en qu funcin est dicha
expresin.





Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

59
Introduccin a la programacin
Ejemplo de Funciones
Se desea implementar un programa que lea un nmero N por teclado, y que luego imprima en
pantalla su equivalente en Nmeros romanos.

INICIO
CASE
(N)
FIN
R ="I" R = "II"
R="III" R="IX"
return R
R =" "
getUnidad(N:Integer):String
N=1 N=2 N=3
.....
.
N=9 N=0


CASE
(N)
INICIO
FIN
R=getUnidad(N)
R = "X" + getUnidad(N-10)
R="XX" + getUnidad(N-20)
R="XC" + getUnidad(N-90)
return R
R="IC"
getDecada(N:Integer):String
N=1..9 N=10..19 N=20..29
.....
N=90..98
N=99



Cundo utilizar funciones?
Normalmente, las funciones se utilizan cuando nos encontramos con:
Agrupamiento de operaciones cuyo patrn ha sido descifrado
INICIO
FIN
Z = getDecada(X)
Leer X
Print Z
Programa Principal
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

60
Introduccin a la programacin
Operaciones complejas donde el objetivo del conjunto es proporcionar un nico valor
especfico, o un conjunto reducido de valores.
Operaciones matemticas, cuyos agrupamientos pueden tomar la forma de ) (x f z =
) ..., , , (
3 2 1 N
x x x x f z = .

a) En funciones matemticas de la forma: ) (x f z = ) ..., , , (
3 2 1 N
x x x x f z = .
Ejemplos tipo 1: Funciones que encapsulan
operaciones matemticas
Implemente la funcin 6 ) (
3
+ = x x f
Solucin:
float funcionDeA(float X)
{ float temp;
temp = (X * X *X) + 6;
return temp;
}



Implemente la funcin z y x z y x f 20 5 ) , , (
2
+ =
Solucin:
float funcionDeB(float X, float Y, float Z)
{ float temp;
temp = (X * X)+(5 * Y)-(20 * Z);
return temp;
}

Implemente la funcin z
y
x z y x f 41
1
8 ) , , ( + =
Solucin:
float funcionDeC(float X)
{ float temp;
temp = X + (8 * 1/Y) - (41 * Z);
return temp;
}


Luego de ser implementadas, cualquiera de estas funciones
puede ser reutilizada desde alguna otra funcin (o procedimiento) o desde el mismo
programa principal (void main)

Ejemplos: Implemente un programa que use la funcin
FuncionDeA (es decir 6 ) (
3
+ = x x f )
Solucin:
void main()
{ float f, x;
cin>>x;
f = FuncionDeA(x);
cout<<f;
}


b) Con Funciones en operaciones iterativas.
Existen algunas operaciones matemticas en donde se realizan bucles iterativos, en
tales situaciones, para facilidad de la programacin, estas rutinas se deberan en una
funcin que luego es invocada repetitivamente.

FIN
INICIO
R = X * X * X
FuncionDeA (X: Float): Float
Return N
INICIO
R = ( X ) + ( 8/Y ) - ( 41 * Z )
FuncionDeC (X, Y, Z: Float): Float
Return R
FIN
INICIO
FIN
R = ( X * X ) + ( 5 * Y ) - ( 20 * Z )
FuncionDeB (X, Y, Z: Float): Float
Return R
INICIO
F = FuncionDeA( X )
FIN
Leer X
Print F
Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

61
Introduccin a la programacin
b.1) Ejemplo de funciones matemticas que tienen la forma:
Funcin sumatoria Funcin producto

=
=
N
i
i
x f z
1
) (
tambin
) ( .... ) ( ) (
2 1 N
x f x f x f z + + + =

=
=
N
i
i
x f z
1
) ( tambin
) ( * .... * ) ( * ) (
2 1 N
x f x f x f z =

En este caso, se presume que las variables X
i
estn almacenadas en un array de
valores (en un arreglo X), o que su acceso es secuencial.


En este tipo de funciones, se puede notar que tenemos:
Sumatoria Producto

=
=
N
i
i
x f z
1
) (

=
=
N
i
i
x f z
1
) (
La funcin
) (
i
x f

La funcin sumatoria

=
N
i 1
es decir, la
funcin suma de
) (
i
x f
. Donde i:1
N

La funcin
) (
i
x f

La funcin sumatoria

=
N
i 1
es decir,
la funcin producto de
) (
i
x f
.
Donde i:1N

Variables de entrada:
N: Entero; X[]: Arreglo
Variables de entrada:
N: Entero; X[]: Arreglo
La funcin a implementar ser: FuncinZuma La funcin a implementar ser:
FuncinProducto

El formato de la solucin sera:
FuncionProducto(N: Integer; X:Array): Float
FIN
While
(i <= N)
FIN
Acum = 0
i = 1
While
(i <= N)
FuncionZuma(N: Integer; X:Array): Float
F = FuncionDe ( X [ i ] )
i = i + 1
Return Acum
Acum = Acum + F
Acum = 1
i = 1
F = FuncionDe ( X [ i ] )
i = i + 1
Return Acum
Acum = Acum * F


Universidad Nacional de Andahuaylas - UNAJMA Algoritmos y Estructura de Datos I
Ingeniera de Sistemas Docente: Ing. Edwin Ramos Velsquez

62
Introduccin a la programacin
b.2) Ejemplo de funciones matemticas que tienen la forma:
Funcin sumatoria Funcin producto

=
=
N
i
i f z
1
) ( tambin
) ( .... ) 2 ( ) 1 ( N f f f z + + + =

=
=
N
i
i f z
1
) ( tambin
) ( * .... * ) 2 ( * ) 1 ( N f f f z =

En este caso, las variables X
i
se supone que estn almacenadas en un array de
valores, o que su acceso es secuencial.

En este tipo de funciones, se puede notar que tenemos:
Sumatoria Producto

=
=
N
i
i f z
1
) (

=
=
N
i
i f z
1
) (
La funcin
) (
i
x f

La funcin sumatoria

=
N
i 1
es decir, la
funcin suma de ) (i f . Donde i:1 N

La funcin
) (
i
x f

La funcin sumatoria

=
N
i 1
es decir,
la funcin producto de ) (i f .
Donde i:1N

Variables de entrada:
N: Entero; X[ ]: Arreglo
Variables de entrada:
N: Entero; X[ ]: Arreglo
La funcin a implementar ser: FuncinZuma La funcin a implementar ser:
FuncinProducto

El formato de la solucin sera:
FuncionProducto(N: Integer): Float
FIN
While
(i <= N)
FIN
Acum = 0
i = 1
While
(i <= N)
FuncionZuma(N: Integer): Float
F = FuncionDe ( i )
i = i + 1
Return Acum
Acum = Acum + F
Acum = 1
i = 1
F = FuncionDe ( i )
i = i + 1
Return Acum
Acum = Acum * F

Das könnte Ihnen auch gefallen