Надрукувати в рядок числа 1 2 3 4 5. Ми вже писали такі програми:
#include <iostream>
using namespace std;
int main()
{
int j;
for (j=1;j<=5;j++)
{
cout <<j<<" ";
}
return 0;
}
Пояснення коду:
Результат роботи програми:
Програма виведе: 1 2 3 4 5
Додаткові пояснення:
for виконується рівно 5 разівjfor у C++Варіації використання:
j<=5j++ на інший вираз (наприклад, j+=2)j=1Надрукувати числа у вигляді таблиці:
Ясно, що фрагмент програми, який друкує числа від 1 до 5 потрібно повторити 3 рази. Для повторення використовується теж оператор циклу. Щоб кожний рядок починався від краю екрана використовується оператор cout<<"\n";
#include <iostream>
using namespace std;
int main()
{
int j,i;
for (i=1;i<=3;i++)
{
cout << "\n";
for (j=1;j<=5;j++)
{
cout << j << " ";
}
}
return 0;
}
Пояснення коду:
Робота вкладених циклів:
\n)Результат роботи програми:
1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
Візуалізація роботи:
| Ітерація i | Дія | Результат |
|---|---|---|
| 1 | Новий рядок + числа 1-5 | 1 2 3 4 5 |
| 2 | Новий рядок + числа 1-5 | 1 2 3 4 5 |
| 3 | Новий рядок + числа 1-5 | 1 2 3 4 5 |
Ключові моменти:
\n створює новий рядок перед кожним набором чиселМодифікації:
В цій програмі: параметр зовнішнього циклу i – номер рядку, який друкується, параметр внутрішнього циклу j – число, яке виводиться на екран. Скільки потрібно рядків, стільки повинно бути витків зовнішнього циклу. Скільки потрібно чисел у кожному рядку, стільки повинно бути витків внутрішнього циклу.
|
Надрукувати числа у вигляді таблиці:
Ясно, що витків зовнішнього циклу повинно бути 5, бо потрібно надрукувати 5 рядків. Тобто схематично програма буде така:
#include <iostream>
using namespace std;
int main()
{
int j,i;
for (i=1;i<=5;i++)
{
cout << "\n";
// ...
}
return 0;
}
Тепер потрібно з’ясувати як зв’язані номер рядку та числа, які в ньому друкуються, тобто потрібно з’ясувати, який внутрішній цикл буде замість трьох крапок. Для цього складемо таблицю:
| Номер рядку i | Числа, які друкуються у цьому рядку | Значення параметра j у циклі | |
|---|---|---|---|
| Початкове | Кінцеве | ||
| 1 | 1 | 1 | 1 |
| 2 | 1 2 | 1 | 2 |
| 3 | 1 2 3 | 1 | 3 |
| 4 | 1 2 3 4 | 1 | 4 |
| 5 | 1 2 3 4 5 | 1 | 5 |
| Висновок | Завжди 1 | Співпадає з номером рядку | |
З цієї таблиці ясно, що для i – го рядку, щоб надрукувати числа 1 2... i потрібен цикл for (j=1;j<=i;j++)cout<< j<< " "; Остаточно програма має вигляд:
#include <iostream>
using namespace std;
int main()
{
int j,i;
for (i=1;i<=5;i++)
{
cout << "\n";
for (j=1;j<=i;j++)
{
cout << j << " ";
}
}
return 0;
}
Надрукувати числа у вигляді таблиці:
Ясно, що витків зовнішнього циклу повинно бути 5, бо потрібно надрукувати 5 рядків. Тобто схематично програма буде така ж сама, як і у попередньому прикладі.
Тепер потрібно з’ясувати як зв’язані номер рядку та числа, які в ньому друкуються, тобто потрібно з’ясувати, який внутрішній цикл буде замість трьох крапок. Для цього складемо таблицю:
| Номер рядку i | Числа, які друкуються у цьому рядку | Значення параметра j у циклі | |
|---|---|---|---|
| Початкове | Кінцеве | ||
| 1 | 5 4 3 2 1 | 5 | 1 |
| 2 | 5 4 3 2 | 5 | 2 |
| 3 | 5 4 3 | 5 | 3 |
| 4 | 5 4 | 5 | 4 |
| 5 | 5 | 5 | 5 |
| Висновок | Завжди 5 | Співпадає з номером рядку | |
З цієї таблиці ясно, що для i – го рядку, щоб надрукувати числа потрібен зворотній цикл for (j=5;j>=i;j--) cout<< j<< " "; Остаточно програма має вигляд:
#include <iostream>
using namespace std;
int main()
{
int j,i;
for (i=1;i<=5;i++)
{
cout << "\n";
for (j=5;j>=i;j--)
{
cout << j << " ";
}
}
return 0;
}
Надрукувати числа у вигляді таблиці:
Ясно, що витків зовнішнього циклу повинно бути 5, бо потрібно надрукувати 5 рядків. Тобто схематично програма буде така ж сама, як і у першому прикладі.
Тепер потрібно з’ясувати як зв’язані номер рядку та числа, які в ньому друкуються, тобто потрібно з’ясувати, який внутрішній цикл буде замість трьох крапок. Ясно, що раз у кожному рядку друкуються однакові числа, то повинен виводитись на екран не вираз, що містить змінну j, а вираз, що містить змінну i. Щоб з’ясувати, який це буде вираз складемо таблицю:
| Номер рядку i | Числа, які друкуються у цьому рядку | Значення параметра j у циклі (кількість чисел) | |
|---|---|---|---|
| Початкове | Кінцеве | ||
| 1 | 3 3 3 3 3 | 1 | 5 |
| 2 | 4 4 4 4 | 1 | 4 |
| 3 | 5 5 5 | 1 | 3 |
| 4 | 6 6 | 1 | 2 |
| 5 | 7 | 1 | 1 |
| Висновок | На кожному рядку друкуються числа i+2 | Завжди 1 | 6-i |
З цієї таблиці ясно, що у i – му рядку, друкуються числа i+2. Кількість чисел у i – му рядку 6-i. Тобто внутрішній цикл буде таким:
for (j=1;j<=6-i;j++)cout<< i+2<< " ";
Остаточно програма має вигляд:
#include <iostream>
using namespace std;
int main()
{
int j,i;
for (i=1;i<=5;i++) // Зовнішній цикл для рядків (від 1 до 5)
{
cout << "\n"; // Перехід на новий рядок
for (j=1;j<=6-i;j++) // Внутрішній цикл для стовпців
{
cout << i+2 << " "; // Виведення значення (i+2) з пробілом
}
}
return 0;
}
Надрукувати числа у вигляді таблиці:
У цій задачі за кожний виток зовнішнього циклу виводиться на екран не один, а два рядку:
| Номер витку зовнішнього циклу | Числа, що виводяться |
|---|---|
| 1 | 0 1 2 3 4 0 0 0 0 |
| 2 | 9 0 1 2 0 0 0 |
| 3 | 8 9 0 0 0 |
| 4 | 7 8 0 |
| 5 | 6 |
Серед цих чисел є рядки з нулями і з числами. Ці рядки друкуються різними циклами, кожний починається з краю екрана.
Тобто схематично програма буде така:
#include <iostream>
using namespace std;
int main()
{
int j,i;
for (i=1;i<=5;i++) // Зовнішній цикл (від 1 до 5)
{
cout << "\n"; // Новый рядок
// Отримати вхідні дані, визначити умови
for (j= // Внутрішній цикл (незавершений)
)
{
}
cout << "\n"; // Новый рядок
// Отримати вхідні дані 0
for (j= // Внутрішній цикл (незавершений)
)
{
}
return 0;
}
Розіб’ємо нашу таблицю на дві:
| Номер витку зовнішнього циклу | Перший внутрішній цикл | Другий внутрішній цикл |
|---|---|---|
| 1 | 0 1 2 3 4 | 0 0 0 0 |
| 2 | 9 0 1 2 | 0 0 0 |
| 3 | 8 9 0 | 0 0 |
| 4 | 7 8 | 0 |
| 5 | 6 |
Тепер потрібно з’ясувати як зв’язані параметр зовнішнього циклу та числа, які друкуються першим та другим внутрішніми циклами, тобто потрібно з’ясувати, які внутрішні цикли будуть замість трьох крапок.
Спочатку запишемо цикл, який друкує рядки з нулями. Для цього складемо таблицю:
| Номер рядку i | Числа, які друкуються у цьому рядку | Значення параметра j у циклі | |
|---|---|---|---|
| Початкове | Кінцеве | ||
| 1 | 0 0 0 0 | 1 | 4 |
| 2 | 0 0 0 | 1 | 3 |
| 3 | 0 0 | 1 | 2 |
| 4 | 0 | 1 | 1 |
| 5 | 1 | 0 | |
| Висновок | Завжди 1 | 5 – i | |
Добавимо вивід нулів і схематично програма буде така:
#include <iostream>
using namespace std;
int main()
{
int j,i;
for (i=1;i<=5;i++) // Основний цикл (1-5)
{
cout << "\n"; // Новий рядок
// Помилка: незавершений цикл
for (j= // Відсутні умови та тіло циклу
{
cout << "\n"; // Новий рядок
// Цикл для виведення нулів
for (j=1;j<=5-i;j++)
{
cout << "0 "; // Вивід нуля з пробілом
}
}
}
return 0;
}
Залишилось написати цикл, який виводить інші числа. Для цього складемо таблицю:
| i | Числа, які друкуються | Для цих чисел друкується остання цифра | Значення параметра у внутрішньому циклі | |||
|---|---|---|---|---|---|---|
| Початкове | Кінцеве | |||||
| 1 | 0 1 2 3 4 | 10 11 12 13 14 | 10 | 10+1=11 | 14 | 16-2*1=14 |
| 2 | 9 0 1 2 | 9 10 11 12 | 9 | 9+2=11 | 12 | 16-2*2=12 |
| 3 | 8 9 0 | 8 9 10 | 8 | 8+3=11 | 10 | 16-2*3=10 |
| 4 | 7 8 | 7 8 | 7 | 7+4=11 | 8 | 16-2*4=8 |
| 5 | 6 | 6 | 6 | 6+5=11 | 6 | 16-2*5=6 |
| Висновок | Друкується j mod 10 | 11-i | 16-2*i | |||
Остаточно програма має вигляд:
#include <iostream>
using namespace std;
int main()
{
int j,i;
for (i=1;i<=5;i++) // Основний цикл (1-5)
{
cout << "\n"; // Новий рядок
// Цикл для обробки даних
for (j=11-i;j<=16-2*i;j++)
{
cout << j%10 << " "; // Вивід останньої цифри числа
}
cout << "\n"; // Новий рядок
// Цикл для виведення нулів
for (j=1;j<=5-i;j++)
{
cout << "0 "; // Вивід нулів
}
}
return 0;
}
Пояснення роботи коду:
Приклад виводу:
0 9 8 7 6 0 0 0 0 8 7 6 0 0 0 7 6 0 0 6 0 5
| № варіанту | Таблиця | № варіанту | Таблиця |
|---|---|---|---|
| 1 | 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 | 2 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
| 3 | 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 | 4 | 1 1 1 1 1 2 2 2 2 3 3 3 4 4 5 |
| 5 | 5 5 5 5 5 4 4 4 4 3 3 3 2 2 1 | 6 | 5 6 6 7 7 7 8 8 8 8 9 9 9 9 9 |
| 7 | 1 2 3 4 5 1 2 3 4 1 2 3 1 2 1 | 8 | 5 4 5 3 4 5 2 3 4 5 1 2 3 4 5 |
| 9 | 0 1 0 2 1 0 3 2 1 0 4 3 2 1 0 | 10 | 6 5 4 3 2 5 4 3 2 4 3 2 3 2 2 |
| 11 | 1 0 2 2 0 0 3 3 3 0 0 0 4 4 4 4 0 0 0 0 5 5 5 5 5 0 0 0 0 0 | 12 | 5 4 3 2 1 0 0 0 0 5 4 3 2 0 0 0 5 4 3 0 0 5 4 0 |
| 13 | 8 9 0 1 2 8 9 0 1 8 9 0 8 9 8 | 14 | 3 2 3 1 2 3 0 1 2 3 9 0 1 2 3 |
| 15 | 0 1 0 9 2 1 0 9 8 3 2 1 0 9 8 7 4 3 2 1 0 9 8 7 6 | 16 | 5 3 4 5 1 2 3 4 5 9 0 1 2 3 4 5 7 8 9 0 1 2 3 4 5 |
| 17 |
3 0 2 3 9 0 2 2 3 8 9 0 2 2 2 3 7 8 9 0 2 2 2 2 3 6 7 8 9 0 | 18 |