Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Языки программирования (пособие).doc
Скачиваний:
6
Добавлен:
01.07.2025
Размер:
965 Кб
Скачать
☆

3.5.6Вложенные циклы и вывод цифр

Естественно, выводить можно не только звездочки. Например, создадим следующую процедуру:

void drawDigits(int n) {

for (int i=1; i<=n; i++) {

cout << i;

}

}

С ее помощью можно вывести другие картинки (рис. 16).

int n=7;

for (int row=1; row<=n; row++) {

drawDigits(row);

newLine();

}

int n=7;

for (int row=1; row<=n; row++) {

drawDigits(n-row);

newLine();

}

Рисунок 16. Треугольники из цифр

3.5.7Контрольные вопросы

  1. Приведите примеры вложенных циклов.

  2. Объясните, почему зачастую использование вложенных циклов нежелательно.

  3. Опишите прием, как избавиться от явной вложенности циклов.

  4. Приведите примеры использования этого приема.

  5. Объясните, как вы понимаете API.

  6. Реализуйте API, рассмотренный в этой теме и поместите его в отдельный заголовочный файл.

  7. Постройте треугольник Паскаля.

  8. Реализуйте примеры, рассмотренные в этой теме.

  9. В каких задачах может потребоваться использование вложенных циклов?

  10. Реализуйте один из методов сортировки массива.

4Простые структуры данных Тема 4.1. Матрицы

4.1.1Основные понятия

Матрицы широко используются в математике, программировании, экономике и многих других науках. Матрица – это таблица, состоящая из определенного числа строк и столбцов; если число строк равно числу столбцов, то матрица называется квадратной. Для обращения к элементу матрицы указывается название матрицы вместе с номерами строки и столбца; например, запись Aij обозначает элемент матрицы, расположенный в i-ой строке и j-ом столбце.

4.1.2Объявление матрицы

В программировании матрица – это двумерный массив, все элементы которого имеют одинаковый тип; при объявлении матрицы указывается ее имя и размерность:

int matrix[100][200];

float coefficients[10][100];

char strings[100][20];

bool flags[50][50];

В качестве размеров матрицы, как и в случае с одномерным массивом, можно указывать только константы (не переменные), поэтому следующий фрагмент кода является ошибочным:

int m=10, n=20;

//Ошибка!

int matrix[m][n];

Следующий фрагмент верен:

const int m=10, n=20;

int matrix[m][n];

4.1.3Инициализация матрицы

При инициализации матрицы (присвоении ее значения при объявлении) используется оператор присваивания, после которого в фигурных скобках перечисляются ее элементы.

const int m=4, n=5;

int matrix[m][n] = {

{1, 2, 5, 4, 3},

{5, 6, 7, 4, 6},

{1, 2, 5, 4, 3},

{9, 8, 7, 6, 0},

};

Обратите внимание, что строки заключаются в фигурные скобки и разделяются запятыми; запятыми также разделяются элементы каждой строки.

4.1.4Вывод матрицы на экран

Для вывода матрицы на экран нужно вывести элементы каждой строки и каждого столбца, причем элементы разных строк матрицы должны быть расположены на разных строках и на экране. Таким образом, необходимо сделать следующее:

<Вывести первую строку>;

cout << endl;

<Вывести вторую строку>;

cout << endl;

<Вывести третью строку>;

cout << endl;

<Вывести четвертую строку>;

cout << endl;

Каждая строка матрицы – это одномерный массив, поэтому его нужно выводить с помощью цикла:

for (int j=0; j<n; j++) {

cout << matrix[0][j] << " ";

}

cout << endl;

for (int j=0; j<n; j++) {

cout << matrix[1][j] << " ";

}

cout << endl;

for (int j=0; j<n; j++) {

cout << matrix[2][j] << " ";

}

cout << endl;

for (int j=0; j<n; j++) {

cout << matrix[3][j] << " ";

}

cout << endl;

Поскольку данные циклы различаются только номером строки, то их можно поместить во внешний цикл, в котором переменная-счетчик обозначает номер строки:

for (int i=0; i<m; i++) {

for (int j=0; j<n; j++) {

cout << matrix[i][j] << " ";

}

cout << endl;

}

Результат работы этой программы приведен на рис. 17

Рисунок 17. Вывод на экран матрицы размерности 4x5

Обратите внимание на то, что пробел выводится во внутреннем цикле, а перенос на новую строку – во внешнем. Для лучшего понимания этого вопроса поэкспериментируйте с этими разделителями.