Anuncios Google

necesito ayuda en C++

Estoy empezando en C++ y ya al segundo lab nos pide un problemazo que me quede flipando.Solo se que tengo que hacerla usando un vector(una matriz unidimensional) pero como????ayuda!!!!    Gracias

 

El programa a diseñar ha de permitir insertar 3 jugadores, que se han de ir almacenando en un
vector en posiciones consecutivas. Los campos a almacenar para cada jugador serán los
siguientes:
– Dorsal (puede tomar los valores desde 1 hasta 25)
– Puesto (base, escolta, alero, ala-pivot y pivot)
– Número de canastas
– Número de asistencias
– Número de rebotes
– Valor del jugador
Todos los datos se pedirán por pantalla excepto el valor del jugador, que se calculará
atendiendo a:
- Cada canasta tendrá un valor de 3 puntos.
- Cada asistencia tendrá un valor de 2 puntos.
- Cada rebote tendrá un valor de 1 punto.
Una vez concluida la inserción de jugadores el programa solicitará por teclado un dorsal. A
continuación el programa ha de localizar, para el jugador de ese dorsal, el porcentaje del “Valor
del jugador ” que tiene respecto al mejor jugador que ocupe su mismo puesto.
Dicho porcentaje se calculará de la siguiente manera por tanto:

  porcentaje(dorsal)=100xvalor jugador(dorsal)=maximo i{valor del jugador(i)/......

Por ejemplo, dados los participantes de la siguiente tabla, si se introduce el dorsal número 4 el
resultado ha de ser 75%, ya que en el puesto del jugador de dorsal número 4 (alero), el jugador
con mayor “Valor del jugador” tiene 80 puntos (dorsal 23), y 100 x 60 / 80 es 75.


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de joserc87

Que no entiendes?

Está bastante explicadito lo que tienes que ir haciendo, solo es ponerse.

Lo primero, te pide a gritos que utilizes un array de struct:

// Por ejemplo:
 
#include <iostream>
 
using namespace std;
 
enum TipoPuesto {
  base,
  escolta,
  alero,
  alaPivot,
  pivot
};
struct Jugador{
  int dorsal;
  TipoPuestoint puesto;
  int numCanastas;
  int numAsistencias;
  int numRebotes;
  float valor;
};
 
int main (int argc, char *argv []){
  // Si sabes a priori el número de jugadores, usas un array estático:
  const int NUM_MAX_JUGADORES = 100;
  struct Jugador jugadores [NUM_MAX_JUGADORES];
  int numJugadores = 0;
  // Si quieres generalizar el problema, sería:
  // cin >> numJugadores;
  // struct Jugador *jugadores = new [numJugadores];
  // Y al final hacer delete [] jugadores
 
  // Pedir los datos de los jugadores.
  cout << "Introduzca el numero de jugadores:";
  cin >> numJugadores;
  cout << endl;
  for (int i=0; i<numJugadores; i++){
    cout << "Jugador "<<i<< "\n\tIntroduzca el dorsal:";
    cin >> jugadores [i].dorsal;
    cout << "\n\tIntroduzca el puesto:";
    char buf [100];
    TipoPuesto puesto;
    cin >> buf;
    if (strcmp (buf, "base")==0){
      puesto=base;
    }else if (...){
 
    }else//...
 
    // Etc. Aquí simplemente sería ir recogiendo los datos.
    // Una vez recogidos todos los datos calculas el valor según el numero de canastas, asistencias y rebotes:
    jugadores [i].valor = jugadores [i].numCanastas*3 + jugadores [i].numAsistencias*2 + jugadores [i].numRebotes;
  }
  // Paso dos, solicitar un dorsal, buscar el jugador, buscar el mejor jugador con su puesto y calcular el porcentaje
  // Nota: Si se quiere hacer de forma eficiente, lo suyo sería ordenar el vector según el dorsal y hacer una búsqueda binaria, aunque yo lo hago con una busqueda lineal por simplicidad, porque lo vas a entender mejor y para que te lo pienses tú. También podríamos tener un array con las mejores puntuaciones de cada puesto que se puede calcular cuando se recogen los datos y que evitaría tener que calcularlos continuamente:
  int jug, dorsal;
  cout << "introduzca un dorsal...";
  cin >> dorsal;
  for (jug=0; jug<numJugadores && jugadores [jug].dorsal != dorsal; jug++);
  if (jug==numJugadores){cout << "No existe el dorsal " << dorsal << endl;
  else{
    float maxVal=0;
    for (int i=0; i<numJugadores; i++){
      if (jugadores [i].puesto == jugadores [jug].puesto && jugadores [i].valor > maxVal){
        maxVal = jugadores [i].valor;
      }
    }
    float porcentaje = 100.0*jugadores [jug].valor/maxVal;
    cout << "El procentaje del jugador "<<jug<< " es " << porcentaje << endl;
  }
}

Es solo un esquema. Lo suyo es que lo entiendas y lo hagas tu por tu cuenta. Además, me apuesto mi mano derecha a que no compila y tiene algún fallo ya que lo he hecho en 5 minutos sin probarlo ni nada. También tendría que tener un bucle que vaya pidiendo dorsales y calcule los porcentajes para que se puedan pedir más de uno.

A programar se aprende programando! no copies el código, guíate de él!

Si no se entiende algo (por ejemplo lo del strcmp) pregunta.

Saludos.


Be pointer my friend...

Dennis Ritchie. Padre de C y cocreador de UNIX.

R.I.P.

 

Imagen de Loopin

Veo muy poca versatilidad en

Veo muy poca versatilidad en tu codigo. Parece mas un codigo escrito en C, que en C++. A mi juicio, pide a gritos crear una clase Jugador con todos sus atributos, y para manejar cadenas de texto, lo suyo es usar la clase string no?

Aunque bueno cada uno lo hace a su manera...

Un saludo ;)


Imagen de joserc87

Por supuesto

Claro, yo tambien hubiese creado una clase jugador, hubiese metido los jugadores dentro de una lista list <Jugador>, etc. etc. Pero se supone que al comenzar a programar no se conocen ni las clases ni los arrays dinámicos, ni las listas... Así que no les voy a poner una cosa que no entiendan.

Saludos


Be pointer my friend...

Dennis Ritchie. Padre de C y cocreador de UNIX.

R.I.P.

 

Gracias

Lo he hecho en mi manera pero claro con tu ayuda.MUchas gracias,y dejo aqui lo que me salio

 

#include <iostream>
#include <strings.h>

using namespace std;

struct jugador_baloncesto {
  int dorsal;
  string puesto;
  int canastas;
  int asistencias;
  int rebotes;
  int valor;
};

int main()

{   
  jugador_baloncesto Jugador[4];
   
   for (int i=1; i<4; i++)
 {
   cout << "Introduce dorsal: ";
   cin >> Jugador[i].dorsal;
   cout << "El puesto: ";
   cin >> Jugador[i].puesto;
   cout << "Numero de canastas: ";
   cin >> Jugador[i].canastas;
   cout << "Introduce asistencias: ";
   cin >> Jugador[i].asistencias;
   cout << "Nr rebotes: ";
   cin >> Jugador[i].rebotes;
   Jugador[i].valor=Jugador[i].canastas*3 + Jugador[i].asistencias*2 + Jugador[i].rebotes;
   cout << "El valor del jugador " <<  i  << " es: " << Jugador[i].valor << endl;
}  int p;
   int jugador_buscado;
   int jugador_maximo;
   int dorsal_buscado;
   cout<<" Introduzca el dorsal buscado :";
   cin>> dorsal_buscado;
   for (int i=1; i<4; i++)

   {
       if (Jugador[i].dorsal==dorsal_buscado)
       {
           jugador_buscado = i;
       }
   }
   for (int i=1; i<4; i++)
   {
     if (Jugador[i].puesto==Jugador[jugador_buscado].puesto && Jugador[i].valor >Jugador[jugador_buscado])
   }
   cin>> jugador_maximo;
   p=100*Jugador[i].valor/jugador_maximo;
   cout<<"El porcentaje es : " << p << endl;
   
  return 0;

}

Imagen de joserc87

ERROR!!

Hola catalina. Bien por ti por hacerlo a tu manera. Es mucho más fácil en la mayoría de los casos crear el programa desde cero que adaptar uno ya existente (si es lo suficientemente pequeño).

No he ejecutado el código, pero a simple vista he visto un par de errores que son bastante comunes cuando se está aprendiendo a programar (o se ha aprendido a programar en Pascal xD):

- En C y en muchos lenguajes, los arrays se empiezan a indexar por 0, es decir array [0] es la primera posicion, array [1] es la segunda, etc.

- Si haces un for (int i=1;i<4;i++)en realidad solo itera 3 veces: i=1, i=2, i=3!! Te recomiendo que i empiece en 0 en lugar de 1 EN GENERAL. Otra opción es que empiece en 1 y la condición sea i<=4 en lugar de i<4 e indexes el vector como array [i-1] (aunque la segunda te parezca mejor al principio, a la larga seguro que eliges la primera por comodidad). Con el tiempo la frase for (int i=0; i<x; i++) será la sentencia que más usualmente escribas y no tendrás ni que pensarlo xD.

- Aunque no es un error fijar el numero de jugadores a 4, si quieres añadir un jugador más, puede ser un follón. Te recomiendo crearte una constante const int num_max_jugadores=4; y sustituir todos los 4 del código por esta constante!!

- Antes de cout << "introduzca el dorsal..." CREO que te faltaría un while (!salir) donde salir será un int salir=0; y al final del while (que abarca el resto del código sin el return) pondría cout << "Salir?"; cin >> si_no; if (!strcmp (si_no, "no"))salir=1;

Básicamente para que puedas realizar varias consultas sin tener que reintroducir los datos! (imagínate que en lugar de ser 4 jugadores fuesen 1 millón y cada vez que quieres calcular el porcentaje tienes que introducirlos).

Saludos!


Be pointer my friend...

Dennis Ritchie. Padre de C y cocreador de UNIX.

R.I.P.

 

puesto

hola catalina yo tengo esa misma practica y mi pregunta era comohiciste con lo del puesto ? llegaste a hacerlocomo dato enumerado porque miprofesora todavia no dio esa teoria y  a ver si me aclaras esa parte .. gracias

C++

Hola.Todavia no he acabado el programa,no me funciona solo hasta la mitad.Lo del puesto...buena pregunta.No se lo que le voy hacer porque de tipo string no me reconoce la libreria string.h.Tal vez lo dejo tipo char o voy a ponerlo con enum a ver si me sale.A ti te salio ?

Imagen de joserc87

String y enum

Hola. Si aún no habeis dado los enum, podeis hacerlo con enteros constantes, es decir, en lugar de poner :

enum TipoPuesto {
  base,
  escolta,
  alero,
  alaPivot,
  pivot
};

podeis poner:

const int base=0;
const int escolta=1;
const int alero=2;
const int alaPivot=3;
const int pivot=4;

Si aún no habeis dado las constantes, quitad la palabra const ;).

Catalina, si es el compilador de C++ prueba a incluir string sin .h o cstring:

#include <cstring>
#include <string>


Be pointer my friend...

Dennis Ritchie. Padre de C y cocreador de UNIX.

R.I.P.

 

c++ y mas

Ahora ademas de esto,tenemos que agregar al programa...no se como pero lo voy a intentar.Quien quiere ayudarme le agradesco.

 

Partiendo del código desarrollado en la práctica anterior, se pide:
- Realizar los cambios necesarios para permitir gestionar varios equipos (Se deberá almacenar un
código de equipo).
- Estructurar el código mediante subprogramas, haciendo especial hicapié en el correcto uso de
variables globales, locales y el paso de parámetros.
Como mínimo se deberán implemetar los siguientes subprogramas:
- Insertar club
- Insertar jugador
- Cálculo del porcentaje del “Valor del jugador ”
- Visualizar datos del club
- Visualizar jugador
- Crear un menú con las siguientes opciones:
- Insertar club
- Insertar jugador
- Calucalar valor
- Visualizar club
- Visualizar jugador
- Cálculo del porcentaje del “Valor del jugador ”

Imagen de joserc87

Clubes

Bueno, esta vez creo que no voy a escribir nada de código porque creo que no es necesario. Simplemente hay que darse cuenta que un Club está compuesto de un código entero y varios Jugadores (las palabras en negrita tienen una traducción directa a C++...). En el problema se pide gestionar varios clubes. Para las funciones simplemente hay que darse cuenta qué datos necesitan para obtener el resultado y pasárselos como parámetros. Como consejo adicional, no uséis datos globales si no son constantes (por ejemplo, el número máximo de jugadores o de clubes), a no ser que se pida lo contrario, como que el array de clubes sea global. Yo lo crearía en el main y se pasa como param a las funciones.

No digo nada para no meter la pata, ya que se trata de que lo penséis vosotros. Como antes, creo que solo es ponerse. Sin embargo si os atascáis o tenéis alguna duda decidlo y doy más pistas ;).


Be pointer my friend...

Dennis Ritchie. Padre de C y cocreador de UNIX.

R.I.P.

 

A ver que me sale esta

A ver que me sale esta noche.No he entendido todos tus consejos pero algunos si me dan alguna ideaa....

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.