Tengo problemas con algunas de las entradas para mi tabla de suma / multiplicación, y espero encontrar ayuda para solucionarlo. Comenzaré publicando lo que tengo para el programa.

El código es el siguiente :

#include <iostream>
using namespace std;

void die() {
    cout << "BAD INPUT!" << endl;
    exit(1);
    }

int main() {
    const int ADD = 1;
    const int MULTIPLY = 2;
    const int MAX_SIZE = 20;
    int choice = 0, min = 0, max = 0;

    cout << "Choose:\n";
    cout << "1. Addition Table\n";
    cout << "2. Times Table\n";

    cin >> choice;

    if (!cin) die();
    if (choice != ADD and choice != MULTIPLY) die();

    cout << "Please enter the smallest number on the table:\n";
    cin >> min;

    if (!cin) die();

    cout << "Please enter the largest number on the table:\n";
    cin >> max;

    if (!cin) die();
    if (min > max) die();
    if (max - min >= MAX_SIZE) die();

    if (choice == ADD) {
        for (int i = 0; i <= max; i++) {
            if (i == 0)
                cout << '+';
            else
                cout << i;

            cout << '\t';
            for (int j = min; j <= max; j++) {
                cout << i + j << '\t';
            }
            cout << '\n';
        }
    }

    if (choice == MULTIPLY) {
        for (int i = min; i <= max; i++) {
            if (i == min) {
                cout << 'X';
            else
                cout << i;

            cout << '\t';
            for (int j = min; j <= max; j++) {
                cout << i * j << '\t';
            }
            cout << '\n';
        }
    }

}

Ahora, aquí están los errores que obtengo de este código que parece que no puedo resolver. Primero, cuando hago la tabla MUlTIPLY con min = 1, max = 1, obtengo:

X    1

Cuando debería estar recibiendo (creo)

X    1
1    1

En segundo lugar, mientras hago la tabla MULTIPLY con min = 1, max = 12, obtengo:

X    1    2    3    4 ... 12
2    2    4    6    8 ... 24
3    3    6    9    12 ... 36

Cuando debería estar recibiendo

X    1    2    3    4 ... 12
1    1    2    3    4 ... 12
2    2    4    6    8 ... 24
3    3    6    9    12 ... 36

Y finalmente, cuando uso la tabla ADD con min = 21, max = 40, no puedo publicar todo el código ya que es un desastre, pero básicamente las columnas / filas son las siguientes:

+    21    22    23    24    25 ...
5
1
6
2
7
3
8

Cuando, obviamente, el código debería generar las filas y columnas para que sean de 21 a 40 de manera uniforme. Como puede ver en el último ejemplo, mis filas están saliendo correctamente, pero de alguna manera mis columnas son un desastre completo y confuso.


He estado sentado y mirando este código por un tiempo, y parece que no puedo solucionar estos problemas. ¿Alguien puede ayudarme a llevarme en la dirección correcta? Realmente aprecio cualquier ayuda y sugerencias :)

1
user6841819 9 sep. 2018 a las 08:22

3 respuestas

La mejor respuesta

Mira esto. Puede que no esté completamente optimizado, pero funciona

if (choice == ADD) {
    cout << '+';
    for (int i = min; i <= max; i++) {
        cout << '\t' << i;
    }

    for (int i = min; i <= max; i++) {
        cout << '\n' << i << '\t';
        for (int j = min; j <= max; j++) {
            cout << i + j << '\t';
        }
    }
}

if (choice == MULTIPLY) {
    cout << 'X';
    for (int i = min; i <= max; i++) {
        cout << '\t' << i;
    }

    for (int i = min; i <= max; i++) {
        cout << '\n' << i << '\t';
        for (int j = min; j <= max; j++) {
            cout << i * j << '\t';
        }
    }
}

Vea el resultado aquí.

3
PraAnj 9 sep. 2018 a las 05:48
#include <iostream>
#include <iomanip>
#include <cstdio>

void die()
{
    std::cout << "BAD INPUT!" << "\n";
    exit(1);
}

int main() {
    const int ADD = 1;
    const int MULTIPLY = 2;
    const int MAX_SIZE = 20;
    int choice = 0, min = 0, max = 0;

    std::cout << "Choose:\n";
    std::cout << "1. Addition Table\n";
    std::cout << "2. Times Table\n";

    std::cin >> choice;

    if (!std::cin) die();
    if (choice != ADD and choice != MULTIPLY) die();

    std::cout << "Please enter the smallest number on the table:\n";
    std::cin >> min;

    if (!std::cin) die();

    std::cout << "Please enter the largest number on the table:\n";
    std::cin >> max;

    if (!std::cin) die();
    if (min > max) die();
    if (max - min >= MAX_SIZE) die();

    if (choice == ADD) {
        for (int i = 0; i <= max; i++) {
            if (i == 0)
               printf("  +");
            else
               printf("%3d", i);
            printf(" ");
            for (int j = min; j <= max; j++) {
                printf("%3d ", i + j);
            }
            printf("\n");
        }
    }

    if (choice == MULTIPLY) {

        /* for printing header of the multiplication table */
        std::cout << "X\t";
        for (int j = min; j <= max; j++) {
            std::cout << min * j << "\t";
        } 
        std::cout << "\n";

        /* for printing rest of the table */
        for (int i = min; i <= max; i++) {
            std::cout << i << "\t";
            for (int j = min; j <= max; j++) {
                std::cout << i * j << '\t';
            }
            std::cout << '\n';
        }
    }
}

El error crucial en su código para la multiplicación fue que estaba tratando de imprimir (max - min + 1) + 1 filas en total, el +1 adicional para el encabezado. Mientras su código imprimía la primera fila como encabezado y luego comenzaba directamente con la segunda fila.

Su código para la tabla de adición era correcto, pero 21 to 40 con el carácter de tabulación en medio ocupaba demasiado espacio para una pantalla de computadora portátil típica, por no decir que el resultado no será bonito.

En mi sistema, la salida de tput lines y tput cols fue de 38 y 144 resp. que no era suficiente para tu código.

Puede formatear la salida con printf usando la salida de ancho fijo printf.

Teniendo en cuenta que no está muy familiarizado con C ++, me gustaría decir que usar el espacio de nombres std como espacio de nombres predeterminado funcionará para este programa, pero cuando trabaje con proyectos más grandes, siempre debe prefijarlo.

1
Suraj Pal 9 sep. 2018 a las 06:40

No tengo suficiente reputación para agregar comentarios

Si fuera así, estaría comentando estas líneas

If (i == min) {cout << 'X'; sino cout << i; cout << '\ t';

0
samini 9 sep. 2018 a las 05:41