Pract 6
Pract 6
Pract 6
Subprogramas en C++
El objetivo de esta práctica es presentar los mecanismos que proporciona el lenguaje C++ para la
programación mediante subprogramas.
// declaraciones de funciones
int main() // inicio del bloque principal
{
const tipo const_1 = valor_1; // definiciones de constantes
1
Informática. Práctica 6.
Subprogramas en C++
...
... // cuerpo del bloque principal
// definiciones de funciones
Como ves debemos declarar las funciones justo antes del inicio del bloque principal, int main(), y
definirlas justo después del final de dicho bloque (tras la llave de cierre).
La llamada a una función puede realizarse dentro de cualquier bloque del programa, ya sea el bloque
principal u otro (es decir, es posible hacer una llamada a una función desde dentro de otra función).
Ejemplo: Declarar una función que calcule el factorial de un número recibido como parámetro.
int factorial(int);
En este ejemplo, los dos tipos char corresponderán a los parámetros de los caracteres central y
extremo, y el tipo int al parámetro de la longitud de la línea.
2
Informática. Práctica 6.
Subprogramas en C++
// cuerpo de la función
}
Ejemplos
Definición de la función factorial declarada antes (int factorial(int);).
int factorial (int num)
{
int cont;
int fac;
cont = 1;
fac = 1;
while (cont <= num)
{
fac = fac * cont;
cont = cont + 1;
}
return (fac); // devuelve el valor principal
}
cont = 1;
cout << extremo;
Como ves, el aspecto de la definición de una función es muy parecido al del bloque principal (main), del
programa, excepto por la introducción de los parámetros. Esto es así porque en C++, en realidad, el
bloque principal es una función, llamada función principal, que siempre es la función que se ejecuta en
primer lugar cuando se pone en funcionamiento el programa.
3
Informática. Práctica 6.
Subprogramas en C++
Parámetros de salida Se especifican igual que los parámetros de entrada, pero poniendo un &
y entrada/salida detrás del tipo del parámetro y delante del identificador del parámetro.
4
Informática. Práctica 6.
Subprogramas en C++
Especificación de parámetros:
(tipo parámetro1, tipo parámetro2, ..., tipo parámetroN)
1.6.2 Ejemplos
Ejemplos de funciones con parámetros de entrada son las funciones anteriores Factorial y
DibujaLinea.
int factorial(int);
void dibujaLinea (char, char, int);
cont = 1;
cout << extremo;
aux = a;
a = b;
b = aux;
}
5
Informática. Práctica 6.
Subprogramas en C++
• expresiones con resultado del mismo tipo que el parámetro formal correspondiente (para
parámetros de entrada).
• variables del mismo tipo que el formal correspondiente (para parámetros de salida o
entrada/salida)
Ejemplos
Llamada a la función factorial (escrita anteriormente)
resultado = factorial(4);
Esta llamada a la función Intercambia(x, y) hace que las variables x e y (que contenían un valor 1 y
2 respectivamente) intercambien su valor (tras la llamada x vale 2 e y vale 1).
6
Informática. Práctica 6.
Subprogramas en C++
Los parámetros reales deben coincidir en tipo con los formales correspondientes.
7
Informática. Práctica 6.
Subprogramas en C++
2 Sesión de prácticas
2.1 Primer ejercicio
Con este ejercicio aprenderás a:
• Realizar llamadas a subprogramas.
• Reconocer y ensayar con los diferentes tipos de parámetros en C++.
• Realizar programas mediante la técnica de diseño descendente.
Su parámetro de entrada, n, indica el número de asteriscos que tiene que dibujar en la línea.
SE PIDE:
Acabar el programa que realiza el dibujo de la figura siguiente:
*
***
*****
*******
*********
***********
*************
***************
*****************
*******************
*********************
***********************
*************************
***************************
*****************************
*******************************
*********************************
***********************************
*************************************
***************************************
*****
*****
*****
Para ello toma el fichero P6EJ1 y complétalo con las llamadas al subprograma Tramo que sean
necesarias.
/*
AUTOR: profesores de Informática
DESCRIPCION:
Dibuja un árbol de navidad con asteriscos
ENTRADAS:
SALIDAS:
ERRORES:
*/
8
Informática. Práctica 6.
Subprogramas en C++
#include <iostream>
void tramo(int);
int main()
{
........ // Completar
........
return(0);
}
void tramo(int n)
{
int i;
i = 1;
while ( i <= (79-n) / 2 )
{
cout<<' ';
i = i + 1;
}
i = 1;
while ( i <= n )
{
cout<<'*';
i = i + 1;
}
cout<<endl;
}
SE PIDE:
Traducir el programa a C++ y completarlo realizando el subprograma sumaDivisores. Llama a este
algoritmo P6EJ2. Lo primero que deberás determinar antes de hacer el subprograma es a qué tipo de
subprograma corresponde (acción o función).
Entradas: no tiene
Salidas: muestra en pantalla los números perfectos menores que 1000
9
Informática. Práctica 6.
Subprogramas en C++
num = 1
mientras que num <= 1000 hacer
si num = sumaDivisores(num) entonces
escribir (num, “Es número perfecto”)
fsi
num = num + 1
fmq
fin
#include <iostream>
using namespace std;
int main()
{
int n1, n2, n3;
int aux;
cout<<"La lista ordenada es "<< n1 << ", " << n2 << ", " << n3;
return 0;
}
10
Informática. Práctica 6.
Subprogramas en C++
SE PIDE: Realizar un programa en C++ que, utilizando algún subprograma, evite las repeticiones de
instrucciones que se dan en los bloques de las estructuras if. Llama al programa P6EJ3.
2.1.4 Cuarto programa.
El siguiente programa obtiene la suma siguiente (donde n ha de ser introducido por teclado):
1 2 3 n
suma = + 2 + 3 +3+ n
2 2 2 2
SE PIDE:
Completa el programa (P6EJ4) siguiente. Utiliza una función para calcular la potencia de una base y
exponentes cualesquiera (enteros >=0).
/*
AUTOR: profesores de Informática
DESCRIPCIÓN:
n
Suma la serie de término general n/2
ENTRADAS: n: número de términos a sumar
SALIDAS: suma: resultado de la suma de la serie
*/
#include <iostream>
using namespace std;
int main()
{
int i, n;
float suma;
suma = 0;
i = ......
while (i <= n)
{
suma = suma +.......
i = i + 1;
}
return 0;
}
pot = 1;
i = 1;
while (i <= y)
{
pot = pot * x;
i = i + 1;
}
return(pot);
}
11
Informática. Práctica 6.
Subprogramas en C++
int main()
{
float n1pr, n1pi, n2pr, n2pi;
float solpr, solpi;
char operacion;
leerComplejo (........);
leerComplejo (........);
switch (operacion)
{
case '+':
{
suma(........);
}
break;
case '-':
{
resta(........);
}
12
Informática. Práctica 6.
Subprogramas en C++
break;
case '*':
{
multiplica(........);
}
break;
case '/':
{
divide(........);
}
break;
}
escribir_complejo(solpr, solpi);
return 0;
}
13
Informática. Práctica 6.
Subprogramas en C++
1. Programa calculador de fracciones (similar al de complejos hecho en esta práctica). Para ello sigue
los siguientes consejos:
A. Escribe un subprograma para reducir quebrados. Para ello se necesitará construir
previamente una función de cálculo del m.c.d. Ten en cuenta que ¼ + ¼ no son 2/4 sino ½.
B. Para la representación de las fracciones utiliza dos variables enteras.
C. Escribe subprogramas de lectura y escritura de fracciones.
D. Escribe los subprogramas para las operaciones con fracciones (sumar, restar, multiplicar y
dividir).
E. El programa preguntará por la operación a realizar y luego leerá las fracciones a operar. Una
vez resuelta la operación escribirá el resultado.
2. Programa que calcule el valor de (x + y)n , dados x, y, n por teclado. Para ello, desarrollar
funciones que permitan usar la expresión del desarrollo del binomio de Newton:
m m!
=
n n !( m - n)!
y que n ! = 1 * 2 * 3*...*( n - 1) * n si n > 0 y 0 ! = 1
14