Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Kstlan en 18 Octubre 2019, 00:24 am



Título: Suma de números complejos
Publicado por: Kstlan en 18 Octubre 2019, 00:24 am
Espero puedan apoyarme. Me pidieron lo siguiente:

Realizar un programa en C que defina una estructura para almacenar un número complejo (parte real y parte imaginaria). El programa deberá llenar un arreglo de máximo 10 elementos de este tipo de estructura. El llenado se realizará a través de la generación de números aleatorios tanto para la parte real como para la parte imaginaria.

Adicionalmente se contará con tres funciones, una que imprima el contenido del arreglo de manera recursiva, otra que obtenga la sumatoria de las partes reales de los elementos del arreglo y una que obtenga la sumatoria de las partes imaginarias de los elementos del arreglo, las sumatorias se deberán obtener también de forma recursiva.

Tiene muchisimo tiempo que no uso C, la verdad no recuerdo muy bien. Lo unico que tengo es esto:

#include <stdio.h>
#include <stdlib.h>

struct complejo
{
float x;
float y;
};
typedef struct complejo Complejo;

Complejo suma( Complejo, Complejo);

void escribir_complejo(Complejo);

int main()
{
Complejo z,z1,z2;
z1= leer_complejo();
z2= leer_complejo();
z= suma(z1,z2);
printf("La suma es: \n'");
escribir_complejo(z);

return 0;
}

Complejo leer_complejo(void)
{
Complejo z;
printf("Introduce la parte real del complejo: ");
scanf("%f",&z.x);
printf("Introduce la parte imaginaria del complejo: ");
scanf("%f",&z.y);
return z;
}

void escribir_complejo(Complejo z)
{
printf ("El numero complejo es: " );z.x,z.y;
return;
}

Complejo suma(Complejo z1,Complejo z2)
{
Complejo z;
z.x =z1.x + z2.x;
z.y =z1.y + z2.y;
return z;
}


Título: Re: Suma de números complejos
Publicado por: K-YreX en 18 Octubre 2019, 01:10 am
Los códigos ponlos entre etiquetas de Código GeSHi... y a ser posible bien tabulados

De lo que tienes: las funciones <suma()> y <leer_complejo()> están bien implementadas y la función <escribir_complejo()> tiene un error a la hora de mostrar los valores.
Código
  1. void escribirComplejo(Complejo numero){
  2.    printf("La parte real es: %f y la parte compleja es: %f", numero.x, numero.y);
  3. }
Se pone primero una cadena entre comillas con el texto que se quiera mostrar y el formato de las variables que se van a mostrar y finalizada la cadena entre comillas, se ponen las variables que se sustituirán en los %f de la cadena.
Al ser una función que no devuelve nada, es innecesario poner el <return> al final.

Veo que todavía te faltan algunas de las cosas que te piden así que te pongo por aquí cosillas aisladas que tendrás que ver cómo las usas para lo que te están pidiendo.
  • Crear número aleatorios: para crear un número entero aleatorio en el intervalo [minimo, maximo]:
Código
  1. #include <stdlib.h>
  2. #include <ctime> // se usa para la funcion time
  3.  
  4. int main(){
  5.    srand(time(NULL)); // semilla para generar numeros aleatorios. Si no se pone esta linea los numeros seran siempre los mismos
  6.    int numeroAleatorio = minimo + rand() % (maximo - minimo + 1);
  7. }

  • Rellenar un array con números:
Código
  1. #define SIZE 10 // definimos la longitud maxima del array
  2.  
  3. int main(){
  4.    int numeros[SIZE];
  5.    for(size_t i = 0; i < SIZE; ++i) // en vez de size_t se puede usar int tambien
  6.        numeros[i] = i; // se guardara {0,1,2,3,4,5,6,7,8,9}
  7. }

  • Obtener sumas de manera recursiva. Te pongo un ejemplo que continuaría con el código anterior. Sería sumar de manera recursiva los 10 valores que hemos guardado.
Código
  1. int sumarRecursiva(int numeros[], int size, int currentIndex){
  2.    if(currentIndex == size-1)
  3.        return numeros[currentIndex];
  4.    return numeros[currentIndex] + sumarRecursiva(numeros, SIZE, currentIndex + 1);
  5. }

Como creo que te estoy dando bastante hecho aunque tengas que adaptarlo a tu problema, te dejo la parte de mostrar el array de manera recursiva para que lo intentes tú antes de decirte también cómo se hace.