subprogramas i

9
Curso: Algoritmos I Profesor: Ing. Erick Núñez FACULTAD DE INGENIERÍA INDUSTRIAL Y DE SISTEMAS Carrera Profesional de Ingeniería de Sistemas Subprogramacion Los subprogramas son pequeños programas que pueden usarse para dividir un programa por tareas. Entre las tareas más comunes en un programa están las tareas para recolectar datos, calcular,mostrar información o coordinar la ejecución 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 categoría están los subprogramas que: · piden los datos al usuario · adquieren los datos a través de otros medios de entrada (por ejemplo, archivos) Los subprogramas que realizan cálculos, reciben los datos que necesitan de los subprogramas que recolectan datos o de otros subprogramas que realizan cálculos. Entre las tareas efectuadas por los subprogramas de esta categoría están las operaciones para: · evaluar fórmulas (por ejemplo, F = 9/5C + 32) · determinar propiedades (por ejemplo, ¿es un número positivo?) · comparar cantidades (por ejemplo, ¿es un número mayor que otro número?) Los subprogramas para mostrar información presentan al usuario los resultados producidos por los subprogramas que realizan cálculos. Además, pueden usarse para mostrar instrucciones al usuario de cómo usar el programa o para qué es el programa. En la última categoría, subprogramas que coordinan tareas, están 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. Programación Estructurada La programación estructurada es una técnica para escribir programas de manera clara. Para ello se utilizan únicamente tres estructuras: secuencia, selección e iteración; siendo innecesario el uso de la instrucción o instrucciones de transferencia incondicional (GOTO, EXIT FUNCTION, EXIT SUB o múltiples RETURN). Programación Modular La programación modular es un paradigma de programación que consiste en dividir un programa en módulos o subprogramas con el fin de hacerlo más legible y manejable, Se presenta históricamente como una evolución de la programación estructurada para solucionar problemas de programación más grandes y complejos de lo que ésta puede resolver. Diseño descendente (de arriba hacia abajo): En la solución de problemas grandes, es conveniente dividirlo en problemas mas pequeños (sub-problemas), los cuales a su vez pueden dividirse en sub-problemas más pequeños. Este es un proceso de refinamiento por pasos, etapas o capas. Comenzando desde lo más general hasta lo más especifico.

Upload: le-nv

Post on 08-Dec-2015

212 views

Category:

Documents


0 download

DESCRIPTION

SUB Programas

TRANSCRIPT

Page 1: Subprogramas I

Curso: Algoritmos I

Profesor: Ing. Erick Núñez

FACULTAD DE INGENIERÍA INDUSTRIAL Y DE

SISTEMAS

Carrera Profesional de Ingeniería de Sistemas

Subprogramacion Los subprogramas son pequeños programas que pueden usarse para dividir un programa por tareas. Entre las tareas más comunes en un programa están las tareas para recolectar datos, calcular,mostrar información o coordinar la ejecución 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 categoría están los subprogramas que:

· piden los datos al usuario · adquieren los datos a través de otros medios de entrada (por ejemplo, archivos)

Los subprogramas que realizan cálculos, reciben los datos que necesitan de los subprogramas que recolectan datos o de otros subprogramas que realizan cálculos. Entre las tareas efectuadas por los subprogramas de esta categoría están las operaciones para:

· evaluar fórmulas (por ejemplo, F = 9/5C + 32) · determinar propiedades (por ejemplo, ¿es un número positivo?) · comparar cantidades (por ejemplo, ¿es un número mayor que otro número?)

Los subprogramas para mostrar información presentan al usuario los resultados producidos por los subprogramas que realizan cálculos. Además, pueden usarse para mostrar instrucciones al usuario de cómo usar el programa o para qué es el programa.

En la última categoría, subprogramas que coordinan tareas, están 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.

Programación Estructurada La programación estructurada es una técnica para escribir programas de manera clara. Para ello se utilizan únicamente tres estructuras: secuencia, selección e iteración; siendo innecesario el uso de la instrucción o instrucciones de transferencia incondicional (GOTO, EXIT FUNCTION, EXIT SUB o múltiples RETURN).

Programación Modular La programación modular es un paradigma de programación que consiste en dividir un programa en módulos o subprogramas con el fin de hacerlo más legible y manejable, Se presenta históricamente como una evolución de la programación estructurada para solucionar problemas de programación más grandes y complejos de lo que ésta puede resolver. Diseño descendente (de arriba hacia abajo): En la solución de problemas grandes, es conveniente dividirlo en problemas mas pequeños (sub-problemas), los cuales a su vez pueden dividirse en sub-problemas más pequeños. Este es un proceso de refinamiento por pasos, etapas o capas. Comenzando desde lo más general hasta lo más especifico.

Page 2: Subprogramas I

Curso: Algoritmos I

Profesor: Ing. Erick Núñez

FACULTAD DE INGENIERÍA INDUSTRIAL Y DE

SISTEMAS

Carrera Profesional de Ingeniería de Sistemas

Rutinas: Piezas pequeñas diseñadas para ejecutar una tarea específica. Permiten desarrollar y mantener programas grandes y módulos. Pueden ser de dos tipos:

Funciones

Procedimientos

Procedimientos ó subrutinas son subprogramas que realizan una tarea específica, reciben datos del exterior a través de parámetros o envían información al exterior a través de parámetros, y no tienen instrucción de retorno. Por ejemplo, una subrutina que imprima en pantalla el número mayor de dos números ingresados como parámetros. Puede haber subrutinas que no tengan parámetros, por ejemplo, una subrutina que indique el propósito del programa. Las funciones son subprogramas que reciben datos del exterior a través de parámetros y envían un solo

valor al exterior a través del nombre de la función (instrucción de retorno). Estos subprogramas son el

equivalente a las funciones matemáticas, por ejemplo, la función que retorna la distancia entre dos

puntos necesita cuatro parámetros que reciban las cuatro coordenadas de los dos puntos. Otro ejemplo

es la función que retorna la raíz cuadrada de un número. Las funciones tendrán como mínimo un

parámetro. Ambas funciones envían sus resultados a través de la instrucción 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 función 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 cálculos de uso común. Funciones definidas (diseñadas o codificadas) por el programador para realizar determinadas tareas.

BIBLIOTECA ESTÁNDAR DE C,C++ Contiene una amplia colección de funciones para llevar a cabo cálculos matemáticos comunes:

Manipulación de cadenas de caracteres. Manipulación con caracteres Operaciones estándares de entrada y salida Operaciones matemáticas

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 función

Una función es un conjunto de líneas de código que realizan una tarea específica y puede retornar un valor. Las

funciones pueden tomar parámetros que modifiquen su funcionamiento. Las funciones son utilizadas para

descomponer grandes problemas en tareas simples y para implementar operaciones que son comúnmente

utilizadas durante un programa y de esta manera reducir la cantidad de código. Cuando una función 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 función fue llamada.

Page 3: Subprogramas I

Curso: Algoritmos I

Profesor: Ing. Erick Núñez

FACULTAD DE INGENIERÍA INDUSTRIAL Y DE

SISTEMAS

Carrera Profesional de Ingeniería de Sistemas

<tipo> [clase::] <nombre> ( [Parámetros] ) { cuerpo; }

Ejemplo de una función

Para comenzar, vamos a considerar el caso en el cual se desea crear la función cuadrado(), misma que deberá

volver el cuadrado de un número real (de punto flotante), es decir, cuadrado() aceptará números de punto

flotante y regresará una respuesta como número flotante.

Nota: aunque para la función que veremos el tipo de retorno coincide con el tipo de parámetro pasado, algunas

veces las cosas pueden cambiar, es decir, no es obligatorio que una función reciba un parámetro de un tipo y

que tenga que regresar una respuesta de dicho tipo.

// regresar el cuadrado de un número

double cuadrado(double n) { return n*n; }

• Definición: La definición de una función consta de la cabecera de la función 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 línea recibe el nombre de encabezamiento (header) y el resto de la definición –encerrado entre llaves- es el cuerpo (body) de la función. • Cada función puede disponer de sus propias variables, declaradas al comienzo de su código. Estas variables son del tipo auto, es decir, sólo son visibles dentro de la función, se crean cada vez que se ejecuta la función y permanecen ocultas para el resto del programa. • La lista de argumentos, también 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 más natural y directa para que una función reciba valores desde el programa que le llama. Si no se desea pasar ningún valor a la función se puede poner void en los paréntesis. • tipo_retorno: cuando una función 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 función. 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.

Declaración: Toda función debe ser declarada antes de ser utilizada en el programa que realiza la llamada. Esta se hace mediante el prototipo de la función. La forma general del prototipo coincide con la primera línea de la definición –el encabezamiento-, con tres pequeñas diferencias:

Page 4: Subprogramas I

Curso: Algoritmos I

Profesor: Ing. Erick Núñez

FACULTAD DE INGENIERÍA INDUSTRIAL Y DE

SISTEMAS

Carrera Profesional de Ingeniería de Sistemas

En vez de la lista de argumentos formales o parámetros, basta incluir sólo los tipos de dichos argumentos.

El prototipo termina con un carácter (;).

Los valores pueden ser inicializados si se desea. • La declaración de las funciones mediante los prototipos suele hacerse al comienzo del fichero, después de los #include.

Llamada: La llamada a una función se hace incluyendo su nombre en una expresión o sentencia del programa principal o de otra función. Este nombre debe ir seguido de una lista de argumentos separados por comas y encerrados entre paréntesis. A los argumentos incluidos en la llamada se les llama argumentos actuales, y pueden ser no sólo variables y/o constantes, sino también expresiones.

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 más conveniente darle a las funciones el mismo nombre, pero con argumentos de distinto tipo, que serán los que permitan al compilador llamar a una u otra función.

Page 5: Subprogramas I

Curso: Algoritmos I

Profesor: Ing. Erick Núñez

FACULTAD DE INGENIERÍA INDUSTRIAL Y DE

SISTEMAS

Carrera Profesional de Ingeniería de Sistemas

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 parámetro de la función. Esto significa que todo lo que se realice en el código de la función no va a alterar el valor del argumento usado para llamar a la función.

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 función 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 función deba devolver argumentos modificados. Un caso de particular interés es el paso de array’s (vectores, matrices y cadenas de caracteres). Los argumentos formales deben ser declarados como punteros a los argumentos actuales, que serán las direcciones.

Page 6: Subprogramas I

Curso: Algoritmos I

Profesor: Ing. Erick Núñez

FACULTAD DE INGENIERÍA INDUSTRIAL Y DE

SISTEMAS

Carrera Profesional de Ingeniería de Sistemas

VVAARRIIAABBLLEESS LLOOCCAALLEESS YY VVAARRIIAABBLLEESS GGLLOOBBAALLEESS

Como se discutió en clase, cuando uno llama una función, no es necesario saber los tipos y los nombres de las

variables que se declaran en la definición de dicha función. 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 función main (programa principal) o en cualquier otra función. Si se declara una variable en una

función y se declara otra variable con el mismo nombre en la función principal del programa (main), estas dos

variables, aunque tengan el mismo nombre, se consideran como dos variables diferentes. Observe el siguiente

ejemplo:

la variable cuadrado se declara tanto en la función main como en la función square y la declaración es idéntica:

Page 7: Subprogramas I

Curso: Algoritmos I

Profesor: Ing. Erick Núñez

FACULTAD DE INGENIERÍA INDUSTRIAL Y DE

SISTEMAS

Carrera Profesional de Ingeniería de Sistemas

double cuadrado;

Sin embargo, la variable cuadrado de la función main y la variable cuadrado de la función square se consideran

como dos variables diferentes.

Variables Locales

Las variables que se declaran dentro del cuerpo de una función se dice que son locales a dicha función o que

tienen un alcance local. En el ejemplo, hay una variable llamada cuadrado que es local a la función main y otro

variable también llamada cuadrado pero que es local a la función square. Dichas variables son diferentes. Los

valores que toma una variable local dentro de una función pueden ser completamente distintos a los que tome

una variable del mismo nombre pero que sea local a otra función.

Se dice que una variable local es usada (definida, modificada, etc.) únicamente dentro de la función en la que es

definida

Constantes y Variables Globales

Las constantes y las variables también 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.

Para que el compilador considere a una variable como global, es necesario definirlas al comienzo del programa,

antes de la función main y del resto de las funciones del programa. Es práctica común 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 común, 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 función 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 <stdlib.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);

Page 8: Subprogramas I

Curso: Algoritmos I

Profesor: Ing. Erick Núñez

FACULTAD DE INGENIERÍA INDUSTRIAL Y DE

SISTEMAS

Carrera Profesional de Ingeniería de Sistemas

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 */ } Ejemplo de Funciones

Page 9: Subprogramas I

Curso: Algoritmos I

Profesor: Ing. Erick Núñez

FACULTAD DE INGENIERÍA INDUSTRIAL Y DE

SISTEMAS

Carrera Profesional de Ingeniería de Sistemas

Crear programa que intercambia valores de 2 variables

Ejercicios 1.- Realizar un programa que realice las 4 operaciones Básicas, ingresando 2 números por teclado.

Suma

Resta

Multiplicación

valor absoluto - Cada operación deberá ser una función. - tener un procedimiento de escritura en pantalla del resultado de la las operaciones 2.- 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 verificación si es par o impar.

3.- Programa que dispone de un menú de asignaturas, habrá que elegir uno y salga en pantalla la opción seleccionada, si se ingresa un valor incorrecto deberá decir “Opción Incorrecta” Con funciones y procedimientos. 4.- programa que calcule el salario neto de una persona a partir de un salario base y unas horas trabajadas. El salario base por hora se podrá elegir desde un menú (100, 125, 160,200 y otros) , la opción “otros” nos pedirá el salario base. Nota: Retenciones: 15% Si salario <= 1000 18% si salario >1000 y 2000

25% si salario >2000 Con funciones y procedimientos (por lo menos dos funciones)