Clase práctica

Anuncio
Departamento de Computación
UNAN-LEON
Ejercicios sobre Descomposición Funcional, Parte II
1. Escribir un programa que haga uso de las siguientes funciones:
tcomplejo SumarComplejos(tcomplejo, tcomplejo);
que sume dos números complejos.
tcomplejo RestarComplejos(tcomplejo, tcomplejo);
que reste dos números complejos.
tcomplejo MultiplicarComplejos(tcomplejo, tcomplejo);
que multiplique dos complejos.
/******************* srmcomplejos *******************/
#include <stdio.h>
typedef struct
{
float real;
float imag;
}tcomplejo;
tcomplejo SumarComplejos(tcomplejo, tcomplejo);
tcomplejo RestarComplejos(tcomplejo, tcomplejo);
tcomplejo MultiplicarComplejos(tcomplejo, tcomplejo);
void main(void)
{
tcomplejo ca, cb, cc;
printf("\n Introducir datos de la forma: x yi\n");
printf("ca = ");
fflush(stdin);
scanf("%f %f", &ca.real, &ca.imag);
printf("cb = ");
fflush(stdin);
scanf("%f %f", &cb.real, &cb.imag);
printf("\nResultado de la suma de complejos: \n");
printf("----------------------------------\n");
cc = SumarComplejos(ca,cb);
printf("%g %+gi\n",cc.real,cc.imag);
1
Departamento de Computación
UNAN-LEON
printf("\n Resultado de la resta de complejos\n");
printf("----------------------------------\n");
cc = RestarComplejos(ca, cb);
printf("%g %+gi\n",cc.real,cc.imag);
printf("\nResultado de la multiplicacion de complejos\n");
printf("-------------------------------------------\n");
cc = MultiplicarComplejos(ca, cb);
printf("%g %+gi\n",cc.real,cc.imag);
}
tcomplejo SumarComplejos(tcomplejo a, tcomplejo b)
{
tcomplejo temp;
temp.real = a.real + b.real;
temp.imag = a.imag + b.imag;
return temp;
}
tcomplejo RestarComplejos(tcomplejo a, tcomplejo b)
{
tcomplejo temp;
temp.real = a.real - b.real;
temp.imag = a.imag - b.imag;
return temp;
}
tcomplejo MultiplicarComplejos(tcomplejo a, tcomplejo b)
{
tcomplejo temp;
temp.real = a.real * b.real - a.imag * b.imag;
temp.imag = a.real * b.imag + a.imag * b.real;
return temp;
}
2
Departamento de Computación
UNAN-LEON
Funciones recursivas
2. El siguiente programa, cuenta valores de 1 a 10 de modo recursivo.
#include <stdio.h>
void contar(int cima);
void main(void)
{
contar(10);
return;
}
void contar(int cima)
{
if(cima >1)
contar(cima - 1);
printf("%d ",cima);
}
3. El cálculo de los números de Fibonacci es un ejemplo de una definición matemática
recursiva que se enuncia así: el número de Fibonacci f(i), siendo i el número de orden(0,
1, 2, 3, 4, 5, ...) del número a calcular, es igual al número de Fibonacci f(i – 1) más el
número de Fibonacci f(i – 2), sabiendo que f(0) es 0 y f(1) = 1.
f(0) = 0
f(1) = 1
f(2) = f(1) + f(0)
f(3) = f(2) + f(1)
.
.
.
f(i) = f(i - 1) + f(i – 2)
Realizar un programa que pregunte: cuántos números de Fibonacci, a partir del primero,
se quieren calcular?, almacene esos números en una matriz del tamaño necesario y finalmente los
muestre. Para ello se deberá utilizar una función recursiva con el prototipo indicado a
continuación:
int fibonacci(int n);
La función fibonacci devolverá como resultado el número de Fibonacci cuyo número de orden(0,
1, 2, ...) sea n.
3
Departamento de Computación
UNAN-LEON
Una ejecución del programa podría ser:
Cuántos números de Fibonacci, a partir del primero, se quieren calcular?
n = 10
0
1
1
2
3
5
// fibonacci.c
//
#include <stdio.h>
#include <stdlib.h>
int fibonacci(int);
int main()
{
int n = 0, i = 0, *f;
printf("¿Cuántos números de Fibonacci, a partir del ");
printf("primero, se quieren calcular?\n");
do
{
printf("n = ");
i = scanf("%d", &n);
fflush(stdin);
}
while ( i == 0 || n < 1);
// Crear una matriz dinámicamente
f = (int *)malloc(n * sizeof(int));
if (f == NULL)
{
printf("Insuficiente memoria\n");
return -1;
}
// Obtener los números de la serie
for (i = 0; i < n; i++)
f[i] = fibonacci(i);
// Visualizar la matriz
for (i = 0; i < n; i++)
printf("%5d", f[i]);
printf("\n");
4
8
13
21
34
Departamento de Computación
UNAN-LEON
// Liberar la memoria asignada a la matriz
free(f);
return 0;
}
int fibonacci(int n)
{
if ( n == 0 )
return 0;
else if ( n == 1 )
return 1;
else
return fibonacci(n-1) + fibonacci(n-2);
}
4. Dados dos números a (número entero) y b(número natural mayor o igual que cero).
Realice una función recursiva para determinar a^b
//recur1.c
main()
{
int a, c;
unsigned b;
printf("Escriba el numero y la potencia a elevar como a^b: ");
scanf("%d^%u", &a,&b);
c = potencia(a,b);
printf("c = %d",c);
}
int potencia(int a, int b)
{
if(b = = 0)
return 1;
else
return a * potencia(a, b-1);
}
5
Departamento de Computación
UNAN-LEON
5. Dado un array constituido de números enteros que contiene N elementos, siendo N
>=1, realice una función recursiva que calcule la suma de todos los elementos del
array.
//recur2.c
#include <stdio.h>
main( )
{
int numeros[25];
int N, i;
printf("Cuantos numeros tiene el arreglo? \n");
scanf("%d",&N);
printf("Introduzca el arreglo: ");
for(i = 0; i < N; i++)
scanf("%d",&numeros[i]);
printf("%d \n", sumarray(numeros,0,N));
}
int sumarray(int numeros[ ], int posicion, int N)
{
if(posicion == N - 1)
return numeros[posicion];
else
return(numeros[posicion] + sumarray(numeros, posicion + 1 , N));
}
6
Descargar