C/Visual C - alguien me dice q esta mal en este codigo?

 
Vista:

alguien me dice q esta mal en este codigo?

Publicado por Diego (4 intervenciones) el 17/06/2006 19:12:03
hola comunidad, tengo un problema con un codigo que tengo q entregar como trabajo practico,putualmente lo q quiero hacer es esto:

1)por pantalla que me pida un numero de opcion(tipo un menu, con 10 opciones aprox)
2) si es distinto de CERO que me pida carga de datos
3) el ejercicio basicamente es que quiero calcular el total de unidades de productos de todos los establecimientos (son 5 establecimientos), o sea hacer un vector e ir acumulando numeros digamos. Lo que hice fue en el swicth (opcion 1) hacer toda la carga de datos y hacer un acumulador , y en la opcion 2 del mismo switch quiero que me tire ese total.. (previamente volviendo a entrar al "menu")el problema que tengo es que me tira EL TRIPLE de lo que es en realidad y no le encuentro la vuelta.. alguien se da cuenta donde esta el error??? le agradezco infinitamente a quien me ayude . gracias!!

aca les dejo una copia del codigo original(es mucho mas largo) y uno medianamente editado para q se vea mas rapido (ya se q sobran variables al principio, no las quite)

CODIGO 1 (EDITADO)
#include <stdio.h>
#include <conio.h>
#include <string.h>

void main()

{
clrscr();
int a,j,i,flag;
int establecimiento;
float valor,total;
int articulo,cantidad,lote,opcion,electrodomestico,empleado,estacion,porcentual;
char descripcion[50];
//float matriz[5][5]={0};
float unidades[6]={0};
float vprecio[5]={0};
char vdescripcion[5][50];
electrodomestico=empleado=establecimiento=estacion=porcentual=total=0;
flag=1;
printf("ingrese el NUMERO DE OPCION DEL MENU: ");
scanf("%d",&opcion);

while(opcion!=0)
{ //comienzo del while
switch(opcion)

{ //inicio switch opcion
case 1: printf("ingrese el numero de lote: ");
scanf("%d",&lote);
clrscr();
printf("*******CARGA DE TABLA DE VALORES DE LOS PRODUCTOS*******\n");
while(lote!=0)
{
if (flag==0)
{
for (a=1;a<=4;a++) /*ingreso de lote de datos no. 1*/
{

printf("Ingrese el n£mero del art¡culo (de 1 a 4): ");
scanf("%d",&articulo);
printf("Ingrese la descripci¢n del art¡culo(nombre): ");
fflush(stdin);
gets(descripcion);
printf("Ingrese el valor del art¡culo: ");
scanf("%f",&valor);
vprecio[articulo]=valor;
strcpy(vdescripcion[articulo],descripcion);
flag=flag+1;
} //fin if (ingreso de lote de datos no. 1*/
} //fin if flag==0
clrscr();
printf("CARGA DE DATOS\n");
printf("Ingrese el n£mero de establecimiento (1 a 5): ");
scanf("%d",&establecimiento);
printf("Ingrese la cantidad del articulo: ");
scanf("%d",&cantidad);
//acumulador de unidades x establecimiento
unidades[establecimiento]=unidades[establecimiento]+cantidad); // da el triple ????????????????????????????????????
//suma de total (unidades) de articulos en todas los establecimientos
for(i=1;i<=5;i++)
{
total=unidades[i]+total;
}
printf("ingrese lote nuevamente : ");
scanf("%d",&lote);
} //fin while lote!=0

break;

case 2:
printf("total de unidades sumando todas las fabricas es: %2.2f\n",total) //ACA TIRA EL ERROR (ME DA EL TRIPLE DE LO Q ES EN REALIDAD)
break;
}//fin switch opcion

/getch();
printf("ingrese nuevamente opcion: ");
scanf("%d",&opcion);
}//fin while de opcion


}//fin main

CODIGO 2: EL ORIGINAL

#include <stdio.h>
#include <conio.h>
#include <string.h>

void main()

{
clrscr();
int a,j,i,flag;
int establecimiento;
float valor,total;
int articulo,cantidad,lote,opcion,electrodomestico,empleado,estacion,porcentual;
char descripcion[50];
//float matriz[5][5]={0};
float unidades[6]={0};
float vprecio[5]={0};
char vdescripcion[5][50];
electrodomestico=empleado=establecimiento=estacion=porcentual=total=0;
flag=1;
printf("ingrese el NUMERO DE OPCION DEL MENU: ");
scanf("%d",&opcion);
//printf("ingrese flag: "); //PRUEBA PARA EL WHILE
//scanf("%d",&flag);
while(opcion!=0)
{ //comienzo del while
switch(opcion)

{ //inicio switch opcion
case 1: printf("ingrese el numero de lote: ");
scanf("%d",&lote);
clrscr();
printf("*******CARGA DE TABLA DE VALORES DE LOS PRODUCTOS*******\n");
while(lote!=0)
{
if (flag==0)
{
for (a=1;a<=4;a++) /*ingreso de lote de datos no. 1*/
{

printf("Ingrese el n£mero del art¡culo (de 1 a 4): ");
scanf("%d",&articulo);
printf("Ingrese la descripci¢n del art¡culo(nombre): ");
fflush(stdin);
gets(descripcion);
printf("Ingrese el valor del art¡culo: ");
scanf("%f",&valor);
vprecio[articulo]=valor;
strcpy(vdescripcion[articulo],descripcion);
flag=flag+1;
} //fin if (ingreso de lote de datos no. 1*/
} //fin if flag==0
clrscr();
printf("CARGA DE DATOS\n");
printf("Ingrese el tipo de electrodomestico (articulo de 1 a 4): ");
scanf("%d",&electrodomestico); // FIJARSE SI VA ARTICULO O ELECTRODOMESTICO
printf("Ingrese el n£mero de empleado (1 a 10): ");
scanf("%d",&empleado);
printf("Ingrese el n£mero de establecimiento (1 a 5): ");
scanf("%d",&establecimiento); //OJO CON VARIABLE ESTABLECIMIENTO
printf("Ingrese el n£mero de estaci¢n (1 a 6): ");
scanf("%d",&estacion);
printf("Ingrese la cantidad del articulo: ");
scanf("%d",&cantidad); //OJO VARIABLE REPETIDA
printf("Ingrese el porcentual sobre el precio: ");
scanf("%d",&porcentual);
//acumulador de unidades x establecimiento
unidades[establecimiento]=(unidades[establecimiento]+cantidad); // da el triple ????????????????????????????????????
//suma de total (unidades) de articulos en todas los establec.
for(i=1;i<=5;i++)
{
total=unidades[i]+total;
}
printf("ingrese lote nuevamente : ");
scanf("%d",&lote);
} //fin while lote!=0

break;

case 2:
printf("total de unidades sumando todas las fabricas es: %2.2f\n",total) ;
// printf("el total de unidades por fabrica es: %d\n",unidades[i]);

// printf("total de unidades sumando todas las fabricas es: %2.2f",total);
break;
}//fin switch opcion

/*for (a=1;a<=2;a++) /*contador de cantidad de articulos en cada establecimiento*/
/* {
printf("ingrese No. Articulo: ");
scanf("%d",&articulo);
printf("ingrese CANTIDAD de producto: ");
scanf("%f",&cantidad);
printf("ingrese ESTABLECIMIENTO: ");
scanf("%d",&establecimiento);
matriz[establecimiento][articulo]=matriz[establecimiento][articulo]+cantidad;
} /*fin contador */

/*for (i=1;i<=5;i++) //PRUEBA ALMACENAJE MEDIANTE IMPRESION DE MATRIZ (OK)
{
for (j=1;j<=5;j++)
{
j=1;
printf("%2.0f",matriz[i][j],matriz[i][j+1],matriz[i][j+2],matriz[i][j+3],matriz[i][j+4]);
}
}
/*printf("%d",matriz[1][1]); PRUEBA IMPRESION DE UNA CASILLA DE MATRIZ(OK) */

for (i=1;i<=4;i++) /*PRUEBA IMPRESION DEL VECTOR PRECIO,NOMBRE ARTICULO (OK) */
{
printf("numero del articulo es %d\n",i);
printf("%2.2f\n",vprecio[i]);
printf("%s\n",vdescripcion[i]);
}
getch();
printf("ingrese nuevamente opcion: ");
scanf("%d",&opcion);
}//fin while de opcion


}//fin main
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:alguien me dice q esta mal en este codigo?

Publicado por antonio (1 intervención) el 11/08/2006 11:20:37
Has probado a inicializar las variables que se van autoincrementando?? Cuando dices total = total + x, la variable total debería de definirse inicializada a 0 para que no venga con ningún valor anteriormente. No he analizado el código pero puede ser por culpa de las variables.

Espero haberte servido de ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar