Autor
|
Tema: [C] Problema con ejercicio (Leído 9,830 veces)
|
rir3760
Desconectado
Mensajes: 1.639
|
Sin esta linea, como comento en el comentario de arriba, el resultado a veces no es correcto 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: case 1: a1 = a * n;
Pero con las variables a2, b2, etc. lo primero que haces con ellas es utilizar su valor, por ejemplo: case 1: a1 = a * n; 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
Mensajes: 1.314
|
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..do{ printf("Ingrese el codigo de producto: 1-5 (-1 para salir): "); scanf("%d", &x); if (x==-1) break; else if(x >= 1 && x <= 5){ printf("Ingrese las unidades vendidas: "); scanf("%d", &n); } switch (x){ case 1: a2 += a*n; break; case 2: b2 += b*n; break; case 3: c2 += c*n; break; case 4: d2 += d*n; break; case 5: e2 += e*n; break; default: printf("Introdujo un codigo erroneo\n"); break; } /*fin de switch*/ } /*fin de do*/ while (1); /*condicion de do*/
¡¡¡¡ Saluditos! ..... !!!!
|
|
|
En línea
|
|
|
|
dmacias
|
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 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 if (x==-1) break
Solo he visto break en switch, lo desconocia. Y esto no lo entiendo while (1); /*condicion de do*/
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 Un saludo
|
|
|
En línea
|
|
|
|
eferion
Desconectado
Mensajes: 1.248
|
No sabía que se podia hacer esto if (x==-1) break
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 while (1); /*condicion de do*/
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
|
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
Mensajes: 1.314
|
...................................................................... No sabía que se podia hacer esto if (x==-1) break
Solo he visto break en switch, lo desconocia. Y esto no lo entiendowhile (1); /*condicion de do*/
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
Mensajes: 157
|
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
Mensajes: 1.190
|
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
Mensajes: 1.314
|
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:
#include <stdio.h> int main() { float a = 2.98; float b = 4.50; float c = 9.98; float d = 4.49; float e = 6.87; int n=0; int x = 0; float total=0; float a2=0,b2=0,c2=0,d2=0,e2=0; do{ printf("Ingrese el codigo de producto: 1-5 (-1 para salir): "); scanf("%d", &x); if(x >= 1 && x <= 5){ printf("Ingrese las unidades vendidas: "); scanf("%d", &n); } switch (x){ case 1: a2 += a*n; break; case 2: b2 += b*n; break; case 3: c2 += c*n; break; case 4: d2 += d*n; break; case 5: e2 += e*n; break; default: if (x!=-1) printf("Introdujo un codigo erroneo\n"); break; } /*fin de switch*/ } /*fin de do*/ while (x!=-1); /*condicion de do*/ total = a2+b2+c2+d2+e2; printf("El total vendido es %1.2f \n", total); return 0; }
¡¡¡¡ 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".
|
|
« Última modificación: 25 Febrero 2014, 19:58 pm por leosansan »
|
En línea
|
|
|
|
Gh057
Desconectado
Mensajes: 1.190
|
jaajaj por mi parte jamás ocurriría...! excelente aporte leosansan 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...
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[ problema ] ejercicio 100
Ejercicios
|
_mÙëK§™_
|
2
|
4,986
|
1 Diciembre 2007, 01:31 am
por Iñaki Viggers
|
|
|
Problema ejercicio
Programación C/C++
|
overxfl0w13
|
4
|
3,342
|
30 Junio 2012, 11:43 am
por overxfl0w13
|
|
|
problema con un ejercicio
« 1 2 »
Programación C/C++
|
espdante
|
12
|
6,799
|
20 Agosto 2012, 13:52 pm
por avesudra
|
|
|
Problema con un ejercicio
Programación C/C++
|
gabyricardo92
|
6
|
3,340
|
10 Julio 2013, 15:52 pm
por eferion
|
|
|
Problema con ejercicio de php
Desarrollo Web
|
T0p1t0
|
1
|
2,526
|
19 Julio 2013, 15:39 pm
por T0p1t0
|
|