Está en la página 1de 14

Curso: Algoritmos II

FACULTAD DE INGENIERA INDUSTRIAL Y DE SISTEMAS

Facultad de Ingeniera Industrial y de Sistemas

Tutor: Ing. Alberto Moreno C.

Lima - Peru

Curso: Algoritmos II
FACULTAD DE INGENIERA INDUSTRIAL Y DE SISTEMAS

PROGRAMACION MODULAR
Los subprogramas son pequeos programas que pueden usarse para dividir un programa por tareas. Entre las tareas ms comunes en un programa estn las tareas para recolectar datos, calcular,mostrar informacin o coordinar la ejecucin de otros subprogramas. Los subprogramas para recolectar datos son los responsables de recoger los datos que el programa necesita para realizar su labor. En esta categora estn los subprogramas que: piden los datos al usuario adquieren los datos a travs de otros medios de entrada (por ejemplo, archivos)

Los subprogramas que realizan clculos, reciben los datos que necesitan de los subprogramas que recolectan datos o de otros subprogramas que realizan clculos. Entre las tareas efectuadas por los subprogramas de esta categora estn las operaciones para: evaluar frmulas (por ejemplo, F = 9/5C + 32) determinar propiedades (por ejemplo, es un nmero positivo?) comparar cantidades (por ejemplo, es un nmero mayor que otro nmero?)

Los subprogramas para mostrar informacin presentan al usuario los resultados producidos por los subprogramas que realizan clculos. Adems, pueden usarse para mostrar instrucciones al usuario de cmo usar el programa o para qu es el programa.

En la ltima categora, subprogramas que coordinan tareas, estn los subprogramas que gobiernan otros subprogramas. En otras palabras, son subprogramas que le indican a otros subprogramas cuando deben realizar su tarea y que datos deben recibir. Un ejemplo de un subprograma que gobernar otros subprogramas es el main.

Programacin Estructurada
La programacin estructurada es una tcnica para escribir programas de manera clara. Para ello se utilizan nicamente tres estructuras: secuencia, seleccin e iteracin; siendo innecesario el uso de la instruccin o instrucciones de transferencia incondicional (GOTO, EXIT FUNCTION, EXIT SUB o mltiples RETURN).

Programacin Modular
La programacin modular es un paradigma de programacin que consiste en dividir un programa en mdulos o subprogramas con el fin de hacerlo ms legible y manejable, Se presenta histricamente como una evolucin de la programacin estructurada para solucionar problemas de programacin ms grandes y complejos de lo que sta puede resolver. Diseo descendente (de arriba hacia abajo): En la solucin de problemas grandes, es conveniente dividirlo en problemas mas pequeos (sub-problemas), los cuales a su vez pueden dividirse en sub-problemas ms pequeos. Este es un proceso de refinamiento por pasos, etapas o capas. Comenzando desde lo ms general hasta lo ms especifico.

Curso: Algoritmos II
FACULTAD DE INGENIERA INDUSTRIAL Y DE SISTEMAS

Rutinas: Piezas pequeas diseadas para ejecutar una tarea especfica. Permiten desarrollar y mantener programas grandes y mdulos. Pueden ser de dos tipos: Funciones Procedimientos Procedimientos subrutinas son subprogramas que realizan una tarea especfica, reciben datos del exterior a travs de parmetros o envan informacin al exterior a travs de parmetros, y no tienen instruccin de retorno. Por ejemplo, una subrutina que imprima en pantalla el nmero mayor de dos nmeros ingresados como parmetros. Puede haber subrutinas que no tengan parmetros, por ejemplo, una subrutina que indique el propsito del programa. Las funciones son subprogramas que reciben datos del exterior a travs de parmetros y envan un solo valor al exterior a travs del nombre de la funcin (instruccin de retorno). Estos subprogramas son el equivalente a las funciones matemticas, por ejemplo, la funcin que retorna la distancia entre dos puntos necesita cuatro parmetros que reciban las cuatro coordenadas de los dos puntos. Otro ejemplo es la funcin que retorna la raz cuadrada de un nmero. Las funciones tendrn como mnimo un parmetro. Ambas funciones envan sus resultados a travs de la instruccin de retorno.

Funciones en C++
En lenguaje C y C++ no existe diferencia entre funciones y procedimientos: a todas las subrutinas se les llama funciones. Una funcin se declara una vez pero puede usarse (mediante llamadas) tantas veces como sea necesario. TIPOS DE FUNCIONES EN C, C++ Funciones de Biblioteca: Los lenguajes C y C++ tiene sus propias funciones incorporadas que permiten realizar ciertas operaciones o clculos de uso comn. Funciones definidas (diseadas o codificadas) por el programador para realizar determinadas tareas. BIBLIOTECA ESTNDAR DE C,C++ Contiene una amplia coleccin de funciones para llevar a cabo clculos matemticos comunes: Manipulacin de cadenas de caracteres. Manipulacin con caracteres Operaciones estndares de entrada y salida Operaciones matemticas Una biblioteca de funciones comunes es construida una vez en un archivo de biblioteca que se proporciona como parte del compilador de C/C++. stdlib.h, math.htime.h, ctype.hstring.h, stdio.h, malloc.h, conio.h,iostream.h

Definiendo una funcin


Una funcin es un conjunto de lneas de cdigo que realizan una tarea especfica y puede retornar un valor. Las funciones pueden tomar parmetros que modifiquen su funcionamiento. Las funciones son utilizadas para descomponer grandes problemas en tareas simples y para implementar operaciones que son comnmente utilizadas durante un programa y de esta manera reducir la cantidad de cdigo. Cuando una funcin es invocada se le pasa el control a la misma, una vez que esta finaliz con su tarea el control es devuelto al punto desde el cual la funcin fue llamada.

Curso: Algoritmos II
FACULTAD DE INGENIERA INDUSTRIAL Y DE SISTEMAS

<tipo> [clase::] <nombre> ( [Parmetros] ) { cuerpo; } Ejemplo de una funcin Para comenzar, vamos a considerar el caso en el cual se desea crear la funcin cuadrado(), misma que deber volver el cuadrado de un nmero real (de punto flotante), es decir, cuadrado() aceptar nmeros de punto flotante y regresar una respuesta como nmero flotante. Nota: aunque para la funcin que veremos el tipo de retorno coincide con el tipo de parmetro pasado, algunas veces las cosas pueden cambiar, es decir, no es obligatorio que una funcin reciba un parmetro de un tipo y que tenga que regresar una respuesta de dicho tipo. // regresar el cuadrado de un nmero double cuadrado(double n) { return n*n; } Definicin: La definicin de una funcin consta de la cabecera de la funcin y del cuerpo. Su forma general es: tipo_retorno nombre_funcion(tipo1 argum1, tipo2 argum2, ... ,tipoN argumN) { //cuerpo de la funcion return (expresion); //optativo } La primera lnea recibe el nombre de encabezamiento (header) y el resto de la definicin encerrado entre llaves- es el cuerpo (body) de la funcin. Cada funcin puede disponer de sus propias variables, declaradas al comienzo de su cdigo. Estas variables son del tipo auto, es decir, slo son visibles dentro de la funcin, se crean cada vez que se ejecuta la funcin y permanecen ocultas para el resto del programa. La lista de argumentos, tambin llamados argumentos formales, es una lista de declaraciones de variables, precedidas de su tipo correspondiente y separadas por comas (,). Los argumentos formales son la forma ms natural y directa para que una funcin reciba valores desde el programa que le llama. Si no se desea pasar ningn valor a la funcin se puede poner void en los parntesis. tipo_retorno: cuando una funcin es ejecutada, puede devolver al programa que le ha llamado un valor (el valor de retorno), cuyo tipo debe ser especificado en el encabezamiento de la funcin. Si no se desea que devuelva nada, el tipo de retorno debe ser void. La sentencia return permite devolver el valor. Si no se especifica el tipo_retorno, se asume que es int por defecto. Declaracin: Toda funcin debe ser declarada antes de ser utilizada en el programa que realiza la llamada. Esta se hace mediante el prototipo de la funcin. La forma general del prototipo coincide con la primera lnea de la definicin el encabezamiento-, con tres pequeas diferencias:

Curso: Algoritmos II
FACULTAD DE INGENIERA INDUSTRIAL Y DE SISTEMAS

En vez de la lista de argumentos formales o parmetros, basta incluir slo los tipos de dichos argumentos. El prototipo termina con un carcter (;). Los valores pueden ser inicializados si se desea.

La declaracin de las funciones mediante los prototipos suele hacerse al comienzo del fichero, despus de los #include.

Llamada: La llamada a una funcin se hace incluyendo su nombre en una expresin o sentencia del programa principal o de otra funcin. Este nombre debe ir seguido de una lista de argumentos separados por comas y encerrados entre parntesis. A los argumentos incluidos en la llamada se les llama argumentos actuales, y pueden ser no slo variables y/o constantes, sino tambin expresiones.

Curso: Algoritmos II
FACULTAD DE INGENIERA INDUSTRIAL Y DE SISTEMAS

Sobrecarga de Funciones: Casi siempre es recomendable dar nombres distintos a funciones diferentes, pero que pasa cuando las tareas a realizar son las mismas pero con diferentes tipos de datos? En este caso es ms conveniente darle a las funciones el mismo nombre, pero con argumentos de distinto tipo, que sern los que permitan al compilador llamar a una u otra funcin.

Paso de argumentos por valor: Hasta ahora los ejemplos que hemos visto han utilizado este mecanismo. La llamada por valor significa que una copia del argumento se pasa al parmetro de la funcin. Esto significa que todo lo que se realice en el cdigo de la funcin no va a alterar el valor del argumento usado para llamar a la funcin.

En el ejemplo, al pasar como argumento la variable r, se hace una copia en la variable radio, la cual es una variable local de la funcin AreaCirculo, por lo tanto los cambios realizados sobre esta variable no afectan a la del programa principal. Paso de argumentos por Referencia: Es el mecanismo de pasar argumentos mediante las direcciones en lugar de valores. Debe utilizarse siempre y cuando la funcin deba devolver argumentos modificados. Un caso de particular inters es el paso de arrays (vectores, matrices y cadenas de caracteres). Los argumentos formales deben ser declarados como punteros a los argumentos actuales, que sern las direcciones.

Curso: Algoritmos II
FACULTAD DE INGENIERA INDUSTRIAL Y DE SISTEMAS

VARIABLES LOCALES Y VARIABLES GLOBALES


Como se discuti en clase, cuando uno llama una funcin, no es necesario saber los tipos y los nombres de las variables que se declaran en la definicin de dicha funcin. Simplemente se requiere de conocer el tipo de los argumentos que necesita y el tipo de valor que regresa. Esto se debe a que en C++ las variables que se definen en las funciones son independientes de las variables que se definen en la funcin main (programa principal) o en cualquier otra funcin. Si se declara una variable en una funcin y se declara otra variable con el mismo nombre en la funcin principal del programa (main), estas dos variables, aunque tengan el mismo nombre, se consideran como dos variables diferentes. Observe el siguiente ejemplo:

Curso: Algoritmos II
FACULTAD DE INGENIERA INDUSTRIAL Y DE SISTEMAS

la variable cuadrado se declara tanto en la funcin main como en la funcin square y la declaracin es idntica: double cuadrado; Sin embargo, la variable cuadrado de la funcin main y la variable cuadrado de la funcin square se consideran como dos variables diferentes.

Variables Locales
Las variables que se declaran dentro del cuerpo de una funcin se dice que son locales a dicha funcin o que tienen un alcance local. En el ejemplo, hay una variable llamada cuadrado que es local a la funcin main y otro variable tambin llamada cuadrado pero que es local a la funcin square. Dichas variables son diferentes. Los valores que toma una variable local dentro de una funcin pueden ser completamente distintos a los que tome una variable del mismo nombre pero que sea local a otra funcin. Se dice que una variable local es usada (definida, modificada, etc.) nicamente dentro de la funcin en la que es definida

Constantes y Variables Globales


Las constantes y las variables tambin pueden tener alcances globales. Es decir, es posible que una misma variable o constante puedan ser utilizadas por diferentes funciones y que (en el caso de variables) puedan ser modificadas por cada una de ellas. Cuando esto ocurre, se dice que se tiene constantes globales o variables globales.

Curso: Algoritmos II
FACULTAD DE INGENIERA INDUSTRIAL Y DE SISTEMAS

Para que el compilador considere a una variable como global, es necesario definirlas al comienzo del programa, antes de la funcin main y del resto de las funciones del programa. Es prctica comn colocar todas las constantes globales y las variables globales en grupo, justo por debajo de las directivas include y antes de los prototipos de las funciones. El uso de constantes globales es muy comn, sin embargo, el uso de variables globales generalmente no es necesario y muy frecuentemente provoca dificultades en entender del algoritmo del programa, por lo cual las variables globales casi no se utilizan. En el siguiente ejemplo, observe que la constante PI es una constante global, mientras que las variables area y volumen son variables locales definidas en la funcin main y en otras funciones. No obstante que hay variables con el mismo nombre, stas son variables locales y por tanto se trata de variables diferentes.

//Programa para el calculo del area de un circulo y el volumen de una esfera //usando dos funciones. Se usa el mismo valor de radio para los dos calculos. #include <iostream.h> #include <math.h> const double PI = 3.14159; /* Tiene alcance global. Se coloca por debajo de los include y antes de los prototipos */ /* Prototipos */ double area_circulo(double radio); double volumen_esfera(double radio); int main( ) { double radio_de_ambos, area, volumen; /*Alcance local*/ cout<<Dame el radio del circulo y de la esfera \n; cin>>radio_de_ambos; area = area_circulo(radio_de_ambos); volumen = volumen_esfera(radio_de_ambos); cout<<El area del circulo es <<area<<\n; cout<<El volumen de la esfera es <<volumen<<\n; cout<<\n; system(PAUSE); return 0; } /*Observe que las dos funciones siguientes usan la constante global PI*/ /* Funcion para el calculo del area de un circulo */ double area_circulo(double radio) { double area; /* Alcance local, diferente de la variable definida en main */ area = PI * pow(radio, 2.0); /* Uso de constante global */ return area; } /* Funcion para el calculo del volumen de una esfera */ double volumen_esfera(double radio) { double volumen; /*Alcance local, diferente de la variable definida en main*/ volumen = (4.0/3.0) * PI * pow(radio, 3.0); return volumen; /* Uso de constante global */ }

Curso: Algoritmos II
FACULTAD DE INGENIERA INDUSTRIAL Y DE SISTEMAS

Ejemplo de Funciones

Crear programa que intercambia valores de 2 variables

Curso: Algoritmos II
FACULTAD DE INGENIERA INDUSTRIAL Y DE SISTEMAS

Ejercicios
Funciones que no devuelven valores: 1.- Realizar un programa que determine si un numero es par o impar, en caso sea cero dir Cero no es par ni impar, un procedimiento que realice el ingreso de datos y otro que realice la verificacin si es par o impar. 2. Pasando la base y altura de un triangulo rectngulo que muestre su rea y permetro 3.- Pasando un carcter y la un numero que imprima dicho carcter de acuerdo al nmero ingresado 4.- Pasando tres lados de un posible triangulo , en caso que forme triangulo que muestre su rea de lo contrario que muestre no forma triangulo Funciones que retornar valores 1.- Pase la base y altura de un triangulo rectngulo , que devuelva la hipotenusa como real 2.- Pasando dos valores enteros y un operador de tipo carcter (*,/,+,-) que devuelva su operacin correspondiente.

Curso: Algoritmos II
FACULTAD DE INGENIERA INDUSTRIAL Y DE SISTEMAS

3.- pasar los lados de una caja rectangular como entero que devuelva su rea total 4.- pasando un nmero de mes y el ao que devuelva la cantidad de das que trae ese mes 5.- Pasando un nmero de tipo long que devuelva la suma de sus dgitos 6.- Pasando un numero que devuelva la suma de sus divisores 7.- pasando un numero que devuelva la cantidad de divisores 8.- Pasando un numero entero que devuelva un valor lgico si es primo o no 9.- Pase un numero de tipo long , luego devolver el mismo nmero pero ordenado de forma descendente

Funciones pasando vectores 1.- Pase un vector de enteros y la cantidad de elementos realiza la impresin del vector (tipo void) 2.- Pase un vector y la cantidad de elementos devolver el mayor valor 3.- Pase un vector y la cantidad de elementos devolver su promedio 4.- Pase un vector , la cantidad de elementos y un dato a buscar que devuelva veraddero si existe el dato de lo contrario que devuelva falso 5.- Pase un vector y la cantidad de elementos que ordene en forma ascedente (tipo void) 6.- Pasando un vector de nmeros reales y la cantidad de elementos que devuelva la desviacin estndar

Funciones que retornar cadenas 1.- Pase un numero entero de 1-999 y que lo devuelva en romanos 2.- Pase un numero entero y que lo devuelva en letras 3.- pasar una cadena y la cantidad de caracteres que muestre los caracteres hacia la izquierda. Left(Lenguaje,4) => Leng 4.- repita el paso anterior pero extayendo de la derecha Right(Lenguaje,4) => uaje 5.- extraer a partir de cualquier posicin Mid(lenguaje,3,2)=> ng 6.- Pasar un mensaje o prrafo que devuelva la cantidad de palabras 7.- Pasar una cadena cuyo contenido sea numero que devuelva la suma de los dgitos

Curso: Algoritmos II
FACULTAD DE INGENIERA INDUSTRIAL Y DE SISTEMAS

Ordenamientos

Inserccin: Este funciona as, en cada iteracin se inserta un elemento del subvector no ordenado al subvector ordenado en la posicin correcta. Este funciona as, en cada iteracin se inserta un elemento del subvector no ordenado al subvector ordenado en la posicin correcta.

Cdigos: #include <iostream.h> void ordena(int vec[],int nd){ int pos,cp,aux; for(pos=1; pos<nd;pos++){ cp=pos-1; while(cp>=0 && vec[cp]>vec[cp+1]) { aux= vec[cp]; vec[cp]=vec[cp+1]; vec[cp+1]=aux; cp--; } } }

Curso: Algoritmos II
FACULTAD DE INGENIERA INDUSTRIAL Y DE SISTEMAS

Ordenamientos por seleccion

void Seleccion (double a[], int n) { int indiceMenor, i, j; double aux; for (i = 0; i < n; i++){ /* ordenar a[0]..a[n2] y a[n1] en cada pasada */ indiceMenor = i; /* comienzo de la exploracin en ndice i */ for (j = i+1; j < n; j++) /* j explora la sublista a[i+1]..a[n1] */ if (a[j] < a[indiceMenor]) indiceMenor = j; if (i != indiceMenor) { aux = a[i]; a[i] = a[indiceMenor]; a[indiceMenor] = aux ; } } }

La ordenacin por seleccin funciona seleccionando el menor elemento de la matriz y llevndolo al principio; a continuacin selecciona el siguiente menor y lo pone en la segunda posicin de la matriz y as sucesivamente.