C/Visual C - Llamar a una variable antes definida en scanf_s(o una funcion que lo resuelva)

 
Vista:
Imágen de perfil de Alan Avila
Val: 1
Ha disminuido su posición en 57 puestos en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Llamar a una variable antes definida en scanf_s(o una funcion que lo resuelva)

Publicado por Alan Avila (1 intervención) el 27/09/2018 15:58:16
Muchas gracias de antemano por la atención a este foro.

Sucede que me encuentro haciendo un programa para realizar unos cálculos de química, algo relacionado con los masas atómicas, entonces introduje todas las masas atómicas de los elementos asignándolos como variable tipo double con nombre de la abreviación del elemento, así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "stdafx.h"
 
int main()
{
	double H = 1.0079;
	double He = 4.0026;
	double Li = 6.941;
	double Be = 9.0122;
	double B = 10.811;
	double C = 12.0107;
	double N = 14.0067;
	double O = 15.9994;
	double F = 18.9984;
	double Ne = 20.1797;
	double Na = 22.9897;
}


(solo puse un fragmento porque son bastantitos jeje)

Lo que quiero es *ejemplo*:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include "stdafx.h"
 
int main()
{
	double valorpor2;
	double H = 1.0079;
	double He = 4.0026;
	double Li = 6.941;
	double Be = 9.0122;
	double B = 10.811;
	double C = 12.0107;
	double N = 14.0067;
	double O = 15.9994;
	double F = 18.9984;
	double Ne = 20.1797;
	double Na = 22.9897;
 
    printf("Intoduzca la abreviación de un elemento para saber su valor por 2");
    valorpor2=Valor-de-la-variable-que-haya-elegido-el-usuario*2;
 
    printf("%f", valorpor2);
 
return 0;
}

y quisiera que la persona que esta usando el programa introduzca (por ejemplo) "H", entonces el programa reemplace "Valor-de-la-variable-que-haya-elegido-el-usuario" por el valor de la variable "H" que es -1.0079-
entonces realice el calculo y lo imprima(esto ultimo si se hacerlo) por no se llamar una variable por el usuario.

Les pido de su ayuda porque estoy bloqueado ahí, :)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 265
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Llamar a una variable antes definida en scanf_s(o una funcion que lo resuelva)

Publicado por dario (82 intervenciones) el 27/09/2018 16:30:28
Hola, esto te dara una idea.
Salu2.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
#include <string.h>
 
int main()
{
    char elemento[2];
    double valorpor2=0;
    double H = 1.0079;
    double He = 4.0026;
    double Li = 6.941;
 
 
    printf("Intoduzca la abreviación de un elemento para saber su valor por 2: ");
    scanf("%s",elemento);
 
    if (strcmp(elemento,"H")==0)
        valorpor2 = H * 2;
    else if (strcmp(elemento,"He")==0)
        valorpor2 = He *2;
    else if (strcmp(elemento,"Li")==0)
        valorpor2 = Li * 2;
 
    printf("%.4f", valorpor2);
 
    return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 60
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Llamar a una variable antes definida en scanf_s(o una funcion que lo resuelva)

Publicado por Yamil Bracho (26 intervenciones) el 27/09/2018 16:38:15
Create una funcion que dado el elemento te regreso la masa, algo como :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
double get_masa_elemento(char [] elemento) {
  double result = 0;
 
  if (strcmp(elemento,"H")==0) {
       result = 1.0079;
  }
 
  if (strcmp(elemento,"He")==0) {
       result = 4.0026;
  }
  if (strcmp(elemento,"Li")==0) {
       result = 6.941;
  }
 
   / /Agregar los elementos restantes
 
  return result;
}


y lo usas en tu main

1
2
3
4
printf("Intoduzca la abreviación de un elemento para saber su valor por 2: ");
scanf("%s",elemento);
valorpor2 = get_masa_elemento(elemento) * 2;
printf("%.4f", valorpor2);


Si tienes que agregar elementos o cambiar algun dato lo haces solo en la funcion
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Llamar a una variable antes definida en scanf_s(o una funcion que lo resuelva)

Publicado por Tom (619 intervenciones) el 27/09/2018 16:48:10
O, para hacer más genérica la búsqueda, algo como (escrito aquí, sin comprobar errores):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct {
const char *name;
double mass;
} elements[] = {
 {"H", 1.0079},
 {"He", 4.0026},
...
 {NULL, 0}
};
/* Find mass for element. Returns 0.0 when undefined */
double mass(char el[]) {
 for(int i = 0; elements[i].name; i++) {
  if(!strcmp(el, elements[i].name)) return elements[i].mass;
 }
 return 0.0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Dionicio
Val: 91
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Llamar a una variable antes definida en scanf_s(o una funcion que lo resuelva)

Publicado por Dionicio (22 intervenciones) el 27/09/2018 17:21:13
Es mejor hacerlo con una estructura, puede que resulte mas complejo pero el resultado sin duda alguna queda mas organizado..

Aquí te dejo un pedazo de código que está en el archivo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
struct elemento_t{
    char abv[2];
    float masa_atomica;
    char nombre[10];
};
 
struct elemento_t * crear_tabla_periodica(int size);
struct elemento_t crear_elemento(char * abv, char * nombre, float masa);
struct elemento_t bus_elemento_abv(char * abv, struct elemento_t * tabla, int sz_tabla);
 
int main(int argc, char *argv[])
{
    struct elemento_t * tabla_periodica = crear_tabla_periodica(ELEMENTOS_MAX);
    struct elemento_t mi_el_busc;
 
    /*
	 Leer desde el teclado la abreviatura y pasarle el dato a la funcion de busqueda
	*/
 
 
    mi_el_busc = bus_elemento_abv("N", tabla_periodica, ELEMENTOS_MAX);
 
    printf("-------------Elemento encontrado--------------\n");
    printf("Abreviatura: %s\nNombre: %s\nMasa atomica: %f\n",mi_el_busc.abv,mi_el_busc.nombre, mi_el_busc.masa_atomica);
	printf("----------------------------------------------\n");
 
	return 0;
}

Espero te sirva de ayuda. Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar