[C con Clase] Duda con estructuras
Oscar
pelucheloko en hotmail.com
Lun Jul 16 11:39:01 CEST 2012
-----Mensaje original-----
From: Steven Davidson
Sent: Monday, July 16, 2012 2:18 AM
To: Lista de correo sobre C y C++
Subject: Re: [C con Clase] Duda con estructuras
Hola Óscar,
Ya te han contestado, pero quiero comentar tu código fuente.
On 7/15/2012 11:27 AM, Oscar wrote:
> ************* Mi código : ****************
> #include <iostream>
> #include <stdio.h>
> #include <string.h>
En C++, los ficheros de cabecera estándares originalmente de C son:
<cstdio> y <cstring>, respectivamente. En tu caso, no necesitas
<cstdio>, porque usas <iostream>.
> using namespace std;
> struct Tjugadores {
Aconsejo un mejor nombre, ya que este tipo de dato no representa varios
jugadores, sino solamente uno. Usaría el nombre 'Tjugador'.
> char nombre[100];
> int puntos;
> };
> int main()
> {
> struct Tjugadores lista[6];
No necesitas escribir 'struct'. C++ entiende que 'Tjugadores' es un tipo
de dato definido a partir de 'struct'.
>>> ¿Significa eso que se podría declarar asi? :
>>> Tjugador lista [6]
> char mayorj[100];
> char menorj[100];
> int mayorp;
> int menorp;
No necesitas definir estas cuatro variables. Al fin y al cabo, lo que
estás haciendo es determinando cuál jugador es el mayor y cuál el menor.
Para representar jugadores, creamos el tipo 'Tjugadores', o 'Tjugador',
como sugerí antes. Esto es,
Tjugador mayor, menor;
>>> ¿Aquí lo que estas creando es "algo" ¿variables? ¿para guardar el mayor
>>> y el menor jugador?
La ventaja es que podemos copiar registros usando el operador de
asignación. Por ejemplo,
menor = mayor = lista[0];
Y sí, las cadenas de caracteres se copian implícitamente.
Por otro lado, el copiar 104 bytes (más o menos) constantemente no es la
mejor forma de afrontar este problema. Típicamente, en estos casos,
hacemos uso del índice del array, ya que representa a cada registro (o
estructura). Por lo tanto, haríamos esto:
int menor, mayor;
menor = mayor = 0; // índice 0 => primer elemento del array
>>> ¿pero esto no es como declarar dos variables cualesquiera y asignarles
>>> el valor de o?
Y ahora usaríamos estos índices. Por ejemplo,
if( lista[n].puntos > lista[mayor].puntos )
mayor = n;
Así no tenemos que estar guardando la misma información en diferentes
sitios.
> int n;
> for (n=0; n<=5; n++)
> {
> cout << "Ponga el nombre del jugador : ";
> cin >> lista[n].nombre;
> cout << "Nota de " << lista[n].nombre << " : ";
> cin >> lista[n].puntos;
> }
> mayorp = lista[0].puntos;
> menorp = lista[0].puntos;
> strcpy (mayorj, lista[0].nombre);
> strcpy (menorj, lista[0].nombre);
> for(n=0; n<=5; n++)
No sugiero comenzar por n=0, porque ya hemos tratado este caso
previamente, como un caso especial. Esto es justamente lo que hace el
autor del código original.
> if (lista[n].puntos > mayorp)
> {
> mayorp = lista[n].puntos;
> strcpy(mayorj, lista[n].nombre);
> }
> if (lista[n].puntos < menorp)
Aquí sugiero usar 'if/else'; esto es,
>>> lo del if else lo pensé, pero decidí seguir el patrón del autor.
if( ... )
{
// mayor
...
}
else if( ... )
{
// menor
...
}
> {
> menorp = lista[n].puntos;
> strcpy(menorj, lista[n].nombre);
> }
> cout << "El jugador con mas puntos es : " << mayorj << endl;
> cout << "El jugador con menor puntos es : " << menorj << endl;
Recuerda que C++ obliga a 'main()' a retornar un entero. Por convenio,
se retorna 0 (cero) para indicar una terminación correcta del programa.
> }
> Un saludo y gracias
>
>
Espero que esto te ayude.
Steven
>>> gracias por la aclaración :-)
_______________________________________________
Lista de correo Cconclase Cconclase en listas.conclase.net
http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
Más información sobre la lista de distribución Cconclase