11
//
//Пример программы, демонстрирующей работу с двумерным массивом
//(матрицей), выполнение сортировки элементов строк массива, запись
//элементов массива в двоичный файл, чтение данных из файла и вывод их
//на экран монитора.
//
#include "stdafx.h" #include "stdio.h" #include "conio.h" #include "stdlib.h" #include "locale.h"
#define M 5 // количество строк матрицы #define N 5 // количество столбцов матрицы
void inp_matrix(void); void out_matrix(void); void sort_1(void); void sort_2(void); int write_file(void); int read_file(void);
int A[M][N];
int main(void)
{
int it_num; char *menu[10]=
{{"===================================="},
{"=== ВОЗМОЖНЫЕ ДЕЙСТВИЯ ПРОГРАММЫ ==="},
{"===================================="},
{"1. ВВОД ЭЛЕМЕНТОВ МАТРИЦЫ"}, {"2. ВЫВОД МАТРИЦЫ НА ЭКРАН"},
{"3. СОРТИРОВКА ЭЛЕМЕНТОВ СТРОК МАТРИЦЫ ПО ВОЗРАСТАНИЮ"}, {"4. СОРТИРОВКА ЭЛЕМЕНТОВ СТРОК МАТРИЦЫ ПО УБЫВАНИЮ"}, {"5. ЗАПИСЬ ЭЛЕМЕНТОВ МАТРИЦЫ В ФАЙЛ"}, {"6. ЧТЕНИЕ ЧИСЕЛ ИЗ ФАЙЛА В МАТРИЦУ"}, {"7. ВЫХОД ИЗ ПРОГРАММЫ"}};
setlocale(LC_ALL, "Russian");
while (1) |
|
{ |
|
system("cls"); |
// очистить экран |
for (int i=0; i<10; ++i)
{
printf("\n");
printf(menu[i]);
}
printf("\n\nНомер пункта меню: "); it_num = getchar();
switch ((char)it_num)
{
case '1':
12
printf("\nВведите элементы матрицы:\n"); inp_matrix();
break; case '2':
printf("\nЭлементы матрицы:\n"); out_matrix();
break; case '3':
sort_1();
printf("\nВыполнена сортировка элементов строк по \ возрастанию.");
break; case '4':
sort_2();
printf("\nВыполнена сортировка элементов строк по \
убыванию.");
break; case '5':
if (!write_file())
printf("\nВыполнена запись элементов матрицы в файл."); break;
case '6':
if (!read_file())
printf("\nВыполнено чтение данных из файла в матрицу."); break;
case '7': return 0;
default:
printf("\nОшибка: указан неверный номер!");
}
flushall();
printf("\nДля продолжения нажмите любую клавишу...");
_getch();
}
}
void inp_matrix(void) // ввод элементов матрицы
{
for (int i = 0; i < M; ++i) for (int j=0; j < N; ++j)
{
printf("A[%d,%d]=", i, j); scanf("%d", &A[i][j]);
}
}
void out_matrix(void) // вывод матрицы на экран
{
for (int i = 0; i < M; ++i)
{
printf("\n");
for (int j=0; j<N; ++j)
{
printf("%d\t", A[i][j]);
}
}
printf("\n");
}
13
void sort_1(void) // сортировка по возрастанию
{
int i, j, k, tmp;
for (i = 0; i < M; ++i)
{
for (j =0; j<(N-1); ++j)
{
tmp=A[i][j];
for (k = j+1; k < N; ++k)
{
if (A[i][k] < tmp)
{
|
tmp=A[i][k]; |
|
A[i][k]=A[i][j]; |
|
A[i][j]=tmp; |
|
} |
} |
|
} |
|
} |
|
} |
|
void sort_2(void) |
// сортировка по убыванию |
{
int i, j, k, tmp;
for (i = 0; i < M; ++i)
{
for (j =0; j<(N-1); ++j)
{
tmp=A[i][j];
for (k = j+1; k < N; ++k)
{
if (A[i][k] > tmp)
{
tmp=A[i][k];
A[i][k]=A[i][j];
A[i][j]=tmp;
}
}
}
}
}
int write_file(void) // запись из матрицы в файл
{
FILE *fp;
if ((fp = fopen("c:\\tmp\\matrix.dat", "wb"))== NULL)
{
printf("\nОшибка открытия файла c:\\tmp\\matrix.dat\n"); return 1;
}
else
{
for (int i=0; i < M; ++i)
for (int j=0; j < N; ++j)
14
|
fprintf(fp, "%5d", A[i][j]); |
fclose(fp); |
|
return 0; |
|
} |
|
} |
|
int read_file(void) |
// чтение из файла в матрицу |
{ |
|
FILE *fp; |
|
if ((fp = fopen("c:\\tmp\\matrix.dat", "rb"))== NULL)
{
printf("\nОшибка открытия файла c:\\tmp\\matrix.dat\n"); return 1;
}
else
{
for (int i=0; i < M; ++i)
{
for (int j=0; j < N; ++j)
{
if (fscanf(fp, "%5d", &A[i][j])== EOF)
{
fclose(fp);
}
}
}
return 0;
}
}
Работа программы осуществляется в консольном режиме. Для реализации возможностей, реализованных в программе, пользователь использует простое текстовое меню. Выбор требуемого пункта меню осуществляется вводом соответствующего номера. Например, для ввода значений элементов массива используется номер пункта меню 1, который обеспечивает вызов функции inp_matrix (рисунок 2). Ввод значения для каждого элемента матрицы завершается нажатием клавиши Enter.
Рисунок 2 Ввод элементов матрицы
15
Для вывода введенных значений массива используется пункт меню с номером 2, который обеспечивает вызов функции out_matrix (рисунок 3).
Рисунок 3 Вывод элементов матрицы на экран
Для сортировки введенных значений в строках массива используются пункты меню с номерами 3 (по возрастанию значений) и 4 (по убыванию значений), которые обеспечивают вызовы функций sort_1 и sort_2 соответственно. После выполнения сортировки выбирается пункт меню с номером 2 для просмотра результатов сортировки (рисунки 4 и 5).
Рисунок 4 Вывод результатов сортировки элементов строк матрицы по возрастанию значений