Ayudita con programacion en c

Iniciado por Langosta Sexual, 6 Junio 2013, 01:59 AM

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

Langosta Sexual

 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:");
    scanf("%lf", &mg);
    if (mg<=0)
    { printf("No puede introducir un precio negativo o igual a cero");
    return mg;       
}
getch();
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?.

amchacon

#1
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:

Código (cpp) [Seleccionar]
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:

Código (cpp) [Seleccionar]
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:

Código (cpp) [Seleccionar]
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:
Código (cpp) [Seleccionar]

#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.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

Langosta Sexual

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

amchacon

#3
Cita de: Langosta Sexual en  6 Junio 2013, 02:25 AM
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:

Código (cpp) [Seleccionar]
#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.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

Langosta Sexual

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: ");
   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: %f", mg);
       getchar();
       return 1;
   }
   
     printf("Ingrese monto a pagar:");
     scanf("%lf", &p);
     if (p<=0)
     {
        printf("No puede introducir un precio negativo o igual a cero");
        printf("\n El valor introducido es: %lf", p);
        getchar(); 
        return 1;     
     }
     
     mpg=-1*(mg*d)+p;
     
     printf("Su cambio es:%.2lf", mpg);
     
     getchar();
     return 0;
}


El problema ahora es que no me quiere dar el resultado del calculo de la variable mpg, disculpa las molestias.

amchacon

Lo mismo, después del segundo scanf pon un getchar(); para que se coma el enter.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

Langosta Sexual

Muchas gracias amchacon, ya no te molesto mas jeje, es bueno ver que los mas expertos ayudan a los ''noobs'' por aqui, un saludo.

leosansan

#7
Cita de: Langosta Sexual en  6 Junio 2013, 02:45 AM
Bien, segun lo que me dijiste segui haciendo el programa y me quedo asi:


Pues a mí me quedo así:

Código (cpp) [Seleccionar]
#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! .... ..


amchacon

Es la mejor opción, pero como no sabía si había dado los while he preferido lanzar un error fatal y punto.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

leosansan

#9
Cita de: amchacon en  6 Junio 2013, 12:22 PM
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. :laugh: :laugh: :laugh: