Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: jfap45 en 17 Julio 2012, 20:53 pm



Título: Matrices en C/C++ Urgente!!!
Publicado por: jfap45 en 17 Julio 2012, 20:53 pm
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!!!


Título: Re: Matrices en C/C++ Urgente!!!
Publicado por: DickGumshoe en 17 Julio 2012, 20:58 pm
Imagínate que tienes esta función para intercambiar dos elementos:

Código
  1. void Intercambio(int a, int b){
  2.  
  3.  int aux;
  4.  
  5.  aux=a;
  6.  a=b;
  7.  b=aux;
  8.  
  9. }

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!


Título: Re: Matrices en C/C++ Urgente!!!
Publicado por: leogtz en 17 Julio 2012, 21:00 pm
Hola.

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

Ejemplo:

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

Lo mismo para el mínimo.


Título: Re: Matrices en C/C++ Urgente!!!
Publicado por: jfap45 en 17 Julio 2012, 21:04 pm
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!!


Título: Re: Matrices en C/C++ Urgente!!!
Publicado por: DickGumshoe en 17 Julio 2012, 21:05 pm
Imagínate que quieres intercambiar dos valores del mismo elemento químico, haces esta función:

Código
  1. void Intercambio(int a, int b){
  2.  
  3.  int aux;
  4.  
  5.  aux=a;
  6.  a=b;
  7.  b=aux;
  8.  
  9. }
  10.  

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():

Código
  1. void Intercambio(int a1, int a2, int b1, int b2){
  2. //Siendo a el primer elemento, a1 el peso, a2 la masa atómica, y b el segundo elemento químico
  3.  
  4.  int peso, masa_at;
  5.  
  6.  peso=a1; //Intercambiamos peso
  7.  a1=b1;
  8.  b1=peso;
  9.  
  10.  masa_at=a2; //Intercambiamos masa atómica
  11.  a2=b2;
  12.  b2=masa_at;
  13.  
  14. }
  15.  

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!


Título: Re: Matrices en C/C++ Urgente!!!
Publicado por: jfap45 en 17 Julio 2012, 21:07 pm
Hola.

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

Ejemplo:

Código:
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!!


Título: Re: Matrices en C/C++ Urgente!!!
Publicado por: 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!


Título: Re: Matrices en C/C++ Urgente!!!
Publicado por: jfap45 en 18 Julio 2012, 07:06 am
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!!


Título: Re: Matrices en C/C++ Urgente!!!
Publicado por: juancaa 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 :

Código
  1. typedef struct {
  2. int[5] valencias;
  3. float p_atomico;
  4. ...
  5. //definir todas los atributos
  6. } t_elem;
  7.  
  8. typedef struct {
  9. char[20] nombre_elem;
  10. telem elem[NUMERO_ELEMS];
  11. } t_tabla_periodica;
  12.  

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...


Título: Re: Matrices en C/C++ Urgente!!!
Publicado por: DickGumshoe en 18 Julio 2012, 16:29 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 :

Código
  1. typedef struct {
  2. int[5] valencias;
  3. float p_atomico;
  4. ...
  5. //definir todas los atributos
  6. } t_elem;
  7.  
  8. typedef struct {
  9. char[20] nombre_elem;
  10. telem elem[NUMERO_ELEMS];
  11. } t_tabla_periodica;
  12.  

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.


Título: Re: Matrices en C/C++ Urgente!!!
Publicado por: jfap45 en 18 Julio 2012, 20:01 pm
Cierto, hacerlo con structs es más fácil que como yo se lo he explicado.

Gracias! De hecho para leer el archivo donde lo tengo (.csv), tambien encontre un ejemplo donde manejan este tipo de estructuras (supongo q son similares)! Intentaré de esa forma....