|
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
Mensajes - Riskz
26
« en: Miércoles 7 de Mayo de 2008, 00:21 »
No puedes hacer esto : Nombre = "fichero" + argv[3];
Eso en C no existe hasta donde yo se (soy principiante igual). Yo en tu lugar usaria strcat(Nombre, itoa(argv[3])); //como bien dijo Eternal Idol
o sprintf(Nombre,"%s%i", nombre, argv[3]);
Eso teniendo en cuenta que argv[3] es de tipo int, sino olvidate del atoi() y no uses la segunda opcion que te di. Para usar atoi creo que necesitas incluir <stdlib.h> y para strcat y sprintf <string.h> Saludos
27
« en: Miércoles 7 de Mayo de 2008, 00:07 »
Pues yo en C lo hago asi, nunca me dio error ejemplo: char *funcion(static char string[20]) { ... return string; }
Es decir, el argumento es un array con un limite maximo de caracteres, en este caso 19. Para devolver un string si que necesitas un puntero, y para eso yo hago la variable statica (o sea que no se borra al finalizar la funcion) Ambos metodos son crrectos, tanto el mio (creo) como el de Eternal Idol, creo que la diferencia es que el de el trabajo directo sobre la cadena que le pasas, en cambio el mio crea una cadena nueva copia dentro de la funcion, y no trabaja sobre la original, es decir que para cambiarle el valor tendrias que hacer por ejemplo strcpy(cad, cambiar(cad)); //solo con mi metodo
Saludos
28
« en: Miércoles 7 de Mayo de 2008, 00:00 »
paso= x-10*(x/10); ... x=x/10;
En esas dos lineas ten cuidado porque x/10 puede dar un numero con coma y al ser x y paso variables int el numero se va a recortar prueba haciendolas tipo float o double que llevan coma No se mucho sobre matematica pero yo el numero reflejo lo haria usando string/array de char en lugar de int, lo veo mucho mas facil y corto si no sabes o no tienes una idea de como empezar te ayudo Saludos
29
« en: Martes 29 de Abril de 2008, 04:33 »
Pues como bien dice ProfesorX temperatura t debe poder ser tanto en ºC como en ºF
Pues yo lo haria de esta manera (no te lo pongo en codigo, si no sabes como hacer algo avisame)
1) Podrias hacer dos cosas: a) que se elija de que unidad a cual convertir, y que luego se introduzca la temperatura (o viceversa) b) que se introduzca la temperatura segida de la unidad (ºC/C o ºF/F)
2) Segun a que tipo convertir, utilizar la formula correspondiente (perdon si despeje mal algo, utilice la formula que te dieron a ti): a) de ºC a ºF: Celsius = (Fahrenheit – 32) *9*5 b) de ºF a ºC: Farenheit=Celsius /5 /9 + 32
3) Mostrar el resultado
Yo estoy empezando con C asi que trato de ayudar en lo que puedo. Cualquier duda MP o por aca Saludos
30
« en: Viernes 25 de Abril de 2008, 02:14 »
Termine el programa! Al fin lo deje tal cual queria, y todo gracias a tu ayuda
Como agradecimiento te dejo el programa, aunque no te va a servir de mucho exepto que sepas de quimica o (como yo) te sirva para la tarea de quimica del cole. Jaja Gracias
(por cierto, dentro del rar hay dos, uno compilado en ANSI C (o eso creo) y el otro en C comun (tampoco estoy seguro), aunque no tuve que cambiar demasiadas cosas)
EDIT: Subo la version 3, que arregle un par de cosas y ademas agrege funciones El programa ya acepta hidruros (metalicos y no metalicos), oxidos basicos y acidos, haluros, hidroxidos y oxoacidos =)
31
« en: Miércoles 23 de Abril de 2008, 21:06 »
En C++ no hay tipos de retorno por defecto y tu programa en C no compila. Mi programa lo compilo con el DevC++ esta compilando en c++? (es decir que no tiene nada que ver que el codigo este en un archivo.c?) como cambio para que compile en C? (es que nunca me di cuenta si compilaba en c++, nunca me tiro ningun error con respecto a los tipos de retorno automaticos ni nada) Si pones void es que no retorna nada (no podes usar return), 0 es un entero. Con lo de void me referia a sacar el return tambiem. Que una funcion se use una sola vez no significa que no deba retornar nada, no tiene nada que ver ... Quise decir como que si la voy a usar solo una vez para que la hice funcion, si la podria haber escrito en main. Y por eso dije que solo era para entenderla mejor. Gracias
32
« en: Miércoles 23 de Abril de 2008, 20:29 »
Es que las funciones mostrar, etc, solamente devuelven 0 (al no poner tipo de retorno es como poner int, cierto?) para que luego main termine (tambien podria hacerlas void), ya que en realidad esas funciones se utilizan una vez sola en el programa (para que son funciones entonces? jajaja, es solo para que me entienda mejor ya que no comento demasiado los programas como veras, tengo q acostumbrarme) Ahora me surgio otra duda, en la funcion romanos tambien uso static y la uso tambien 2 veces en este caso, y me devuelve los valores q quiero (distintos), por ejemplo "I" y la segunda vez "III" porque? no tendria que devolverme ambas veces "I"? quizas no entendi tan bien lo que me explicaste Gracias, Edito: ya hice simb sin static y funciono, gracias
33
« en: Miércoles 23 de Abril de 2008, 20:17 »
EDITO: recien lei tu respuesta, entendi lo de static que me dijiste, asi que ahora lo arreglo, en el codigo que esta en esta respuesta ya esta arreglado lo de declarar las variables primero, lo que si no entendi es lo de que no pongo el tipo de retorno. Por ejemplo en elementos.h, metalono esta con el tipo de retorno int, no se que me corregiste (exepto que te hallas fijado en la "estructura" que puse en la respuesta anterior, que era solo representativa y no tenia ninguno de los tipos de retorno)) Igualmente ya funciona y ahora que me aclaraste lo de static ya voy a poder seguir con la funcion formula() para oxidos y haluros. GRACIAS --------------------------------------------------------------------------------------------
Entonces mucho no sirve Ahora que me aclaraste eso de static ya puedo hacer que funcione con haluros Gracias de nuevo
34
« en: Miércoles 23 de Abril de 2008, 20:09 »
EDITO: recien lei tu respuesta, entendi lo de static que me dijiste, asi que ahora lo arreglo, en el codigo que esta en esta respuesta ya esta arreglado lo de declarar las variables primero, lo que si no entendi es lo de que no pongo el tipo de retorno. Por ejemplo en elementos.h, metalono esta con el tipo de retorno int, no se que me corregiste (exepto que te hallas fijado en la "estructura" que puse en la respuesta anterior, que era solo representativa y no tenia ninguno de los tipos de retorno)) Igualmente ya funciona y ahora que me aclaraste lo de static ya voy a poder seguir con la funcion formula() para oxidos y haluros. GRACIAS --------------------------------------------------------------------------------------------
Logre hacerlo bien haciendo entre otras cosas que en vez de pasar simb("hidrogeno") pase directamente "H" (al pedo usaba simb ahi)
El problema es que solo sirve para hidruros y oxidos (donde el elemento H o O no varia. Cuando son dos elementos variables como en un haluro (no importa que no sepas lo q es, solamente q pueden ser dos elementos cualquiera, entonces si o si tendria q usar simb() en ambos)
Te subo el codigo esta vez arregle un par de cosas y ya funciona, pero sigo con la duda de por que ecuacion ecibia ambos argumentos simb() iguales
Hice una prueba haciendo que cada vez que simb() se ejecute me imprima en pantalla el valor q va a devolver. Cuando le paso los argumentos a ecuacion() uso simb() dos veces, por lo tanto me imprimia el valor q devolvia en cada caso al argumento. Y para mi sorpresa me devolvio bien los dos, es decir, Al y H (suponiendo que escribo "Hidruro de aluminio" en la opcion 3 del programa).
Esto quiere decir que el error esta cuando ecuacion() me toma los dos argumentos? si tienes tiempo y ganas de probarlo acordate que cuando llamo a ecuacion() en el codigo actual le paso un solo argumento con simb(), por eso no da error, pero haz la prueba poniendo en vez de "H" simb("hidrogeno")
GRACIAS
35
« en: Miércoles 23 de Abril de 2008, 19:17 »
No, asi es como debe salir, pero en el codigo sin modificar tambien funcionaba pasando los argumentos "manualmente", el tema esta cuando los paso con simb() no entiendo bien lo que dices al principio, pero stdio.h esta incluida, ya que en quimica.c hago: #include "elementos.h" y en elementos.h hago: #include <stdio.h> y con respecto a las variables, hay alguna variable/funcion no definida al principio? es que no me doy cuenta :S Muchas gracias por gastar tu tiempo y hasta modificar el codigo (no conozco c++ todavia ya que primero quiero aprender bien c) Editado: Mirando bien me di cuenta que meti algunos printf() antes de la declaracion de algunas variables locales (el codigo esta lleno de printf() que son para revisar el valor de algunas variables, y cuando ya funciones las borro o le agrego las // a esa linea y listo) Igualmente arregle esto y sige sin pasarme bien el segundo argumento de ecuacion() con simb() corrigeme si me equivoco, pero la estructura del programa quedaria algo asi como: #includes // Esto estaria incluido en elementos.h struct tablap {} elemento[]; metalono() {} simb() {} romanos() {} ecuacion() {} // Aca terminaria elementos.h mostrar() {} menu() {} buscar() {} formula() {} main() {}
Jeje sorry si escribo confuso
36
« en: Miércoles 23 de Abril de 2008, 12:27 »
es que no se eso de depurar, como dije, soy nuevo, cuando vuelva del colegio busco por internet como hacerlo
si quieren les dejo el codigo fuente
37
« en: Miércoles 23 de Abril de 2008, 05:54 »
Tienes razon, probe pasando manualmente los simbolos y los tomo bien, entonces el error debe ser de simb()... aca te dejo la declaracion: char *simb(char names[16]) { char name[16]; /*Tuve que hacer esta variable para poder cambiar a mayuscula la primer letra*/ sprintf(name, "%s", names); int num; static char simbolo[3]; if(name[0]>96) { name[0]-=32; } for(num=0;num<TOTAL;num++) { if(strcmp(name, elemento[num].nombre)==0) { if(strlen(elemento[num].nombre)==1) sprintf(simbolo, "%c", elemento[num].simbolo[0]); else strcpy(simbolo, elemento[num].simbolo); return simbolo; } } exit(1); }
de alguna forma debe de quedar guardado el simbolo anterior y devuelve el mismo :S Gracias por tu ayuda
38
« en: Miércoles 23 de Abril de 2008, 04:37 »
bueno soy nuevo en el foro, tengo 15 años y recien estoy empezando a programar. Estoy intentando hacer un programa en C que entre otras cosas clasifica un compuesto quimico, pero cuando tengo que llamar a la funcion ecuacion(), le paso 4 argumentos: 2 strings (cada una viene de otra funcion llamada simb() ) 2 enteros (los escribo manualmente) El problema es que me toma bien el primer string y ambos enteros, pero el segundo string me lo toma igual que el primero, aca les dejo el codigo, perdonen si es alguna macana mia xD Aca llamo a la funcion: //paso dos simbolos y dos numeros de valencias printf("Ecuacion(sin balancear): %s", ecuacion(1,1,simb("hidrogeno"),simb(tercera)));
Aca la declaracion: char *ecuacion(int numv1,int numv2,char simb1[3],char simb2[3]) {...
(no les copio toda la declaracion porque el error esta cuando paso los argumentos, ya que comprobe los argumentos antes de pasarlos y estaban bien, pero al comprobarlos una vez pasados pasaba lo que comente arriba) Por ejemplo: - paso la valencia del hidrogeno y del otro elemento (ambas 1) manualmente - paso el simbolo del hidrogeno mediante una funcion que hice simb() - paso el simbolo del elemento guardado en la variable tercera (por ejemplo aluminio) tambien mediante simb() seria como poner ecuacion(1,1,H,Al) pero cuando compruebo los valores dentro de la funcion ecuacion, es como si hubiera pasado (1,1,H,H) Gracias y perdonen si lo puse medio confuso
|
|
|