Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Help calculo de numeros complejos

Estas en el tema de Help calculo de numeros complejos en el foro de C/C++ en Foros del Web. hola a todos, estoy tomando clases de c# y necesito compilar un programa, dividido por funciones ke calcule las principales operaciones matematicas con numeros complejos, ...
  #1 (permalink)  
Antiguo 16/04/2008, 15:51
 
Fecha de Ingreso: abril-2008
Mensajes: 1
Antigüedad: 16 años, 1 mes
Puntos: 0
Help calculo de numeros complejos

hola a todos, estoy tomando clases de c# y necesito compilar un programa, dividido por funciones ke calcule las principales operaciones matematicas con numeros complejos, el tema es ke no se ni J, y los tutoriales ke he leido no sale la suficiente info para lanzarme a hacer este problema...
necesitaria si alguien me puede ayudar
el programa ke estoy usando para compilar se llama Dev-C++

gracias
  #2 (permalink)  
Antiguo 16/04/2008, 20:22
Avatar de Vanchi
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: Io voy donde vo' vai... Ca'eza
Mensajes: 1.111
Antigüedad: 17 años, 3 meses
Puntos: 138
Re: Help calculo de numeros complejos

Cita:
Iniciado por PaNaPoNiC Ver Mensaje
hola a todos, estoy tomando clases de c# y necesito compilar un programa, dividido por funciones ke calcule las principales operaciones matematicas con numeros complejos, el tema es ke no se ni J, y los tutoriales ke he leido no sale la suficiente info para lanzarme a hacer este problema...
necesitaria si alguien me puede ayudar
el programa ke estoy usando para compilar se llama Dev-C++

gracias
Dev-C++ no es un programa para compilar, sino un IDE y, según creo entre los compiladores con que Dev C++ trabaja no hay ninguno para C# (Te recomiendo SharpDevelop).

De todos modos... Concretamente ¿Cual es la duda sobre los números complejos?

Saludos
__________________
Según recientes estudios científicos, los 3 más grandes descubrimientos de la humanidad son: El fuego, la rueda y la minifalda.
Yo personalmente no le encuentro mucha utilidad a los 2 primeros.
  #3 (permalink)  
Antiguo 18/04/2008, 10:53
 
Fecha de Ingreso: abril-2008
Mensajes: 5
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Help calculo de numeros complejos

Hola:
Aquí tengo un código C que te puede servir.

Nota: No son los números complejos tradicionales, sino que son cuaterniones, es decir, complejos pero con tres partes imaginarias en vez de una.

El código esta hecho con estructuras en vez de punteros.




// Programa que opera con números hipercomplejos o cuaterniones

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct vector vec;
struct vector
{
int pos;
float valor1;
float valor2;
float valor3;
float valor4;
vec *sgte;
}; // Se define la estructura (una posición, los cuatro valores del cuaternión,
// y un vector que apunta al siguiente cuaternión.

void guardar (float a,float b,float c,float d);
void showele(void);
void eliminar(void);
void reordenar(vec *T,int i);
float norma(int i);
void inversa();
vec *P;
vec *Q;
int n; // Se definen diversos tipos de datos en forma de cast.
void division()
{
float q,w,e,r,a,s,d,f,z,x,c,v;
vec *T;
int i;
if (!n)
return;
T = P;
printf("Ingrese el primer cuaternion a dividir\n");
scanf("%i",&i);
while (T != NULL)
{
if (T->pos == i)
break;
T = T->sgte;
}
if (T == NULL)
{
printf("No se encontro ese cuaternion\n");
system ("pause");
return;
}
q=T->valor1;
w=T->valor2;
e=T->valor3;
r=T->valor4;
printf("Ingrese el segundo cuaternion a dividir\n");
scanf("%i",&i);
T=P;
while (T != NULL)
{

if (T->pos == i)
break;
T = T->sgte;
}
if (T == NULL)
{
printf("No se encontro ese cuaternion\n");
system ("pause");
return;
}
a=T->valor1;
s=T->valor2;
d=T->valor3;
f=T->valor4;
z=norma(i);
z=z*z;
a=-a/z;
s=-s/z;
d=-d/z;
f=-f/z;
z=a*q-s*w-d*e-f*r;
x=q*s+a*w+e*f-d*r;
c=q*d+a*e+s*r-w*f;
v=q*f+a*r+w*d-s*e;
printf("el resultado es: %.5f + %.5fi + %.5fj + %.5fk\n",z,x,c,v);
system ("pause");
guardar(z,x,c,v);
return;
} // Se define la función división.
void inversa (int i)
{
float q,w,e,r;
float z;
vec *T;
if (!n)
return;
T = P;
while (T != NULL)
{
if (T->pos == i)
break;
T = T->sgte;
}
if (T == NULL)
{
printf("No se encontro ese cuaternion\n");
system ("pause");
return ;
}
q=T->valor1;
w=T->valor2;
e=T->valor3;
r=T->valor4;
z=norma(i);
z=z*z;
q=q/z;
w=-w/z;
e=-e/z;
r=-r/z;
guardar(q,w,e,r);
printf("inversa de q%i es %.5f + %.5fi + %.5fj + %.5fk\n",i,q,w,e,r);
return ;
} // Se define la función inversa.
float norma(int i)
{
int q,w,e,r;
double z;
vec *T;
if (!n)
return;
T = P;
while (T != NULL)
{
if (T->pos == i)
break;
T = T->sgte;
}
if (T == NULL)
{
printf("No se encontro ese cuaternion\n");
system ("pause");
return;
}
q=T->valor1;
w=T->valor2;
e=T->valor3;
r=T->valor4;
z=fabs(-q*q-w*w-e*e-r*r);
z=sqrt(z);
return z;
} // Se define la función norma.
void showele(void)
{
vec *T;
if (!n)
return;
T = P;
printf("\n");
while (T != NULL)
{
printf("q%i= ",(T->pos));
printf("%.5f + ",T->valor1);
printf("%.5fi + ",T->valor2);
printf("%.5fj + ",T->valor3);
printf("%.5fk\n",T->valor4);
T = T->sgte;
}
printf("\n");
return;
} // Se muestra en pantalla un cuaternión almacenado en memoria.
void guardar (float a,float b,float c,float d)
{
vec *T;
T = malloc(sizeof(struct vector));
if (!n)
P = T;
else
Q->sgte = T;
n++;
T->pos = n;
T->valor1 = a;
T->pos = n;
T->valor2 = b;
T->pos = n;
T->valor3 = c;
T->pos = n;
T->valor4 = d;
T->sgte = NULL;
Q = T;
return;
} // Se almacena un cuaternión en memoria.
void ingresar(void)
{
vec *T;
float i;
T = malloc(sizeof(struct vector));
if (!n)
P = T;
else
Q->sgte = T;
printf("Ingrese el Valor1\n");
scanf("%f",&i);
n++;
T->pos = n;
T->valor1 = i;
printf("Ingrese el Valor2\n");
scanf("%f",&i);
T->pos = n;
T->valor2 = i;
printf("Ingrese el Valor3\n");
scanf("%f",&i);
T->pos = n;
T->valor3 = i;
printf("Ingrese el Valor4\n");
scanf("%f",&i);
T->pos = n;
T->valor4 = i;
T->sgte = NULL;
Q = T;
printf("Valor Ingresado\n");
system ("pause");
return;
} // Se ingresan los valores del cuaternión.
void eliminar(void)
{
vec *T,*L;
int i;
if (!n)
return;
T = P;
printf("Ingrese el cuaternion a Eliminar\n");
scanf("%i",&i);
if (i == 1)
{
L = P;
P = P->sgte;
free(L);
T = P;
reordenar(T,i);
return;
}
while (T != NULL)
{
if (T->pos == (i-1))
break;
T = T->sgte;
}
if (n == i)
{
Q = T;
free(T->sgte);
Q->sgte = NULL;
n--;
return;
}
if ((T == NULL) || (T->pos == n))
{
printf("No se encontro ese cuaternion\n");
system ("pause");
return;
}
L = T->sgte;
T->sgte = T->sgte->sgte;
T = T->sgte;
free(L);
reordenar(T,i);
return;
}
void reordenar(vec *T,int i)
{
while (T != NULL)
{
T->pos = i;
T = T->sgte;
i++;
}
n--;
printf("Cuaternion eliminado\n");
system ("pause");
return;
} // Se crea esta función para liberar memoria física mediante la eliminación
// de un cuaternión.
void sumar()
{
float q,w,e,r,a,s,d,f;
vec *T;
int i;
if (!n)
return;
T = P;
printf("Ingrese el primer cuaternion a Sumar\n");
scanf("%i",&i);
while (T != NULL)
{
if (T->pos == i)
break;
T = T->sgte;
}
if (T == NULL)
{
printf("No se encontro ese cuaternion\n");
system ("pause");
return;
}
q=T->valor1;
w=T->valor2;
e=T->valor3;
r=T->valor4;
printf("Ingrese el segundo cuaternion a Sumar\n");
scanf("%i",&i);
T=P;
while (T != NULL)
{
if (T->pos == i)
break;
T = T->sgte;
}
if (T == NULL)
{
printf("No se encontro ese cuaternion\n");
system ("pause");
return;
}
a=T->valor1;
s=T->valor2;
d=T->valor3;
f=T->valor4;
a=a+q;
s=s+w;
d=d+e;
f=f+r;
printf("el resultado es: %.5f + %.5fi + %.5fj + %.5fk\n",a,s,d,f);
guardar(a,s,d,f);
system ("pause");
return;
  #4 (permalink)  
Antiguo 18/04/2008, 10:54
 
Fecha de Ingreso: abril-2008
Mensajes: 5
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Help calculo de numeros complejos

Segunda parte:

} // Se define la función suma.
void restar()
{
float q,w,e,r,a,s,d,f;
vec *T;
int i;
if (!n)
return;
T = P;
printf("Ingrese el primer cuaternion a restar\n");
scanf("%i",&i);
while (T != NULL)
{
if (T->pos == i)
break;
T = T->sgte;
}
if (T == NULL)
{
printf("No se encontro ese cuaternion\n");
system ("pause");
return;
}
q=T->valor1;
w=T->valor2;
e=T->valor3;
r=T->valor4;
printf("Ingrese el segundo cuaternion a restar\n");
scanf("%i",&i);
T=P;
while (T != NULL)
{
if (T->pos == i)
break;
T = T->sgte;
}
if (T == NULL)
{
printf("No se encontro ese cuaternion\n");
system ("pause");
return;
}
a=T->valor1;
s=T->valor2;
d=T->valor3;
f=T->valor4;
a=-a+q;
s=-s+w;
d=-d+e;
f=-f+r;
printf("el resultado es: %.5f + %.5fi + %.5fj + %.5fk\n",a,s,d,f);
guardar(a,s,d,f);
system ("pause");
return;
} // Se define la función resta.
void conjugado ()
{
vec *T;
int i;
float a,s,d,f;
if (!n)
return;
T = P;
printf("ingrese el numero del cuaternion que desea conjugar");
scanf("%i",&i);
T=P;
while (T != NULL)
{
if (T->pos == i)
break;
T = T->sgte;
}
if (T == NULL)
{
printf("No se encontro ese cuaternion\n");
system ("pause");
return;
}
a=T->valor1;
s=-(T->valor2);
d=-(T->valor3);
f=-(T->valor4);
printf("el conjugado es: %.5f + %.5fi + %.5fj + %.5fk\n",a,s,d,f);
guardar(a,s,d,f);
system ("pause");
return;
} // Se define el conjugado de un cuaternión.
int compara(int v, int b)
{
vec *T;
float a,s,d,f,q,w,e,r;
if (!n)
return;
T = P;
while (T != NULL)
{
if (T->pos == v)
break;
T = T->sgte;
}
if (T == NULL)
{
printf("No se encontro ese cuaternion\n");
system ("pause");
return;
}
q=T->valor1;
w=T->valor2;
e=T->valor3;
r=T->valor4;
T=P;
while (T != NULL)
{
if (T->pos == b)
break;
T = T->sgte;
}
if (T == NULL)
{
printf("No se encontro ese cuaternion\n");
system ("pause");
return;
}
a=T->valor1;
s=T->valor2;
d=T->valor3;
f=T->valor4;

if((fabs(a-q)<0.00001) && (fabs(s-w)<0.00001) && (fabs(d-e)<0.00001) && (fabs(f-r)<0.00001))
return 1;
else
return 0;
} // Se lleva a cabo la comparación de dos cuaterniones.
void multiplicar()
{
float q,w,e,r,a,s,d,f,z,x,c,v;
vec *T;
int i;
if (!n)
return;
T = P;
printf("Ingrese el primer cuaternion a multiplicar\n");
scanf("%i",&i);
while (T != NULL)
{
if (T->pos == i)
break;
T = T->sgte;
}
if (T == NULL)
{
printf("No se encontro ese cuaternion\n");
system ("pause");
return;
}
q=T->valor1;
w=T->valor2;
e=T->valor3;
r=T->valor4;
printf("Ingrese el segundo cuaternion a multipicar\n");
scanf("%i",&i);
T=P;
while (T != NULL)
{
if (T->pos == i)
break;
T = T->sgte;
}
if (T == NULL)
{
printf("No se encontro ese cuaternion\n");
system ("pause");
return;
}
a=T->valor1;
s=T->valor2;
d=T->valor3;
f=T->valor4;
z=a*q-s*w-d*e-f*r;
x=q*s+a*w+e*f-d*r;
c=q*d+a*e+s*r-w*f;
v=q*f+a*r+w*d-s*e;

printf("el resultado es: %.5f + %.5fi + %.5fj + %.5fk\n",z,x,c,v);
system ("pause");
guardar(z,x,c,v);
return;
} // Se calcula el producto de dos cuaterniones.
int main (void)
{
vec *O;
int temp,a,b,c;
float z;
temp = 0;
n = 0;
while (temp!=11)
{
printf(" Cuaterniones de Hamilton\n\n");
printf("Que desea hacer:\n\n");
printf("1)Ingresar Valor\n");
printf("2)Multiplicar\n");
printf("3)Dividir\n");
printf("4)Norma\n");
printf("5)Inversa\n");
printf("6)Sumar\n");
printf("7)Restar\n");
printf("8)Conjugar\n");
printf("9)Comparar\n");
printf("10)Eliminar Valor\n");
printf("11)Salir\n");
showele();
printf("\n");
scanf("%i",&temp);
switch (temp)
{ // Se desplega en pantalla el menú principal
case 1:
ingresar();
break;
case 2:
multiplicar();
break;
case 3:
division();
break;
case 4:
printf("Ingrese el numero del cuaternion del cual desea conocer su norma:");
scanf("%i",&a);
z=norma(a);
printf("norma de q%i es %.5f\n",a,z);
system("pause");
break;
case 5:
printf("Ingrese el numero del cuaternion del cual desea conocer su inversa");
scanf("%i",&a);
inversa(a);
break;
case 6:
sumar();
break;
case 7:
restar();
break;
case 8:
conjugado();
break;
case 9:
O=P;
while (O != NULL)
{
if (O->pos == 1)
{
O = O->sgte;
break;
}
O = O->sgte;
}
if (O == NULL)
{
printf("No hay suficientes cuaterniones\n");
system ("pause");
break;
}
printf("ingrese el numero del primer cuaternion a comparar:");
scanf("%d",&b);
printf("ingrese el numero del segundo cuaternion a comparar:");
scanf("%d",&c);
a=compara(b,c);
if(a)
printf("los cuaterniones son iguales\n");
else
printf("los cuaterniones no son iguales\n");
system("pause");
break;
case 10:
eliminar();
break;
default:
break;
} // Se ramifican los distintos casos para las opciones a considerar.
system ("cls");
} // Se realiza una llamada al sistema que permite borrar lo que
// hay impreso en pantalla.
return 0;
}



Chao, espero que te sirva.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:12.