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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C] Problema con ejercicio
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] 3 Ir Abajo Respuesta Imprimir
Autor Tema: [C] Problema con ejercicio  (Leído 8,883 veces)
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: [C] Problema con ejercicio
« Respuesta #10 en: 25 Febrero 2014, 01:27 am »

Sin esta linea, como comento en el comentario de arriba, el resultado a veces no es correcto
Código
  1. a2 = b2 = c2 = d2 = e2 = 0;
Eso sucede porque si no se inicializa una variable local su valor inicial es no definido o basura.

Con las variables a1, b1, etc. no hay problema porque lo primero que haces con ellas es asignarles un valor, por ejemplo:
Código
  1. case 1:
  2.   a1 = a * n;

Pero con las variables a2, b2, etc. lo primero que haces con ellas es utilizar su valor, por ejemplo:
Código
  1. case 1:
  2.   a1 = a * n;
  3.   a2 += a1; /* a2 = a2 + a1 == ALGUN_VALOR + a1 */

Y deberías sustituir esos dos grupos de variable (X1 y X2) por arrays, con ello el programa es mas fácil de desarrollar y mas corto.

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
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: [C] Problema con ejercicio
« Respuesta #11 en: 25 Febrero 2014, 05:55 am »


En cualquier caso, inicializando las variables x2 a cero, ya que son sumas parciales,  puedes prescindir perfectamente de las x1 sin más que ir haciendo "a2 += a*n;", etc..

Código
  1. do{
  2.    printf("Ingrese el codigo de producto: 1-5 (-1 para salir): ");
  3.    scanf("%d", &x);
  4.    if (x==-1)
  5.      break;
  6.    else  if(x >= 1 && x <= 5){
  7.      printf("Ingrese las unidades vendidas: ");
  8.      scanf("%d", &n);
  9.      }
  10.      switch (x){
  11. case 1:
  12.      a2 += a*n;
  13.      break;
  14. case 2:
  15. b2 += b*n;
  16. break;
  17. case 3:
  18. c2 += c*n;
  19. break;
  20. case 4:
  21. d2 += d*n;
  22. break;
  23. case 5:
  24. e2 += e*n;
  25. break;
  26.        default:
  27.        printf("Introdujo un codigo erroneo\n");
  28.        break;
  29.    } /*fin de switch*/
  30. } /*fin de do*/
  31. while (1); /*condicion de do*/

¡¡¡¡ Saluditos! ..... !!!!







En línea

dmacias

Desconectado Desconectado

Mensajes: 41


Ver Perfil WWW
Re: [C] Problema con ejercicio
« Respuesta #12 en: 25 Febrero 2014, 08:42 am »

Citar
Y deberías sustituir esos dos grupos de variable (X1 y X2) por arrays, con ello el programa es mas fácil de desarrollar y mas corto.

Aun noi he estudidado eso, estoy empezando y obvio que no puedo usar algo que aun no se, es con lo poco que se y ando  :rolleyes: jajja

leosansan, ya veo que podria reducir las dos operaciones a una y asi ahorrarme las variables de 'x1', supongo que será cuestion de practica

No sabía que se podia hacer esto

Código
  1.    if (x==-1)
  2.     break
  3.  

Solo he visto break en switch, lo desconocia.

Y esto no lo entiendo

Código
  1. while (1); /*condicion de do*/
  2.  
Que es lo que valida esa condicion???? supongo que el 1 solo no será??

Gracias por pasaros y sigo estudiando, asi que no vayais muy lejos  :P

Un saludo
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: [C] Problema con ejercicio
« Respuesta #13 en: 25 Febrero 2014, 09:06 am »

No sabía que se podia hacer esto

Código
  1.    if (x==-1)
  2.     break
  3.  

Solo he visto break en switch, lo desconocia.

break sirve para salir de un bucle for o while o de una sentencia switch. Da igual donde lo pongas, si la ejecución del programa alcanza ese break, saldrás del bucle.

Y esto no lo entiendo

Código
  1. while (1); /*condicion de do*/
  2.  
Que es lo que valida esa condicion???? supongo que el 1 solo no será??

el contenido de un while se ejecuta mientras la condición evaluada sea cierta. Se considera cierta siempre y cuando su resultado no sea 0. En while(1), la condición NUNCA será 0, luego el bucle se ejecutará de forma perpetua hasta que se salga del mismo con un break o un return.
En línea

dmacias

Desconectado Desconectado

Mensajes: 41


Ver Perfil WWW
Re: [C] Problema con ejercicio
« Respuesta #14 en: 25 Febrero 2014, 09:44 am »

Entonces ahora entiendo el porque del break en if(x==-1), ya voy aprendiendolo.

Muchas gracias a todos

Un saludo
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: [C] Problema con ejercicio
« Respuesta #15 en: 25 Febrero 2014, 16:19 pm »

......................................................................
No sabía que se podia hacer esto

Código
  1.    if (x==-1)
  2.     break
  3.  

Solo he visto break en switch, lo desconocia.

Y esto no lo entiendo

Código
  1. while (1); /*condicion de do*/
  2.  
Que es lo que valida esa condicion???? supongo que el 1 solo no será??


Provoca un bucle infinito que se rompe desde el "interior" del mismo,  como con el if-break, al cumplirse alguna condición.

¡¡¡¡ Saluditos! ..... !!!!




En línea

xaps

Desconectado Desconectado

Mensajes: 157



Ver Perfil
Re: [C] Problema con ejercicio
« Respuesta #16 en: 25 Febrero 2014, 18:29 pm »

No creo que sea buena idea incitar a la gente que está empezando a programar a usar bucles sin condición de los que se saldrá mediante breaks, no es una buena práctica.

Yo te animo a que intentes hacer un bucle con condición y te olvides del break.

Saludos
En línea

"The programmers of tomorrow are the wizards of the future" - Gave Newel
Gh057


Desconectado Desconectado

Mensajes: 1.190



Ver Perfil
Re: [C] Problema con ejercicio
« Respuesta #17 en: 25 Febrero 2014, 18:45 pm »

hola dmacias ,coincido con xaps; personalmente no lo considero un buen hábito esos saltos sin control, me recuerda mucho a los famosos "goto"... nada mejor para aprender que tratar de definir que tipo de bucle necesitas ,si es interativo o  condicional, y si es posible o necesario que se realice una vez.

(por ejemplo en un menú, es usual que la condición de repetición es la opción distinta a las permitidas, complementándose con un mensaje por medio del default; en un bucle que se ejecute por lo menos una vez)

te recomiendo partir del algoritmo a implementar (puedes practicarlo de manera gráfica y en seudocódigo) y de ahí ya teniendo una idea clara de como sería tu estructura te pones a codificarlo. puede parecer al comienzo una gasto de tiempo extra, de hecho lo es, pero el tiempo invertido en ello cada vez será menor, y desarrollarás mejores aplicaciones. saludos
En línea

4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: [C] Problema con ejercicio
« Respuesta #18 en: 25 Febrero 2014, 19:47 pm »

Teniendo en cuenta que ya dmacias ha propuesto un código con la condición en el while, "recompongo" mi propuesta del while(1), esta vez con la condición incorporada al mismo, no quiero que por mi culpa se"revuelva"el patio: :silbar:


Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5. float a = 2.98;
  6. float b = 4.50;
  7. float c = 9.98;
  8. float d = 4.49;
  9. float e = 6.87;
  10. int n=0;
  11. int x = 0;
  12. float total=0;
  13. float a2=0,b2=0,c2=0,d2=0,e2=0;
  14.  
  15. do{
  16. printf("Ingrese el codigo de producto: 1-5 (-1 para salir): ");
  17. scanf("%d", &x);
  18. if(x >= 1 && x <= 5){
  19.      printf("Ingrese las unidades vendidas: ");
  20.      scanf("%d", &n);
  21. }
  22. switch (x){
  23. case 1:
  24. a2 += a*n;
  25. break;
  26. case 2:
  27. b2 += b*n;
  28. break;
  29. case 3:
  30. c2 += c*n;
  31. break;
  32. case 4:
  33. d2 += d*n;
  34. break;
  35. case 5:
  36. e2 += e*n;
  37. break;
  38. default:
  39. if (x!=-1)
  40.            printf("Introdujo un codigo erroneo\n");
  41. break;
  42. } /*fin de switch*/
  43. } /*fin de do*/
  44. while (x!=-1); /*condicion de do*/
  45. total = a2+b2+c2+d2+e2;
  46. printf("El total vendido es %1.2f \n", total);
  47. return 0;
  48.  }
  49.  

¡¡¡¡ Saluditos! ..... !!!!



P.D: Juraito, juraito que el código está bien indentado, pero no sé que pasa últimamente que al ponerlo en las Code se "desparrama". :o


« Última modificación: 25 Febrero 2014, 19:58 pm por leosansan » En línea

Gh057


Desconectado Desconectado

Mensajes: 1.190



Ver Perfil
Re: [C] Problema con ejercicio
« Respuesta #19 en: 25 Febrero 2014, 21:32 pm »

jaajaj por mi parte jamás ocurriría...! excelente aporte leosansan :laugh: dmacias fíjate que claro quedó ahora, por favor ténlo en cuenta para futuros ejercicios, así como la validación del ingreso,    saludos!
En línea

4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...
Páginas: 1 [2] 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[ problema ] ejercicio 100
Ejercicios
_mÙëK§™_ 2 4,764 Último mensaje 1 Diciembre 2007, 01:31 am
por Iñaki Viggers
Problema ejercicio
Programación C/C++
overxfl0w13 4 3,035 Último mensaje 30 Junio 2012, 11:43 am
por overxfl0w13
problema con un ejercicio « 1 2 »
Programación C/C++
espdante 12 6,207 Último mensaje 20 Agosto 2012, 13:52 pm
por avesudra
Problema con un ejercicio
Programación C/C++
gabyricardo92 6 2,896 Último mensaje 10 Julio 2013, 15:52 pm
por eferion
Problema con ejercicio de php
Desarrollo Web
T0p1t0 1 2,317 Último mensaje 19 Julio 2013, 15:39 pm
por T0p1t0
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines