Лабораторная работа №5. Обработка массивов
Задание
Разработать программу, обрабатывающую элементы двумерного массива размером n*m в соответствии с вариантом и прилагаемым рисунком. Размерность массива n и его элементы должны вводиться пользователем с клавиатуры. Исходный и преобразованный массивы должны быть выведены на экран после обработки.
Варианты:
1. Обнулить элементы, рис. 3.a;
2. Изменить знак на противоположный, рис. 3.б;
3. Сложить с заданным числом, рис. 3.в;
4. Вычесть заданное число, рис. 3.г;
5. Умножить на заданное число, рис. 3.д;
6. Обнулить элементы, рис. 3.е;
7. Изменить знак на противоположный, рис. 3.а;
8. Сложить с заданным числом, рис. 3.б;
9. Вычесть заданное число, рис. 3.в;
10. Умножить на заданное число, рис. 3.г.
11. Обнулить элементы, рис. 3.д;
12. Изменить знак на противоположный, рис. 3.е;
Методические указания
Исходно программа должна строиться для заранее не определенных значений размерности массива n и m. По правилам построения простых программ на языке Си размерность массива должна определяться сразу. Обычно размерности массива задается определенной величины (например, 10 на 10). Однако, реальные значения n и m (но не более заданной ранее величины – у нас 10) вводятся в качестве исходных данных. Чтобы можно было работать с заранее неопределенными размерностями, будем пользоваться переменными, определяемыми директивой define (подстановкой в программе), например, как показано ниже.
#define n 8
#define m 6
Подстановка позволяет не устанавливать в тексте программы фиксированные (числовые) границы обрабатываемых данных.
Для упрощения проектирования на первом этапе массив для тестирования можно взять, например, размером 4*4 элемента. Подобный подход позволит отладить основные функции программы и не усложнит дальнейшее усовершенствование.
При этом можно ещё больше упростить разработку программы за счёт временного комментирования цикла ввода и использования заранее созданного массива. В таком случае по известным данным всегда можно будет отловить ошибку и не загружать процесс тестирования постоянным вводом данных. В качестве исходного массива стоит подготовить тестовый массив. Для удобства контроля за результирующим и промежуточными массивами значения удобно задать, например, в форме номер строки и номер столбца. Для процесса отладки удобно эти значения временно задать вместо вводимых данных, пользуясь заданием начальных значений, например:
int A [10][10] = {{11, 12, 13, 14},{21, 22, 23, 24},{31, 32, 33, 34},{41, 42, 43, 44}};
В приведенном примере в массиве А с размерностью 10 на 10 заполнены фиксированными данными только четыре первых столбца первых четырех строках. Поэтому, если задаться величинами m и n равными 4, то обработке может подвергаться матрица с заранее предопределенными и фиксированными значениями (значение каждого элемента есть номер строки и номер столбца).
Для будущего тестирования перед исполнением программы необходимо вручную вычислить значения результирующего массива. При работе с элементами двумерного массива следует использовать метод полного перебора строк, а внутри перебора по столбцам на основе вложенных конструкций for, как показано ниже на примере вывода таблицы 4*4
printf(“вывод массива \n”);
for (i = 1; i < n; i++)
{
for (j= 1; j < m; j++) printf(“%d “, A[i][j]);
printf(“\n”);
}
Алгоритм решения задач данной работы можно представить в виде приведенном ниже.
Рис. 3. Алгоритм обработки массива.
Как видно из алгоритма, в программе определены два массива одинокого размера: исходный массив (у нас A) и его копия (например, B). Обработке вначале подвергается копия с вычислением нового значения на основе исходного массива и лишь тогда, когда обработка будет закончена, осуществляется требуемая замена значений исходного массива на новые значения. Хотя подобная организация требует удвоения памяти для хранения обрабатываемого массива, выгодой является простота построения алгоритма и программы.
Для определения принадлежности элемента условию рекомендуется обратить внимание на порядковый номер элемента в строке и столбце, а так же взаимное соотношение других элементов строк и столбцов.
Семестр 2
Лабораторная работа №1.
Обработка массивов символов
Задание
Разработать программу, обрабатывающую содержимое строки символов в соответствии с заданием. Строка содержат слова, которые разделяются символом пробел ‘ ‘.
Варианты:
1. Вывести на экран длины слов в строке;
2. Вывести на экран слова и их длины, содержащие заданный символ;
3. Определить и вывести на экран первое слово в строке с минимальной длиной;
4. Определить и вывести на экран последнее слово в строке с минимальной длиной;
5. Определить и вывести на экран последнее слово в строке с максимальной длиной;
6. Удалить из строки слова, содержащие заданный символ. Исходную и преобразованную строки вывести на экран;
7. Удалить из строки слова, следующие за словами, содержащими заданный символ. Исходную и преобразованную строки вывести на экран;
8. Удалить из строки слова, предшествующие строками, содержащими заданный символ. Исходную и преобразованную строки вывести на экран;
9. Вывести на экран упорядоченные в порядке возрастания числа символов строки;
10. Вывести на экран упорядоченные в порядке убывания числа символов строки;
11. Удалить все русские буквы в строке;
12. Удалить все латинские буквы в строке;
13. Удалить символ предшествующий заданному символу;
14. Удалить символ, следующий за заданным символом;
15. Вставить заданный символ перед символом, совпадающим с другим заданным символом;
16. Вставить заданный символ после символа, совпадающего с другим заданным символом;
17. Зафиксировать и вывести на экран порядковые номера первого вхождения заданного символа в слова;
18. Зафиксировать и вывести на экран порядковые номера последнего вхождения заданного символа в слова;
19. Вставить заданный символ после слова, содержащего другой заданный символ.
Методические указания
При составлении программ следует ориентироваться на соответствующие указания к работе № 5 предыдущего семестра.
Лабораторная работа №2.
Обработка файлов
Задание
Разработать программу, обрабатывающую содержимое текстового файла в соответствии с заданием.
Результат обработки должен быть сохранён в отдельном файле. Имена файлов для чтения и записи должны вводится пользователем с клавиатуры.
Места изменений могут быть зафиксированы на экране терминала (не в файле) по желанию пользователя.
В программе должны быть корректно разрешены попытки открытия несуществующего файла.
Варианты:
1. Удалить слова, содержащие заданный символ;
2. Удалить числа, содержащие заданную цифру;
3. Удалить все строчные русские буквы, а все прописные превратить в строчные;
4. Удалить все прописные латинские буквы, а все строчные превратить в прописные;
5. Удалить все русские буквы;
6. Удалить все латинские буквы;
7. Удалить символ предшествующий заданному символу;
8. Удалить символ, следующий за заданным символом;
9. Вставить заданный символ перед символом, совпадающим с другим заданным символом;
10. Вставить заданный символ после символа, совпадающего с другим заданным символом;
11. Вставить заданный символ после слова, содержащего другой заданный символ.
Методическое указание
Для реализации функциональности программы рекомендуется ознакомиться с разделами справочной литературы в области работы с файлами: изучить типы файлов, способы открытия, чтения, записи и закрытия файлов.
Работу программы рекомендуется организовать в концепции посимвольной обработки с использованием буфера соответствующей длины, если это требуется по заданию.
При разработке программы необходимо учитывать и корректно обрабатывать исключительные ситуации, которые могут возникнуть при открытии на чтение несуществующего файла.