3625
.pdf11
//
//Пример программы, демонстрирующей работу с двумерным массивом
//(матрицей), выполнение сортировки элементов строк массива, запись
//элементов массива в двоичный файл, чтение данных из файла и вывод их
//на экран монитора.
//
#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 |
Стариков Александр Вениаминович