
- •Основы алгоритмизации
- •Специфика решения задачи с использованием компьютера
- •Роль моделирования при решении сложных задач
- •Устройство компьютера как инструмента решения задач
- •Пример решения задачи с использованием компьютера
- •Вопросы для самоконтроля
- •Понятие алгоритма
- •Свойства алгоритмов и способы их задания
- •Понятие структурной алгоритмизации
- •Базовый набор алгоритмических структур
- •Примеры классических алгоритмов
- •Переменные-счетчики и аккумуляторы
- •Алгоритм перестановки значений двух переменных
- •Простейший алгоритм сортировки
- •Последовательный и двоичный поиск в массиве данных
- •Вопросы для самоконтроля
- •Основы программирования
- •Изучить три темы:
- •Ответить на вопросы для самоконтроля по каждой теме.
- •Эволюция программирования как деятельности
- •Развитие вычислительной техники
- •Парадигмы современного программирования
- •Уровни языков программирования
- •Современные языки программирования высокого уровня
- •Программирование как вид деятельности
- •Вопросы для самоконтроля
- •Инструменты программирования
- •Основные понятия программирования
- •Этапы разработки программы
- •Функции транслятора в процессе создания программы
- •Средства создания программ
- •Современные системы программирования
- •Вопросы для самоконтроля
- •Проектирование и внедрение программ
- •Этапы разработки программного обеспечения
- •Методы маркетинга программного обеспечения
- •Вопросы для самоконтроля
- •Технология алгоритмического программирования
- •Ответить на вопросы для самоконтроля по каждой теме.
- •Понятия алгоритмического программирования
- •Классификация данных
- •Базовые типы данных
- •Структурированные данные
- •Программа как совокупность операторов. Виды операторов
- •Вопросы для самоконтроля
- •Принципы структурного программирования
- •Понятие подпрограммы
- •Процедуры и функции как разновидность подпрограмм
- •Ответить на вопросы для самоконтроля по каждой теме.
- •Программный код экранной формы
- •Вопросы для самоконтроля
- •Объектно-ориентированное программирование
- •Понятие объекта и класса
- •Концепции объектно-ориентированного программирования
- •Вопросы для самоконтроля
- •Заключение
- •3.3. Глоссарий (краткий словарь терминов)
- •3.4 Технические и программные средства обеспечения дисциплины
-
Программа как совокупность операторов. Виды операторов
Текст программы – это совокупность операторов и комментариев. Структура текста программы представлена на рис.3.4.
Рис. 3.4 Составляющие текста программы
Арифметические операции над числовыми данными
Арифметические выражения состоят из арифметических операторов (таблица 3.9) и операндов (переменных и констант).
Пример: b*2 + с/3, b* (2 + с) – 3.
Таблица 3.9 Арифметические операторы
Арифметические операторы |
Действие оператора |
+ |
сложение |
- |
вычитание |
* |
умножение |
/ |
деление |
Логические операции и операции сравнения
При записи логических выражений используются операции сравнения (таблица 3.10) и логические операции (таблица 3.11). Приоритеты логических операций ниже, чем приоритеты операций сравнения.
Таблица 3.10 Операторы сравнения
Операторы сравнения
|
Варианты написания
|
|
Бейсик, Паскаль
|
Си++
|
|
Равно
|
=
|
==
|
Не равно
|
<> |
!=
|
Меньше
|
<
|
<
|
Меньше или равно
|
<=
|
<=
|
Больше
|
>
|
>
|
Больше или равно
|
>=
|
>=
|
Таблица 3.11 Логические операции
Приоритет |
Логические операторы |
Обозначение |
||
Бейсик |
Паскаль |
Си++ |
||
1 |
НЕ |
NOT
|
not
|
!
|
2 |
И |
AND
|
and
|
&&
|
3 |
ИЛИ |
OR
|
or
|
||
|
Разделение и группировка операторов
В процессе компиляции исходного текста программы происходит анализ каждого оператора. Если записать подряд несколько операторов и не указать, где кончается один и начинается другой, то в процессе компиляции возникнет множество проблем с выделением отдельных операторов. Поэтому в каждом языке предусмотрены символы разделения операторов.
Если возникает необходимость выполнить группу операторов (например, в зависимости от какого-либо условия), то группа объединяется в блок с помощью специальных скобок начала и конца блока, называемых логическими скобками (таблица 3.12).
Таблица 3.12 Группировка операторов с помощью логических скобок
Операторы |
Группы операторов |
||
Бейсик
|
Паскаль
|
Си++
|
|
Разделение операторов
|
: (двоеточие) |
; (точка с запятой)
|
; (точка с запятой) |
Пример |
а23 = а22 (12) + 1: b1 = b1 - 1 |
а := b*2 + с; d := (е[8] - f)*2.2;
|
х[5] = у/3.33; у = z[0] - 0.001; |
Группировка операторов (блок) - логические скобки |
Нет |
begin тело блока end; |
{ тело блока }; |
Комментарии
Комментарии – это части исходных текстов, выделяемые с помощью специальных обозначений и пропускаемые компилятором при анализе текста программы. При составлении программы очень полезно комментировать различные участки кода, чтобы потом, обратившись к ним, сразу понять, что конкретно выполняется в том или ином месте программы. Комментарии могут начинаться и заканчиваться особыми символами и охватывать несколько строк кода, а могут записываться только в конце строки – при этом считается, что весь остаток строки является комментарием. Обозначения комментариев в наиболее популярных языках программирования представлены в таблице 3.13.
Таблица 3.13 Обозначения комментариев
Комментарии |
Обозначение |
||
Бейсик
|
Паскаль
|
Си++
|
|
Однострочный комментарий
|
REM или '
|
//
|
//
|
Пример |
Х = 5 ' комментарий до конца строки |
Х := 5; // комментарий до конца строки |
|
Многострочный комментарий
|
нет
|
{} или (* *)
|
/**/
|
Пример |
|
{это комментарий языка Паскаль (* а это вложенный комментарий *)} |
/* это комментарий языка Си++ */
|
Операторы управления программой
Условный оператор (условные вычисления)
Как правило, в программе требуется изменять порядок выполнения последовательности вычислений в зависимости от определенных условий, записываемых в виде логических выражений и принимающих одно из двух значений – true или false (истинно или ложно). При этом происходит разветвление программы – выполнение в дальнейшем может продолжиться с разных операторов.
Синтаксис условного оператора примерно одинаков во всех языках программирования. Он представляет собой конструкцию (таблица 3.14):
если условие истинно то
выполнить оператор-1
иначе
выполнить оператор-2
Таблица 3.14 Синтаксис условного оператора
Условный оператор |
Обозначение |
||
Бейсик
|
Паскаль
|
Си++
|
|
Синтаксис |
IF условие THEN оператор-1 ELSE оператор-2 END IF |
if условие then оператор-1 else оператор-2; |
if( условие) оператор-1 else оператор-2; |
Пример полного условного оператора |
IF А>0 THEN А = О ELSE А = -1 END IF |
if а > 0 then а := О else а := -1;
|
if( а > 0 ) а = О else a = -1;
|
Пример неполного условного оператора |
IF х < 0 THEN У = х / 2 х = 1 END IF |
if х < 0 then begin у := х / 2; х := 1; end |
if( х < 0 ) { у = х / 2; х = 1; ); |
Операторы повторяющихся вычислений
В языках программирования имеются средства для организации повторных вычислений, называемые операторами цикла:
-
с фиксированным числом повторений,
-
условные операторы цикла.
Оператор цикла включает:
-
заголовок цикла, определяющий число повторений,
-
тело цикла – повторяемый оператор или блока операторов.
Оператор цикла с фиксированным числом повторений
Используется, например, при обработке массивов, размер которых известен заранее или легко определяется.
Заголовок оператора состоит из трех частей:
-
инициализация переменной-счетчика или параметра цикла (присваивание ей начального значения),
-
определение конечного значения счетчика,
-
приращение счетчика, определяющее шаг изменения значения счетчика после каждого выполнения тела цикла.
Описание оператора цикла с фиксированным числом повторений представлено в таблице 3.15.
Таблица 3.15 Описание оператора цикла с фиксированным числом повторений
Оператор цикла с фиксированным числом повторений
|
Обозначение |
||
Бейсик
|
Паскаль
|
Си++
|
|
Синтаксис
|
FOR счетчик = начальное_значение ТО конечное_значение STEP приращение тело цикла группа операторов NEXT |
for счетчик := начальное_значение to конечное_значение do оператор или блок операторов;
|
for( счетчик = начальное_значение; условие_завершения; счетчик = счетчик + приращение) оператор или блок операторов; |
Комментария |
Если приращение не указывать, то считается, что оно равно 1 |
Приращение всегда равно 1
|
|
Примеры инициализации тысячи элементов массива |
FOR I :=1 TO 1000 А(I) := 0 NEXT
|
for i := 1 to 1000 do a[i] := 0;
|
for( i = 0; i < 1000; i = i + 1 ) a[i] = 0;
|
Условный оператор цикла
Число повторений заранее неизвестно – надо выполнять цикл, пока не произойдет некоторое событие, например, пользователь нажмет на кнопку или точность вычислений уложится в заданный диапазон и т. д. В таких ситуациях заголовок цикла включает только условие (логическое выражение) – пока его значение равно true, цикл будет выполняться. Описание условного оператора цикла представлено в таблице 3.16.
Таблица 3.16 Описание условного оператора цикла
Условный оператор цикла
|
Обозначение |
||
Бейсик
|
Паскаль
|
Си++
|
|
Синтаксис
|
DO WHILE условие группа операторов LOOP
|
while условие do оператор или группа операторов;
|
While if (условие) оператор или группа операторов;
|
Примеры |
DO WHILE A > В А = А - 0.01 LOOP
|
while a > b do а := а - 0.01;
|
while( а > b ) а = а - 0 .01;
|
Примеры зацикливания |
а = 0; b = 1; while( а < b ) а = а – 0.01 |
while true do begin // тело цикла end;
|
|
Комментарии |
Исходное значение переменной а меньше значения переменной b, и это значение будет только уменьшаться. Цикл никогда не закончится |
Контроль над выходом из бесконечного цикла при наступлении определенного события возлагается на программиста |
|
Операторы ввода данных и вывода результатов работы программы
Для организации интерактивного общения программы с пользователем в реальном масштабе времени предназначены средства для ввода данных из файлов и сохранения данных в файлах. Интерактивное общение реализуется с помощью RAD-систем, позволяющих быстро спроектировать пользовательский интерфейс. Ввод и вывод информации осуществляется в разных языках по-разному. В Паскале и Бейсике есть операторы для такой работы, в Си++ они выделены в специальные библиотеки. Введен также специальный тип данных «файл» (FILE).
Работа с файлами происходит в три этапа:
1. Файл открывается в одном из выбранных режимов (он рассматривается как последовательность строк или двоичных чисел, разрешается только считывать из него данные или только записывать и т. д.). Файл может состоять из последовательности одинаковых блоков, каждый из которых будет представлять собой копию структуры данных определенного типа, описанного в программе. Каждый такой блок называется записью.
2. Выполняется считывание, обновление или удаление записей в файле.
3. Файл закрывается. Если этого не сделать, то он останется открытым и в дальнейшем к нему нельзя будет обратиться из других программ.
Каждый из этих пунктов реализуется в каждом из языков программирования по-своему. Некоторые пункты требуют для своей реализации нескольких операторов (таблица 3.17).
Таблица 3.17 Описание работы операторов ввода-вывода
Ввод-вывод
|
Обозначение |
|
Паскаль
|
Си++
|
|
Устройства ввода-вывода |
||
Синтаксис команды ВВОД |
READ();
|
>> |
Пример |
Var x: Integer; Read(x); |
Int x; Cin>>x; |
Комментарий |
Ввод числа с клавиатуры и сохранение его в x |
|
Синтаксис команды ВЫВОД |
Write(); |
<< |
Пример |
Var x: Integer; x:= 25; Write (‘Значение переменной x=’, x) |
Int x; x=25; Cout<< “Значение переменной x=”<<x; |
Комментарий |
Вывод содержимого переменной x на экран |
|
Ввод (чтение) данных из файла в память |
||
Синтаксис открытия файла для ввода из него данных в память |
Var f:Text; ASSIGN (f, “имя_файла.расширение”); RESET(f); READ (f, переменная); CLOSE (f); |
Ifstream in_file(“имя_файла.расширение”); |
Пример Ввод данных в память из открытого файла |
Var f:Text; a, b, c: integer; ASSIGN (f, “file.txt”); RESET(f); READ (f, a, b, c); CLOSE (f); |
Ifstream in_file (“file1.txt”); in_file>>a>>b>>c; |
Комментарий |
Из файла “File.txt” вводятся три первые числа и запоминаются в переменных a, b, c |
Из файла “File1.txt” вводятся три первые строки и запоминаются в переменных a, b, c |
Вывод (запись) данных из памяти в файл |
||
Синтаксис открытия файла для добавления в него записи |
Var f:Text; a, b, c: integer; Assign (f, “имя_файла.расширение”); Append(f); WriteLn (f, “текст”); CLOSE (f); |
Ofstream out_file(“имя_файла.расширение”,ios::app); |
Пример Добавление записей в существующий файл |
Var f:Text; a, b, c: integer; Assign (f, “File.txt”); Append(f); WriteLn (f, “текст”); CLOSE (f); |
ofstream out_file("File.txt", ios::app) ; out_file<<"Запись в файл." <<endl; out_fi1е<<"Режим добавления."<<endl; out_file.close(); |
Комментарий |
В существующий файл “File.txt” добавляется “текст” |
В существующий файл “File.txt” добавляется текст: "Запись в файл. Режим добавления" |
Синтаксис создания / обновления файла для записи данных из памяти |
Var f:Text; a, b, c: integer; Assign (f, “имя_файла.расширение”); Rewrite(f); WriteLn (f, “текст”); CLOSE (f); |
Ofstream out_file(“имя_файла.расширение”,ios::out); |
Пример Создание файла и запись в него |
Var f:Text; a, b, c: integer; Assign (f, “File.txt”); Rewrite (f); WriteLn (f, “текст”); CLOSE (f); |
Ofstream out_file(“file1.txt” ”,ios::out); out_file<<”Запись в файл”<<endl; out_file<<”Режим создания”<<endl; out_file.close(); |
Комментарий |
Создается файл “File.txt” и в него записывается “текст”. Если файл существовал, его содержимое заменяется на “текст” |
В существующий файл “File.txt” добавляется текст: "Запись в файл. Режим добавления" |