- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
/*
* Тема: "Двумерные массивы"
* Разработать программу для решения указанной ниже задачи.
* Поиск строк или столбцов и преобразование матрицы оформить в виде подпрограммы.
* Глобальные переменные не использовать.
* В заданной матрице поменять местами столбцы, содержащие следующие элементы:
* первый четный и последний нечетный.
*/
#include <stdio.h>
void raschet(int a[][20], int size, int *key) {
/*******************************************
* Поиск столбцов и преобразование матрицы */
int i, j; /* Индексы массива */
int buffer; /* Временное место для копирования элементов столбца */
int first, second; /* Первый и второй столбцы удовлетворяющие условию соответственно */
int flag = 1; /* Переключатель найденых столбцов */
*key = 0; /* Обнулить сообщение для главной программы о выполнении условия */
for(j=0; j<size; j++) /* Перебор столбцов */
if(a[0][j]%2==0 && a[size-1][j]%2!=0) { /* Если найден удовлетворяющий условию столбец */
if(flag == 1) { /* Если найден первый столбец */
first = j; /* Записать его положение в first */
flag = 2; /* В случае нахождения след. столбца выполнится след. else if */
*key = 1; /* Сообщить главной программе что найден 1 столбец уд. усл. */
}
else if(flag == 2) { /* Если найден второй */
second = j; /* Записать его положение в second */
*key = 2; /* Сообщение для главной программы о выполнении условия задачи */
for(i=0; i<size; i++) { /* Перебор элементов столбцов*/
buffer=a[i][first]; /* Элемент столбца first копируется в buffer */
a[i][first]=a[i][second]; /* Элемент столбца second копируется вместо эл-та first */
a[i][second]=buffer; /* Элемент из buffer копируется в столбец second */
}
first = j; /* Записать положение текущего столбца в first */
}
}
}
void main() {
int key; /* Сообщение для главной программы о выполнении условия */
int i, j; /* Индексы элементов масcивов */
int size = 8; /* Размерность массива(матрицы) */
/***************
* Ввод данных */
int a[20][20] = {
{1, 2, 3, 4, 6, 8, 7, 2},
{1, 2, 3, 4, 1, 1, 2, 3},
{1, 2, 3, 4, 5, 3, 3, 3},
{2, 5, 7, 9, 3, 1, 2, 3},
{2, 5, 7, 9, 3, 1, 2, 3},
{2, 5, 7, 9, 3, 1, 2, 3},
{2, 5, 7, 9, 3, 1, 2, 3},
{2, 5, 7, 9, 3, 5, 2, 9}
};
/*************************
* Вывод исходных данных */
system("cls");
printf("В заданной матрице поменять местами столбцы, содержащие следующие элементы:\n");
printf("первый четный и последний нечетный.\n");
printf("\nИсходная матрица имеет вид:\n");
for(i=0; i<size; i++) {
for (j=0; j<size; j++)
printf("%5d", a[i][j]);
printf("\n");
}
raschet(a, size, &key); /* Функция поиска столбцов и преобразования матрицы */
/*********************
* Вывод результата */
if(key == 0)
printf("\nСтолбцов удовлетворяющих условию не найдено.");
else if(key == 1)
printf("\nНайден только один столбец удовлетворяющий условию.");
else {
printf("\nРезультирующая матрица имеет вид:\n");
for(i=0; i<size; i++) {
for (j=0; j<size; j++)
printf("%5d", a[i][j]);
printf("\n");
}
}
printf("\n\n");
printf("Конец!\n");
system("PAUSE");
}