46760 (665624), страница 2
Текст из файла (страница 2)
Структура повторение получается, если последовательность команд должна повторяться неоднократно для решения задания. Минимум одна команда должна заботиться о том, чтобы после конечного числа прохождений не было больше выполнено условие повторения.
При написании программы желательно разбиение ее на модули. Во всех более высоких языках программирования эта возможность реализована в форме подпрограмм. За применение подпрограмм говорят следующие причины: наглядность, экономичность, возможность быстрого внесения изменений.
Затем автором рассматриваются основные способы представления алгоритмов: вербальное описание, графические способы представления (логическая схема программы и структограммы).
1.6 Развитие программного обеспечения
В этом параграфе профессор рассказывает о причинах появления новой дисциплины в рамках информатики, а также пытается определить область ее применения.
Основной причиной появления новой дисциплины является невозможность полностью устранить ошибки программирования. В рамках дисциплины «Разработка программного обеспечения» разрабатываются модели и методы, с помощью которых даже самые большие программные системы могут работать безошибочно.
Важнейшими критериями здесь являются: надежность и корректность, удобство и гибкость (возможность быстрых изменений в программе) работы, удобочитаемость программного кода, эффективность создания и применения.
В этом параграфе достаточно подробно рассматриваются теоретические основы разработки ПО и особое внимание уделяется подготовке, анализу проблемы и постановке задач программирования.
1.7 Введение в структуры данных
В этом разделе автор рассказывает о том, что дисциплина разработки программ сформировалась наряду с проблемно-ориентированным программированием. При этом сначала определяется структура данных для каждого обрабатываемого объема данных. Затем устанавливают, какие виды связей между ним существуют.
Огромное значение здесь имеют типы данных, а также их значения и свойства. Тип переменных величин характеризуется диапазоном принимаемых значений. В каждой программе договариваются о имени и типе переменных.
Помимо переменных автор упоминает и о константах, значения которых могут непосредственно вноситься в структуру программы.
Каждая переменная характеризуется своим именем и значением. Особое внимание Плате обращает на различие между распределением значений и уравнением в математическом смысле. Таким образом, математическое уравнение X = X + 1 не имеет решения, а в языке программирования эта запись значит, что “прибавляют 1 к значению X и сохраняют результат снова в X " или короче "Повышают X на 1".
Автор объясняет также, из чего состоят выражения в языках программирования. Это формулы, которые всегда дают какой-то результат и состоят из операндов (константа, переменные величины и функции) и операторов (однозначных и двузначных).
Далее автор подробно останавливается на стандартных типах данных, которые используются во всех языках программирования:
-
Boolean – логический тип (принимает значения True или False).
-
Integer – тип целых чисел.
-
Character – символьный тип.
-
Real – тип действительных чисел.
Также он рассматривает структурные типы данных:
-
Feld (Array) - Поле (массив). Переменные величины этого типа содержат множество элементов одинакового стандартного типа.
-
Record (Structure) – Записи (связи). Содержат элементы различного типа и имеют каждый свое имя.
В заключении обзора рассматривается общий тип данных – файлы. Они состоят из большого количества данных различных типов. Вместе с данным типом определяется несколько стандартных операций: открытие и закрытие доступа к файлу, чтение из файла и запись данных в файл.
1.9 Обеспечение высокого качества разработки программ
Профессор определяет данное в заголовке понятие так:
Качество программного обеспечения - это совокупность признаков и значений программного продукта, которые необходимы для нормального функционирования программы и удовлетворения потребностей пользователей.
Плате выделяет следующие признаки ПО, которые определяют его качество:
-
Функциональность
-
Надежность
-
Пригодность к употреблению
-
Эффективность
-
Изменчивость
-
Переносимость
Для того, чтобы создать качественный программный продукт автор говорит о необходимости выполнения ряда действий:
-
Тестирование ПО
-
Тест «письменного стола» – в соответствии с поставленной задачей необходимо выбрать входные данные и рациональный ход решения.
-
Тест «черного ящика» – функциональный тест, который рассматривает алгоритм в качестве черного ящика, в который нельзя заглянуть (проводит обычно покупатель).
-
Тест «белого ящика» – он предполагает, чтобы входные данные были подобраны так, чтобы алгоритм выполнился хотя бы один раз.
-
Проверка подлинности ПО - это комплекс мероприятий, направленных на безупречное функционирование программы при любых входных данных, которое показывается с помощью математического аппарата.
Тестовое планирование и тестовая документация. Так как достаточно часто тестирование проходит непродуманно и внепланово, то необходимо составлять план тестов и протоколировать ход тестирования, чтобы исключить появление других ошибок в программе.
Таким образом, разработка ПО включает в себя следующие этапы:
-
Интуитивная разработка алгоритмов.
-
Формализация алгоритма, математическое описание.
-
Изображение алгоритмов структограммой. Разделение на модули и подпрограммы.
-
Разрабатывают алгоритмов с помощью языка программирования высокого уровня.
-
Кодирование.
2. Структура программы
Прежде чем приступать к программированию, автор обосновывает выбор в качестве изучаемого языка программирования - языка С.
Язык C был первоначально разработан как расширение для операционной системы UNIX, но впоследствии превратился в стандартный ЯП для разных платформ. Этому способствовало:
-
богатство операторов,
-
относительная машинная независимость,
-
возможная высокая мобильность,
-
небольшой языковой объем (только 32 ключевых слова),
-
много синтаксических возможностей в комбинации с упрощенными стилями.
2.1 Основные элементы программы на C
В этой главе автор знакомит нас с основными синтаксическими единицами языка С:
-
Набор символов С-программы – это буквы, цифры, знаки, а также некоторые специфические элементы (пробел, предупреждение, возврат, табуляция)
-
Разделители – пробелы, табуляторы, конец строки, перевод страницы, комментарии служат для разделения основных элементов языка
-
Директива компилятора #include – подключает к компилятору файлы.
-
Функции - из них состоит вся программа. Для каждой программы главной является функция Main, которая начинается с "{" и оканчивается "}".
-
Стандартные библиотеки - стандартные функции предоставляются стандартными библиотеками.
-
Ключевые слова имеют предопределенное значение, которое не может изменяться.
-
Идентификаторы и имена – все объекты C имеют идентификаторы, которые состоят из последовательности букв, цифр или подчеркивания.
-
Escape-последовательности – с помощью них записываются непечатаемые символы через "\".
2.2 Условные операторы
Автор знакомит нас с первой нелинейной структурой. Структура If…Else означает ветвление с переходом вперед. Здесь возможны два различных пути решения в зависимости от условия. Существует два вида этой структуры:
-
односторонний выбор - выполняет действие только на одном из путей разветвления и соединяет оба пути в один, т.е. if (Условное выражение) Инструкция;
-
двусторонний выбор – выполняет действия на каждом пути разветвления и также соединяет оба пути, т.е. if (Условное выражение) Инструкция1; else Инструкция2;
Далее автор рассматривает еще один вид условного оператора, выражаемого вопросительным знаком. Он имеет следующий вид:
Условное выражение ? Выражение1: Выражение2
Выражение с условием не может стоять в одиночестве, как в предыдущем ветвлении, а стоит внутри выражения.
Третья условная структура – многократный выбор switch..case. Автор показывает, что в этой структуре имеются больше чем 2 пути выбора, которые также соединяются. Для каждого условия обязательно существует своя инструкция. Для всех оставшихся случаев выполняется какое-то действие. Структура switch .. case имеет такой вид:
switch (Выражение)
{
case W1: Инструкция 1;
...;
case Wn: Инструкция n;
default: Инструкция (по умолчанию);
}
2.3 Циклические операторы
В этом параграфе профессор объясняет, что структуры повторения используются, если последовательность команд должна повторяться неоднократно для решения задачи. Программирование структуры повторения ведет к так называемому "программному циклу".
В случае со структурой while условие стоит в начале программного цикла, поэтому цикл может не выполниться ни разу. Общий вид команды таков:
while (Условные выражения) Инструкции;
Следующая циклическая структура – повторение for представляет самую универсальную форму повторения. Команда имеет следующий вид:
for (Выражение 1; Выражение 2; Выражение 3)Команда;
где Выражение 1 – начальное значение выражения, Выражение 2 – условное выражение, которое должно выполниться для выполнения команд, Выражение 3 – изменяет счетную величину для продолжения повторения.
Затем автор рассматривает структуру, обратную структуре while. Последовательность команд запускается в любом случае, по меньшей мере, однажды. Поэтому эту структуру называют также непредотвратимым повторением.
Do
Инструкция;
while (Условное выражение);
Таким образом, в данной главе автором были разобраны различные типы трех структурных единиц любого языка программирования – линейной, разветвляющейся и циклической.
3. Функции
В этой главе автор рассказывает об одном из главных структурных элементов программы – функциях. Во всех высокоуровневых языках программирования происходит разделение программ на части с помощью подпрограмм-функций.
3.1 Понятие
Функции реализуют идеологию структурного программирования и исполняют все необходимые задания для решения общей задачи. Для самых важных и часто используемых заданий имеются стандартные функции, занесенные в программные библиотеки C. Для решения других задач необходимо написать собственные функции. Все C-программы состоят из набора небольших функций. Для определения функции в языке C необходимо указать тип и имя, а также список параметров в круглых скобках.
В языке C любая функция определяется глобально, т.е. не зависит от других функций. В общем виде эту структуру можно представить так:
Тип имя функции (список параметров)
{
Соглашения
Инструкции
return (значение функции)
}
Для каждого из параметров функции представляется его тип. Эти формальные параметры имеют собственное имя, которое используется в пределах работы функции и собственный тип. Например, функция:
int quad (int x)
{
return (x * x);
}
содержит параметр с именем x типа Integer(целый).
При вызове функции формальные параметры заменяются актуальными параметрами, в качестве которых могут выступать определенные значения, константы или переменные величины. Например: y = quad (25); При этом тип актуального параметра должен обязательно соответствовать типу формального параметра.
3.2 Готовность и срок службы имен
Особенно автор обращает внимание на имена переменных, констант, функций в программе. В программе существуют две позиции на значение имен:
-
Готовность (Доступность). Этим свойством определяются места программы, в которых можно получить доступ к тем или иным объектам (переменным величинам или функциям). Здесь существует 4 основных программных области – программа, модуль, функция, блок. Объекты, которые определяются в самой программе или модуле являются глобальными объектами, а если определяются в пределах блока или функции, то являются локальными объектами.
-
Срок службы (Жизненный цикл). Здесь говорится о длительности упорядочивания ячеек памяти. Различают полное время распространения (статическая продолжительность) и время выполнения блока, в котором определялся объект.
Эти правила дают ряд преимуществ при написании программ:
-
Переменная получает определенное значение в пределах функции.
-
Локальные переменные не применяются для всей программы, поэтому можно использовать одинаковые имена переменных в различных функциях.
-
Глобальные переменные определяются один раз и используются всеми функциями программы.
-
Если имена глобальных и локальных переменных совпадают, то в данной функции используются значения локальных переменных. Таким образом, необходимо избегать написания одинаковых имен переменных.
3.3 Рекурсия и итерация
В этом параграфе автор рассказывает о очень важном методе решения задач – рекурсивных алгоритмах. Алгоритм называется рекурсивным, если вызов функции происходит в пределах самой функции, т.е. функция ссылается сама на себя. При этом основная мысль состоит в том, чтобы уменьшать рекурсивным образом данную проблему до тех пор, пока не будет получен простейший случай. При этом значительно уменьшается алгоритм решения задачи.
Чтобы достигнуть рекурсивности, локальные переменные величины и параметры должны сохраняться не в статической памяти, а в так называемой динамической памяти, которая реализуется программно.