Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

3625

.pdf
Скачиваний:
5
Добавлен:
08.01.2021
Размер:
606.02 Кб
Скачать

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 Вывод результатов сортировки элементов строк матрицы по возрастанию значений

16

Рисунок 5 Вывод результатов сортировки элементов строк матрицы по убыванию значений

Для записи элементов массива в двоичный файл используется пункт меню с номером 5 (функция write_file), для чтения информации из файла пункт меню с номером 6 (функция read_file). Поскольку содержимое файла выводится в массив, то перед чтением из файла целесообразно очистить (обнулить) элементы массива, чтобы убедиться в правильности выполнения операции чтения из файла.

Для выхода из программы и передачи управления в операционную систему (или интегрированную среду разработки Microsoft Visual Studio 2008) используется пункт меню с номером 7.

3 Варианты индивидуальных заданий на курсовую работу

Вариант №1

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

Вариант №2

Ввести с клавиатуры целые значения для элементов матрицы А[4][5]. Построить вектор B[4], элементы Bi которого равны единице, если элементы i-й строки матрицы A образуют упорядоченную по убыванию или по возрастанию последовательность, и нулю во всех остальных случаях. Для всех строк с четными номерами упорядочить элементы по возрастанию их значений, с

17

нечетными номерами по убыванию их значений. Вывести на экран исходную и результирующую матрицы.

Вариант №3

Ввести с клавиатуры целые значения для квадратной матрицы с размерами 5×5 элементов. Вычислить средние арифметические значения для элементов, лежащих на главной и вспомогательной диагоналях матрицы. Сравнить полученные средние арифметические значения и большее из них вместе со значениями элементов соответствующей диагонали вывести на экран и сохранить в файле. Предусмотреть возможность для чтения содержимого этого файла.

Вариант №4

Ввести с клавиатуры целые значения для квадратной матрицы с размерами 5×5 элементов. Просматривая ее элементы в заданном порядке, найти первый четный элемент и поменять его местами с диагональным элементом той строки, в которой он находится. Предусмотреть следующие варианты для порядка просмотра элементов матрицы: 1) сверху вниз и слева направо; 2) сверху вниз и справа налево; 3) снизу вверх и слева направо; 4) снизу вверх и справа налево.

Вариант №5

Ввести с клавиатуры целые значения для матрицы с размерами 4×5 элементов. Для всех строк с четными номерами упорядочить элементы по возрастанию их значений, с нечетными номерами по убыванию их значений.

Вывести на экран исходную и результирующую матрицы.

Вариант №6

Ввести с клавиатуры значения для целочисленной матрицы с размерами 4×5 элементов. Определить, сколько строк заданной матрицы содержат хотя бы один элемент из заданного целочисленного диапазона. Вывести матрицу и значение для количества строк на экран монитора.

Вариант №7

Ввести с клавиатуры значения для элементов целочисленного массива A[10]. Подсчитать количество различных (не повторяющихся) чисел, встречающихся в заданном массиве. Повторяющиеся числа учитывать только один раз. Вывести массив и количество неповторяющихся чисел на экран монитора.

Вариант №8

Ввести с клавиатуры значения для элементов целочисленного матрицы размером 4×5 элементов. Подсчитать количество различных (не повторяющихся) чисел, встречающихся в заданной матрице. Вывести массив и количество неповторяющихся чисел на экран монитора.

18

Вариант №9

Ввести с клавиатуры значения для элементов матрицы размером 4×5 элементов. Определить индексы первого элемента, значение которого превышает среднее арифметическое значение всех элементов. Вывести исходную матрицу, среднее арифметическое значение и значения индексов элемента на экран монитора.

Вариант №10

Ввести с клавиатуры значения для элементов матрицы размером 4×5 элементов. Определить сколько строк заданной матрицы содержат хотя бы один элемент из заданного диапазона. Вывести исходную матрицу и найденное количество строк на экран монитора.

Вариант №11

Ввести с клавиатуры значения для элементов целочисленной матрицы размером 4×5 элементов. Определить средние арифметические значения для четных и нечетных элементов матрицы. Вывести исходную матрицу и найденные средние арифметические значения на экран монитора.

Вариант №12

Ввести с клавиатуры целочисленные значения для элементов квадратной матрицы размером 5×5 элементов. Задать три целых значения, которые будут суммированы со значениями элементов, находящимися а) на главной диагонали; б) над главной диагональю; в) под главной диагональю. Вывести исходную и результирующую матрицы на экран монитора.

Вариант №13

Ввести с клавиатуры целочисленные значения для элементов квадратной матрицы А размером 5×5 элементов. Сформировать вектор (одномерный массив) B, элементы которого определяются по следующему правилу: Bi равно первому по порядку положительному элементу в i-й строке матрицы (если таких элементов в строке нет, то принять Bi =-1). Вывести введенную матрицу и сформированный вектор на экран монитора.

Вариант №14

Ввести с клавиатуры целочисленные значения для элементов квадратной матрицы А размером 5×5 элементов. Сформировать вектор (одномерный массив) B, элементы которого определяются по следующему правилу: Bi равно количеству отрицательных элементов в i-й строке матрицы. Вывести введенную матрицу и сформированный вектор на экран монитора.

Вариант №15

Ввести с клавиатуры целочисленные значения для элементов квадратной матрицы А размером 5×5 элементов. Сформировать вектор (одномерный массив) B, элементами которого являются суммы элементов только тех строк

19

матрицы А, которые содержат не менее k положительных элементов (в противном случае сумма элементов строки принимается равной 0). Вывести введенную матрицу и сформированный вектор на экран монитора.

Вариант №16

Ввести с клавиатуры целые значения для квадратной матрицы с размерами 5×5 элементов. Выполнить следующую обработку элементов матрицы: 1) отсортировать элементы, лежащие на главной диагонали матрицы, по возрастанию их значений; 2) выполнить симметричное отображение элементов относительно главной диагонали матрицы, т.е. заменить элементы, лежащие над главной диагональю, элементами, лежащими под главной диагональю, и наоборот. Вывести на экран исходную и результирующую матрицы. Значения элементов, лежащих на главной диагонали, записать в файл. Предусмотреть возможность чтения созданного файла.

Вариант №17

Ввести с клавиатуры целочисленные значения для элементов квадратной матрицы размером 5×5 элементов. Выполнить суммирование значений элементов, находящихся а) на главной диагонали; б) над главной диагональю; в) под главной диагональю. Вывести на экран монитора полученные значения трех сумм в порядке их возрастания.

Рекомендуемые информационные источники

1.Логинов, В. И. Основы алгоритмизации [Текст] : учеб.-метод. пособие для студ. оч. и заоч. обуч. технич. специальностей / В. И. Логинов, Л. Н. Шемагина. – Н. Новгород : Изд-во ФГОУ ВПО «ВГАВТ», 2010. – 81 с.

2.Бочарова, Т. А. Основы алгоритмизации [Текст] : учеб. пособие / Т. А. Бочарова, Н. О. Бегункова. – Хабаровск : Изд-во Тихоокеан. гос. ун-та, 2011. –

64 с.

3.Основы алгоритмизации инженерных задач [Текст] : учебное пособие / В. Н. Суриков, А. С. Кудрявцев, Г. А. Петров, Е. В. Хардиков. – ГОУВПО СПбГТУ РП. СПб., 2008. – 158 с.

4.Козенко, С. Л. Алгоритмизации инженерных задач [Текст] : методич. указания / С. Л. Козенко. – СПб. : ГОУ ВПО «СПбГУАП», 2005. – 46 с.

5.Белов, М. П. Основы алгоритмизации в информационных системах [Текст] : учеб. пособие / М. П. Белов. – СПб. : СЗТУ, 2003. – 85 с.

6.Петрова, М. В. Алгоритмизация и программирование задач [Текст] : методич. указания / М. В. Петрова. – Ульяновск: УлГТУ, 2003. – 32 с.

7.Александров, Э. Э. Программирование на языке С в Microsoft Visual Studio 2010 [Текст] / Э. Э. Александров, В. В. Афонин. – М. : Национальный Открытый Университет «ИНТУИТ», 2016. – 571 с.

8.Керниган, Б. Язык программирования Си [Текст] : Пер. с англ. –3-е изд., испр. / Б. Керниган, Д. Ритчи. – СПб. : «Невский Диалект», 2001. – 352 с.

9.Прата, С. Язык программирования C. Лекции и упражнения [Текст] : Пер. с англ. – 6-е изд. / С. Прата. – М.: «И.Д. Вильямс», 928 с.

20

10. Харбисон С. П. Язык С с примерами [Текст] : Пер. с англ. / С. П. Харбисон, Г. Л. Стил. – М.: «Издательство Бином», 2011. – 528 с.

 

Оглавление

 

 

Введение ………………………………………………………………

3

1

Разработка и описание алгоритма решения задачи………………..

3

2

Пример программы на языке программирования Си……………….

10

3

Варианты индивидуальных заданий на курсовую работу……….

16

 

Рекомендуемые информационные источники………………………

19

Стариков Александр Вениаминович

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]