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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


  Mostrar Mensajes
Páginas: [1]
1  Programación / Programación C/C++ / Re: problemas con comparación de arrays + presentación en: 5 Diciembre 2014, 00:38 am
Muchas gracias Orubatosu, voy haciendome a ello poco a poco.

Ahora mismo estoy programando con mac concretamente el Xcode. Que es un IDE?

Tambien que compilador me recomeindas para windos ya que tengo uno pero no me funciona correctamente entonces estaria bien si me puedes recomendar un par por lo menos

Gracias por adelantado!
2  Programación / Programación C/C++ / Re: problemas con comparación de arrays + presentación en: 4 Diciembre 2014, 18:23 pm
Te pongo un ejemplo:

Código:
int main() {
    char apuestas [15], resultados [15];
    int i;

    for (i=0; i < 15; i++){
        cout << "\n Introduce 1 X 2 según la apuesta, "<< i+1 <<": ";
        cin >> apuestas[i] ;
    }

    for (i = 0; i<15; i++){
        cout << "\n Introduce ahora los resultados de la semana, partido " << i+1 << ": ";
        cin >> resultados [i];
    }

   bool acierto=true;
   bool complementario=true;

    for (i=0; i<14; i++){
        if (apuestas[i] != resultados[i]) acierto = false;
    }
    if (apuestas[14] != resultados[14]) complementario = false;
    cout << acierto << ' ' << complementario;
}


Está incompleto al final, pero seguro que te las apañas.

Unas cosillas. Usar un "define" en la cabecera es matar moscas a cañonazos. Podemos hacerlo claro, pero es un poco... exagerado, aunque supongo que eso va por gustos.

Recuerda que ambos arreglos (o arrays, o como quieras llamarlos) deben de tener el mismo número de elementos. No tiene sentido que "apuestas" tenga 15 casillas, y resultados 16.

No necesitas diferentes variables para bucles, a menos que estén anidados. Puedes usar la misma variable de tipo entero "i" para todos, e incluso declararla en el mismo bucle

En plan:

Código:
for (int i=0; i<15; i++)

Recuerda que las tablas empiezan en el 0, no en el 1. El ejemplo anterior te haría un bucle entre la casilla 0 y la 14, lo que nos da un total de 15 casillas, de las cuales las primeras 14 son para los resultados normales, y la 15 (que ojo, es la casilla 14) sería para el pleno al 15.

Esto al principio suele liar, es solo cuestión de acostumbrarse. Acuerdate siempre de que todos los contenedores, ya sean arrays de enteros, caracteres o cualquier otra cosa (incluso strings, vectores, etc...) empiezan siempre en el '0'.

Es decir: (insisto), que un array "apuestas[15]" empieza en el 0 y llega al 14. Si intentas leer o escribir fuera de esos límites de arriesgas como poco a resultados imprevistos, o a que el programa explote.

Luego, la comparación la has hecho entre dos "indices", no entre los valores que contienen los arrays. Para eso verás que he definido dos variables de tipo bool, y hago un bucle de 0 a 13 (0<14) para comprobar cada uno, y si alguno es diferente cambio la condición a falso.

Y lo mismo hago, pero sin bucle con la última casilla de los dos arreglos, comparando así la casilla del "pleno al 15"

Esto:

Código:
 if (r == i)

Literalmente  está comparando dos variables de tipo entero, que son las que has usado para los dos bucles, pero no el contenido de los arrays.

El resultado son dos "1", pero si la condición de cualquiera de los dos no se cumple, te saldría un "0"

Claro, hay otras maneras, pero esta es una sencilla, a partir de ahí puedes montar un "if" que saque un resultado u otro dependiendo de esta variable.

Mas refinamientos sería poner (por ejemplo) un contador de aciertos, o sacar por pantalla por un lado la apuesta y al lado el resultado y cosas así, pero eso ya te lo dejo para que practiques.

Esto debería de funcionarte, a menos que haya metido gloriosamente la pata de forma inadvertida por algún lado.



Muchas gracias Orubatosu, creo que he podido solucionar las coas y ya tengo algo mucho mejor que con lo que empecé esta mañana. En el siguiente post pongo lo que tengo así no resulta muy tedioso.



Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main() {
  6.    char apuestas [15], resultados [15];
  7.    int i;
  8.  
  9.    for (i=0; i < 15; i++){
  10.        cout << "\n Introduce 1 X 2 según la apuesta, partido "<< i+1 <<": ";
  11.        cin >> apuestas[i] ;
  12.    }
  13.  
  14.    for (i = 0; i<15; i++){
  15.        cout << "\n Introduce ahora los resultados de la semana, partido " << i+1 << ": ";
  16.        cin >> resultados [i];
  17.    }
  18.  
  19.  
  20.    for (i=0; i<14; i++){
  21.        if (apuestas[i] != resultados[i]){
  22.        cout << "Partido " << i+1 << ": " << apuestas [i] << " " <<resultados [i] <<" resultado incorrecto\n";
  23.        }
  24.        else {
  25.            cout << "Partido " << i+1 << ": " << apuestas [i] << " " <<resultados [i] <<" resultado correcto\n";
  26.        }
  27.    }
  28.    if (apuestas[14] != resultados[14]){
  29.    cout <<"Partido del pleno al 15: "<< apuestas [i] <<" " << resultados [i] << " resultado incorrecto\n";
  30.    }
  31.    else {
  32.        cout <<"Partido del pleno al 15: "<< apuestas [i] <<" " << resultados [i] << " resultado correcto\n";
  33.    }
  34. }

El resultado final es este, pues bien al final quite los booleanos (ya que no se como manejarlos del todo) y preferí utilizar unas sentencias if quizás mas tediosas pero para mi es mas sencillo en este aspecto. En lo que es el resultado consigo destacar el pleno al 15 pero en la introducción de datos no consigo diferenciarlo.

Se asignar a un elemento del array un dato concreto, pero no se como ponerlo para que ese dato lo introduzca el usuario. Creo que seria bastante sencillo destacar el pleno al 15 de la siguiente manera

apuestas [15] = i;
cout << "Introduzca el plano al 15 ";
cin >> apuestas ;

Pero creo q no es la manera correcta ya que no me deja. Muchas gracias por vuestra ayuda y bueno sobre todo espero q el código que he puesto le sirva a alguien

EDITO: Pues muy bien ya lo conseguí con algo tan simple como una estructura, no se como funciona exactamente pero funcionó! Muchas gracias a todos y espero que el código le sirve a alguien en un futuro!.


Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. struct resultados{
  6.    char apuestas [14];
  7.    char resultados [14];
  8.    char i;
  9.    char pdato;
  10.    char presultado;
  11. };
  12.  
  13. int main() {
  14.    char apuestas [14], resultados [14];
  15.    char i, pdato, presultado;
  16.  
  17.    for (i=0; i < 14; i++){
  18.        cout << "\n Introduce 1 X 2 según la apuesta, partido "<< i+1 <<": ";
  19.        cin >> apuestas[i] ;
  20.    }
  21.  
  22.    cout << "\n Introduce el pleno al 15: ";
  23.    cin >> pdato;
  24.  
  25.    for (i = 0; i<14; i++){
  26.        cout << "\n Introduce ahora los resultados de la semana, partido " << i+1 << ": ";
  27.        cin >> resultados [i];
  28.    }
  29.  
  30.    cout << "\n Introduce el resultado del pleno al 15: ";
  31.    cin >> presultado;
  32.  
  33.  
  34.    for (i=0; i<14; i++){
  35.        if (apuestas[i] != resultados[i]){
  36.        cout << "\n Partido " << i+1 << ": " << apuestas [i] << " " <<resultados [i] <<" resultado incorrecto\n";
  37.        }
  38.        else {
  39.            cout << "\n Partido " << i+1 << ": " << apuestas [i] << " " <<resultados [i] <<" resultado correcto\n";
  40.        }
  41.    }
  42.    if (pdato != presultado){
  43.    cout <<"\n Partido del pleno al 15: "<< pdato <<" " << presultado << " resultado incorrecto \n\n";
  44.    }
  45.    else {
  46.        cout <<"\n Partido del pleno al 15: "<< pdato <<" " << presultado << " resultado correcto \n\n";
  47.    }
  48. }
3  Programación / Programación C/C++ / problemas con comparación de arrays + presentación en: 4 Diciembre 2014, 11:54 am
Hola muy buenas =) me presento en el foro, soy alumno de primero de informática y bueno estoy empezando con el tema de programación en c++, me esta apasionando la asignatura la verdad y espero que en el futuro pueda ser de gran ayuda en este foro ya que vosotros me habéis ayudado mucho en mis dudas de primerizo.

Después de esta breve introducción me gustaría consultaros una duda, el caso que el ejercicio es el siguiente (copio y pego):

Escribir un programa en C++ que implemente la siguiente funcionalidad:
Programa para hacer quinielas que permita realizar las siguientes acciones a un usuario (las opciones se muestran en un menú):

- Introducir los 14 datos simples de una quiniela (1, X o 2 para cada partido), más el dato del pleno al 15.
- Introducir los resultados de la quiniela ganadora de la semana en curso.
- Comprobar el número de aciertos de una apuesta partiendo de los datos introducidos en los apartados anteriores.

El caso es que consigo introducir el primer array sin problemas ( o eso creo ), pero a la hora de introducir el segundo me pierdo un poco y ya cuando llega el tema de la comparación no se por donde cogerlo, muchas gracias por vuestra ayuda ( a continuación les pego el código que llevo):

#include <iostream>
#define MAX_APUESTAS 15
using namespace std;


int main() {
    char apuestas [MAX_APUESTAS], resultados [16];
    int i;
    
    for (i=1; i < MAX_APUESTAS; i++){
        cout << "\n Introduce 1 X 2 según la apuesta, "<<i <<": ";
        cin >> apuestas ;
    }
    
    if (apuestas [MAX_APUESTAS] == resultados[16]){
        cout << "Resultado correcto partido " << i;
    }
    else {
        cout << "Resultado incorrecto" << i;
    }
    
    resultados [1] = 'x';
    resultados [2] = '2';
    resultados [3] = '1';
    resultados [4] = 'x';
    resultados [5] = '2';
    resultados [6] = 'x';
    resultados [7] = '1';
    resultados [8] = '1';
    resultados [9] = '2';
    resultados [10] = 'x';
    resultados [11] = '2';
    resultados [12] = '2';
    resultados [13] = '2';
    resultados [14] = '1';
    resultados [15] = '1';

}

EDITO: Vale dandole otra  vuelta al ejercicio creo que me acerco mas a la respuesta, este es mi nuevo código:

int main() {
    char apuestas [MAX_APUESTAS], resultados [16];
    int i, r;
   
    for (i=1; i < MAX_APUESTAS; i++){
        cout << "\n Introduce 1 X 2 según la apuesta, "<< i <<": ";
        cin >> apuestas ;
    }
   
    for (r = 1; r<16; r++){
        cout << "\n Introduce ahora los resultados de la semana, partido " << r << ": ";
        cin >> resultados [r];
    }
   
    if (r == i){
        cout << "Resultado correcto \n";
    }
    else {
        cout << "Resultado incorrecto \n";
    }
   
}

Vale ahora consigo comparar los dos array al completo, el problema que tengo es que quiero ir resultado a resultado comparándolo y no lo consigo, por otro lado también me gustara por el pleno al 15 como dato a parte y eso no se como hacerlo.
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines