[C con Clase] Consulta sobre c++
Steven Davidson
srd4121 en njit.edu
Jue Oct 7 21:13:19 CEST 2010
Hola Fernando,
On 10/7/2010 2:25 PM, Fernando Samaha wrote:
> Hola, estoy haciendo un curso de c++ (soy novato) y quería hacer una
> pregunta sobre un array que en principio tiene un índice "i"
> numérico. Lo que quiero lograr es que si el índice es igual a 1, una
> variable char "a" sea igual a "casa", por ejemplo. Esto se puede
Primeramente, 'a' no es un 'char', sino un array de 'char'. Esto es una
diferencia notable.
> hacer o chocan los tipos de datos (int y char)?
>
En tu caso, esto no debería suponer un problema.
> Lo que hice hasta ahora es lo siguiente que me da errores:
>
Veamos el código fuente
> #include<iostream.h>
> #include<time.h>
> #include<stdlib.h>
> #include<iomanip.h>
Estos nombres no son correctos para el estándar actual de C++. Si tienes
un compilador antiguo, entonces no los cambies. Los nombres correctos son:
#include <iostreamh>
#include <ctime>
#include <cstdlib>
#include <iomanip>
// También agrega la siguiente línea después de la inclusión anterior
using namespace std;
> int main(){
> const int maximo=14;
Típicamente, las constantes se definen globalmente.
> int aleatorio(maximo);
Esto es incorrecto. Aparentas definir un prototipo llamado 'aleatorio'.
Sin embargo, tu programa usa 'aleatorio' como un array, y no como una
función.
Deberías usar corchetes [] y no paréntesis (). Esto es,
int aleatorio[maximo];
> int i, x=1;
> char a[9];
> srand((unsigned) time(NULL));
> for(i=0; i<maximo;++i){
> aleatorio[i]=rand%4;
> if(aleatorio[i]=0){
Esto es gramaticalmente correcto, pero lógicamente erróneo. Aquí estás
asignando (copiando) el valor de 0 al elemento de índice 'i' del array
'aleatorio'. Recuerda que el operador = indica asignación y == indica
comparación de igualdad.
Esto debería ser:
if( aleatorio[i] == 0 )
> a="Local";
En C/C++, un array es tratado como una dirección de memoria constante.
Por lo tanto, aquí estás intentando asignar la dirección de memoria de
"Local" al array 'a', pero como 'a' es constante, te da un error.
Lo que te interesa es copiar el contenido de la cadena literal, "Local",
al contenido del array, 'a'. Esto implica que tienes que recorrer el
array 'a' e ir copiando carácter por carácter. Por ejemplo,
a[0] = 'L';
a[1] = 'o';
a[2] = 'c';
a[3] = 'a';
a[4] = 'l';
a[5] = 0; // El carácter nulo indica el final de la cadena
Sin embargo, esto es engorroso tener que escribir explícitamente cada
carácter. Lo que se suele hacer es usar la función estándar, 'strcpy()',
que se declara en <cstring>, el cual debes incluir. Esto sería,
strcpy( a, "Local" );
Esta función copia cada carácter de "Local" a cada elemento de 'a';
también agrega el carácter nulo al final.
> }
> else
> if(aleatorio[i]=1){
> a="Empate";
> }
> else
> if(aleatorio[i]=2){
> a="Visitante";
> }
Estos casos son muy parecidos al anterior que he explicado.
> cout<<"Partido # "<<setw(5)<<x<<" "<<a<<endl;
> ++x;
La verdad es que no necesitas la variable 'x', porque se parece mucho a
la variable 'i'. De hecho, podemos decir que x=i+1. Por lo tanto, puedes
eliminar 'x' y escribir:
cout << "Partido # " << setw(5) << i+1 << " " << a << endl;
Así te ahorras una variable.
> }
> cin.ignore();
> cin.get();
> return 0;
> }
>
Espero que haya aclarado todas las dudas.
Steven
Más información sobre la lista de distribución Cconclase