elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Programa para introducir precios compra y acomular
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Programa para introducir precios compra y acomular  (Leído 4,200 veces)
sora_ori

Desconectado Desconectado

Mensajes: 269



Ver Perfil
Programa para introducir precios compra y acomular
« en: 12 Septiembre 2013, 12:13 pm »

Buenas, necesitaría un poco de ayuda para un programa en C es por eso que les vengo a pedir una manita :P

El programa hace lo siguiente:

- Pide precio de compra
- Precio al que vende el producto
- Unidades vendidas
- Beneficio obtenido
- Beneficio acomulado
- Quieres seguir introduciendo productos (s/n)


¿Cómo he planteado el algoritmo? Pues primero de todo he hecho un IF conforme quiero introducir productos y dentro de aquí he pedido por pantalla todo lo que me pedían.

Código
  1.    if (otroProducto == 1){
  2.                     printf("Precio de compra: ");
  3.                     scanf("%d", &compra);
  4.                     printf("Precio de venta: ");
  5.                     scanf("%d", &venta);
  6.                     printf("Unidades vendidas: ");
  7.                     scanf("%d", &unidades);
  8.                     beneficio = (venta-compra)*unidades;
  9.                     printf("Beneficio: %d", beneficio);
  10.                     acomulado = beneficio + otroProducto;
  11.                     printf("\nBeneficio acomulado: %d", acomulado);
  12.  
  13.                     printf("\nQuieres introducir otro producto (s/n)? ");
  14.                     getch("%c", &otroProducto);
  15.                     if (otroProducto == 's'){
  16.    }


¿Está bien planteado? Seguro que no jeje el caso es que como puedo retornar al principio si digo que quiere volver a introducir productos...?  :-\

Gracias


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Programa para introducir precios compra y acomular
« Respuesta #1 en: 12 Septiembre 2013, 12:40 pm »

Tienes que encerrar todo el proceso en un bucle.

En c tienes dos tipos de bucles: for y while.

En mi opinión for se debe emplear cuando se sabe el número de iteraciones del bucle... recorrer un vector por ejemplo, mientras que los while se deben emplear el resto de casos, es decir, cuando el número de repeticiones es indeterminado.

En este caso, dado que a priori no puedes saber cuántos elementos va a querer introducir el usuario, deberías usar un while.

El bucle while tiene dos variantes:

Código
  1. // Este bucle comprueba, al principio de cada iteracion, si se cumple la condicion.
  2. // Se repite mientras se cumpla la condicion
  3. while ( condicion )
  4. {
  5.  // contenido
  6. }
  7.  
  8. // Este bucle ejecuta el contenido al menos una vez, dado que la condicion se
  9. // comprueba al final de cada iteracion.
  10. // Nota que esta configuracion termina con ';' despues del while
  11. do
  12. {
  13.  // contenido
  14. } while ( condicion );

En tu caso, como la pregunta la haces al final, podrías poner un bucle do-while. Puedes usar también el otro... pero tendrías que asegurarte de la condición da true en la primera pasada.

Código
  1. int otroProducto;
  2.  
  3. do
  4. {
  5.  // Se recopilan datos sobre el producto
  6.  // Se calcula su beneficio, etc.
  7.  
  8.  printf ( "¿Quieres seguir introduciendo productos? " );
  9.  // recuperar el dato del teclado y comprobar si hay que continuar o no.
  10.  // si hay que meter otro producto, otroProducto debe valer 1,
  11. } while ( otroProducto == 1 );

Con la configuración que te he puesto arriba el programa va a estar pidiendo datos hasta que 'otroProducto' sea diferente de 1.

Nota: Tu código tiene un error:

Código
  1. acomulado = beneficio + otroProducto;

Si 'acomulado' ( se escribe acumulado ) debe almacenar el beneficio total no tiene sentido que en esa ecuación aparezca 'otroProducto', ya que esa es una variable que usas para otras cosas.

si quieres llevar un total de beneficios es tan sencillo como esto:

Código
  1. acomulado = acomulado + beneficio;
  2.  
  3. // o en version simplificada
  4. acomulado += beneficio;

Nota2: otroProducto lo estás usando para almacenar números o valores ??

al principio compruebas si es igual a 1... y al final almacenas un caracter... y compruebas si es 's'... no tiene sentido.

Si usas otroProducto para almacenar caracteres... ciñete a caracteres.

Con todos estos cambios el código resultante queda más o menos así:

Código
  1. char otroProducto;
  2. do
  3. {
  4.  printf("Precio de compra: ");
  5.  scanf("%d", &compra);
  6.  printf("Precio de venta: ");
  7.  scanf("%d", &venta);
  8.  printf("Unidades vendidas: ");
  9.  scanf("%d", &unidades);
  10.  beneficio = (venta-compra)*unidades;
  11.  printf("Beneficio: %d", beneficio);
  12.  acomulado += beneficio;
  13.  printf("\nBeneficio acomulado: %d", acomulado);
  14.  
  15.  printf("\nQuieres introducir otro producto (s/n)? ");
  16.  getch("%c", &otroProducto);
  17. } while ( otroProducto == 's' );

Esta solución no funciona con mayúsculas, pero es una mejora que puedes plantearte.   


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Programa para introducir precios compra y acomular
« Respuesta #2 en: 12 Septiembre 2013, 15:01 pm »

Otro error se debe al "Copy & Paste", en la llamada a getch para pedir confirmación sobre continuar o no:
Código
  1. printf("Quieres introducir otro producto (s/n)?\n");
  2. getch("%c", &otroProducto);
Deberia ser una llamada (mas) a scanf:
Código
  1. printf("Quieres introducir otro producto (s/n)?\n");
  2. scanf(" %c", &otroProducto);
Se debe utilizar " %c" (un espacio antes del carácter '%') para evitar problemas con el espacio blanco al final de la linea anterior.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
sora_ori

Desconectado Desconectado

Mensajes: 269



Ver Perfil
Re: Programa para introducir precios compra y acomular
« Respuesta #3 en: 12 Septiembre 2013, 15:35 pm »

Gracias por la ayuda ;)

Finalmente he usado el "do while" y el programa funciona bien, salvo dos pequeños bugs. Uno en el "Beneficio acomulado" y otro que veréis en la imagen siguiente:




Un saludo
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Programa para introducir precios compra y acomular
« Respuesta #4 en: 12 Septiembre 2013, 16:11 pm »

Las variables no se inicializan solas en c.

Tienes que darles tu un valor inicial.

tu tienes seguramente un 'int acumulado;', pero cuando el programa reservan memoria para ese int no la 'limpia' y en consecuencia puede tener cualquier valor.

si quieres que sume bien prueba a hacer:

Código
  1. int acumulado = 0;

Es una buena práctica inicalizar TODAS las variables que uses en tu programa... puede que en un principio algunas no sea necesario inicializarlas... pero luego el programa cambia y eso te puede dar problemas.
« Última modificación: 12 Septiembre 2013, 16:20 pm por eferion » En línea

sora_ori

Desconectado Desconectado

Mensajes: 269



Ver Perfil
Re: Programa para introducir precios compra y acomular
« Respuesta #5 en: 12 Septiembre 2013, 16:18 pm »

Gracias, me faltaba eso :P

¿Sabrías decirme el pequeño bug de la imagen? Hace que cuando le de a "s" o "n" para responder a la pregunta me obligue a escribir algo para poder seguir.


Saludos
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Programa para introducir precios compra y acomular
« Respuesta #6 en: 12 Septiembre 2013, 16:22 pm »

el scanf espera a que se pulse el enter.

Si quieres que no espere, usa getch ... pero mírate la interfaz que no es la que estabas usando al principio:

Código
  1. getch("%c", &otroProducto); // Esto esta mal
En línea

sora_ori

Desconectado Desconectado

Mensajes: 269



Ver Perfil
Re: Programa para introducir precios compra y acomular
« Respuesta #7 en: 12 Septiembre 2013, 16:46 pm »

Dejo mi código para que vean como lo tengo, esta todo completo menos el pequeño bug, el cual tengo que escribir un caracter y pulsar enter para volver a escribir un producto.


Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(){
  5.    int compra, venta, unidades, beneficio, acomulado=0;
  6.    char otroProducto;
  7.  
  8.    do{
  9.         printf("Precio de compra: ");
  10.         scanf("%d", &compra);
  11.         fflush(stdin);
  12.         printf("Precio de venta: ");
  13.         scanf("%d", &venta);
  14.         fflush(stdin);
  15.         printf("Unidades vendidas: ");
  16.         scanf("%d", &unidades);
  17.         fflush(stdin);
  18.         beneficio = (venta-compra)*unidades;
  19.         printf("Beneficio: %d", beneficio);
  20.         acomulado += beneficio;
  21.         printf("\nBeneficio acomulado: %d", acomulado);
  22.  
  23.         printf("\nQuieres introducir otro producto (s/n)? ");
  24.         scanf(" %c ", &otroProducto);
  25.         fflush(stdin);
  26.    }while (otroProducto == 's');
  27.  
  28.  getchar();
  29.  return 0;
  30. }


No he podido arreglarlo  :-\
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Programa para introducir precios compra y acomular
« Respuesta #8 en: 12 Septiembre 2013, 16:51 pm »

No he podido arreglarlo  :-\

Lo más normal en cualquier tipo de aplicación es que le des la oportunidad al usuario de rectificar un dato que ha metido ( por si le da por equivocarse ).

Si tu en vez del scanf pones un getch o similar el usuario no puede rectificar su entrada y eso suele causar muy mala impresión en un programa.
En línea

kaozdeoz

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Programa para introducir precios compra y acomular
« Respuesta #9 en: 14 Septiembre 2013, 04:58 am »

 
otroProducto = 1;

while (otroProducto == 1){

                    printf("Precio de compra: ");
                    scanf("%d", &compra);
                    printf("Precio de venta: ");
                    scanf("%d", &venta);
                    printf("Unidades vendidas: ");
                    scanf("%d", &unidades);
                    beneficio = (venta-compra)*unidades;
                    printf("Beneficio: %d", beneficio);
                    acomulado = beneficio + otroProducto;
                    printf("\nBeneficio acomulado: %d", acomulado);
 
                    printf("\nQuieres introducir otro producto (s = 1/ n = 2)? ");

                    scanf(%d,&otroProducto)

                   

   }
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Introducir datos en programa « 1 2 »
Scripting
batus 12 7,890 Último mensaje 3 Junio 2009, 20:17 pm
por 0x0309
Precios para Office 2010 en empresas
Noticias
wolfbcn 0 1,426 Último mensaje 11 Mayo 2010, 21:10 pm
por wolfbcn
como introducir pausa en programa?
Programación Visual Basic
z_ane_666 2 2,860 Último mensaje 12 Junio 2010, 03:26 am
por z_ane_666
Aumenta la compra de extensiones de Chrome para introducir malware en los ...
Noticias
wolfbcn 0 1,982 Último mensaje 20 Enero 2014, 18:22 pm
por wolfbcn
Introducir líneas de consola (Windows) en programa en C
Programación C/C++
saanto7 0 2,010 Último mensaje 17 Junio 2016, 15:42 pm
por saanto7
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines