You are on page 1of 24

Lenguaje de Programacin

Tema 6:
Programacin Modular:
Funciones y Procedimientos
Problemas

Profesor
John Ledgard Trujillo Trejo

Facultad de Ingeniera Electrnica y Elctrica


Curso 2017-II
Problema 1

Escribe una funcin en C++ que devuelva el resultado de un nmero elevado a un


exponente dado mayor o igual que cero.

#include<iostream>
#include<conio.h>
using namespace std;
double potencia (float b, int n);

int main()
{
float base;
int exponente;
cout<<"Elevar una numero a la potencia n\n";
cout<<"Ingrese la base: ";
cin>>base;

do
{
cout<<"Ingrese el exponente: ";
cin>>exponente;
}while(exponente<0);
Lenguaje de Programacin
John Ledgard Trujillo Trejo
06 de noviembre de 2017
Problema 1

cout<<"El numero "<< base<<" elevado a la "<<exponente<<" es: "


<<potencia(base, exponente);
getch();
return 0;
}

double potencia(float b, int n)


{
double resultado;
resultado = 1;

if (n == 0)
return (resultado);

for (int i=1; i<=n; i++)


resultado = resultado*b;

return(resultado);
}

Lenguaje de Programacin
John Ledgard Trujillo Trejo
06 de noviembre de 2017
Problema 2

Escribe una funcin en pseudocdigo que devuelva el trmino N (siendo N un


nmero entero positivo) de la serie de Fibonacci, esta sigue la siguiente serie: 1,
1, 2, 3, 5, 8, 13, 21 y as sucesivamente. Date cuenta, que para obtener un
numero, suma los dos nmeros anteriores. Por ejemplo, si introducimos un 3,
la funcin nos devuelve el 2.

#include<iostream>
#include<conio.h>
using namespace std;

long int numfibonacci(int pos);

int main()
{
int posicion;
long int fibo;

do
{
cout<<"Ingrese la posicion del fibonacci: ";
cin>>posicion;
}while(posicion<=0);
Lenguaje de Programacin
John Ledgard Trujillo Trejo
06 de noviembre de 2017
Problema 2

fibo = numfibonacci(posicion);
cout<<"El numero Fibonacci en la posicion "<<posicion<<" es: "<<fibo;

getch();
return 0;
}

long int numfibonacci(int pos)


{
int contador;
long int num1, num2, suma;

if ((pos == 1)||(pos==2))
return(1);
else
{
num1 = 1;
num2 = 1;

Lenguaje de Programacin
John Ledgard Trujillo Trejo
06 de noviembre de 2017
Problema 2

contador = 2;

while(contador < pos)


{
contador = contador+1;
suma = num1+num2;
num1 = num2;
num2 = suma;
}

return (suma);
}

Lenguaje de Programacin
John Ledgard Trujillo Trejo
06 de noviembre de 2017
Problema 3

Escribir una funcin que calcule el nmero de dgitos de un nmero entero


positivo.

#include<iostream>
#include<conio.h>
using namespace std;
int cuenta_cifras(int num);

int main()
{
int numero, numero_cifras;
cout<<"CUENTA CIFRAS DE UN NUMERO POSITIVO";

do
{
cout<<"\nEscribe un numero positivo: ";
cin>>numero;
}while(numero<=0);

Lenguaje de Programacin
John Ledgard Trujillo Trejo
06 de noviembre de 2017
Problema 3

numero_cifras = cuenta_cifras(numero);
cout<<"\nEl numero "<<numero<<" tiene "<<numero_cifras<<" cifras";
getch();
return 0;
}

int cuenta_cifras(int num)


{
int cifras;
cifras = 0;

while (num>0)
{
num = num/10;
cifras = cifras + 1;
}
return (cifras);
}

Lenguaje de Programacin
John Ledgard Trujillo Trejo
06 de noviembre de 2017
Problema 4

Escribir una funcin que invierta un nmero entero positivo.

Algoritmo invertir_numero
var
entero: numero, numeroi
caracter: op
inicio // Principal
escribir ("INVIERTE UN NUMERO POSITIVO)
repetir
repetir
escribir ("Escribe un numero positivo: )
leer (numero)
hasta_que (numero>0)
numeroi numero_invertido(numero)
escribir (El numero invertido es , numeroi)
escribir ("Quiere seguir calculando: (s/n))
leer (op)
hasta que (op<>n')
fin
Lenguaje de Programacin
John Ledgard Trujillo Trejo
06 de noviembre de 2017
Problema 4

entero funcion numero_invertido (entero: num)


var
entero: invertido, resto

inicio
invertido 0
mientras (num>0)
resto num%10
num num/10
invertido invertido*10 + resto
fin_mientras
devolver (invertido)
fin_funcion

Lenguaje de Programacin
John Ledgard Trujillo Trejo
06 de noviembre de 2017
Problema 5

Uno de los juegos ms populares se conoce como dados, y se juega en los


casinos y en los callejones de todo el mundo. Las reglas de juego son sencillas :
Un jugador lanza dos dados. Cada dado tiene caras. Estas caras tienen 1, 2,
, , 5, y puntos. Una vez que los dados se detienen, se calcula la suma de
los puntos en las dos caras superiores. Si la suma es 7 u once en el primer tiro,
el jugador gana, si es 2, o 12 en el primer tiro, el jugador pierde (es decir,
la casa gana). Si la suma es , 5, , 8, 9 0 10 en el primer tiro, entonces la
suma se vuelve el punto del jugador. Para ganar, el jugador debe continuar
lanzando los dados hasta que llega a su punto. El jugador pierde al lanzar un
siete antes de llegar al punto.

Lenguaje de Programacin
John Ledgard Trujillo Trejo
06 de noviembre de 2017
Problema 5

#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
using namespace std;

int lanzadados( void ); // funcin prototipo

main()
{
enum Estado { CONTINUAR, GANA, PIERDE };
int suma, puntaje;
Estado EstadoJuego;

srand( time( NULL ) );


suma = lanzadados(); // Primer lanzamiento del dado

Lenguaje de Programacin
John Ledgard Trujillo Trejo
06 de noviembre de 2017
Problema 5

switch ( suma )
{
case 7:
case 11: // gana al primer lanzamiento
EstadoJuego = GANA;
break;
case 2:
case 3:
case 12: // pierde al primer lanzamiento
EstadoJuego = PIERDE;
break;
default: //Continua el juego
EstadoJuego = CONTINUAR;
puntaje = suma;
cout << "El puntaje es " << puntaje << endl;
break; // opcional
}

Lenguaje de Programacin
John Ledgard Trujillo Trejo
06 de noviembre de 2017
Problema 5

while ( EstadoJuego == CONTINUAR )


{ // sigue lanzando
suma = lanzadados();
if ( suma == puntaje ) // gana al llegar al punto
EstadoJuego = GANA;
else
if ( suma == 7 ) // pierde al tirar 7
EstadoJuego = PIERDE;
}

if ( EstadoJuego == GANA )
cout << "El jugador gana" << endl;
else
cout << "El jugador pierde" << endl;
getch();
}

Lenguaje de Programacin
John Ledgard Trujillo Trejo
06 de noviembre de 2017
Problema 5

int lanzadados( void )


{
int valordado1, valordado2, sumadados;
valordado1 = 1 + rand() % 6;
valordado2 = 1 + rand() % 6;
sumadados = valordado1 + valordado2;
cout << "Tirada del jugador " << valordado1 << " + " << valordado2
<< " = " << sumadados << endl;
return sumadados;
}

Lenguaje de Programacin
John Ledgard Trujillo Trejo
06 de noviembre de 2017
Problema 6

Hacer una funcin que determine si un ao es bisiesto?

#include <iostream>
#include<conio.h>
using namespace std;
int bisiesto(int); //declaracin o prototipo de la funcin

int main()
{
int anio;
cout<<"Introduce a"<<(char)164<<"o: "; //164 ascii de
cin >> anio;

if(bisiesto(anio)) //llamada a la funcin


cout << "Bisiesto" << endl;
else
cout << "No es bisiesto" << endl;

getch();
return();
}
Lenguaje de Programacin
John Ledgard Trujillo Trejo
06 de noviembre de 2017
Problema 6

int bisiesto(int a) //definicin de la funcin


{
if(a%4==0 and a%100!=0 or a%400==0)
return 1;
else
return 0;
}

Lenguaje de Programacin
John Ledgard Trujillo Trejo
06 de noviembre de 2017
Problema 7

Hacer un programa C++ que lee la fecha actual y la fecha de nacimiento de una
persona y calcule su edad.

#include <iostream>
#include<conio.h>
using namespace std;

int bisiesto(int);
int fecha_valida(int , int, int);
int calcular_edad(int, int, int, int, int, int);

int main()
{
int diaa, mesa, anioa, dian, mesn, anion, edad;

do
{
cout << "Introduce fecha actual: " << endl;
cout << "dia : "; cin >> diaa;
cout << "mes : "; cin >> mesa;
cout << "a" << (char)164 << "o: "; cin >> anioa;
}while(!(fecha_valida(diaa, mesa, anioa)));
Lenguaje de Programacin
John Ledgard Trujillo Trejo
06 de noviembre de 2017
Problema 7

do
{
cout << endl << "Introduce fecha de nacimiento: " << endl;
cout << "dia : "; cin >> dian;
cout << "mes : "; cin >> mesn;
cout << "a" << (char)164 << "o: "; ; cin >> anion;
}while(!(fecha_valida(dian, mesn, anion)));

edad = calcular_edad(diaa, mesa, anioa, dian, mesn, anion);


cout << endl << "Edad : " << edad << endl << endl;
return 0;
}

int calcular_edad(int da, int ma, int aa, int dn, int mn, int an)
{
int edad = aa - an;
if(ma < mn)
edad--;
else if(ma == mn and da < dn)
edad--;
return edad;
}
Lenguaje de Programacin
John Ledgard Trujillo Trejo
06 de noviembre de 2017
Problema 6

int bisiesto(int a) // definicin de la funcin bisiesto


{
if(a%4==0 and a%100 !=0 or a%400==0)
return 1;
else
return 0;
}

int fecha_valida(int d, int m, int a) //definicin de fecha_valida


{
if(d < 1 or d > 31 or m < 1 or m > 12 or a < 1)
return 0;

switch(m)
{
case 4:
case 6:
case 9:
case 11: if(d > 30)
return 0;
break;

Lenguaje de Programacin
John Ledgard Trujillo Trejo
06 de noviembre de 2017
Problema 7

case 2: if(bisiesto(a))
{
if(d > 29)
return 0;
}
else if(d > 28)
return 0;
break;
return 1;
}

Lenguaje de Programacin
John Ledgard Trujillo Trejo
06 de noviembre de 2017
Problema 8

Los empleados de una fabrica trabajan en dos turnos, Diurno y Nocturno. Se


desea calcular el jornal diario de acuerdo a con las siguientes reglas:

La tarifa de las horas diurnas es de 10


La tarifa de las horas nocturnas es de 13,5
En caso de ser festivo, la tarifa se incrementa en un 10% en caso de turno
diurno y en un 15% para el nocturno.

Escribe una funcin en pseudocdigo llamada jornal() que tome como


parmetros el n de horas, el turno y el tipo de da (Festivo, Laborable) y nos
devuelva el sueldo a cobrar. Escribe tambin un algoritmo principal que pida el
nombre del trabajador, el da de la semana, turno y n de horas trabajadas, nos
escriba el sueldo a cobrar usando la funcin anterior.

Ten en cuenta, que en la funcin nos pide el tipo de da pero en el algoritmo le


pedimos al da es decir, que debemos saber si el dia que introduce el usuario es
festivo o no.

Lenguaje de Programacin
John Ledgard Trujillo Trejo
06 de noviembre de 2017
Bibliografa

Fundamentos de programacin, Algoritmos y Estructura de datos


y Objetos, Joyanes, Luis, Editorial McGraw Hill, 2003.

Metodologa de la programacin estructurada, Joyanes, Luis,


Editorial McGraw Hill, 1993.

El lenguaje de programacin C, Kernighan y Ritchie, Editorial


Prentice Hall, 1991.

Como programar en C/C++ , H.M. Deitel and P.J. Deitel, Ed.


Prentice Hall, 1998, 6ta. edicin

1.22
Preguntas ?

1.23

You might also like