Bienvenido(a), Visitante. Favor de ingresar o registrarse.
Diciembre 02, 2008, 01:37:52
Inicio Ayuda Buscar Ingresar Registrarse
Noticias: Foro de Java, C++ y más.

Empieza una nueva comunidad de programación: Oneble ... es lo que tu quieras que sea

+  Foros Java y C/Linux
|-+  Programación
| |-+  C/C++ linux
| | |-+  Hola tengo un problema con este código no puedo solucionarlo help please gracia
« anterior próximo »
Páginas: [1] Enviar tema Imprimir
Autor Tema: Hola tengo un problema con este código no puedo solucionarlo help please gracia  (Leído 559 veces)
adrianD
Newbie
*
Mensajes: 9


Ver Perfil


« en: Julio 06, 2008, 03:58:01 »

/*Un negocio desea conocer la cantidad vendida de sus productos, en un determinado día,
para ello se ingresa por teclado, por cada venta realizada la siguiente información:
· Código del producto (3 caracteres)
· Cantidad vendida (entero)
Estos datos deben ser grabados en un archivo binario, previa conversión del código de
producto a mayúscula. Utilizar función Coversion_Codigo.
La información del archivo consta de acumular la cantidad vendida por código de
producto.
El ingreso por teclado termina, con el ingreso de código de producto igual a “FIN” */

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

typedef struct{
               char codigo[4];
               int cant;
               }producto;

void carga(void);
void informe(void);
void conversion_codigo(char *);
void actualizar(void);


void main(void)
{

// carga();
 informe();
 actualizar();

getch();
}
/////////////////////////////////////////////////////
void carga (void)
{
FILE * pf;
producto p;
if((pf=fopen("c:\\prod.dat","wb+"))==NULL)
{
perror("Error\n ");
getch();
exit(1);
}


    printf("Ingrese cod producto\n");
    gets(p.codigo);
    conversion_codigo(p.codigo);//esto es cadena, lo paso por referncia


   while(  strcmpi(p.codigo,"FIN") )// Compara 2 cade Devuelve 0 si p.codigo y FIN
     {                              //son identicas sale del bucle
     printf("Ingresar cantidad de productos\n");
     scanf("%d",& p.cant);

     fwrite(&p,sizeof(producto),1,pf);

     printf("Ingrese cod producto\n");
     fflush(stdin);
     gets(p.codigo);
          conversion_codigo(p.codigo);
     }

fclose(pf);
}
////////////////////////////////////////////////////////
void informe(void)
{
FILE * pf;
producto p;
if((pf=fopen("c:\\prod.dat","rb+"))==NULL)
{
perror("Error\n ");
getch();
exit(1);
}
printf("Codigo de producto      Cantidad de producto\n");
printf("**********************************************\n\n");

   fread(&p,sizeof(producto),1,pf);

   while(!feof(pf))
     {
     printf("%s %d \n",p.codigo,p.cant);
     fread(&p,sizeof(producto),1,pf);
     }
fclose(pf);
}
////////////////////////////////////////////////////////////
void conversion_codigo(char *cod)
{
int i;

for(i=0;i<3;i++)
*(cod+i)=*(cod+i)-32;
}
/*///////////////////////////////////////////////////////////
void actualizar(void)
{

FILE * pf;
producto p;
char x[4];
int i,a=0,con=0;

if((pf=fopen("c:\\prod.dat","rb+"))==NULL)
{
perror("Error\n ");
getch();
exit(1);
}

  fread(&p,sizeof(producto),1,pf);       //leemos el 1° registro

  while(!feof(pf))
  {


  if( strcmpi(x,p.codigo) )//si son diferentes las palbras, entonces cumple la condicion
   {

   strcpy(x,p.codigo);  //Copia la cadena de caracteres s2 en la cadena s1

    a=0;
    a+=p.cant;                  //le asigno al acumulador "a" el valor de cant
    con+=1;


    while(!feof(pf))
     {
      fread(&p,sizeof(producto),1,pf);
      if(! strcmpi(x,p.codigo))   //si son iguales las palabras  cumple la condicion
         a+=p.cant;

     }
      printf("el valor de %s  es %d\n",x,a);
   }
    else
    con+=1;
    printf("bucle\n");

    rewind(pf);             //me voy al principio del archivo
    fseek(pf, (con)*sizeof(producto),0);        //me posiciono en el siguiente registro
    fread(&p,sizeof(producto),1,pf);
 }


fclose(pf);
}
////////////////////////////////////////////////////////////*/
En línea
chuidiang
Administrator
Hero Member
*****
Mensajes: 1974



Ver Perfil WWW Email
« Respuesta #1 en: Julio 06, 2008, 07:34:01 »

Hola:

¿Y qué es lo que no funciona?

Se bueno.
En línea

adrianD
Newbie
*
Mensajes: 9


Ver Perfil
« Respuesta #2 en: Julio 07, 2008, 12:02:44 »

Hola Chui basicamente no funciona la acumulación de la cantidad de productos que me está pidiendo muchisimas gracias salu2 y gracia divina.
En línea
chuidiang
Administrator
Hero Member
*****
Mensajes: 1974



Ver Perfil WWW Email
« Respuesta #3 en: Julio 07, 2008, 08:23:55 »

Hola:

No he revisado el código con detalle, pero veo un

if(! strcmpi(x,p.codigo))   

con un ! delante. ¿está bien?

Se bueno.
En línea

adrianD
Newbie
*
Mensajes: 9


Ver Perfil
« Respuesta #4 en: Julio 08, 2008, 02:47:26 »

si está negando la condición why?
En línea
chuidiang
Administrator
Hero Member
*****
Mensajes: 1974



Ver Perfil WWW Email
« Respuesta #5 en: Julio 08, 2008, 04:10:23 »

El comentario pone "si las palabras son iguales cumple la condición", pero el if está negado por lo que cumple la condición si son distintas. Da la impresión que estás acumulando productos distintos.

Se bueno.
En línea

mkfnx
Newbie
*
Mensajes: 8


Ver Perfil Email
« Respuesta #6 en: Julio 08, 2008, 10:35:51 »

La condición esta bien, necesita negarla debido a como se comporta la función strcmp() , ya que esta función no solo compara igualdad, también nos dice si una cadena es mayor o menor a otra.

Entonces esta función regresa 0 (que se toma como falso) cuando las cadenas son iguales, lo cual hace necesario negar la condición si quiere evaluar la igualdad dentro del if.

Saludos.
En línea
chuidiang
Administrator
Hero Member
*****
Mensajes: 1974



Ver Perfil WWW Email
« Respuesta #7 en: Julio 08, 2008, 10:49:43 »

Perdón por el lapsus.

Se bueno.
En línea

adrianD
Newbie
*
Mensajes: 9


Ver Perfil
« Respuesta #8 en: Julio 10, 2008, 12:59:46 »

Muchachos todo ok pero necesito resolverlo y la verdad q' no tengo idea de como please help ¿ cómo resuelvo la acomulación de cantidad vendida por código de producto? gracias
En línea
chuidiang
Administrator
Hero Member
*****
Mensajes: 1974



Ver Perfil WWW Email
« Respuesta #9 en: Julio 10, 2008, 06:22:49 »

Hola:

Detalla un poco más qué es lo que no funciona. ¿No calcula bien la cantidad acumulada? ¿No hace nada?. Di cual es el contenido del fichero, que es lo que esperas que devuelva el programa y que es lo que está devolviendo.

Se bueno.
En línea

adrianD
Newbie
*
Mensajes: 9


Ver Perfil
« Respuesta #10 en: Julio 11, 2008, 06:13:10 »

El programa me ejecuta esto:


Ingrese cod producto
aaa
Ingresar cantidad de productos
10                                                 //Cargo datos con codigo en minúscula
Ingrese cod producto
bbb
Ingresar cantidad de productos
20
Ingrese cod producto
aaa
Ingresar cantidad de productos
15
Ingrese cod producto
bbb
Ingresar cantidad de productos
30
Ingrese cod producto 
fin
Codigo de producto      Cantidad de producto //Hace el informe pasa Mayúsc
**********************************************

AAA                                 10
BBB                                 20
AAA                                 15
BBB                                 30
Codigo de producto  Cantidad de producto //pero no me muestra acumul
**********************************************

AAA                                 10
BBB                                 20
AAA                                 15
BBB                                 30

//Me tendría q' acumular los AAA = 25 y los BBB =50
 espero que esté claro gracias salu2... Sonreir
En línea
chuidiang
Administrator
Hero Member
*****
Mensajes: 1974



Ver Perfil WWW Email
« Respuesta #11 en: Julio 11, 2008, 11:21:18 »

Hola:

Con el código que has puesto y descomentando la llamada a carga() obtengo esto

Ingrese cod producto
aaa
Ingresar cantidad de productos
3
Ingrese cod producto
Ingresar cantidad de productos
bbb
Ingrese cod producto
Ingresar cantidad de productos
4
Ingrese cod producto
Ingresar cantidad de productos
aaa
Ingrese cod producto
Ingresar cantidad de productos
6
Ingrese cod producto
Ingresar cantidad de productos
fin
Ingrese cod producto
Codigo de producto      Cantidad de producto
**********************************************

AAA 3
�!! 3
BBB 4
�"" 4
AAA 6
�!! 6
el valor de AAA  es 9
bucle
el valor de �!!  es 15
bucle
el valor de BBB  es 4
bucle
el valor de �""  es 4
bucle
el valor de AAA  es 6
bucle
el valor de �!!  es 12
bucle

Aparetemente sí acumula, pero repite el producto más veces, puesto que según vuelve a recorrer el fichero, lo encuentra más veces y vuelve a repetirlo. Así sale la primera AAA acumulada y la segunda AAA sin acumular, pero con el valor de la segunda vez que se mete.

También me salen unos "gurruños" entre producto y producto. Esos gurruños están en el fichero de datos que se graba, así que supongo que se debe a un error a la hora de recoger los productos del teclado y guardarlos.

Se bueno.
En línea

Páginas: [1] Enviar tema Imprimir 
« anterior próximo »
Ir a:  


Ingresar con nombre de usuario, contraseña y duración de la sesión

Powered by MySQL Powered by PHP Powered by SMF 1.1.5 | SMF © 2006-2007, Simple Machines LLC XHTML 1.0 válido! CSS válido!