Припустімо, що Ви бажаєте створити таблицю множення на задане число. Напишіть програму, яка дозволяє користувачу ввести це число, а потім генерує таблицю розміром 20 рядків на 10 стовпців. Перші рядки результату повинні виглядати приблизно отак:
Введіть число: 77 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. Дуже розумне рішення!
Немає коментарів:
Дописати коментар