Вы находитесь на странице: 1из 8

Министерство образования республики Молдова

Технический университет Молдовы


Кафедра «Автоматика и информационные технологии»

Отчёт

Лабораторная работа № 2
Тема: Одномерные массивы в языке Си

Выполнил студент гр. TI-210 Кизицки М.


Проверил Брынзан Л.

Кишинёв 2020
Содержание
Цель работы……………………………………………………………………………………..3
Задание…………………………………………………………………………………………..3
Краткие факты об одномерных массивах в языке Си………………………………………...3-4
Реализация кода программы…………………………………………………………………....4-5
Вывод……………………………………………………………………………………………6
Список литературы……………………………………………………………………………..7
Листинг программы…………………………………………………………………………….8

2
Цель работы
Изучение приемов и способов использования одномерных массивов в языке Си для выполнения
операций с элементами массива. Освоение методики обработки информации в одномерных
массивах.

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

Краткие факты о одномерных массивах языке Си


Данный отчёт строится на основе использования одномерных массивов в языке Си. Вместо того,
чтобы по отдельности выполнять массу действий были созданы одномерные массивы. Для
представления набора однотипных данных используются массивы, являющиеся наряду с циклами
фундаментальным инструментом программирования. Массивы позволяют избегать дублирования
кода и разрабатывать компактные, понятные и красивые программы.
Для наиболее полного использования возможностей массивов они должны применяться в
комбинации с циклами, поэтому для успешного освоения данной темы необходимо уверенно
владеть работой с циклами.
В языке СИ определены только одномерные массивы, но поскольку элементом массива может быть
массив, можно определить и многомерные массивы. Они формализуются списком константных-
выражений следующих за идентификатором массива, причем каждое константное-выражение
заключается в свои квадратные скобки.

Элементы многомерного массива располагаются в последовательных ячейках оперативной памяти


по возрастанию адресов.

Массив int a[2][3] будет расположен в памяти следующим образом:

Рисунок 1 – пример отображения массива в памяти.


Индексные выражения для ссылки на элементы одномерного массива вычисляются путем сложения
целой величины со значениями указателя с последующим применением к результату операции
разадресации.
3
Адрес элемента с заданным набором индексов вычисляется так, что время доступа ко всем
элементам массива одинаково. (Здесь одинаковость времени доступа следует понимать как
отсутствие теоретической зависимости времени доступа от положения элемента и размера массива.
В действительности особенности конкретной вычислительной платформы могут дать
определённый разброс времени доступа. Например, CAS-латентность ОЗУ приводит к увеличению
времени доступа к данным, расположенным в другой колонке (странице) ОЗУ, по отношению к
предыдущим считанным данным. В практике программирования такими тонкостями, за
редчайшими исключениями, пренебрегают.)

Таким образом, можно выделить ряд плюсов использования массивов в своём проекте: лёгкость
вычисления адреса элемента по его индексу (поскольку элементы массива располагаются один за
другим), одинаковое время доступа ко всем элементам, малый размер элементов: они состоят только
из информационного поля.

Но также присутствуют и недостатки: для статического массива — отсутствие динамики,


невозможность удаления или добавления элемента без сдвига других, для динамического и/или
гетерогенного массива — более низкое (по сравнению с обычным статическим) быстродействие и
дополнительные накладные расходы на поддержку динамических свойств и/или гетерогенности,
при работе с массивом в стиле Си (с указателями) и при отсутствии дополнительных средств
контроля — угроза выхода за границы массива и повреждения данных.

Реализация программы
В самом начале происходит ввод значения переменной C. Значения элементов массива уже
присутствуют в коде и не нуждаются в объявлении.

Листинг 1 – Объявление переменных.


Далее используется цикл for для определения количества элементов массива, которые имеют
значение больше чем переменная C.

Листинг 2 – Количество элементов массива, которые больше заданной переменной.


4
Следующим этапом кода является определение максимального по модулю элемента массива и
произведение элементов, которые находятся после него. Для этого мы находим максимальный по
модулю элемент. Проводим проверку: находится ли он в конце массива или нет. Если да, то
выводится значение 0, так как если максимальный по модулю элемент находится в конце, то после
нет элементов, а значит произведение будет равно нулю. Далее вычисляется произведение всех
элементов, порядковый номер которых больше, чем порядковый номер максимального по модулю
элемента.

Листинг 3 – Поиск максимального по модулю элемента. Вычисление произведения всех


элементов, которые находятся после него.
Далее используется цикл for для того, чтобы произошла сортировка элементов массива по
возрастанию.

Листинг 4 – Сортировка элементов массива по возрастанию.


Код проекта доступен по ссылке: https://github.com/tischina/array/blob/master/main.c
5
Вывод
В ходе данной работы была создана программа, которая в сочетании одномерных массивов и
циклов выполняет различные манипуляции с элементами цикла. Из нереализованных
функциональностей, которые в дальнейшем следует добавить, можно выделить следующие
возможности. Во-первых, необходимо провести оптимизацию программы связанную с
сокращением количества переменных, используемых в коде программы. Во-вторых, следует учесть
недостатки функции scanf и в дальнейшем избавиться от возможных ошибок.

6
Список литературы
1. “Язык Си: учебник и практический курс для начинающих” [электронный ресурс] : К.
Поляков 1995-2009.
2. «Алгоритмы и структуры данных» = «Algoritms and data structure» Вирт Н. — М.: Мир,
1989. — 360 стр

7
Приложение 1.
Исходный код программы.