Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Ayuda con este ejercicio

Estas en el tema de Ayuda con este ejercicio en el foro de C/C++ en Foros del Web. Buenas amigos, Llevaba tiempo sin programar y sin postear nada, hasta que el otro dia vino un amigo mio para que le echar a una ...
  #1 (permalink)  
Antiguo 01/09/2010, 06:19
 
Fecha de Ingreso: diciembre-2008
Mensajes: 49
Antigüedad: 15 años, 4 meses
Puntos: 1
Ayuda con este ejercicio

Buenas amigos,

Llevaba tiempo sin programar y sin postear nada, hasta que el otro dia vino un amigo mio para que le echar a una mano con unos ejercicios de c, uno de ellos me estuvo rayando la cabeza bastante, y lal final lo deje por imposible. Espero que me puedan echar una mano con el. Os dejo el enunciado el codigo que tengo implementado y donde me da el error (no se si es porq me falta alguna libreria cosa que dudo o nose... el caso es q esty desesperado) Un saludo a todos


1-Disponemos de un vector en el que cada posición es una estructura, el vector se denomina clientes, la estructura de cada posición del vector está constituida por los siguientes campos:

CLIENTE
nombre y apellidos cadena de hasta 30 caracteres
dni cliente cadena de hasta 9 caracteres
facturación entero

Se pide:
a)Realizar una función a la que se pasará el vector y devolverá el dni del cliente con facturación máxima.
b)Realizar una función que escriba por pantalla la facturación máxima y mínima entre todos los clientes


#include <stdio.h>
#include <stdlib.h>
#define N 3
struct cliente
{
char Nombre[30];
char dni[9];
int fact;
};
typedef struct cliente Clien;
void FactMax(Clien vect[]);


int main(int argc, char *argv[])
{
int i;
Clien Clientes[N];
for(i=0;i<N;i++)//Pido los dato y los recojo con scanf
{
printf("\n\tNombre cliente %.2d:",i+1);
scanf("%s",&Clientes[i].Nombre);
printf("\n\tDNI cliente %.2d:",i+1);
scanf("%s",&Clientes[i].dni);
printf("\n\tFacturacion cliente %.2d:",i+1);
scanf("%d",&Clientes[i].fact);
}
FactMax(Clientes);
/*for(i=0;i<=N;i++)//Para ver que me guarda bien los datos
{
printf("\n\tNombre:%s",Clientes[i].Nombre);
printf("\n\tDNI cliente %s",Clientes[i].dni);
printf("\n\tfacturacion cliente %d",Clientes[i].fact);
}*/


system("PAUSE");
return 0;
}

//******************EN ESTA FUNCION PETA**********************
//He depurado el código linea a linea y falla aquí, justo en la linea (int)vect[c].fact=(int)vect[c+1].fact;
void FactMax(Clien vect[])
{
int c, aux=0;
for(c=0;c<=N;c++)
{
if(vect[c].fact<vect[c+1].fact) {
aux=vect[c].fact;
(int)vect[c].fact=(int)vect[c+1].fact;
(int)vect[c+1].fact=aux;
}
}
printf("FATURACION MAXIMA:%s",vect[0].fact);
}

UN SALUDO Y ESPERO VUESTRA AYUDA GRACIAS!!!
  #2 (permalink)  
Antiguo 01/09/2010, 08:12
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Ayuda con este ejercicio

Los arreglos tienen indices de 0 al tamaño - 1.
Cuando c valga N
vect[c] es una zona no destinada a tu arreglo.
menos vect[n+1], pero el problema esta al lado izquierdo de la asignacion, por sobre el de la derecha.
  #3 (permalink)  
Antiguo 01/09/2010, 19:33
 
Fecha de Ingreso: septiembre-2010
Mensajes: 16
Antigüedad: 13 años, 8 meses
Puntos: 0
Mensaje Respuesta: Ayuda con este ejercicio

Código c:
Ver original
  1. /*
  2. 1-Disponemos de un vector en el que cada posición es una estructura, el vector se denomina clientes,
  3. la estructura de cada posición del vector está constituida por los siguientes campos:
  4. CLIENTE
  5. nombre y apellidos cadena de hasta 30 caracteres
  6. dni cliente cadena de hasta 9 caracteres
  7. facturación entero
  8.  
  9. Se pide:
  10. a)Realizar una función a la que se pasará el vector y devolverá el dni del cliente con facturación máxima.
  11. b)Realizar una función que escriba por pantalla la facturación máxima y mínima entre todos los clientes
  12. */
  13. #include <stdio.h>
  14. #include <stdlib.h>
  15. #include <string.h>
  16. #define N 3
  17. struct cliente
  18.     {
  19.         char Nombre[30];
  20.         char dni[9];
  21.         int fact;
  22.     };
  23. /* Nota: Ambas funciones(a)(b) del ejercicio*/
  24. void FactMaxMin(struct cliente registro[])
  25.     {
  26.         int c, factMIN=0, factMAX=0;
  27.         char name_max[30],dni_max[9];
  28.         for(c=0;c<N;c++){
  29.             if(registro[c].fact >= factMAX){
  30.                 factMAX=registro[c].fact;           /*Maxima facturacion + dni*/
  31.                 strcpy(dni_max,registro[c].dni);
  32.                 strcpy(name_max,registro[c].Nombre); /* +nombre (ver print en aplicacion)*/
  33.             }
  34.         }
  35.         factMIN=factMAX;
  36.         for(c=0;c<N;c++){
  37.             if(registro[c].fact < factMIN)      /* Minima facturacion*/
  38.                 factMIN=registro[c].fact;
  39.             }
  40.     printf("Facturacion Maxima entre clientes: %i\nFacturacion Minima entre clientes: %i\n",factMAX, factMIN);
  41.     printf("Cliente com mayor facturacion: [DNI: %s] %s : %i\n\n",dni_max,name_max,factMAX);
  42. }  
  43.  
  44. int main(int argc, char *argv[])
  45.     {
  46.     struct cliente registro[N];
  47.         int i;
  48.         for(i=0;i<N;i++)
  49.         {
  50.             printf("\n\tNombre cliente %.2d: ",i+1);
  51.             scanf("%s",registro[i].Nombre);
  52.             printf("\n\tDNI cliente %.2d: ",i+1);       /* Ingresando datos */
  53.             scanf("%s",registro[i].dni);
  54.             printf("\n\tFacturacion cliente %.2d: ",i+1);
  55.             scanf("%d",&registro[i].fact);
  56.         }
  57.         FactMaxMin(registro);
  58.     system("PAUSE");
  59. return 0;
  60. }

pd: No use punteros.
De nada. : - )

Última edición por logic_tristaN; 01/09/2010 a las 19:49 Razón: codigo
  #4 (permalink)  
Antiguo 05/09/2010, 17:50
 
Fecha de Ingreso: diciembre-2008
Mensajes: 49
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: Ayuda con este ejercicio

gracias chicos!!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:33.