| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
cazador
Registrado: 03 May 2007 Mensajes: 9
| Publicado: 28/10/2007 6:52 pm | | | Título: problema para sacar maximo y mas |
| holas el problema es que no encuentro el error en mi programa informa mal tendria que mostrar los libros de cada genero pero siempre erra en uno y el maximo tambien me sale mal -_- me pueden ayudar.
una biblioteca cuenta con un primer lote con los prestamos a sus socios durante la semana pasada, cada registro tiene:
numero de socio (1 a 100) sexo del socio ('m' o 'f') numero de libro retirado (4 digitios no correlativos)
finaliza con registro numero de socio igual a 0. segundo lote con los datos de los libros, cada registro contiene:
numero de libro ( 4 digitos no correlativos) genero (1 a 20)
la biblioteca cuenta con 300 libros. haga un programa de determine e informe:
a) el numero de libro mas pedido por las mujeres y el genero al que pertenece. b)la cantidad de libros disponibles para cada genero.
| Código: | #include <stdio.h> #include<conio.h> #include <string.h>
void carga(int*,int*); int busq(int*,int); void procesar(int *,int*,int *); int main (void) { int vnl[4],vg[4],clf[4]={0}; carga(vnl,vg); procesar(vnl,vg,clf);
getch(); }
void carga(int *pl,int *pg) { for(int i=0; i<4; i++) { printf("Ingrese nro libro (4 mx): "); //cargo los libros scanf("%d",&pl[i]); printf("Ingrese nro genero (2 mx): "); // existe 2 generos elijo para cada libro el genero scanf("%d",&pg[i]); } } void procesar(int *pl,int *pg,int *pcf) { int l,pos,contg,ns; char sx;
printf("Ingrese ns "); scanf("%d",&ns); while(ns!=0) { printf("Ingrese nl "); scanf("%d",l); fflush(stdin); printf("ingrese sexo (f o m)"); scanf("%c",&sx);
pos=busq(pl,l); //busca si existe el libro y retorna la posicion donde esta en pos if(pos!=-1) { if(sx=='f') pcf[pos-1]++; // cuento el nro de libro mas pedido po las mujeres else printf( "introdusca sexo de nuevo \n"); }
printf("Ingrese ns "); scanf("%d",&ns); } for(int i=0; i<2; i++) { contg=0;
for(int j=0; j<4; j++) { if(pg[j]==i+1) { contg++; } } printf( " para el genero %d la cantidad de libros son %d \n",i+1,contg); //este no se porque informa mal }
int pm=0; for(int h=1; h<=4; h++) { if(pcf[h]>pcf[pm]) //tan bien informa mal -_- { pm=i; } } printf( " el maximo nro de libro pedido por las mujeres es %d y el genero es %d \n",pl[pm],pg[pm]);
}
int busq (int *pl,int l) { int i=0;
while(pl[i]!=l && i<4) //funcion de busqueda se fija si el libro esta cargado en el vector y da la posicion { //donde se encuentra i++; } if(i<4) return i; else return -1; }
|
|
| | Volver arriba | |  | mamntc02
Registrado: 30 Abr 2007 Mensajes: 248
| Publicado: 29/10/2007 4:07 am | | | Título: |
| Tienes algunos fallos en el programa:
- fflush(stdin) no es adecuada para limpiar el buffer de entrada, por no ser estandar. Puede q tu compilador lo haga correctamente, pero nadie le obliga. Haz una búsqueda por este foro, ya q es un tema ampliamente tratado.
- En la función procesar:
- Al leer nl te falta el & en el scanf.
- Al final de la función cuando haces:
no tiene sentido ya q la variable i está fuera de ámbito.
Saludos. |
| | Volver arriba | |  | cazador
Registrado: 03 May 2007 Mensajes: 9
| Publicado: 29/10/2007 1:13 pm | | | Título: solucionado |
| gracias mamntc02 ya lo solucione dejo el codigo arreglado espero que alguno le sirva
| Código: | #include <stdio.h> #include<conio.h> #include <string.h>
void carga(int*,int*); int busq(int*,int); void procesar(int *,int*,int *,int*); int main (void) { int vnl[5],vg[5],clf[5]={0},vdm[5]={0}; carga(vnl,vg); procesar(vnl,vg,clf,vdm);
getch(); }
void carga(int *pl,int *pg) { for(int i=0; i<5; i++) { printf("Ingrese nro libro (5 mx): "); scanf("%d",&pl[i]); printf("Ingrese nro genero (5 mx): "); scanf("%d",&pg[i]); } } void procesar(int *pl,int *pg,int *pcf,int *pdm) { int l,pos,contg,ns,d; char sx;
printf("Ingrese ns "); scanf("%d",&ns); while(ns!=0) { printf("Ingrese nl "); scanf("%d",&l); printf("Ingrese dia (5 mx)"); scanf("%d",&d); fflush(stdin); printf("ingrese sexo (f o m)"); scanf("%c",&sx);
pos=busq(pl,l); if(pos!=-1) { if(sx=='f') pcf[pos]++; else printf( "introdusca sexo de nuevo \n");
if(pg[pos]==5) pdm[d-1]++; } printf("Ingrese ns "); scanf("%d",&ns); }
for(int i=0; i<5; i++) { contg=0;
for(int j=0; j<5; j++) { if(pg[j]==i+1) { contg++; } } printf( " para el genero %d la cantidad de libros son %d \n",i+1,contg); }
int pm=0; for(int h=1; h<=5; h++) { if(pcf[h]>pcf[pm]) { pm=h; } } printf( " el maximo nro de libro pedido por las mujeres es %d y el genero es %d \n",pl[pm],pg[pm]);
int mx=0; for(int k=1; k<=5; k++) { if(pdm[k]>pdm[mx]) { mx=k; } } printf( " maxima extraccion de libros de genero 5 fue en el dia %d \n",mx+1);
} int busq (int *pl,int l) { int i=0;
while(pl[i]!=l && i<5) { i++; } if(i<5) return i; else return -1; }
|
|
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |