You are on page 1of 28

/* 7.

4b_Crear una funcin que calcule el cubo de un nmero real


(float). El resultado deber
ser otro nmero real. Probar esta funcin 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));

i ++;
}
return 0;
}
/* 7.4c_Crear una funcin que calcule cual es el menor de dos nmeros
enteros.
El resultado ser otro nmero 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);
printf(" El menor es %d\n\n", menor);

}
return 0;
}

/* 7.4d_Crear una funcin llamada signo, que reciba un


nmero real, y devuelva un nmero entero con el valor: -1 si
el nmero 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()
{
float numero;

while (numero > -1000000)


{
printf("\nEscriba un numero real: ");
scanf("%f", &numero);
printf("%d", signo(numero));
}
return 0;

/* 7.4e_Crear una funcin que devuelva la primera letra de


una cadena de texto. Probar esta funcin para calcular la
primera letra de la frase Hola */

#include <stdio.h>
#include <string.h>

char primeraLetra (char* cadena)


{
return cadena[0];
}

int main()
{
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 funcin que devuelva la primera letra de


una cadena de texto. Probar esta funcin 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");


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

return 0;
}

/*7.5b_Crear una funcin que reciba un nmero y muestre en


pantalla el permetro y la superficie de un cuadrado que tenga
como lado el nmero que se ha indicado como parmetro. */

#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;
}

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 funcin escribirTablaMultiplicar, que


reciba como parmetro un nmero entero, y escriba la tabla
de multiplicar de ese nmero (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;
}

int main()
{

int num, tabla;

printf("Escriba un numero: ");


scanf("%d", &num);
escribirTablaMultiplicar(num);

return 0;
}

/* 7.6c_Crear una funcin esPrimo, que reciba un nmero y


devuelva el valor 1 si es un nmero 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)
{
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 funcin que reciba un nmero cualquiera y que devuelva


como resultado la suma
de sus dgitos. Por ejemplo, si el nmero fuera 123 la suma sera 6. */

#include <stdio.h>

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));

return 0;
}
/* 7.7f_Crear una funcin que reciba una letra y un nmero, y escriba un
tringulo 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, debera 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()
{
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 raz de un nmero. El
usuario deber indicar el nmero
(por ejemplo, 2) y el ndice de la raiz (por ejemplo, 3 para la raz cbica).
Pista: hallar la raz
cbica 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);
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 solucin se calcula con
x = ? raz (b2 4ac) / 2a */

#include <stdio.h>
#include <math.h>

float ecuacion2oGrado1 (float, float, float);


float ecuacion2oGrado2 (float, float, float);

int main()
{
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;

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 funcin que calcule el valor de elevar un nmero entero


a otro nmero entero
(por ejemplo, 5 elevado a 3 = 53 = 5 5 5 = 125). Esta funcin 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;
}

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 funcin que calcule el valor de elevar
un nmero entero a otro nmero
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)
{
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


nmero 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;
}

long serieFibonacci (int n)


{

if ((n == 0) || (n == 1))
return n;
else
return serieFibonacci(n - 1) + serieFibonacci(n - 2);

/* 7.10c_Crear un programa que emplee recursividad para calcular un


nmero 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;
}

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];

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 lnea. */

{
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
max = maxResto;
}
return(max);
}
/* 7.10g_Crear, tanto de forma recursiva como de forma iterativa, una
funcin diga si una cadena de
caracteres es simtrica (un palndromo). Por ejemplo,
"DABALEARROZALAZORRAELABAD" es un
palndromo. */

#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;
}

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;
}

/* 7.10h_Crear un programa que encuentre el mximo comn divisor de dos


nmeros usando el algoritmo de
Euclides : Dados dos nmeros enteros positivos m y n, tal que m > n,
para encontrar su mximo
comn 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 mximo
comn 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;
}
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;
r = D % d;
}

return d;

.....Saludos!

V-.

23-Aug-2012 01:14
Nacho Cabanes (+21)

Haces bien en no estancarte y avanzar. En general estn bien, pero en un


primer vistazo, veo cosas simplificables, sobre todo en cuanto a variables
locales no necesarias o a algn "return" sin valor como ltima orden de la
funcin. (Al final recopilo los pocos problemas "serios"). Por ejemplo:

int minus(int num1, int num2)


{
int min;

min = num1 < num2? num1: num2;


return min;
}

podra ser

int minus(int num1, int num2)


{
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;

podra ser

int signo (float num)


{
if (num > 0)
return 1;
if (num == 0)
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;
}

podra ser

void escribirTablaMultiplicar (int numero)


{
int tabla;

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


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

Ahora, los problemas un poco ms "serios":

- esPrimo es muy difcil de seguir. Se puede hacer de una forma mucho ms


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 parmetro el mismo array sin modificar,
pero indcale que empiece a analizar en la siguiente posicin.

- Lo ideal sera que "palindromo" devolviera un valor, en vez de escribir algo


en pantalla (reconozco que el enunciado no lo deja claro).

You might also like