Matrices en C/C++ Urgente!!!

Iniciado por jfap45, 17 Julio 2012, 20:53 PM

0 Miembros y 1 Visitante están viendo este tema.

jfap45

Mi problema es el siguiente: Soy muy nuevo en la programacion en C y estoy colaborando en un proyecto en el cual me piden leer un conjunto de datos de los elementos de la tabla periodica (esos elementos tienen muchos atributos como peso y masa atomica, valencia, punto de fusion y ebullicion, un simbolo, etc.) Mi problema consiste en q necesito calcular medidas estadisticas para manejar esos valores, como media, mediana, etc, y necesitare ordenar loa valores de menor a mayor a fin de sacar un  minimo y un maximo, pero como hacer eso si al ordenar esos valores, cambiaran de posicion y ya no tendria relacion con su elemento correspondiente. Por lo tanto la informacion seria erronea, ademas al existir muchos atributos numericos es logico q en cada columna existiria un minimo y un maximo, pero como calculo eso sin perder los valores originales de los elementos?

Es decir:

nombre         peso atomico  valencia
hidrogeno         17                     3
helio                  5                     8

con esos valores al cambiarlos perdería los valores originales de los elementos!!

Si alguien me pudiera ayudar lo agradeceria porfavor!!

Es urgente!!!

DickGumshoe

Imagínate que tienes esta función para intercambiar dos elementos:

void Intercambio(int a, int b){

  int aux;

  aux=a;
  a=b;
  b=aux;

}


Solo puedes intercambiar los elementos, ya que no te da más opciones. Pero podrías probar a pasarle por parámetros a la función el resto de atributos de cada elemento químico, e intercambiar la posición de los vectores peso, masa atómica, valencia, función, etc. con la posición del mismo elemento que intercambias el primer valor.

Espero haberme explicado  :-\

Saludos!

leogtz

Hola.

Para sacar máximos y mínimos no tiene que estar ordenada la estructura.

Ejemplo:

int max = array[0];
for(i = 0; i < n; i++) {
    if(array[i] > max) {
        max = array[i];
    }
}


Lo mismo para el mínimo.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

jfap45

DickGumshoe, Supongo que te explicaste bien, el problema sería yo, reitero q no se programar mucho en C y lo que me piden en el proyecto esta dificil para mi, si pudieran explicarme casi con manzanitas se los agradecería!

DickGumshoe, gracias y diculpa por las molestias!!

DickGumshoe

#4
Imagínate que quieres intercambiar dos valores del mismo elemento químico, haces esta función:


void Intercambio(int a, int b){

 int aux;

 aux=a;
 a=b;
 b=aux;

}


Pero resulta que quieres intercambiar los valores, por ejemplo, de peso y masa atómica (son más de un valor para cada elemento). Lo único que tienes que hacer de más es pasarle más parámetros a la función Intercambio():


void Intercambio(int a1, int a2, int b1, int b2){
//Siendo a el primer elemento, a1 el peso, a2 la masa atómica, y b el segundo elemento químico

 int peso, masa_at;

 peso=a1; //Intercambiamos peso
 a1=b1;
 b1=peso;

 masa_at=a2; //Intercambiamos masa atómica
 a2=b2;
 b2=masa_at;

}


Así puedes intercambiar todos los atributos de los elementos que desees, teniendo en cuenta que debes pasárselos como parámetro desde main().

Si tienes dudas pregunta  :)

Saludos!

jfap45

Cita de: Leo Gutiérrez. en 17 Julio 2012, 21:00 PM
Hola.

Para sacar máximos y mínimos no tiene que estar ordenada la estructura.

Ejemplo:

int max = array[0];
for(i = 0; i < n; i++) {
    if(array[i] > max) {
        max = array[i];
    }
}


Lo mismo para el mínimo.


Sip en eso realmente no tengo mucho problema, el problema por ejemplo es para la mediana, ahi si tienen q estar ordenados para q la mediana sea la correcta!!

DickGumshoe

A ver, fijándonos en la función que puse antes, mi idea es que en la función, todas las variables que se llaman a seguido de un índice sean las características de un elemento, y las que tienen de nombre b seguido de un índice sean las de otro.

Por ejemplo, queremos intercambiar las características del Rutenio y las del Bismuto en el vector. Pues a1 será el peso del Rutenio, y b1 el peso del Bismuto; a2 la masa atómica del Rutenio, y b2 la masa atómica del Bismuto. Así, con tantas características como te hayan indicado que debas intercambiar.

Saludos!

jfap45

Cita de: DickGumshoe en 17 Julio 2012, 21:35 PM
A ver, fijándonos en la función que puse antes, mi idea es que en la función, todas las variables que se llaman a seguido de un índice sean las características de un elemento, y las que tienen de nombre b seguido de un índice sean las de otro.

Por ejemplo, queremos intercambiar las características del Rutenio y las del Bismuto en el vector. Pues a1 será el peso del Rutenio, y b1 el peso del Bismuto; a2 la masa atómica del Rutenio, y b2 la masa atómica del Bismuto. Así, con tantas características como te hayan indicado que debas intercambiar.

Saludos!

Creo que eso si lo entendi, muchas gracias, lo intentare a ver q tal!!

juancaa

No se si acabo de entenderte pero por lo que pides me parece que necesitas utilizar structs, que no se si sabras bien lo que es eso... Te dejo un ejemplo :

typedef struct {
int[5] valencias;
float p_atomico;
...
//definir todas los atributos
} t_elem;

typedef struct {
char[20] nombre_elem;
telem elem[NUMERO_ELEMS];
} t_tabla_periodica;


A partir de aqui acceder a cada elem para realizar las operaciones pertinentes... Tansolo deberias implementar los algoritmos para la busqueda de maximos y minimos (bastante sencillos, si no sabes yo te paso alguno de ejemplo) para que recorran toda la tabla (NUMERO_ELEMS)...

No se si te sirve lo que digo por eso no doy mas detalles...
Que tengas un buen dia!

DickGumshoe

Cita de: fMtQr en 18 Julio 2012, 15:34 PM
No se si acabo de entenderte pero por lo que pides me parece que necesitas utilizar structs, que no se si sabras bien lo que es eso... Te dejo un ejemplo :

typedef struct {
int[5] valencias;
float p_atomico;
...
//definir todas los atributos
} t_elem;

typedef struct {
char[20] nombre_elem;
telem elem[NUMERO_ELEMS];
} t_tabla_periodica;


A partir de aqui acceder a cada elem para realizar las operaciones pertinentes... Tansolo deberias implementar los algoritmos para la busqueda de maximos y minimos (bastante sencillos, si no sabes yo te paso alguno de ejemplo) para que recorran toda la tabla (NUMERO_ELEMS)...

No se si te sirve lo que digo por eso no doy mas detalles...

Cierto, hacerlo con structs es más fácil que como yo se lo he explicado.