Autor
|
Tema: Ayudita con programacion en c (Leído 3,991 veces)
|
Langosta Sexual
Desconectado
Mensajes: 8
|
Es una duda que cualquiera con 1 semana de experiencia podria resolver (imagino), soy bastante nuevo programando en c, mi profesor de programacion nos mando a realizar este programa: En una farmacia se venden medicamentos genericos y no genericos, los medicamentos genericos tienen un descuento de 15%, los medicamentos no genericos tienen un impuesto de 12%, realizar un programa que permita calcular el monto a pagar de ambos medicamentos y tambien si hay vuelto (cambio) o no. Yo lo estoy haciendo asi #include <stdio.h> #include <conio.h> main () { double mg, ng, d=0.15, iva=1.12, p, p1, mpg, mpng; printf("Ingrese el precio de el medicamento generico:"); if (mg<=0) { printf("No puede introducir un precio negativo o igual a cero"); return mg; } return 0; }
Cuando introdusco un valor mayor a 0 el programa me va bien, pero cuando introdusco uno menor o igual a cero el programa se cierra sin montrar el segundo print ni retornando a la variable mg, ¿Que tengo malo?.
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
Usas las conio y seguramente usarás también el desfasado y descatalogado devcpp... Es de verguenza que los profesores enseñen esas prácticas. Despues de mis quejas de viejo, te cuento donde está el error: if (mg<=0) { printf("No puede introducir un precio negativo o igual a cero"); return mg; }
Devcpp no incluye pausa al final del programa (por eso te he calao ). Tienes que ponersela tú mismo: if (mg<=0) { printf("No puede introducir un precio negativo o igual a cero"); getchar(); // Pausa return mg; }
Ahora sí deberías ver el printf. El return se aplica al main, y significaría que el main devuelve ese valor. Si lo que querías es mostrar su valor: if (mg<=0) { printf("No puede introducir un precio negativo o igual a cero"); printf("\n El valor introducido es: %d",mg); getchar(); return 1; // Por convenio, devolvemos 1 en el main para indicar un error. }
Puedes cambiar el getch(); que tienes ahí abajo por un getchar();. Así podrás quitar las conio, además debería ser int main para que sea más acorde al estándar. Total el código quedaría: #include <stdio.h> int main () { double mg, ng, d=0.15, iva=1.12, p, p1, mpg, mpng; printf("Ingrese el precio de el medicamento generico:"); scanf("%lf", &mg); if (mg<=0) { printf("No puede introducir un precio negativo o igual a cero"); printf("\n El valor introducido es: %d",mg); getchar(); return 1; } getchar(); return 0; }
Y bueno, si tienes elección te recomendaría que cambiases el Devcpp por Codeblocks, es un IDE mucho más moderno y el lenguaje sigue siendo el mismo.
|
|
« Última modificación: 6 Junio 2013, 02:19 am por amchacon »
|
En línea
|
|
|
|
Langosta Sexual
Desconectado
Mensajes: 8
|
Muchas gracias por tu atencion amchacon, actualmente uso el dev c++ (porque es el programa que se usa en la universidad) y necesito aprender en ese ya que si no aceptan el otro que me hablas, en tanto al error del que me hablas, cuando introduzco todo el codigo fuente, me da el mismo error ¿No sabras por que?.
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
Muchas gracias por tu atencion amchacon, actualmente uso el dev c++ (porque es el programa que se usa en la universidad) y necesito aprender en ese ya que si no aceptan el otro que me hablas, en tanto al error del que me hablas, cuando introduzco todo el codigo fuente, me da el mismo error ¿No sabras por que?.
El lenguaje C es el mismo independientemente que uses Devc++, CodeBlocks, Geany o Visual Studio... Pero bueno, ya les haré un mal de ojo a los profesores de Universidad. Corrijo el error: #include <stdio.h> int main () { double mg, ng, d=0.15, iva=1.12, p, p1, mpg, mpng; printf("Ingrese el precio de el medicamento generico: "); scanf("%lf", &mg); getchar(); if (mg<=0) { printf("No puede introducir un precio negativo o igual a cero"); printf("\nEl valor que se introdujo es: %d",mg); getchar(); return 1; } getchar(); return 0; }
Lo que he hecho es poner un getchar() después del scanf para que se "coma" el primer enter.
|
|
« Última modificación: 6 Junio 2013, 02:39 am por amchacon »
|
En línea
|
|
|
|
Langosta Sexual
Desconectado
Mensajes: 8
|
Bien, segun lo que me dijiste segui haciendo el programa y me quedo asi: #include <stdio.h> int main () { double mg, ng, d=0.15, iva=1.12, p, p1, mpg, mpng; printf("Ingrese el precio de el medicamento generico: "); if (mg<=0) { printf("No puede introducir un precio negativo o igual a cero"); printf("\nEl valor que se introdujo es: %f", mg ); return 1; } printf("Ingrese monto a pagar:"); if (p<=0) { printf("No puede introducir un precio negativo o igual a cero"); printf("\n El valor introducido es: %lf", p ); return 1; } mpg=-1*(mg*d)+p; printf("Su cambio es:%.2lf", mpg ); return 0; }
El problema ahora es que no me quiere dar el resultado del calculo de la variable mpg, disculpa las molestias.
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
Lo mismo, después del segundo scanf pon un getchar(); para que se coma el enter.
|
|
|
En línea
|
|
|
|
Langosta Sexual
Desconectado
Mensajes: 8
|
Muchas gracias amchacon, ya no te molesto mas jeje, es bueno ver que los mas expertos ayudan a los ''noobs'' por aqui, un saludo.
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
Bien, segun lo que me dijiste segui haciendo el programa y me quedo asi:
Pues a mí me quedo así:#include <stdio.h> int main () { int opcion; float precio_g=0.1,precio_ng=0.1, precio_ng_sin=0.1,precio_g_con=0.1, pagar=-1,no_sufiente=0; do { printf ("\nSeleccione la opcion:\n1.- Generico\n2.- No generico\n3.- Salir:\n"); scanf ("%d",&opcion); }while (opcion<0 || opcion>3); if (opcion ==3) { puts("Hasta la proxima visita."); puts ("Presione una tecla para salir"); getchar(); getchar();return 1; } do { printf ("Introduzca el precio:"); if (opcion==1) scanf ("%f",&precio_g); else if (opcion==2) scanf ("%f",&precio_ng); if (precio_g<0 || precio_ng<=0) puts ("Opcion no valida"); }while (precio_g<0 || precio_ng<=0); precio_ng_sin=precio_ng*.85; precio_g_con=precio_g*1.12; if (opcion==2) printf("\nPrecio del no generico: %g\n",precio_ng_sin); else printf("\nPrecio del generico: %g\n",precio_g_con); do { no_sufiente=0; printf ("Introduzca cantidad con que va a pagar: "); scanf ("%f",&pagar); if ((opcion ==1 && pagar<precio_g_con) || (opcion ==2 && pagar<precio_ng_sin)) { puts("\nCantidad insuficiente"); no_sufiente=1; } }while (no_sufiente==1); printf("Cantidad a devolver: "); if (opcion==2) printf("%g\n",pagar-precio_ng_sin); else printf("%g\n",pagar-precio_g_con); puts ("Presione una tecla para salir"); getchar(); getchar(); return 0; }
Como ves, hay que introducir varios do-while para cuando la elección no sea correcta se vuelva atrás y se permita la elección correcta. Y por otro lado declaro las variables, menos la variable opcion, como float, ya que double es una pasada , sólo para números exageradamente grandes. Saluditos! .... ..
|
|
« Última modificación: 6 Junio 2013, 12:23 pm por leosansan »
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
Es la mejor opción, pero como no sabía si había dado los while he preferido lanzar un error fatal y punto.
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
Es la mejor opción, pero como no sabía si había dado los while he preferido lanzar un error fatal y punto.
Lo entiendo, pero esas tareas que se mandan sin haber explicado mínima-mente los bucles me parecen, cuanto menos, una insensatez, por aplicar un calificativo "suave".
Claro que tampoco hay que esperar mucho de un profesor que les obliga a usar Dev-C++, a estas alturas del siglo XXI. Mira que les cuesta actualizarse, no hay nada como una plaza fija para apoltronarse y pasar de todo. Así se entiende que vaya la enseñanza como va, y luego se quejan de recortes y demás sandeces. Lo malo es que eso no hay ley que lo arregle, es consustancial al género humano el "apoltronamiento" cuando se es fijo y no se tienen más metas que cobrar al final de mes. Asco de gentuza que in-dignifican la bella labor de la enseñanza y lo dice alguien que se ha tirado más de treinta años dedicado, en cuerpo y alma, a la enseñanza universitaria.
Y gracias otra vez por el enlace Saluditos! .... ..P.D: Lo de la banderita es que estoy celebrando el día de Canarias .....un mes después. Es que ando despacito, despacito.
|
|
« Última modificación: 6 Junio 2013, 13:38 pm por leosansan »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
uNA AYUDITA PLZ
Software
|
_km3loth_
|
1
|
1,991
|
30 Abril 2005, 22:26 pm
por Randomize
|
|
|
Una ayudita...
Diseño Gráfico
|
PhorSeth
|
7
|
3,468
|
24 Mayo 2005, 12:31 pm
por + enrique ZP
|
|
|
Una ayudita con la programacion de un bat sencillo
Scripting
|
Jo$$
|
9
|
3,865
|
3 Diciembre 2006, 16:11 pm
por Hendrix
|
|
|
algunas dudas en programacion BATCH(nuevo en esto de programacion)
Scripting
|
stock_C
|
8
|
9,390
|
19 Junio 2009, 18:08 pm
por frank30
|
|
|
Programacion Estructurada Vs Programacion Orientada a Objetos
Programación General
|
79137913
|
3
|
8,623
|
1 Junio 2011, 18:02 pm
por 79137913
|
|