Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: maikelowen en 10 Enero 2015, 12:55 pm



Título: Ejercicio
Publicado por: maikelowen en 10 Enero 2015, 12:55 pm
(http://i62.tinypic.com/wjbbwi.jpg)

No sé como se hace este ejercicio, ¿me podrían echar una mano?


Título: Re: Ejercicio
Publicado por: SrCooper en 10 Enero 2015, 13:16 pm
1.- ¿Este ejercicio lo tienes que hacer en C o en C++? Porque la cosa cambia bastante...

2.- Resolvemos y aclaramos dudas, pero no hacemos tareas, escribe por lo menos lo que llevas hecho, como has pensado que podrías resolverlo, si hay algo que no sabrías muy bien como hacer, etc. Intenta que parezca que por lo menos te has esforzado en pensar como resolverlo y no vienes aquí simplemente para que te hagan la tarea.


Dejando esto aparte, si he comprendido bien tienes que hacer una función que coja un vector y su longitud, lea la entrada del teclado y busque lo que ha leído en el vector, para después modificarlo, ¿no? Lo primero sería definir la estructura para guardar la información de cada corredor. Eso es bastante básico.

Después, la cosa varia entre C y C++. En C++ el vector se representaría con std::vector. En C probablemente tendrías que usar punteros y realocar el tamaño en memoria para añadir los nuevos corredores.

Un saludo


Título: Re: Ejercicio
Publicado por: maikelowen en 10 Enero 2015, 14:57 pm
estoy pillado aqui ;(
Uso c++

No tengo problema con lo de subir las carreras si en la nueva carrera el corredor vuelve a participar. Pero cuando hay nuevos corredores no se añadirlos al array que tenia.Se supone que el tamaño lo aumentaré cuando haya un nuevo corredor... pero como meto esos datos exactamente en el tamaño que he creado ?¿¿?¿¿??¿
Código
  1. /*
  2.  * File:   main.cpp
  3.  * Author: owen
  4.  *
  5.  * Created on 10 de enero de 2015, 13:36
  6.  */
  7.  
  8. #include <cstdlib>
  9. #include <iostream>
  10.  
  11. using namespace std;
  12.  
  13.  
  14. struct corredor {
  15.  
  16.    string dni;
  17.    int carreras;
  18.  
  19.  
  20. };
  21.  
  22.  
  23.  
  24. void funcion(corredor c[],int tam){
  25.  
  26.  
  27.    int participantes;
  28.  
  29.    cout<<"Participantes nueva carrera: ";
  30.    cin>>participantes;
  31.  
  32.    corredor *nuevo = new corredor [tam];
  33.  
  34.  
  35.  
  36.    for(int i=0;i<participantes;i++){
  37.        cout<<"Introduce dni: ";
  38.        cin>>nuevo[i].dni;
  39.  
  40.        for(int j=0;j<tam;j++){
  41.            if(nuevo[i].dni==c[j].dni){
  42.                c[j].carreras++;
  43.            }
  44.  
  45.        }
  46.  
  47.  
  48.  
  49.        cout<<"Introduce carreras: ";
  50.        cin>>nuevo[i].carreras;
  51.  
  52.  
  53.    }
  54.  
  55.  
  56.  
  57.  
  58.  
  59.    cout<<endl;
  60.    cout<<"<-------------------------------->"<<endl;
  61.  
  62.    for(int i=0;i<tam;i++){
  63.  
  64.        cout<<"dni: "<<c[i].dni<<endl;
  65.        cout<<"carreas: "<<c[i].carreras<<endl;
  66.        cout<<endl;
  67.  
  68.    }
  69.  
  70.  
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  
  79.  
  80.  
  81. }
  82.  
  83.  
  84. int main(int argc, char** argv) {
  85.  
  86.  
  87.    // Establezco un tamaño en principio de 2, que puede que varie o que no
  88.    int tam=2;
  89.  
  90.    corredor *c = new corredor [tam];
  91.  
  92.    for(int i=0;i<2;i++){
  93.  
  94.  
  95.        cout<<"corredor numero "<<i<<": "<<endl;
  96.  
  97.        cout<<"Introduce dni: ";
  98.        cin>>c[i].dni;
  99.        cout<<"Introduce carreras: ";
  100.        cin>>c[i].carreras;
  101.        cout<<endl;
  102.  
  103.    }
  104.  
  105.    // Le paso el array de corredores a la funcion
  106.  
  107.  
  108.    funcion(c,tam);
  109.  
  110.  
  111.  
  112. }
  113.  

Mod: Usa etiquetas GeSHi cuando publiques código


Título: Re: Ejercicio
Publicado por: SrCooper en 12 Enero 2015, 20:45 pm
Bien, si estás usando C++ y necesitas arrays de tamaño variable, deberías usar std::vector. La cosa se simplifica mucho, mira:

Lo primero, incluyes la libería:
Código
  1. #include <vector>

El vector se crea así:
Código
  1. std::vector<corredor> corredores;

Ahora mismo el vector tiene tamaño 0. Para incrementar su tamaño y a la vez añadir un elemento usas el método push_back:
Código
  1. corredor c;
  2. c.dni = "Lo que sea";
  3. c.carreras = 2;
  4.  
  5. corredores.push_back(corredor);

Cuando pases el vector como parámetro de una función no hace falta que incluyas el tamaño, pues el vector tiene un método que te permite conocerlo. De este modo, para iterar sobre un vector se pude hacer así:
Código
  1. for (int i = 0; i < corredores.size(); ++i) {
  2.    //Puedes hacer los cambios que quieras como si se tratase de cualquier otro array
  3.   corredores[i] = ;
  4. }

Te recomendaría que le echases un vistazo tranquilamente a la clase vector, e intentases volver a escribir tu programa utilizandola. Si tienes algún problema o hay algo que no entiendes no dudes en publicarlo por aquí.

Un saludo :D

PD: Siento la tardanza, estaba sin ordenador  :xD