Р. Лафоре. ООП в С++. Завдання 3.1

Припустімо, що Ви бажаєте створити таблицю множення на задане число. Напишіть програму, яка дозволяє користувачу ввести це число, а потім генерує таблицю розміром 20 рядків на 10 стовпців. Перші рядки результату повинні виглядати приблизно отак:
Введіть число: 7
  7   14   21   28   35   42   49   56   63   70
 77   84   91   98  105  112  119  126  133  140
147  154  161  168  175  182  189  196  203  210
Відповідь наводжу спочатку ту, яка першою спала мені на думку, хоча це не зовсім досконале вирішення завдання:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
    unsigned long a;
    int b, c1=1;
    cout << "Введіть ціле число: ";
    cin >> b;
    for(int c2=1;c2<=20;c2++)
    {
        for(int c3=1;c3<=10;c3++)
        {
            a=b*c1;
            cout << setw(5) << a;
            c1++;
        }
        cout << endl;
    }
    return 0;
}
Як працює програма? Користувач вводить число, яке присвоюється змінній b. Далі йде цикл for, який відповідає за кількість рядків (змінна c2 збільшуватиметься на одиницю, поки не досягне числа 20, потім цикл завершиться). Всередині цього циклу іще один цикл for, який відповідає за кількість чисел у рядку. Тут також змінна c3 постійно збільшується на одиницю, а коли досягає величини 10, відбувається завершення циклу, переведення на новий рядок і нове коло внутрішнього циклу, поки не завершиться зовнішній. Змінна c1 в даній конструкції збільшуватиметься аж до величини 200.

Оскільки в цьому прикладі довелося створити аж 5 змінних, він не є хорошим вирішенням завдання. Тому я підглянув у кінець книги і знайшов там розв'язання із лише двома змінними:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
    unsigned long n;
    cout << "Введіть ціле число: ";
    cin >> n;
    for(int j=1;j<=200;j++)
    {
        cout << setw(5) << j*n;
        if(j%10 == 0)
            cout << endl;
    }
    return 0;
}
В даному прикладі вводиться число, яке присвоюється змінній n. Далі йде лише один цикл, який повториться 200 разів (j<=200), причому змінна j постійно збільшується на одиницю, а також в кожному колі ділиться на 10 з метою перевірки на остачу. Очевидно, що коли число кіл циклу досягне 10 (а також 20, 30 і т. д.), остача після ділення на 10 буде нульовою, тоді програма виведе перенесення рядка endl. Дуже розумне рішення!

Немає коментарів:

Дописати коментар

Функції gotoxy(), clrscr(), getch() та getche() для GCC Linux

У цій статті Ви дізнаєтесь, як можна використовувати функції  gotoxy(), getche(), getch() та clrscr() у GCC Linux . У компіляторі TurboC (...