- •Лабораторная работа №1 Линейные и разветвляющиеся алгоритмы
- •Арифметические выражения
- •Операции с целыми числами
- •Логические выражения
- •Организация ветвлений в алгоритмах
- •Лабораторная работа №2 Циклические алгоритмы
- •Рекуррентные последовательности
- •Вычисление характеристик числовой последовательности
- •Определение свойства числовой последовательности
- •Формирование массива Пример
- •Вычисление характеристик массива
- •Модификация массивов
- •I часть
- •II часть Пример
- •III часть
- •Лабораторная работа №4 «Двумерные массивы»
- •Вывод элементов
- •Вычисление характеристик матриц
- •Модификация
- •Литература
Лабораторная работа №4 «Двумерные массивы»
Цель: изучение способов определения и инициализации массивов,
основных алгоритмов обработки массивов.
Вывод элементов
Пример
Дана квадратная матрица A порядка M (M — нечетное число). Начиная с элемента A11 и перемещаясь по часовой стрелке, вывести все ее элементы по спирали: первая строка, последний столбец, последняя строка в обратном порядке, первый столбец в обратном порядке, оставшиеся элементы второй строки и т. д.; последним выводится центральный элемент матрицы.
Вариант программы на языке С
#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int n, i, j, k;
int **a;
setlocale(LC_ALL, "");
srand(time(0));
printf("Введите n: ");
scanf("%d", &n);
if(!(n & 1)) // если число чётное, то побитовое "и" с 1 будет равно 1
{ printf("Ошибка: n должно быть нечётным.\n");
return 1;
}
// Выделяем память для массива.
// a - массив указателей. Каждый его элемент указывает на
// массив чисел (т.е. на строку матрицы).
a = (int **) malloc(sizeof(int *) * n);
for(i = 0; i < n; i++)
a[i] = (int *) malloc(sizeof(int) * n);
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
a[i][j] = rand() % 10;
printf("Матрица:\n");
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
printf(" %d", a[i][j]);
printf("\n");
}
printf("\n");
printf("Результат:\n");
// n/2- количество витков спирали (не считая центрального элемента).
for(k = 0; k < n / 2; k++)
{
for(j = k; j < n - k; j++)
printf("%d ", a[k][j]);
for(i = k + 1; i < n - k; i++)
printf("%d ", a[i][n - k - 1]);
for(j = n - k - 2; j > k; j--)
printf("%d ", a[n - k - 1][j]);
for(i = n - k - 1; i > k; i--)
printf("%d ", a[i][k]);
}
printf("%d", a[n/2][n/2]);
printf("\n");
// Освобождаем память.
// Сначала удаляем массивы, соответствующие строкам.
for(i = 0; i < n; i++)
free(a[i]);
// После - массив указателей на эти строки.
free(a);
return 0;
}
Дана матрица размера MxN. Вывести ее элементы, расположенные в столбцах с нечетными номерами. Вывод элементов производить по столбцам, условный оператор не использовать.
Дана квадратная матрица A порядка M (M — нечетное число). Начиная с элемента A11 и перемещаясь против часовой стрелки, вывести все ее элементы по спирали: первый столбец, последняя строка, последний столбец в обратном порядке, первая строка в обратном порядке, оставшиеся элементы второго столбца и т. д.; последним выводится центральный элемент матрицы.
Дана матрица размера MxN. Вывести ее элементы в следующем порядке: первый столбец сверху вниз, второй столбец снизу вверх, третий столбец сверху вниз, четвертый столбец снизу вверх и т. д.
Дана матрица размера MxN. Вывести ее элементы в следующем порядке: первая строка слева направо, вторая строка справа налево, третья строка слева направо, четвертая строка справа налево и т. д.
Дана квадратная матрица A порядка M. Начиная с элемента A11], вывести ее элементы следующим образом («уголками»): все элементы первой строки; элементы последнего столбца, кроме первого (уже выведенного) элемента; оставшиеся элементы второй строки; оставшиеся элементы предпоследнего столбца и т. д.; последним выводится элемент AM,1.
