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

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

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


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

Отчёт

Лабораторная работа № 1
Тема: Использование операторов проверки условия и операторов цикла на языке Си

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


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

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

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

Задание
Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон.
с шагом dX. При этом функция F должна принимать действительное значение, если выражение (Ац
ИЛИ Вц) МОД2 (Вц И Сц) не равно нулю, и целое значение в противном случае. Через Ац, Вц и
Сц обозначены целые части значений а, b, с, операции И, ИЛИ и МОД2 (сложение по модулю 2) -
поразрядные. Значения a, b, с, Хнач., Хкон., dХ необходимо ввести с клавиатуры.

Рисунок 1 – условие задания.

Краткие факты об операторах и циклах на языке Си:


Данный отчёт строится на основе использования операторов проверки условия и цикла на языке
Си. Вместо того, чтобы по отдельности выполнять массу действий были созданы циклы. Циклы
позволяют экономить память отводимую под программные инструкции при необходимости
повторять одни и те же действия много раз.
Они нужны для повторения выполнения одних и тех же действий в одном месте программы. Если
нужно повторить действия в разных местах программы, то используются подпрограммы
(процедуры или функции) с циклами.
Исполнение любого цикла включает первоначальную инициализацию переменных цикла, проверку
условия выхода, исполнение тела цикла и обновление переменной цикла на каждой итерации.
Кроме того, большинство языков программирования предоставляет средства для досрочного
управления циклом, например, операторы завершения цикла, то есть выхода из цикла независимо
от истинности условия выхода (в языке Си — break) и операторы пропуска итерации (в языке
Си — continue).

Иногда в программах используются циклы, выход из которых не предусмотрен логикой программы.


Такие циклы называются безусловными, или бесконечными. Специальных синтаксических средств
для создания бесконечных циклов, ввиду их нетипичности, языки программирования не
предусматривают, поэтому такие циклы создаются с помощью конструкций, предназначенных для
создания обычных (или условных) циклов. В языке Си используется цикл for(;;) с незаполненными
секциями или цикл while.
Цикл с предусловием — цикл, который выполняется, пока истинно некоторое условие, указанное
перед его началом. Это условие проверяется до выполнения тела цикла, поэтому тело может быть
3
не выполнено ни разу (если условие с самого начала ложно).

В большинстве процедурных языков программирования реализуется оператором while, отсюда его


второе название — while-цикл. На языке Си цикл с предусловием имеет следующий вид:

Рисунок 2 – цикл while.

В Cи и других, произошедших от него языках, цикл for, несмотря на синтаксическую форму цикла
со счётчиком, в действительности является циклом с предусловием. То есть в Си конструкция
цикла

Рисунок 3 – цикл for (1)


фактически представляет собой другую форму записи конструкции

Рисунок 3 – цикл for (2)


То есть в конструкции for сначала пишется произвольное предложение инициализации цикла,
затем — условие продолжения и, наконец, выполняемая после каждого тела цикла некоторая
операция (это не обязательно должно быть изменение счётчика; это может быть
правка указателя или какая-нибудь совершенно посторонняя операция). Для языков такого вида
вышеописанная проблема решается очень просто: переменная-счётчик ведёт себя совершенно
предсказуемо и по завершении цикла сохраняет своё последнее значение.
Реализация программы
Программа, разработанная для данного отчёта, представляет собой несколько циклов if/for c
проверкой правильности введённых пользователем данных (в условии присутствуют дроби,
поэтому нужно учитывать ОДЗ). В случае если введённое пользователем значение не принадлежит
области допустимых значений функции, то программа останавливается (return 0). После ввода
пользователем данных, необходимых для работы программы, их проверки, вводится переменная F
(непосредственно итоговый ответ программы, который будет меняться в зависимости от текущего
x).

4
Листинг 1 – ввод переменных и их проверка
После выполнения вышеописанных действий, программа начинает выполнять цикл от начального
значения x (x = Xn) до конечного значения x с шагом dX. Внутри цикла for находятся 3 цикла if,
которые необходимы для того, чтобы правильно выбрать функцию (из 3 возможных – условие
задания) и вывести её на экран пользователя.

Листинг 2 – цикл for от начального значения x до конечного


После выполнения первых двух циклов if, запускается последний цикл, который будет выводить на
экран результат вычислений программы на каждом значении x в соответствии с шагом dX, Xn и Xk.
В данном цикле проверяется заданное условие (Ац ИЛИ Вц) МОД2 (Вц И Сц) и в случае его
ложности значение функции F принимает целое значение. Преобразуем все значения к типу
<long> для выполнения побитовых операций.

Листинг 3 – цикл if проверки и вывода данных на экран

После выхода из цикла программа завершает свою работу. (return 0)


5
Код проекта доступен по ссылке: https://github.com/thomaslondon/lab1/blob/master/lab.c
Оптимизация кода
Компиляторы сами пытаются оптимизировать код. Когда GCC запущен с параметром -Og, он
выполняет базовый уровень оптимизации, с параметром -O1 первый уровень оптимизации.
Существует и более высокие уровни оптимизации: -O2, -O3 и т. д. Чем выше уровень оптимизации,
тем более радикальные изменения компилятор вносит в программу. Компиляторы могут применять
только безопасные оптимизации. Это значит, что компилятор может изменять программу только
так, чтобы это не изменило её поведение для всех входных данных.
Существуют определённые характеристики кода, которые не позволят компилятору совершить
оптимизацию. Их называют блокировщиками оптимизации. Одним из них являются вызов функции.
Для оптимизации своей программы я был вынужден отказаться от вызова функции, так как это
отрицательно влияет на процент оптимизации. Компилятору тяжело определить, имеет вызов
функции побочные эффекты или нет. Когда он не может этого сделать, он рассчитывает на худшее
и не выполняет оптимизацию.
Вывод
В ходе данной работы была создана программа, которая вычисляет и выводит на экран в виде
таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX. Из нереализованных
функциональностей, которые в дальнейшем следует добавить, можно выделить следующие
возможности. Во-первых, необходимо добавить проверку всех значений, введённых пользователем
и в случае ошибки выводить на экран ошибку с причиной и способом её решения. Во-вторых,
следует учесть недостатки функции scanf и в дальнейшем избавиться от возможных ошибок.

6
Список литературы
1. “Язык Си: учебник и практический курс для начинающих” [электронный ресурс] : К.
Поляков 1995-2009.
2. “Как программировать на С” : Харви и Пол Дейтел.
3. “Язык программирования C. Лекции и упражнения” : Стивен Прата.
4. “Язык программирования С” : Б. Керниган, Д. Ритчи.

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

8
Приложение 2.
Блок-схема алгоритма.