SlideShare una empresa de Scribd logo
Curso: Algoritmos I
Profesor: Ing. Erick NúñezFACULTAD DE INGENIERÍA INDUSTRIAL Y DE
SISTEMAS
Carrera Profesional de Ingeniería de Sistemas
Razones válidas para crear un subprograma
 Reducir la complejidad del programa (“divide y vencerás”).
 Eliminar código duplicado.
 Limitar los efectos de los cambios (aislar aspectos concretos).
 Ocultar detalles de implementación (p.ej. algoritmos complejos).
 Promover la reutilización de código (p.ej. familias de productos).
 Mejorar la legibilidad del código.
 Facilitar la portabilidad del código.
Pasos para escribir un subprograma
1. Definir el problema que el subprograma ha de resolver.
2. Darle un nombre no ambiguo al subprograma.
3. Decidir cómo se puede probar el funcionamiento del subprograma.
4. Escribir la declaración del subprograma (cabecera de la función).
5. Buscar el algoritmo más adecuado para resolver el problema.
6. Escribir los pasos principales del algoritmo como comentarios.
7. Rellenar el código correspondiente a cada comentario.
8. Revisar mentalmente cada fragmento de código.
9. Repetir los pasos anteriores hasta quedar completamente satisfecho.
Los parámetros de un subprograma
 Orden: (por valor, por referencia) == (entrada, entrada/salida, salida)
 Si varias rutinas utilizan los mismos parámetros, éstos han de ponerse en el mismo orden (algo que
la biblioteca estándar de C no hace).
 De acuerdo con la primera norma, las variables de estado o error se ponen al final.
 No es aconsejable utilizar los parámetros de una rutina como si fuesen variables locales de la rutina.
 Se han de documentar las suposiciones que se hagan acerca de los posibles valores de los
parámetros.
 Sólo se deben incluir los parámetros que realmente necesite la rutina para efectuar su labor.
 Las dependencias existentes entre distintos módulos han de hacerse explícitas mediante el uso de
parámetros.
Curso: Algoritmos I
Profesor: Ing. Erick NúñezFACULTAD DE INGENIERÍA INDUSTRIAL Y DE
SISTEMAS
Carrera Profesional de Ingeniería de Sistemas
Paso de Parámetros por Valor
void sub (int , int );
int main ()
{
int z,t;
z=5;
t=10;
printf("%d %dn",z,t); // 5 10
sub(z,t);
printf("%d %dn",z,t); // 5 10
sub(z,4);
printf("%d %dn",z,t); // 5 10
sub(z,2*t+20);
printf("%d %dn",z,t); // 5 10
sub(3,20);
printf("%d %dn",z,t); // 5 10
sub(z+32,20);
printf("%d %dn",z,t); // 5 10
}
void sub (int x, int y)
{
x = x+y;
}
El paso de atributos por referencia
se puede simular si utilizamos punteros (pasamos como parámetros las direcciones en memoria de las variables
que queremos modificar dentro del subprograma):
void sub (int *x, int y);
int main ()
{
int z,t;
z=5;
t=10;
printf("%d %dn",z,t); // 5 10
sub(&z,t);
printf("%d %dn",z,t); // 15 10
sub(&z,4);
printf("%d %dn",z,t); // 19 10
sub(&z,2*t+20);
printf("%d %dn",z,t); // 59 10
sub(&3,20); // ERROR
Curso: Algoritmos I
Profesor: Ing. Erick NúñezFACULTAD DE INGENIERÍA INDUSTRIAL Y DE
SISTEMAS
Carrera Profesional de Ingeniería de Sistemas
sub(&(z+32),20); // ERROR
}
void sub (int *x, int y)
{
*x = (*x) + y;
}
Ámbito de Variables
#include <stdio.h>
int a,b;
int main ()
{
a=3;
b=4;
MiSub1(a,&b);
printf(“%d %d”,a,b);
MiSub2(32);
printf(“%d %d”,a,b);
}
void MiSub1 (int x, int *y)
{
int h = x*4;
*y = h + x + 3 + a;
}
void MiSub2 (int x)
{
int b = 2*x;
a = b + 3;
}
Curso: Algoritmos I
Profesor: Ing. Erick NúñezFACULTAD DE INGENIERÍA INDUSTRIAL Y DE
SISTEMAS
Carrera Profesional de Ingeniería de Sistemas
RECURSIVIDAD
Funciones Recursivas: El C++ es un lenguaje de programación que admite la Recursividad, esto es, funciones que
pueden llamarse a sí mismas. Cuando una función es llamada por sí misma, se crea un nuevo juego de
parámetros y variables locales, pero el código ejecutable es el mismo. Es muy importante definir las condiciones
dentro de la función para que la recursividad finalice y no genere un bucle infinito.
Veamos un ejemplo:
Curso: Algoritmos I
Profesor: Ing. Erick NúñezFACULTAD DE INGENIERÍA INDUSTRIAL Y DE
SISTEMAS
Carrera Profesional de Ingeniería de Sistemas
Ejercicios
Se pide Calcular el factorial de un número utilizando funciones
El factorial de un numero es un proceso que se puede calcular utilizando la siguiente función
Se Pide Desarrollar el programa que la función
Haga un programa que calcule el área de un círculo
I.- Diseño del programa
Entrada: radio y pi (constante)
Salida: área del circulo
Descripción del procedimiento por Tareas
1. Pedir Radio
2. Calculara área del Circulo
3. Mostrar área del Circulo
Díselo de los subprogramas
1 Pedir Radio procedimiento
Entrada: radio
Salida: radio (un parámetro por referencia)
2 Calcular el área del circulo Función.
Entrada radio (parámetro por valor) y pi (constante)
Salida: área (retorno por el nombre de la función)
3 Mostrar el área del círculo
Entrada: área (parámetro por valor)
Salida : área (mostrar en pantalla
Curso: Algoritmos I
Profesor: Ing. Erick NúñezFACULTAD DE INGENIERÍA INDUSTRIAL Y DE
SISTEMAS
Carrera Profesional de Ingeniería de Sistemas
Se va a implementar una sencilla función que calcule el área de un triángulo. Para calcular
el área de un triángulo es necesario conocer la base y la altura. Estos dos datos se deben
pedir al usuario y luego calcular el área por medio de la función. Probar el siguiente código:
#include <iostream.h>
float AreaTriangulo( float , float );
void main(void)
{
float base,alt;
cout << "Escribe la base: " ;
cin >> base;
cout << "Escribe la altura: " ;
cin >> alt;
cout << "El area del triangulo es: " << AreaTriangulo(base,alt);
}
float AreaTriangulo( float b, float h)
{
float tmp = b*h/2.0;
return tmp;
}
En este ejercicio se va a hacer uso de algunas funciones definidas en el estándar del C++
para obtener los datos de fecha y hora del PC. Probar el código siguiente:
#include <iostream.h>
#include <time.h>
void ImprimeHora(void);
void Delay(double seg);
void main(void)
{
ImprimeHora();
Delay(2.5); //retardo de 2.5 seg.
ImprimeHora();
}
void ImprimeHora(void)
{
long t1;
tm *mihora; //estructura para time
time(&t1); //obtener los datos actuales (en long)
mihora = localtime(&t1); //convierte long a struct tm
cout << "Fecha: " << mihora->tm_mday << "/" ;
cout << mihora->tm_mon+1<<"/"<<mihora->tm_year+1900;
cout << " Hora: " << mihora->tm_hour << ":" ;
cout << mihora->tm_min << ":“ <<mihora->tm_sec << endl;
}
void Delay(double seg)
{
long start;
long end;
time(&start);
end = start;
while( difftime(end,start) < seg)
{time(&end);}
}
Curso: Algoritmos I
Profesor: Ing. Erick NúñezFACULTAD DE INGENIERÍA INDUSTRIAL Y DE
SISTEMAS
Carrera Profesional de Ingeniería de Sistemas
Explicación:
1. Todas las funciones se encuentran definidas en el fichero time.h, el cual se debe incluir al comienzo del
programa.
2. La función time(long&) obtiene en una variable del tipo long un valor que representa la fecha y hora a
partir del 1 de enero de 1900. Se le debe pasar la dirección de la variable (&t1), ya que la función tiene que
escribir el dato.
3. El valor obtenido con time() se introduce como parámetro a la función localtime(), la cual se encarga de
convertir ese long en “algo más inteligible” La función devuelve un puntero a una estructura tm (por eso se
define tm *mihora) definida en el fichero time.h, que tiene los siguientes miembros:
struct tm {
int tm_sec; /* seconds after the minute - [0,59] */
int tm_min; /* minutes after the hour - [0,59] */
int tm_hour; /* hours since midnight - [0,23] */
int tm_mday; /* day of the month - [1,31] */
int tm_mon; /* months since January - [0,11] */
int tm_year; /* years since 1900 */
int tm_wday; /* days since Sunday - [0,6] */
int tm_yday; /* days since January 1 - [0,365] */
int tm_isdst; /* daylight savings time flag */
};
4. Una vez que se tiene la estructura, se puede sacar la hora, minutos, segundos, día, etc., por medio de los
miembros de la estructura.
5. Existe también una función difftime(time1, time2) que obtiene la diferencia de dos tiempos, la cual se
utiliza para medir el tiempo que ha transcurrido entre una operación y otra. En el caso del ejemplo, se usa
para crear una función delay() que hace que el programa se quede en un bucle while un tiempo determinado,
dado como argumento a delay(double seg).
Ejercicios :
1. Escriba una función que decida si un número entero es capicúa.
2. Escriba una función que calcule la suma de los divisores de un número entero positivo, pudiendo excluir de
dicha suma el propio número (será un parámetro adicional (valor 1 o 0) quien determinará si se suma o no).
3. Construya una función, llamada amigos, que apoyándose en la función anterior, permita ver si dos números
son o no amigos (dos números A y B son amigos si la suma de los divisores de A (excluido él mismo) coincide
con B y viceversa), Construya un programa que, apoyándose en la función anterior, permita obtener todas las
parejas de números amigos comprendidos entre dos números facilitados por el usuario
4.Dada la longitud, ancho y profundidad (en pies) de una piscina, el volumen se calcula según la siguiente
fórmula:
volumen = longitud*ancho*profundidad
Dado que un pie cúbico de agua es equivalente a 7.8 galones, la capacidad de agua de la piscina viene dada
por la fórmula:
capacidad = volumen * 7.8
Si la rata de flujo de agua en la piscina es de 20 galones por minuto, entonces el tiempo (en horas) que se
requiere para llenar la piscina se calcula mediante la fórmula:
Tiempo = capacidad/20/60
Curso: Algoritmos I
Profesor: Ing. Erick NúñezFACULTAD DE INGENIERÍA INDUSTRIAL Y DE
SISTEMAS
Carrera Profesional de Ingeniería de Sistemas
PRACTICA V
1.-Hacer una ecuación de recursión Múltiple en la sucesión de Fibonacci
2. Escribe funciones recursivas para las siguiente operaciones entre 2 enteros:
a. Sumar: Dentro de la función sólo se podrán utilizar incrementos unitarios, por tanto, no se puede
utilizar el operador suma.
b. Multiplicar: En este caso sólo se podrá utilizar el operador suma, y no el de multiplicación.
c. La función exponencial, xy siendo x, y números enteros (xy = x * xy-1).
3.Diseñar un programa para jugar a adivinar un número entre 0 y 100. El juego tiene que dar pistas de si el
número introducido por el jugador está por encima o por debajo. El juego termina cuando se adivina el
número o se decide terminar de jugar (por ejemplo al teclear un número negativo).
5.- Realizar un programa mediante el uso de funciones que simule un cajero automático de monedas. Los
tipos de monedas que dispone el cajero son de 1,5,25,50,100 y 500 pesetas. Inicialmente el cajero tiene 100
monedas de cada tipo, que se van consumiendo para proporcionar las cantidades solicitadas. El cajero debe
obtener la cantidad solicitada con los tipos de moneda que tenga en cada momento, tratando siempre de
utilizar las monedas de mayor valor. El programa debe tener un menú con tres opciones: Pedir dinero al
cajero, Ver estado del cajero o Salir del programa. Observar que el cajero no puede dar más dinero del que
tiene.
Nota
1.- Entregar Practica en el aula en la siguiente clase
2.- El programa Tiene que funcionar y ser Explicado por el Alumno
3.-Se valorará la calidad del diseño realizado, no sólo si el programa funciona o no. Por ejemplo, se
tendrá muy en cuenta la modularización de los programas.
4.- Se le pedirá hacer una modificación en alguno de los ejercicios en clase
5.- No se admitirá ninguna práctica entregada fuera del plazo establecido.
6.- La elaboración de las prácticas es individual. Cualquier elaboración conjunta Supondrá el suspenso
automático de los alumnos involucrados.
La entrega de la práctica se realizará el día 24 de Agosto de 20011 en el aula de prácticas.
“El modo de dar una vez en el clavo es dar cien veces en la herradura.”
Miguel de Unamuno

Más contenido relacionado

La actualidad más candente

Laboratorio de Microcomputadoras - Práctica 01
Laboratorio de Microcomputadoras - Práctica 01Laboratorio de Microcomputadoras - Práctica 01
Laboratorio de Microcomputadoras - Práctica 01
Cristian Ortiz Gómez
 
Mapas karnaught
Mapas karnaughtMapas karnaught
Mapas karnaught
Ximena Arriaga
 
Entrada y salida de datos en c
Entrada y salida de datos en cEntrada y salida de datos en c
Entrada y salida de datos en c
Denisse C
 
Guia 3
Guia 3Guia 3
Guia 3
Fredy Soncco
 
10 ejercicios-de-do-while
10 ejercicios-de-do-while10 ejercicios-de-do-while
10 ejercicios-de-do-whileDelvi Ramirez
 
BúSqueda Por Hash
BúSqueda Por HashBúSqueda Por Hash
BúSqueda Por HashAngie Suarez
 
Ejercicios con Funciones en programación I C++
Ejercicios con Funciones en programación I C++Ejercicios con Funciones en programación I C++
Ejercicios con Funciones en programación I C++
Carlos Aviles Galeas
 
Sintaxis funciones c++
Sintaxis funciones c++Sintaxis funciones c++
Sintaxis funciones c++
Fabiola Cortes
 
Unidad2 programas while , do while y for
Unidad2 programas while , do while  y forUnidad2 programas while , do while  y for
Unidad2 programas while , do while y for
Miguel Angel Peña
 
Método por plegamiento Hash
Método por plegamiento HashMétodo por plegamiento Hash
Método por plegamiento Hash
Christopher Bonilla Noguera
 
Electrónica digital: capitulo 4 sistema de numeración y códigos binarios
Electrónica digital: capitulo 4 sistema de numeración y códigos binarios Electrónica digital: capitulo 4 sistema de numeración y códigos binarios
Electrónica digital: capitulo 4 sistema de numeración y códigos binarios
SANTIAGO PABLO ALBERTO
 
Algoejemplos
AlgoejemplosAlgoejemplos
Algoejemplos
Hernan Espinoza
 
Laboratorio de Microcomputadoras - Práctica 06
 Laboratorio de Microcomputadoras - Práctica 06 Laboratorio de Microcomputadoras - Práctica 06
Laboratorio de Microcomputadoras - Práctica 06
Cristian Ortiz Gómez
 
Árboles Multicamino, B y B+
Árboles Multicamino, B y B+Árboles Multicamino, B y B+
Árboles Multicamino, B y B+
Alvaro Enrique Ruano
 
Div, idiv, Neg ensamblador
Div, idiv, Neg ensambladorDiv, idiv, Neg ensamblador
Div, idiv, Neg ensamblador
David Flores Gallegos
 
Algoritmos de ordenamiento externo sobre archivos
Algoritmos de ordenamiento externo sobre archivosAlgoritmos de ordenamiento externo sobre archivos
Algoritmos de ordenamiento externo sobre archivos
Daniel Gomez Jaramillo
 
Laboratorio1 entrada-salida de datos / Lenguance C
Laboratorio1   entrada-salida de datos / Lenguance CLaboratorio1   entrada-salida de datos / Lenguance C
Laboratorio1 entrada-salida de datos / Lenguance C
Alejandro Enrique Téllez López
 
Algoritmos Paralelos
Algoritmos ParalelosAlgoritmos Paralelos
Algoritmos Paralelos
Abigail Rijo Morales
 
Estructurarepetitivas 091023140353-phpapp01
Estructurarepetitivas 091023140353-phpapp01Estructurarepetitivas 091023140353-phpapp01
Estructurarepetitivas 091023140353-phpapp01laryenso
 

La actualidad más candente (20)

Laboratorio de Microcomputadoras - Práctica 01
Laboratorio de Microcomputadoras - Práctica 01Laboratorio de Microcomputadoras - Práctica 01
Laboratorio de Microcomputadoras - Práctica 01
 
Mapas karnaught
Mapas karnaughtMapas karnaught
Mapas karnaught
 
Entrada y salida de datos en c
Entrada y salida de datos en cEntrada y salida de datos en c
Entrada y salida de datos en c
 
Guia 3
Guia 3Guia 3
Guia 3
 
10 ejercicios-de-do-while
10 ejercicios-de-do-while10 ejercicios-de-do-while
10 ejercicios-de-do-while
 
BúSqueda Por Hash
BúSqueda Por HashBúSqueda Por Hash
BúSqueda Por Hash
 
Ejercicios con Funciones en programación I C++
Ejercicios con Funciones en programación I C++Ejercicios con Funciones en programación I C++
Ejercicios con Funciones en programación I C++
 
Sintaxis funciones c++
Sintaxis funciones c++Sintaxis funciones c++
Sintaxis funciones c++
 
Unidad2 programas while , do while y for
Unidad2 programas while , do while  y forUnidad2 programas while , do while  y for
Unidad2 programas while , do while y for
 
Método por plegamiento Hash
Método por plegamiento HashMétodo por plegamiento Hash
Método por plegamiento Hash
 
Electrónica digital: capitulo 4 sistema de numeración y códigos binarios
Electrónica digital: capitulo 4 sistema de numeración y códigos binarios Electrónica digital: capitulo 4 sistema de numeración y códigos binarios
Electrónica digital: capitulo 4 sistema de numeración y códigos binarios
 
Algoejemplos
AlgoejemplosAlgoejemplos
Algoejemplos
 
Laboratorio de Microcomputadoras - Práctica 06
 Laboratorio de Microcomputadoras - Práctica 06 Laboratorio de Microcomputadoras - Práctica 06
Laboratorio de Microcomputadoras - Práctica 06
 
Árboles Multicamino, B y B+
Árboles Multicamino, B y B+Árboles Multicamino, B y B+
Árboles Multicamino, B y B+
 
Div, idiv, Neg ensamblador
Div, idiv, Neg ensambladorDiv, idiv, Neg ensamblador
Div, idiv, Neg ensamblador
 
Algoritmos de ordenamiento externo sobre archivos
Algoritmos de ordenamiento externo sobre archivosAlgoritmos de ordenamiento externo sobre archivos
Algoritmos de ordenamiento externo sobre archivos
 
Código intermedio
Código intermedioCódigo intermedio
Código intermedio
 
Laboratorio1 entrada-salida de datos / Lenguance C
Laboratorio1   entrada-salida de datos / Lenguance CLaboratorio1   entrada-salida de datos / Lenguance C
Laboratorio1 entrada-salida de datos / Lenguance C
 
Algoritmos Paralelos
Algoritmos ParalelosAlgoritmos Paralelos
Algoritmos Paralelos
 
Estructurarepetitivas 091023140353-phpapp01
Estructurarepetitivas 091023140353-phpapp01Estructurarepetitivas 091023140353-phpapp01
Estructurarepetitivas 091023140353-phpapp01
 

Destacado

Algoritmos programacion-python
Algoritmos programacion-pythonAlgoritmos programacion-python
Algoritmos programacion-python
LUIS COAQUIRA
 
Algoritmos programacion-python
Algoritmos programacion-pythonAlgoritmos programacion-python
Algoritmos programacion-python
Maria Jóse Vidal Morant
 
Generador de codigo intermedio
Generador de codigo intermedioGenerador de codigo intermedio
Generador de codigo intermedio
Guillermo
 
Condicion Si ANIDADA
Condicion Si ANIDADACondicion Si ANIDADA
Condicion Si ANIDADA
Cami Ochoa
 
Soluciones derivadas
Soluciones derivadasSoluciones derivadas
Soluciones derivadasklorofila
 
Algoritmos+y+flujogramas
Algoritmos+y+flujogramasAlgoritmos+y+flujogramas
Algoritmos+y+flujogramas
luis840
 
Características de un algoritmo
Características de un algoritmoCaracterísticas de un algoritmo
Características de un algoritmoroxanaparra28
 
Ejemplos de algoritmos en C básicos (aprendiendo a programar)
Ejemplos de algoritmos en C básicos (aprendiendo a programar)Ejemplos de algoritmos en C básicos (aprendiendo a programar)
Ejemplos de algoritmos en C básicos (aprendiendo a programar)Kiim Kerrigan
 
Ejemplos de Algoritmos
Ejemplos de AlgoritmosEjemplos de Algoritmos
Ejemplos de AlgoritmosPepe Xdsasda
 
Problemas,algoritmos y diagramas de flujo.
Problemas,algoritmos y diagramas de flujo.Problemas,algoritmos y diagramas de flujo.
Problemas,algoritmos y diagramas de flujo.Arturo Perez Murrieta
 

Destacado (10)

Algoritmos programacion-python
Algoritmos programacion-pythonAlgoritmos programacion-python
Algoritmos programacion-python
 
Algoritmos programacion-python
Algoritmos programacion-pythonAlgoritmos programacion-python
Algoritmos programacion-python
 
Generador de codigo intermedio
Generador de codigo intermedioGenerador de codigo intermedio
Generador de codigo intermedio
 
Condicion Si ANIDADA
Condicion Si ANIDADACondicion Si ANIDADA
Condicion Si ANIDADA
 
Soluciones derivadas
Soluciones derivadasSoluciones derivadas
Soluciones derivadas
 
Algoritmos+y+flujogramas
Algoritmos+y+flujogramasAlgoritmos+y+flujogramas
Algoritmos+y+flujogramas
 
Características de un algoritmo
Características de un algoritmoCaracterísticas de un algoritmo
Características de un algoritmo
 
Ejemplos de algoritmos en C básicos (aprendiendo a programar)
Ejemplos de algoritmos en C básicos (aprendiendo a programar)Ejemplos de algoritmos en C básicos (aprendiendo a programar)
Ejemplos de algoritmos en C básicos (aprendiendo a programar)
 
Ejemplos de Algoritmos
Ejemplos de AlgoritmosEjemplos de Algoritmos
Ejemplos de Algoritmos
 
Problemas,algoritmos y diagramas de flujo.
Problemas,algoritmos y diagramas de flujo.Problemas,algoritmos y diagramas de flujo.
Problemas,algoritmos y diagramas de flujo.
 

Similar a Algoritmos - Funciones C++

FdP_Diapositivas_2018
FdP_Diapositivas_2018FdP_Diapositivas_2018
FdP_Diapositivas_2018
ead1943
 
8 b refactoring
8 b refactoring8 b refactoring
8 b refactoring
Félix Marín
 
Metodos funciones
Metodos funcionesMetodos funciones
Metodos funcioneseulo10
 
Introducción a las funciones en el lenguaje C
Introducción a las funciones en el lenguaje CIntroducción a las funciones en el lenguaje C
Introducción a las funciones en el lenguaje C
Diego Santimateo
 
Informe tecnicou1
Informe tecnicou1Informe tecnicou1
Informe tecnicou1
Aristo1
 
Estructura de un algoritmo en pseudocódigo
Estructura de un algoritmo en pseudocódigoEstructura de un algoritmo en pseudocódigo
Estructura de un algoritmo en pseudocódigo
Abrirllave
 
Tarea3 informatica
Tarea3 informaticaTarea3 informatica
Tarea3 informatica
Boris Seminario
 
Concepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptxConcepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptx
Fernando Solis
 
Guia de Laboratorios 5 - VB.NET 2005
Guia de Laboratorios 5 - VB.NET 2005Guia de Laboratorios 5 - VB.NET 2005
Guia de Laboratorios 5 - VB.NET 2005
Jose Ponce
 
5. PROGRAMACION ESTRUCTURADA C++.pptx
5. PROGRAMACION ESTRUCTURADA C++.pptx5. PROGRAMACION ESTRUCTURADA C++.pptx
5. PROGRAMACION ESTRUCTURADA C++.pptx
Dieguess
 
Intro PyGame Capitulo 5
Intro PyGame Capitulo 5Intro PyGame Capitulo 5
Intro PyGame Capitulo 5
Ricardo Daniel Quiroga
 
Funcionesclase1
Funcionesclase1Funcionesclase1
Funcionesclase1
computaciondosunefm
 
Informe estructura de datos Unidad 1
Informe estructura de datos Unidad 1Informe estructura de datos Unidad 1
Informe estructura de datos Unidad 1
eliezerbs
 
Laboratorio 2 juan_pinzon
Laboratorio 2 juan_pinzonLaboratorio 2 juan_pinzon
Laboratorio 2 juan_pinzon
juancar99
 
Cur04 05 pract06c++
Cur04 05 pract06c++Cur04 05 pract06c++
Cur04 05 pract06c++
Gerardo Geronimo
 

Similar a Algoritmos - Funciones C++ (20)

Viernes Tecnicos DTrace
Viernes Tecnicos DTraceViernes Tecnicos DTrace
Viernes Tecnicos DTrace
 
FdP_Diapositivas_2018
FdP_Diapositivas_2018FdP_Diapositivas_2018
FdP_Diapositivas_2018
 
8 b refactoring
8 b refactoring8 b refactoring
8 b refactoring
 
6.funciones y recursividad en c++
6.funciones y recursividad en c++6.funciones y recursividad en c++
6.funciones y recursividad en c++
 
Metodos funciones
Metodos funcionesMetodos funciones
Metodos funciones
 
Introducción a las funciones en el lenguaje C
Introducción a las funciones en el lenguaje CIntroducción a las funciones en el lenguaje C
Introducción a las funciones en el lenguaje C
 
Informe tecnicou1
Informe tecnicou1Informe tecnicou1
Informe tecnicou1
 
Estructura de un algoritmo en pseudocódigo
Estructura de un algoritmo en pseudocódigoEstructura de un algoritmo en pseudocódigo
Estructura de un algoritmo en pseudocódigo
 
Tarea3 informatica
Tarea3 informaticaTarea3 informatica
Tarea3 informatica
 
Concepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptxConcepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptx
 
Guia de Laboratorios 5 - VB.NET 2005
Guia de Laboratorios 5 - VB.NET 2005Guia de Laboratorios 5 - VB.NET 2005
Guia de Laboratorios 5 - VB.NET 2005
 
5. PROGRAMACION ESTRUCTURADA C++.pptx
5. PROGRAMACION ESTRUCTURADA C++.pptx5. PROGRAMACION ESTRUCTURADA C++.pptx
5. PROGRAMACION ESTRUCTURADA C++.pptx
 
20 problemas
20 problemas20 problemas
20 problemas
 
Intro PyGame Capitulo 5
Intro PyGame Capitulo 5Intro PyGame Capitulo 5
Intro PyGame Capitulo 5
 
07 funciones
07 funciones07 funciones
07 funciones
 
Funcionesenlenguaje c
Funcionesenlenguaje cFuncionesenlenguaje c
Funcionesenlenguaje c
 
Funcionesclase1
Funcionesclase1Funcionesclase1
Funcionesclase1
 
Informe estructura de datos Unidad 1
Informe estructura de datos Unidad 1Informe estructura de datos Unidad 1
Informe estructura de datos Unidad 1
 
Laboratorio 2 juan_pinzon
Laboratorio 2 juan_pinzonLaboratorio 2 juan_pinzon
Laboratorio 2 juan_pinzon
 
Cur04 05 pract06c++
Cur04 05 pract06c++Cur04 05 pract06c++
Cur04 05 pract06c++
 

Algoritmos - Funciones C++

  • 1. Curso: Algoritmos I Profesor: Ing. Erick NúñezFACULTAD DE INGENIERÍA INDUSTRIAL Y DE SISTEMAS Carrera Profesional de Ingeniería de Sistemas Razones válidas para crear un subprograma  Reducir la complejidad del programa (“divide y vencerás”).  Eliminar código duplicado.  Limitar los efectos de los cambios (aislar aspectos concretos).  Ocultar detalles de implementación (p.ej. algoritmos complejos).  Promover la reutilización de código (p.ej. familias de productos).  Mejorar la legibilidad del código.  Facilitar la portabilidad del código. Pasos para escribir un subprograma 1. Definir el problema que el subprograma ha de resolver. 2. Darle un nombre no ambiguo al subprograma. 3. Decidir cómo se puede probar el funcionamiento del subprograma. 4. Escribir la declaración del subprograma (cabecera de la función). 5. Buscar el algoritmo más adecuado para resolver el problema. 6. Escribir los pasos principales del algoritmo como comentarios. 7. Rellenar el código correspondiente a cada comentario. 8. Revisar mentalmente cada fragmento de código. 9. Repetir los pasos anteriores hasta quedar completamente satisfecho. Los parámetros de un subprograma  Orden: (por valor, por referencia) == (entrada, entrada/salida, salida)  Si varias rutinas utilizan los mismos parámetros, éstos han de ponerse en el mismo orden (algo que la biblioteca estándar de C no hace).  De acuerdo con la primera norma, las variables de estado o error se ponen al final.  No es aconsejable utilizar los parámetros de una rutina como si fuesen variables locales de la rutina.  Se han de documentar las suposiciones que se hagan acerca de los posibles valores de los parámetros.  Sólo se deben incluir los parámetros que realmente necesite la rutina para efectuar su labor.  Las dependencias existentes entre distintos módulos han de hacerse explícitas mediante el uso de parámetros.
  • 2. Curso: Algoritmos I Profesor: Ing. Erick NúñezFACULTAD DE INGENIERÍA INDUSTRIAL Y DE SISTEMAS Carrera Profesional de Ingeniería de Sistemas Paso de Parámetros por Valor void sub (int , int ); int main () { int z,t; z=5; t=10; printf("%d %dn",z,t); // 5 10 sub(z,t); printf("%d %dn",z,t); // 5 10 sub(z,4); printf("%d %dn",z,t); // 5 10 sub(z,2*t+20); printf("%d %dn",z,t); // 5 10 sub(3,20); printf("%d %dn",z,t); // 5 10 sub(z+32,20); printf("%d %dn",z,t); // 5 10 } void sub (int x, int y) { x = x+y; } El paso de atributos por referencia se puede simular si utilizamos punteros (pasamos como parámetros las direcciones en memoria de las variables que queremos modificar dentro del subprograma): void sub (int *x, int y); int main () { int z,t; z=5; t=10; printf("%d %dn",z,t); // 5 10 sub(&z,t); printf("%d %dn",z,t); // 15 10 sub(&z,4); printf("%d %dn",z,t); // 19 10 sub(&z,2*t+20); printf("%d %dn",z,t); // 59 10 sub(&3,20); // ERROR
  • 3. Curso: Algoritmos I Profesor: Ing. Erick NúñezFACULTAD DE INGENIERÍA INDUSTRIAL Y DE SISTEMAS Carrera Profesional de Ingeniería de Sistemas sub(&(z+32),20); // ERROR } void sub (int *x, int y) { *x = (*x) + y; } Ámbito de Variables #include <stdio.h> int a,b; int main () { a=3; b=4; MiSub1(a,&b); printf(“%d %d”,a,b); MiSub2(32); printf(“%d %d”,a,b); } void MiSub1 (int x, int *y) { int h = x*4; *y = h + x + 3 + a; } void MiSub2 (int x) { int b = 2*x; a = b + 3; }
  • 4. Curso: Algoritmos I Profesor: Ing. Erick NúñezFACULTAD DE INGENIERÍA INDUSTRIAL Y DE SISTEMAS Carrera Profesional de Ingeniería de Sistemas RECURSIVIDAD Funciones Recursivas: El C++ es un lenguaje de programación que admite la Recursividad, esto es, funciones que pueden llamarse a sí mismas. Cuando una función es llamada por sí misma, se crea un nuevo juego de parámetros y variables locales, pero el código ejecutable es el mismo. Es muy importante definir las condiciones dentro de la función para que la recursividad finalice y no genere un bucle infinito. Veamos un ejemplo:
  • 5. Curso: Algoritmos I Profesor: Ing. Erick NúñezFACULTAD DE INGENIERÍA INDUSTRIAL Y DE SISTEMAS Carrera Profesional de Ingeniería de Sistemas Ejercicios Se pide Calcular el factorial de un número utilizando funciones El factorial de un numero es un proceso que se puede calcular utilizando la siguiente función Se Pide Desarrollar el programa que la función Haga un programa que calcule el área de un círculo I.- Diseño del programa Entrada: radio y pi (constante) Salida: área del circulo Descripción del procedimiento por Tareas 1. Pedir Radio 2. Calculara área del Circulo 3. Mostrar área del Circulo Díselo de los subprogramas 1 Pedir Radio procedimiento Entrada: radio Salida: radio (un parámetro por referencia) 2 Calcular el área del circulo Función. Entrada radio (parámetro por valor) y pi (constante) Salida: área (retorno por el nombre de la función) 3 Mostrar el área del círculo Entrada: área (parámetro por valor) Salida : área (mostrar en pantalla
  • 6. Curso: Algoritmos I Profesor: Ing. Erick NúñezFACULTAD DE INGENIERÍA INDUSTRIAL Y DE SISTEMAS Carrera Profesional de Ingeniería de Sistemas Se va a implementar una sencilla función que calcule el área de un triángulo. Para calcular el área de un triángulo es necesario conocer la base y la altura. Estos dos datos se deben pedir al usuario y luego calcular el área por medio de la función. Probar el siguiente código: #include <iostream.h> float AreaTriangulo( float , float ); void main(void) { float base,alt; cout << "Escribe la base: " ; cin >> base; cout << "Escribe la altura: " ; cin >> alt; cout << "El area del triangulo es: " << AreaTriangulo(base,alt); } float AreaTriangulo( float b, float h) { float tmp = b*h/2.0; return tmp; } En este ejercicio se va a hacer uso de algunas funciones definidas en el estándar del C++ para obtener los datos de fecha y hora del PC. Probar el código siguiente: #include <iostream.h> #include <time.h> void ImprimeHora(void); void Delay(double seg); void main(void) { ImprimeHora(); Delay(2.5); //retardo de 2.5 seg. ImprimeHora(); } void ImprimeHora(void) { long t1; tm *mihora; //estructura para time time(&t1); //obtener los datos actuales (en long) mihora = localtime(&t1); //convierte long a struct tm cout << "Fecha: " << mihora->tm_mday << "/" ; cout << mihora->tm_mon+1<<"/"<<mihora->tm_year+1900; cout << " Hora: " << mihora->tm_hour << ":" ; cout << mihora->tm_min << ":“ <<mihora->tm_sec << endl; } void Delay(double seg) { long start; long end; time(&start); end = start; while( difftime(end,start) < seg) {time(&end);} }
  • 7. Curso: Algoritmos I Profesor: Ing. Erick NúñezFACULTAD DE INGENIERÍA INDUSTRIAL Y DE SISTEMAS Carrera Profesional de Ingeniería de Sistemas Explicación: 1. Todas las funciones se encuentran definidas en el fichero time.h, el cual se debe incluir al comienzo del programa. 2. La función time(long&) obtiene en una variable del tipo long un valor que representa la fecha y hora a partir del 1 de enero de 1900. Se le debe pasar la dirección de la variable (&t1), ya que la función tiene que escribir el dato. 3. El valor obtenido con time() se introduce como parámetro a la función localtime(), la cual se encarga de convertir ese long en “algo más inteligible” La función devuelve un puntero a una estructura tm (por eso se define tm *mihora) definida en el fichero time.h, que tiene los siguientes miembros: struct tm { int tm_sec; /* seconds after the minute - [0,59] */ int tm_min; /* minutes after the hour - [0,59] */ int tm_hour; /* hours since midnight - [0,23] */ int tm_mday; /* day of the month - [1,31] */ int tm_mon; /* months since January - [0,11] */ int tm_year; /* years since 1900 */ int tm_wday; /* days since Sunday - [0,6] */ int tm_yday; /* days since January 1 - [0,365] */ int tm_isdst; /* daylight savings time flag */ }; 4. Una vez que se tiene la estructura, se puede sacar la hora, minutos, segundos, día, etc., por medio de los miembros de la estructura. 5. Existe también una función difftime(time1, time2) que obtiene la diferencia de dos tiempos, la cual se utiliza para medir el tiempo que ha transcurrido entre una operación y otra. En el caso del ejemplo, se usa para crear una función delay() que hace que el programa se quede en un bucle while un tiempo determinado, dado como argumento a delay(double seg). Ejercicios : 1. Escriba una función que decida si un número entero es capicúa. 2. Escriba una función que calcule la suma de los divisores de un número entero positivo, pudiendo excluir de dicha suma el propio número (será un parámetro adicional (valor 1 o 0) quien determinará si se suma o no). 3. Construya una función, llamada amigos, que apoyándose en la función anterior, permita ver si dos números son o no amigos (dos números A y B son amigos si la suma de los divisores de A (excluido él mismo) coincide con B y viceversa), Construya un programa que, apoyándose en la función anterior, permita obtener todas las parejas de números amigos comprendidos entre dos números facilitados por el usuario 4.Dada la longitud, ancho y profundidad (en pies) de una piscina, el volumen se calcula según la siguiente fórmula: volumen = longitud*ancho*profundidad Dado que un pie cúbico de agua es equivalente a 7.8 galones, la capacidad de agua de la piscina viene dada por la fórmula: capacidad = volumen * 7.8 Si la rata de flujo de agua en la piscina es de 20 galones por minuto, entonces el tiempo (en horas) que se requiere para llenar la piscina se calcula mediante la fórmula: Tiempo = capacidad/20/60
  • 8. Curso: Algoritmos I Profesor: Ing. Erick NúñezFACULTAD DE INGENIERÍA INDUSTRIAL Y DE SISTEMAS Carrera Profesional de Ingeniería de Sistemas PRACTICA V 1.-Hacer una ecuación de recursión Múltiple en la sucesión de Fibonacci 2. Escribe funciones recursivas para las siguiente operaciones entre 2 enteros: a. Sumar: Dentro de la función sólo se podrán utilizar incrementos unitarios, por tanto, no se puede utilizar el operador suma. b. Multiplicar: En este caso sólo se podrá utilizar el operador suma, y no el de multiplicación. c. La función exponencial, xy siendo x, y números enteros (xy = x * xy-1). 3.Diseñar un programa para jugar a adivinar un número entre 0 y 100. El juego tiene que dar pistas de si el número introducido por el jugador está por encima o por debajo. El juego termina cuando se adivina el número o se decide terminar de jugar (por ejemplo al teclear un número negativo). 5.- Realizar un programa mediante el uso de funciones que simule un cajero automático de monedas. Los tipos de monedas que dispone el cajero son de 1,5,25,50,100 y 500 pesetas. Inicialmente el cajero tiene 100 monedas de cada tipo, que se van consumiendo para proporcionar las cantidades solicitadas. El cajero debe obtener la cantidad solicitada con los tipos de moneda que tenga en cada momento, tratando siempre de utilizar las monedas de mayor valor. El programa debe tener un menú con tres opciones: Pedir dinero al cajero, Ver estado del cajero o Salir del programa. Observar que el cajero no puede dar más dinero del que tiene. Nota 1.- Entregar Practica en el aula en la siguiente clase 2.- El programa Tiene que funcionar y ser Explicado por el Alumno 3.-Se valorará la calidad del diseño realizado, no sólo si el programa funciona o no. Por ejemplo, se tendrá muy en cuenta la modularización de los programas. 4.- Se le pedirá hacer una modificación en alguno de los ejercicios en clase 5.- No se admitirá ninguna práctica entregada fuera del plazo establecido. 6.- La elaboración de las prácticas es individual. Cualquier elaboración conjunta Supondrá el suspenso automático de los alumnos involucrados. La entrega de la práctica se realizará el día 24 de Agosto de 20011 en el aula de prácticas. “El modo de dar una vez en el clavo es dar cien veces en la herradura.” Miguel de Unamuno