ejemplos de funciones en c++.docx

32
/* 7.4b_Crear una función que calcule el cubo de un número real (float). El resultado deberá ser otro número real. Probar esta función para calcular el cubo de 3.2 y el de 5. */ #include <stdio.h> float cubica(float numero) { float cubica; cubica = numero * numero * numero; return cubica; } int main() { float numero; float cubo; int i=0; while(numero >= -1000000) { if(i==0) puts("\nEscriba un numero real"); else puts("\nEscriba otro numero real");

Transcript of ejemplos de funciones en c++.docx

Page 1: ejemplos de funciones en c++.docx

/* 7.4b_Crear una función que calcule el cubo de un número real (float). El resultado deberá

ser otro número real. Probar esta función para calcular el cubo de 3.2 y el de 5. */

#include <stdio.h>

float cubica(float numero)

{

float cubica;

cubica = numero * numero * numero;

return cubica;

}

int main()

{

float numero;

float cubo;

int i=0;

while(numero >= -1000000)

{

if(i==0)

puts("\nEscriba un numero real");

else

puts("\nEscriba otro numero real");

scanf("%f", &numero);

printf("%f elevado al cubo es %f\n",

numero,cubo=cubica(numero));

Page 2: ejemplos de funciones en c++.docx

i ++;

}

return 0;

}

/* 7.4c_Crear una función que calcule cual es el menor de dos números enteros.

El resultado será otro número entero. */

#include <stdio.h>

int minus(int num1, int num2)

{

int min;

min = num1 < num2? num1: num2;

return min;

}

int main()

{

int numero1, numero2, menor;

while (numero1, numero2)

{

printf(" Escriba un numero\n");

scanf("%d",&numero1);

printf(" Escriba otro numero\n");

scanf("%d",&numero2);

menor=minus(numero1, numero2);

Page 3: ejemplos de funciones en c++.docx

printf(" El menor es %d\n\n", menor);

}

return 0;

}

/* 7.4d_Crear una función llamada �signo�, que reciba un número real, y devuelva un número entero con el valor: -1 si el número es negativo, 1 si es positivo o 0 si es cero. */

#include <stdio.h>

int signo (float num)

{

int sig;

if (num > 0)

sig = 1;

if (num == 0)

sig = 0;

if (num < 0)

sig = -1;

return sig;

}

int main()

Page 4: ejemplos de funciones en c++.docx

{

float numero;

while (numero > -1000000)

{

printf("\nEscriba un numero real: ");

scanf("%f", &numero);

printf("%d", signo(numero));

}

return 0;

}

/* 7.4e_Crear una función que devuelva la primera letra de una cadena de texto. Probar esta función para calcular la primera letra de la frase �Hola� */

#include <stdio.h>

#include <string.h>

char primeraLetra (char* cadena)

{

return cadena[0];

}

int main()

Page 5: ejemplos de funciones en c++.docx

{

char palabra[10];

printf("Escriba una palabra\n");

scanf("%s", palabra);

printf("La primera letra es %c.", primeraLetra(palabra));

return 0;

}

/* 7.4e_Crear una función que devuelva la primera letra de una cadena de texto. Probar esta función para calcular la primera letra de la frase �Hola� */

#include <stdio.h>

#include <string.h>

char ultimaLetra (char* cadena)

{

return cadena[strlen(cadena)-1];

}

int main()

{

char palabra[10];

int i;

printf("Escriba una palabra\n");

Page 6: ejemplos de funciones en c++.docx

scanf("%s", &palabra);

printf("La ultima letra es: %c", ultimaLetra(palabra));

return 0;

}

/*7.5b_Crear una función que reciba un número y muestre en pantalla el perímetro y la superficie de un cuadrado que tenga como lado el número que se ha indicado como parámetro. */

#include <stdio.h>

float perimetro (float numero)

{

float perimetro;

perimetro = 4 * numero;

return perimetro;

}

float area (float numero)

{

float area;

area = numero * numero;

return area;

}

Page 7: ejemplos de funciones en c++.docx

int main()

{

int num;

printf("Escriba un numero: ");

scanf("%d", &num);

printf("Perimetro:%f\n", perimetro(num));

printf("Area:%f\n", area(num));

return 0;

}

/* 7.6b_Crear una función �escribirTablaMultiplicar�, que reciba como parámetro un número entero, y escriba la tabla de multiplicar de ese número (por ejemplo, para el 3 deberá llegar desde 3x0=0 hasta 3x10=30). */

#include <stdio.h>

void escribirTablaMultiplicar (int numero)

{

int tabla;

for (tabla=1; tabla<=10; tabla++)

printf("%d x %d = %d\n", numero, tabla, numero * tabla);

return;

}

Page 8: ejemplos de funciones en c++.docx

int main()

{

int num, tabla;

printf("Escriba un numero: ");

scanf("%d", &num);

escribirTablaMultiplicar(num);

return 0;

}

/* 7.6c_Crear una función �esPrimo�, que reciba un número y devuelva el valor 1 si es un número primo o 0 en caso contrario. */

#include <stdio.h>

int esPrimo (int n)

{

int r, res;

if(n != 1)

{

r=1;

res=1;

while (res != 0)

{

Page 9: ejemplos de funciones en c++.docx

res = n % ++r;

}

if (n == r)

return 1;

else

return 0;

}

else

return 1;

}

int main()

{

int num;

while (num){

printf("Escriba un numero: ");

scanf("%d", &num);

printf("%d ", esPrimo(num));

}

return 0;

}

/*7.7e_Crear una función que reciba un número cualquiera y que devuelva como resultado la suma

de sus dígitos. Por ejemplo, si el número fuera 123 la suma sería 6. */

#include <stdio.h>

Page 10: ejemplos de funciones en c++.docx

int sumaDeSusCifras (int numero)

{

int suma=0;

if (numero < 10)

return numero;

else

{

while (numero >= 10)

{

suma += numero % 10;

numero /= 10;

}

suma += numero;

return suma;

}

}

int main()

{

int num;

printf("Escriba un numero entero positivo: \n");

scanf("%d", &num);

printf("La suma de las cifras del numero %d es: %d",

num, sumaDeSusCifras(num));

Page 11: ejemplos de funciones en c++.docx

return 0;

}

/* 7.7f_Crear una función que reciba una letra y un número, y escriba un �triángulo� formado por esa

letra, que tenga como anchura inicial la que se ha indicado. Por ejemplo, si la letra es * y la

anchura es 4, debería escribir

****

***

**

* */

#include <stdio.h>

void dibujaTriangulo (char letra, int numero)

{

int i;

while (numero > 0)

{

for (i=0; i<numero; i++)

printf("%c", letra);

printf("\n");

numero--;

}

return;

}

int main()

Page 12: ejemplos de funciones en c++.docx

{

char letra;

int numero;

printf("Escriba una letra: ");

scanf("%c", &letra);

printf("Escriba un numero: ");

scanf("%d", &numero);

dibujaTriangulo(letra, numero);

return 0;

}

/* 7.9.2a_Crear un programa que halle cualquier raíz de un número. El usuario deberá indicar el número

(por ejemplo, 2) y el índice de la raiz (por ejemplo, 3 para la raíz cúbica). Pista: hallar la raíz

cúbica de 2 es lo mismo que elevar 2 a 1/3. */

#include <stdio.h>

#include <math.h>

float raizUniversal (int numero, float raiz);

int main()

{

int radicando, indice;;

printf("Escriba el numero al cual le quiere extraer raiz: ");

scanf("%d", &radicando);

Page 13: ejemplos de funciones en c++.docx

printf("Escriba la raiz que quiere extraer: ");

scanf("%d", &indice);

printf("La raiz es: %f", raizUniversal(radicando, indice));

return 0;

}

float raizUniversal(int numero, float ind)

{

float raiz;

raiz = pow(numero, 1/ind);

return raiz;

}

/* 7.9.2b_Crear un programa que resuelva ecuaciones de segundo grado, del tipo ax2 + bx + c = 0 El usuario

deberá introducir los valores de a, b y c. Pista: la solución se calcula con

x = ? raíz (b2 � 4·a·c) / 2·a */

#include <stdio.h>

#include <math.h>

float ecuacion2oGrado1 (float, float, float);

float ecuacion2oGrado2 (float, float, float);

int main()

{

Page 14: ejemplos de funciones en c++.docx

float a, b, c;

do

{

printf("Escriba las constantes a, b y c\n");

scanf("%f %f %f", &a, &b, &c);

}

while (((a==0) || (b==0) || (c==0)) || (((b*b)-(4*a*c)) < 0));

printf("La raices son: %f %f", ecuacion2oGrado1(a, b, c), ecuacion2oGrado2(a, b, c));

return 0;

}

float ecuacion2oGrado1 (float a, float b, float c)

{

float x1;

x1 = (-b + pow(b*b-4*a*c, 0.5)) / (2*a);

return x1;

}

float ecuacion2oGrado2 (float a, float b, float c)

{

float x2;

Page 15: ejemplos de funciones en c++.docx

x2 = (-b - pow(b*b-4*a*c, 0.5)) / (2*a);

return x2;

}

En este tengo problema con algunas potencias de 5.

/* 7.10a_Crear una función que calcule el valor de elevar un número entero a otro número entero

(por ejemplo, 5 elevado a 3 = 53 = 5 ·5 · 5 = 125). Esta función se debe crear de forma

recursiva. */

#include <stdio.h>

#include <math.h>

int exponenciacion (int numero, int numero);

int main()

{

int base, exponente;

while (exponente >= 0)

{

printf("Escriba el numero que quiere potenciar: ");

scanf("%i", &base);

printf("Escriba el numero al que lo quiere elevar: ");

scanf("%i", &exponente);

printf("La potencia es: %d\n\n", exponenciacion(base, exponente));

}

return 0;

Page 16: ejemplos de funciones en c++.docx

}

int exponenciacion (int a, int n)

{

if (n == 0)

return 1;

else

return a * pow(a, n-1);

/* ¿Porqué no funciona para muchas de las potencias de 5

como: 3, 4, 5, 7, 8, 9, 10, 13 ? */

}

/* 7.10b_Como alternativa, crear una función que calcule el valor de elevar un número entero a otro número

entero de forma NO recursiva (lo que llamaremos �de forma iterativa�), usando la orden �for�. */

#include <stdio.h>

#include <math.h>

int exponenciacion (int numero, int numero);

int main()

{

int base, exponente;

while (exponente >= 0)

Page 17: ejemplos de funciones en c++.docx

{

printf("Escriba el numero que quiere potenciar: ");

scanf("%d", &base);

printf("Escriba el numero al que lo quiere elevar: ");

scanf("%d", &exponente);

printf("La potencia es: %d\n\n", exponenciacion(base, exponente));

}

return 0;

}

int exponenciacion (int base, int expo)

{

int i, pot=1;

for (i=0; i<expo; i++)

pot *= base;

return pot;

}

/* 7.10c_Crear un programa que emplee recursividad para calcular un número de la serie Fibonacci

(en la que los dos primeros elementos valen 1, y para los restantes, cada elemento es la suma

Page 18: ejemplos de funciones en c++.docx

de los dos anteriores). */

#include <stdio.h>

#include <math.h>

long serieFibonacci (int);

int main()

{

int termino;

while (termino >= 0)

{

printf("Escriba el termino de la serie que quiere encontrar: ");

scanf("%d", &termino);

printf("El termino buscado es: %d\n\n", serieFibonacci(termino));

}

return 0;

}

long serieFibonacci (int n)

{

if ((n == 0) || (n == 1))

return n;

else

Page 19: ejemplos de funciones en c++.docx

return serieFibonacci(n - 1) + serieFibonacci(n - 2);

}

/* 7.10c_Crear un programa que emplee recursividad para calcular un número de la serie Fibonacci

(en la que los dos primeros elementos valen 1, y para los restantes, cada elemento es la suma

de los dos anteriores). */

#include <stdio.h>

#include <math.h>

long serieFibonacci (int);

int main()

{

int termino;

while (termino >= 0)

{

printf("Escriba el termino de la serie que quiere encontrar: ");

scanf("%d", &termino);

printf("El termino buscado es: %d\n\n", serieFibonacci(termino));

}

return 0;

Page 20: ejemplos de funciones en c++.docx

}

long serieFibonacci (int n)

{

if ((n == 0) || (n == 1))

return n;

else

return serieFibonacci(n - 1) + serieFibonacci(n - 2);

}

/* 7.10e_Crear un programa que emplee recursividad para calcular el mayor de los elementos de un vector. */

#include <stdio.h>

#define TAMANYO_VECTOR 100

int May(int vector[], int n);

main()

{

int i;

int Mayor, n=0;

int vec[TAMANYO_VECTOR];

Page 21: ejemplos de funciones en c++.docx

while (n < 1)

{

printf("Ingrese el numero de elementos: ");

scanf("%d", &n);

}

for (i=0; i<n; i++)

{

printf("\tElemento[%d]: ", i);

scanf("%d", &vec[i]);

}

printf("\nMayor: %d\n", May(vec, n));

}

int May(int vector[], int n) /* Primera línea. */

{

int max, maxResto;

if (n == 1) /* Caso base */

max = vector[0];

else {

maxResto = May(vector+1, n-1); /* Maximo del resto del vector */

if (vector[0] > maxResto)

max = vector[0];

else

Page 22: ejemplos de funciones en c++.docx

max = maxResto;

}

return(max);

}

/* 7.10g_Crear, tanto de forma recursiva como de forma iterativa, una función diga si una cadena de

caracteres es simétrica (un palíndromo). Por ejemplo, "DABALEARROZALAZORRAELABAD" es un

palíndromo. */

#include <stdio.h>

void palindromo (char cadena[80]);

int main()

{

char letras[80];

int a=1, i;

while ( a )

{

puts("Escriba una palabra o una frase");

scanf("%c", &letras);

palindromo(letras);

}

return 0;

Page 23: ejemplos de funciones en c++.docx

}

void palindromo (char cadena[80])

{

int aux, flag=1, i, j;

for(i=0; (cadena[i]=getchar()) != '\n'; ++i)

aux = i-1;

j=aux;

for(i=0; i<=aux/2; ++i)

{

if (cadena[i] != cadena[j])

{

flag = 0;

break;

}

--j;

}

if (flag == 1)

printf(" ES un palindromo.\n\n");

else

printf(" NO es un palindromo.\n\n");

return;

Page 24: ejemplos de funciones en c++.docx

}

/* 7.10h_Crear un programa que encuentre el máximo común divisor de dos números usando el algoritmo de

Euclides : Dados dos números enteros positivos m y n, tal que m > n, para encontrar su máximo

común divisor, es decir, el mayor entero positivo que divide a ambos: - Dividir m por n para

obtener el resto r (0 = r < n) ; - Si r = 0, el MCD es n.; - Si no, el máximo común divisor

es MCD(n,r). */

#include <stdio.h>

#include <math.h>

int MCD (int num1, int num2);

int main()

{

int a, numero1, numero2;

while( a )

{

printf("Escriba dos numeros enteros:\n");

scanf("%d %d", &numero1, &numero2);

if ((numero1 == 0) || (numero2 == 0))

{

printf("El cero no es factor de ningun numero.\n\n");

continue;

}

Page 25: ejemplos de funciones en c++.docx

printf("MCD(%d , %d) = %d\n\n",

numero1, numero2, MCD(numero1, numero2));

}

return 0;

}

int MCD (int num1, int num2)

{

int c, D, d, r;

if (num1 > num2)

{

D = num1;

d = num2;

}

else

{

D = num2;

d = num1;

}

c = D/d;

r = D % d;

while (r != 0)

{

D = d;

d = r;

c = D/d;

Page 26: ejemplos de funciones en c++.docx

r = D % d;

}

return d;

}

.....Saludos! V-.

23-Aug-2012 01:14

Nacho Cabanes (+21)

Haces bien en no estancarte y avanzar. En general están bien, pero en un primer vistazo, veo cosas simplificables, sobre todo en cuanto a variables locales no necesarias o a algún "return" sin valor como última orden de la función. (Al final recopilo los pocos problemas "serios"). Por ejemplo:

int minus(int num1, int num2)

{

int min;

min = num1 < num2? num1: num2;

return min;

}

podría ser

int minus(int num1, int num2)

{

Page 27: ejemplos de funciones en c++.docx

return num1 < num2? num1: num2;

}

Y de igual modo:

int signo (float num)

{

int sig;

if (num > 0)

sig = 1;

if (num == 0)

sig = 0;

if (num < 0)

sig = -1;

return sig;

}

podría ser

int signo (float num)

{

if (num > 0)

return 1;

if (num == 0)

Page 28: ejemplos de funciones en c++.docx

return 0;

return -1;

}

Mientras que

void escribirTablaMultiplicar (int numero)

{

int tabla;

for (tabla=1; tabla<=10; tabla++)

printf("%d x %d = %d\n", numero, tabla, numero * tabla);

return;

}

podría ser

void escribirTablaMultiplicar (int numero)

{

int tabla;

for (tabla=1; tabla<=10; tabla++)

printf("%d x %d = %d\n", numero, tabla, numero * tabla);

}

Page 29: ejemplos de funciones en c++.docx

Ahora, los problemas un poco más "serios":

- esPrimo es muy difícil de seguir. Se puede hacer de una forma mucho más sencilla.

- La potencia recursiva... no es recursiva!

- El mayor elemento de un vector hace una cosa muy peligrosa: ¿por qué aumentas en 1 un array? Puede tener efectos colaterales que me temo que no has previsto. Mejor, pasa como parámetro el mismo array sin modificar, pero indícale que empiece a analizar en la siguiente posición.

- Lo ideal sería que "palindromo" devolviera un valor, en vez de escribir algo en pantalla (reconozco que el enunciado no lo deja claro).