elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con ejercicio!
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con ejercicio!  (Leído 3,459 veces)
Mr.Blue


Desconectado Desconectado

Mensajes: 441



Ver Perfil WWW
Ayuda con ejercicio!
« en: 21 Octubre 2010, 05:07 am »

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

Código
  1. #include <stdio.h>
  2.  
  3. int main ()
  4. {
  5.    char nomb [12][21], pat [12][7];
  6.    int veckm [12][3], vectipo [12] [1];
  7.  
  8.    void ingresar(char nomb[12][21], char pat [12][7], int veckm [12][3], int vectipo [12][1] );
  9.    void calcular (char nomb[12][21], char pat[12][7], int veckm [12][3], int vectipo [12][1]);
  10.  
  11.    ingresar (nomb, pat, veckm, vectipo);
  12.    calcular (nomb, pat, veckm, vectipo);
  13.  
  14.    getchar ();
  15.    return 0;
  16. }
  17.  
  18. void ingresar (char nomb[12][21],char pat[12][7],int veckm[12][3],int vectipo [12][1])
  19. //declaro variables temporales para el ingreso que luego son enviadas a los vectores
  20. { int i, tipo1, ki, kf
  21.  char nombres[21];
  22.  char pate[7];
  23.  
  24. for (i=0; i<13; i++){
  25.    printf ("Ingrese el nombre del chofer:\n");
  26.    gets (nombres);
  27.    printf ("Ingrese la patente:\n");
  28.    gets (pate);
  29.    printf ("Ingrese Km Inicial:\n");
  30.    scanf ("%i",&ki);
  31.    printf ("Ingrese Km Final:\n");
  32.    scanf ("%i",&kf);
  33. do{
  34.    puts ("Ingrese tipo:\n");
  35.    scanf ("%d", &tipo1);              
  36. }while (tipo1>1 && tipo1<2)
  37. //Cargo en el vector el tipo    
  38.    vectipo [i][1]=tipo1;
  39. //cargo en los dos vectores los 12 choferes segun la posicion de i    
  40.    nomb [i][]=nombres;
  41.    pat [i][]=pate;
  42. //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        
  43.    veckm [i][0]=ki;
  44.    veckm [i][1]=kf;
  45.    veckm [i][2]=ki-kf;
  46. //hasta aca esta echo el ingreso
  47. }
  48.  
  49. void calcular (char nomb[12][21],char pat[12][7],int veckm[12][3],int vectipo [12][1])
  50. {
  51. int i=0;
  52. float prom, tot;
  53.  
  54.     for (i=0; i<13;i++){
  55.         if (vectipo[i][1]==1){
  56.         veckm [i][2]=veckm [i][2]*.70;}
  57.         else {
  58.         veckm [i][2]=veckm [i][2]*.90;
  59.         }
  60.         tot+=veckm[i][2];
  61.         }
  62.  
  63.         prom=tot/12;
  64.  
  65.  
  66.     for (i=0;i<13;i++){
  67.        if (veckm [i][2]>prom)
  68.        printf ("%s gana mas que el promedio y tiene la patente:%s\n",nomb[i][], pat[i][]);
  69.        }
  70.     printf ("El porsentaje que le coresponde al ultimo ingresado %s es:%f\a",nomb[12][],(veckm [12][2]*100)/tot);
  71. }
  72.  
ERROR
Citar
C:\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.


« Última modificación: 21 Octubre 2010, 05:14 am por Sr.Blanco » En línea

clodan

Desconectado Desconectado

Mensajes: 277



Ver Perfil
Re: Ayuda con ejercicio!
« Respuesta #1 en: 21 Octubre 2010, 16:12 pm »

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!


« Última modificación: 21 Octubre 2010, 17:30 pm por Littlehorse » En línea

Mr.Blue


Desconectado Desconectado

Mensajes: 441



Ver Perfil WWW
Re: Ayuda con ejercicio!
« Respuesta #2 en: 21 Octubre 2010, 18:32 pm »

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?
« Última modificación: 21 Octubre 2010, 19:17 pm por Sr.Blanco » En línea

PiroskY

Desconectado Desconectado

Mensajes: 76


пирожки


Ver Perfil
Re: Ayuda con ejercicio!
« Respuesta #3 en: 21 Octubre 2010, 20:46 pm »

Con un ciclo
En línea

Mr.Blue


Desconectado Desconectado

Mensajes: 441



Ver Perfil WWW
Re: Ayuda con ejercicio!
« Respuesta #4 en: 22 Octubre 2010, 00:58 am »

Código
  1. #include <stdio.h>
  2.  
  3. int main ()
  4. {
  5.    char nomb [12][21], pat [12][7];
  6.    int veckm [12][2], vectipo [12];
  7.  
  8.    void ingresar(char nomb[12][21], char pat [12][7],int veckm [12][2], int vectipo [12]);
  9.    void calcular (char nomb[12][21], char pat[12][7],int veckm [12][2], int vectipo [12]);
  10.  
  11.    ingresar (nomb, pat, veckm, vectipo);
  12.    calcular (nomb, pat, veckm, vectipo);
  13.  
  14.    getchar ();
  15.    return 0;
  16. }
  17. /*------------------------------Funciones-----------------------------------------------------*/
  18. void ingresar (char nomb[12][21],char pat[12][7],int veckm[12][2],int vectipo [12])
  19. //declaro variables temporales para el ingreso que luego son enviadas a los vectores
  20. {
  21.    int i, tipo1, ki, kf, h, w;
  22.  char nombres[21];
  23.  char pate[7];
  24.  
  25. for (i=0; i<13; i++){
  26.    printf ("Ingrese el nombre del chofer:\n");
  27.    gets (nombres);
  28.    printf ("Ingrese la patente:\n");
  29.    gets (pate);
  30.    printf ("Ingrese Km Inicial:\n");
  31.    scanf ("%i",&ki);
  32.    printf ("Ingrese Km Final:\n");
  33.    scanf ("%i",&kf);
  34. do{
  35.    puts ("Ingrese tipo:\n");
  36.    scanf ("%d", &tipo1);
  37. }while (tipo1>1 && tipo1<2);
  38. //Cargo en el vector el tipo
  39.    vectipo [i]= tipo1;
  40. //cargo en los dos vectores los 12 choferes segun la posicion de i
  41.    for (h=0;h<21;h++){
  42.    nomb [i][h]= nombres[h];
  43.    }
  44.    for (w=0;w<7;w++){
  45.    pat [i][w]= pate[w];
  46.    }
  47. //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
  48.    veckm [i][0]=ki;
  49.    veckm [i][1]=kf;
  50.    veckm [i][2]=kf-ki;
  51. //hasta aca esta echo el ingreso
  52. }
  53. }
  54. /*------------------------------Funciones-----------------------------------------------------*/
  55. void calcular (char nomb[12][21],char pat[12][7],double int veckm[12][2],int vectipo [12])
  56.  
  57. {                    /------------------------------> Linea 57
  58. int i;
  59. float prom=0, tot=0;
  60.  
  61.     for (i=0; i<13;i++){
  62.         if (vectipo[i]==1)
  63.         veckm [i][2]=veckm [i][2]*0.70;
  64.         else
  65.         veckm [i][2]=veckm [i][2]*0.90;
  66.  
  67.         tot+=veckm[i][2];
  68.         }
  69.  
  70.         prom=tot/12;
  71.  
  72.  
  73.     for (i=0;i<13;i++){
  74.        if (veckm [i][2]>prom)
  75.        printf ("%s gana mas que el promedio y tiene la patente:%s\n",nomb[i], pat[i]);
  76.        }
  77.     printf ("El porsentaje que le coresponde al ultimo ingresado %s es:%f\a",nomb[12],(veckm [12][2]*100)/tot);
  78. }


Error
Citar
C:\Users\juanca\Desktop\prueba prog.cpp|57|error: extraneous `int' ignored|
« Última modificación: 22 Octubre 2010, 13:54 pm por Sr.Blanco » En línea

Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: Ayuda con ejercicio!
« Respuesta #5 en: 22 Octubre 2010, 16:50 pm »

A simple vista el primer error es este:

Código
  1. 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

En línea

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


Desconectado Desconectado

Mensajes: 441



Ver Perfil WWW
Re: Ayuda con ejercicio!
« Respuesta #6 en: 22 Octubre 2010, 17:04 pm »

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

Citar
C:\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!
En línea

Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: Ayuda con ejercicio!
« Respuesta #7 en: 22 Octubre 2010, 17:14 pm »

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

En línea

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


Desconectado Desconectado

Mensajes: 441



Ver Perfil WWW
Re: Ayuda con ejercicio!
« Respuesta #8 en: 22 Octubre 2010, 18:07 pm »

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
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines