Ayuda con ejercicio!

Iniciado por Mr.Blue, 21 Octubre 2010, 05:07 AM

0 Miembros y 1 Visitante están viendo este tema.

Mr.Blue

Hola, bueno expongo el ejercicio primero y lo que tengo, que es todo pero tengo errores :S

Aca el problema:
Realizar un prog q permita calcular los importes que se les liquida a los 12 choferes de una empresa de colectivos de acuerdo a la cantidad de kilometros recorridos, y el tipo de vehiculo que conduce, en un dia.
Los datos a ingresar son:

Nombre (20 caracteres validos), patente (6 caracteres validos),  KMinicial, KMfinal, y tipo

Los Kilomtros finales se calculan
KMfinal - KMinicial.

Luego a los km finales se calcula segun su tipo una tarifa segun
tipo=1   --->0.70$ x KM
tipo=2  ----> 0.90$ x KM
(Hay q validad tipo)
Se debe informar:

A- Cuantos ganan mas que el promedio y quienes son (Nombre y patente)
b- Cual es el porcentaje del total de la liquidaciones que le corresponde al ingresado en ultimo termino.

Nota: Se deben usar almenos 2 funciones, no usar variables, arrays, ni funciones globales.
Nota 2: Agregado por mi ya que el usuario es bueno, no hay overflow (Osea que el nombre no sobrepasa los 20 carateres, ni la patente).
PD: Lo agrego porq al porf tampoco quiere que lo controlemos. Se que se debe controlar, pero me acoto a lo que me piden.

Resolucion del problema con fallas :S

#include <stdio.h>

int main ()
{
   char nomb [12][21], pat [12][7];
   int veckm [12][3], vectipo [12] [1];
   
   void ingresar(char nomb[12][21], char pat [12][7], int veckm [12][3], int vectipo [12][1] );
   void calcular (char nomb[12][21], char pat[12][7], int veckm [12][3], int vectipo [12][1]);
   
   ingresar (nomb, pat, veckm, vectipo);
   calcular (nomb, pat, veckm, vectipo);
   
   getchar ();
   return 0;
}

void ingresar (char nomb[12][21],char pat[12][7],int veckm[12][3],int vectipo [12][1])
//declaro variables temporales para el ingreso que luego son enviadas a los vectores
{ int i, tipo1, ki, kf
 char nombres[21];
 char pate[7];

for (i=0; i<13; i++){
   printf ("Ingrese el nombre del chofer:\n");
   gets (nombres);
   printf ("Ingrese la patente:\n");
   gets (pate);
   printf ("Ingrese Km Inicial:\n");
   scanf ("%i",&ki);
   printf ("Ingrese Km Final:\n");
   scanf ("%i",&kf);
do{
   puts ("Ingrese tipo:\n");
   scanf ("%d", &tipo1);              
}while (tipo1>1 && tipo1<2)
//Cargo en el vector el tipo    
   vectipo [i][1]=tipo1;
//cargo en los dos vectores los 12 choferes segun la posicion de i    
   nomb [i][]=nombres;
   pat [i][]=pate;
//cargo en un vector de 15 por 3, para la col 0 ki, para col 1 kf, y en col 2 la dif de ambos        
   veckm [i][0]=ki;
   veckm [i][1]=kf;
   veckm [i][2]=ki-kf;
//hasta aca esta echo el ingreso
}
     
void calcular (char nomb[12][21],char pat[12][7],int veckm[12][3],int vectipo [12][1])
{
int i=0;
float prom, tot;
   
    for (i=0; i<13;i++){
        if (vectipo[i][1]==1){
        veckm [i][2]=veckm [i][2]*.70;}
        else {
        veckm [i][2]=veckm [i][2]*.90;
        }
        tot+=veckm[i][2];
        }
       
        prom=tot/12;


    for (i=0;i<13;i++){
       if (veckm [i][2]>prom)
       printf ("%s gana mas que el promedio y tiene la patente:%s\n",nomb[i][], pat[i][]);
       }
    printf ("El porsentaje que le coresponde al ultimo ingresado %s es:%f\a",nomb[12][],(veckm [12][2]*100)/tot);
}

ERROR
CitarC:\Users\juanca\Desktop\Untitled11.c||In function `ingresar':|
C:\Users\juanca\Desktop\Untitled11.c|21|error: syntax error before "char"|
C:\Users\juanca\Desktop\Untitled11.c|26|error: `nombres' undeclared (first use in this function)|
C:\Users\juanca\Desktop\Untitled11.c|26|error: (Each undeclared identifier is reported only once|
C:\Users\juanca\Desktop\Untitled11.c|26|error: for each function it appears in.)|
C:\Users\juanca\Desktop\Untitled11.c|38|error: syntax error before "vectipo"|
C:\Users\juanca\Desktop\Untitled11.c|40|error: syntax error before ']' token|
C:\Users\juanca\Desktop\Untitled11.c|41|error: syntax error before ']' token|
C:\Users\juanca\Desktop\Untitled11.c||In function `calcular':|
C:\Users\juanca\Desktop\Untitled11.c|68|error: syntax error before ']' token|
C:\Users\juanca\Desktop\Untitled11.c|70|error: syntax error before ']' token|
||=== Build finished: 9 errors, 0 warnings ===|



Desde ya gracias, acepto sugerencias.
Y si es posible si dan alguna resolucion o comentario, que se adecue a mi logica o estructuracion, para poder entenderlo mejor yo.
Si no sigen mi logica o quieren hacerlo por su cuenta, pongan comentarios para poder entenderlo.

Saludos.

clodan

#1
te han enseñado a usar estructuras??

Lh: No hagas doble post, utiliza el botón modificar.

nomb [??]=nombres;
pat [??]=pate;

no va a guardar algo en donde no pones nada...

osea... si vos pones un arreglo de 2 dimensiones, y dejas un espacio vacio no va a encontrar nada...

osea, vos declaras el arreglo:

char HOLA[10][10];

entonces, cuando vos digas:

HOLA[1][1]=1;

le va a asignar a la casilla 1x1 el numero 1... pero si vos decis:

HOLA[1][]=1

el c++ se te va a quedar mirandote y pensando este flaco qe me quiso decir ajajjaja

osea, si vos tenes qe llenar todas las casillas del arreglo usar un for o algo asi para llenarlas!

salu2!

Mr.Blue

#2
Entonces deberia debalcar mi vector de la siguiente manera

char nombre [13][1];


for (i=0;i<13;i++){

puts ("ingrese nombre:");
gets (nom);
nombre [1]=nom;
}

PD. No estructuras no vimos :S.

Gracias! un saludo

Pd. como puedo guardar una cadena dentro de un matriz?

PiroskY


Mr.Blue

#4
#include <stdio.h>

int main ()
{
   char nomb [12][21], pat [12][7];
   int veckm [12][2], vectipo [12];

   void ingresar(char nomb[12][21], char pat [12][7],int veckm [12][2], int vectipo [12]);
   void calcular (char nomb[12][21], char pat[12][7],int veckm [12][2], int vectipo [12]);

   ingresar (nomb, pat, veckm, vectipo);
   calcular (nomb, pat, veckm, vectipo);

   getchar ();
   return 0;
}
/*------------------------------Funciones-----------------------------------------------------*/
void ingresar (char nomb[12][21],char pat[12][7],int veckm[12][2],int vectipo [12])
//declaro variables temporales para el ingreso que luego son enviadas a los vectores
{
   int i, tipo1, ki, kf, h, w;
 char nombres[21];
 char pate[7];

for (i=0; i<13; i++){
   printf ("Ingrese el nombre del chofer:\n");
   gets (nombres);
   printf ("Ingrese la patente:\n");
   gets (pate);
   printf ("Ingrese Km Inicial:\n");
   scanf ("%i",&ki);
   printf ("Ingrese Km Final:\n");
   scanf ("%i",&kf);
do{
   puts ("Ingrese tipo:\n");
   scanf ("%d", &tipo1);
}while (tipo1>1 && tipo1<2);
//Cargo en el vector el tipo
   vectipo [i]= tipo1;
//cargo en los dos vectores los 12 choferes segun la posicion de i
   for (h=0;h<21;h++){
   nomb [i][h]= nombres[h];
   }
   for (w=0;w<7;w++){
   pat [i][w]= pate[w];
   }
//cargo en un vector de 15 por 3, para la col 0 ki, para col 1 kf, y en col 2 la dif de ambos
   veckm [i][0]=ki;
   veckm [i][1]=kf;
   veckm [i][2]=kf-ki;
//hasta aca esta echo el ingreso
}
}
/*------------------------------Funciones-----------------------------------------------------*/
void calcular (char nomb[12][21],char pat[12][7],double int veckm[12][2],int vectipo [12])

{                    /------------------------------> Linea 57
int i;
float prom=0, tot=0;

    for (i=0; i<13;i++){
        if (vectipo[i]==1)
        veckm [i][2]=veckm [i][2]*0.70;
        else
        veckm [i][2]=veckm [i][2]*0.90;

        tot+=veckm[i][2];
        }

        prom=tot/12;


    for (i=0;i<13;i++){
       if (veckm [i][2]>prom)
       printf ("%s gana mas que el promedio y tiene la patente:%s\n",nomb[i], pat[i]);
       }
    printf ("El porsentaje que le coresponde al ultimo ingresado %s es:%f\a",nomb[12],(veckm [12][2]*100)/tot);
}



Error
CitarC:\Users\juanca\Desktop\prueba prog.cpp|57|error: extraneous `int' ignored|

Littlehorse

A simple vista el primer error es este:

Código (cpp) [Seleccionar]
double int veckm[12][2]

2 o mas tipos diferentes en una misma declaración.

  • Enteros: short int, int, long int, long long int
  • Números en coma flotante: float, double, long double

An expert is a man who has made all the mistakes which can be made, in a very narrow field.

Mr.Blue

si ahi mande un poco de fruta porq me habia dado este error

CitarC:\Users\juanca\Desktop\prueba prog.cpp||In function `void calcular(char (*)[21], char (*)[7], int (*)[2], char*)':|
C:\Users\juanca\Desktop\prueba prog.cpp|63|warning: converting to `int' from `double'|
C:\Users\juanca\Desktop\prueba prog.cpp|65|warning: converting to `int' from `double'|
||=== Build finished: 0 errors, 2 warnings ===|

Esto me tira cuando le saco el double.

Gracias por la ayuda!

Littlehorse

Vas a calcular números en coma flotante o enteros? lo que te da son advertencias por posibles perdidas de datos. Revisa bien la teoría respecto de los tipos de datos en C.

Saludos

An expert is a man who has made all the mistakes which can be made, in a very narrow field.

Mr.Blue

Ahhhh, ahi esta ahora si, el tema era ahi cuadno multiplico por 0.70 o .90 eso me da un float seguro, y el matriz es entera. jeje
Gracias litterhorse