Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Информатика и программирование алгоритмизация – от проблемы к программе. Курс лекций

.pdf
Скачиваний:
0
Добавлен:
09.08.2026
Размер:
416 Кб
Скачать

6.Если i < m, идти к 4, иначе идти к 7

7.Вывод значения k

В6-й строке алгоритма слово «иначе» означает переход при не- выполнении условия, указанного после слова «если». Это переход

кследующей по порядку строке, представляющий собой так назы- ваемую естественную последовательность операций. Этот переход во всех языках программирования делается без принудительной ссылки «идти к». Поэтому в следующих алгоритмах такую ссылку будем опускать. Обычно алгоритм проверяется на тестовом примере. Пусть n = 5, m = 3. Проследим действия алгоритма. При первом об- ращении к строке 4 переменная k = 5. Из строки 5 следует i = 1. По- скольку условие в строке 6 выполнено, снова выполняются строки 4 и 5. В результате k = 10, i = 2. Условие в строке 6 снова выполнено. Выполняются строки 4 и 5. В результате k = 15, i = 3. При этом усло- вие в строке 6 (т.е. i < 3) не выполнено и действие переходит к строке 7, которая и завершает работу алгоритма.

Вполученном алгоритме имеется цикл: повторение 4-й строки. Начальная операция цикла это строка 3: присваивание переменной счетчика i начального значения. Другими элементами цикла являют- ся сам счетчик (строка 5) и конечная операция цикла, представляю- щая собой условный переход (строка 6). Указанные элементы струк- туры цикла являются типовыми и поэтому их можно объединить с целью сокращения записи алгоритма. Заметим, что начальное зна- чение переменной счетчика может быть сделано равным 1. Тогда в операции условного перехода нужно заменить знак условия «мень- ше» на «меньше или равно».

Заметим также, что имена всех переменных совершенно произ- вольные. Тогда можно ввести следующие условные операции, орга- низующие цикл. В начале цикла будем ставить строку: цикл i = 1, m. Будем подразумевать, что в этой строке объединены все три упомянутых выше элемента структуры цикла: присваивание началь- ного значения переменной счетчика, сам счетчик, сравнение значе- ния переменной счетчика с числом m и условный переход. По окон- чании блока операций цикла будем ставить строку: конец цикла i. Блок операций, повторяющихся в цикле, обычно называют телом цикла. Будем выделять тело цикла жирным шрифтом. С учетом вве- денных обозначений алгоритм вычисления произведения k = nm бу- дет выглядеть следующим образом:

1. Ввод значений n и m

2. k = 0

11

3.Цикл i = 1, m (в этом операторе содержится счетчик i = i + 1

4.k = k + n и цикл будет закончен, когда i = m + 1)

5. Конец цикла i

(этот оператор переводит действие

 

на начало цикла, если i m)

6. Вывод значения k

В операции обновления переменной счетчика i = i + 1 единица на- зывается шагом счетчика. Будем полагать, что если в цикле не задан другой шаг, то он автоматически равен единице. В противном случае в строке начала цикла будем указывать нужный шаг счетчика.

Кстати сказать, в этом случае сам термин «счетчик» теряет смысл. Ниже показан пример алгоритма с шагом, отличным от единицы.

Пример 2.2. Составить алгоритм для вычисления значения функ- ции y = x2 для значений x в пределах от –2 до +3 с шагом 0,2.

Решение. Поскольку возведение в степень не является элементарной операцией, заменим ее умножением. Многократное вычисление значения функции поставим в цикл. В тело цикла должен также входить вывод значений аргумента и функции. Получим следующий алгоритм:

1.Цикл x = –2, +3 шаг 0,2

2.y = x x

3.Вывод значений x и y

4.Конец цикла x

Пример 2.3. Составить алгоритм для возведения числа x в целую степень k: z = xk.

Решение. Поскольку возведение в целую степень это последова- тельное умножение, то телом цикла должна быть операция z = z x. Очевидно, что первое обращение в цикле к этой операции должно дать значение z = x. Поэтому начальное значение z = 1. Получим сле- дующий алгоритм:

1.Ввод значений x и k

2.z = 1

3.Цикл i = 1, k

4.z = z x

5.Конец цикла i

6.Вывод значения z

Пример 2.4. Вычислить z = k! = 1 2 3 ... k.

Решение. В этом примере так же, как и в предыдущем, использу- ется последовательное умножение. Значения множителей составляют закономерную последовательность. Очередной множитель на едини-

12

цу больше предыдущего. Поэтому можно в качестве множителя ис- пользовать переменную счетчика. В результате получим алгоритм:

1.Ввод значения k

2.z = 1

3.Цикл i = 1, k

4.z = z i

5.Конец цикла i

6.Вывод значения z

Пример 2.5. Составить алгоритм для решения следующей задачи: ввести n чисел ai (i = 1, n) и определить, сколько из них положитель- ных, отрицательных и равных нулю.

Решение. На вопрос «сколькодолжны ответить счетчики чисел по соответствующему признаку. Ввод чисел и указанный подсчет нужно поставить в цикл. Вначале значения переменных счетчиков нужно сделать равными нулю. Пусть в переменных k, l, m фиксиру- ется соответственно количество положительных, отрицательных

инулевых чисел. Тогда имеем следующий алгоритм:

1.Ввод значения n

2.k = 0, l = 0, m = 0

3.Цикл i = 1, n

4.Ввод значения ai

5.Если ai > 0, то k = k + 1

6.Если ai < 0, то l = l + 1

7.Если ai = 0, то m = m + 1

8.Конец цикла i

9.Вывод значений k, l, m

Заметим, что с введением формы «цикл i = 1, n конец цикла i» исчезла необходимость в номерах строк алгоритма (которые могли использоваться как метки для переходов).

Отметим также, что в этом алгоритме в строках 5, 6 и 7 про- верки условия записан не переход к другой операции идти к»), а сама эта операция. Если условие не выполнено, то указанная справа от него операция не выполняется. Затем выполняется сле- дующая по порядку строка (это так называемая естественная по- следовательность в алгоритме). Современные алгоритмические языки построены именно таким образом. Поэтому в описании алгоритмов требуется дополнить формальное изображение ус- ловного перехода, как это показано в примере 2.5. В противном случае алгоритмы будут очень громоздкими. Например, в по-

13

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

1.Ввод значения n

2.k = 0, l = 0, m = 0

3.Цикл i = 1, n (цикл будет закончен, когда i = n + 1)

4.Ввод значения ai

5.Если ai > 0, то идти к 9

6.Если ai < 0, то идти к 11

7.m = m + 1 (это случай, когда ai = 0)

8.Идти к 12

9.k = k + 1

10.Идти к 12

11.l = l + 1

12.Конец цикла i (эта строка производит переход на начало цикла)

13.Вывод значений k, l, m

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

n

1

 

Пример 2.6. Вычислить сумму

 

 

для фиксированного значе-

x

i

i = 0

 

 

ния x > 1, определив значение последнего элемента суммы по усло-

вию 1 ≥ ε . Вывести на печать число n (число элементов суммы). xi

Решение. Заметим вначале, что возведение числа x в степень i мо- жет занять много времени, если i достаточно велико. Может, напри- мер, оказаться, что при заданном ε последнее значение i равно 100. Тогда совершенно нецелесообразно вычислять очередной элемент суммы по указанной формуле. В самом деле, зачем возводить x

встепень 100, если в предыдущем вычислении уже есть значение x

встепени 99. Лучше использовать так называемое рекуррентное вы- числение, означающее вычисление очередного элемента суммы через значение предыдущего элемента. Выведем соответствующую фор-

14

мулу. Для этого обозначим через ai i-й элемент суммы. Запишем эле- менты суммы:

a =

1

; a =

1

.

xi

xi1

i

i1

 

 

 

 

Отсюда следует, что ai = ai1 . x

Последняя формула называется рекуррентной. В общем слу- чае она может быть получена делением i-го элемента суммы на (i – 1)-й. При построении алгоритма опустим номера строк, за исключением тех, которые нужно отметить (т.е. поставить метки) для необходимых переходов. Введем переменную s для значения суммы и обратим внимание на то, что a0 = 1, а индекс i в соответствующих формулах можно опустить. Тогда имеем сле- дующий алгоритм:

Ввод значения x

a = 1: s = 0: n = 0: ε = 0.001: x = 2.5 3. Цикл

s = s + a

n = n + 1 a = a/x

Если a ≥ ε, то идти к метке 3 (метка 3 – это начало цикла) Вывод значений s, n

Заметим, что в этом алгоритме счетчик n не участвует в прерыва- нии цикла, хотя и считает число проходов цикла. Условие продолже- ния цикла контролируется в предпоследней строке. Приведем при- мер другой конструкции цикла.

Пример 2.7. Выполнить перечисленные ниже операции. Вводится пара чисел: a делимое и b – делитель. Число a делится на число b с точностью до целых последовательным вычитанием a – b. Остаток записывается в переменную d, результат деления в переменную n. Цикл вычитания продолжается, пока d > b. Затем вводится другая пара a, b. Цикл ввода пар продолжается, пока a > b.

Решение. Здесь необходимо сделать два цикла один внутри дру- гого. При этом будет подразумеваться, что оператор «конец цикла» автоматически переводит операцию на начало цикла. Слова «выйти из цикла» будут означать переход к следующему оператору после оператора «конец цикла».

15

Цикл 1

Ввод чисел a и b

Если a < b, то выйти из цикла 1 (это означает закончить задачу) n = 0

d = a

Цикл 2

d = d b n = n + 1

если d < b, выйти из цикла 2

(это означает вывести результат и перейти к циклу 1) Конец цикла 2

Вывод a, b, n, d

Конец цикла 1 Конец программы

Заметим, что оператор «конец программы» должен завершать любую программу. В предыдущих примерах он намеренно опущен. Кстати, в некоторых алгоритмических языках он добавляется автоматически.

Рассмотренные выше примеры построения алгоритмов достаточ- но полно отражают их общие (типовые) структурные элементы. Од- нако каждый алгоритмический язык имеет свои особые структуры и типовые алгоритмы обычно должны быть адаптированы к ним. Адаптация не бывает слишком сложной, поэтому переход от одного алгоритмического языка к другому не должен вызывать принципи- альных затруднений.

16

3. АЛГОРИТМИЧЕСКИЙ ЯЗЫК VISUAL BASIC. ОСНОВНЫЕ СВЕДЕНИЯ

3.1. Историческая справка

Первые алгоритмические языки появились в 1958 г. Это были Algol (Algorhitmic Language) и первая версия языка Fortran (Formula Translator). В 1962 г. в Дортмундском университете была разработана первая версия языка Basic (Beginners All-purpose Symbolic Instruction Code). Эта версия называлась BasicA и для нее требовалась нумера- ция строк. В 1970 г. вошел в употребление специфический язык для инженерных расчетов PL/1. В том же году были изобретены отечест- венные алгоритмические языки «Наири» и «Мир», с операторами на русском языке, которые были пригодны только для ЭВМ с соот- ветствующими именами, спроектированными в Армении и на Ук- раине. Их время быстро прошло. В 1980 г. появились языки C, C++, Pascal и новая версия языка Basic – GW Basic. Затем возникла целая серия новых версий: 1985 г. – Qbasic, 1988 г. – Quick Basic, 1989 г. – Professional Basic (PDS), 1993 г. – Visual Basic (первая версия). Ниже будет рассматриваться версия Visual Basic 6.0.

В данном курсе лекций не ставился цель рассказать о всех возмож- ностях и особенностях языка Visual Basic 6.0. Они изложены в специальных книгах. Главная цель познакомить с основными приемами перехода от текстовой формулировки некоторой проблемы к программной реализации, позволяющей получить решение пробле- мы. Это тот процесс, который обычно называют «алгоритмизация». Здесь этот процесс предлагается осваивать на конкретных задачах.

Алгоритмы некоторых простых задач можно написать на привыч- ном для нас языке. Однако в дальнейшем алгоритм должен превра- титься в программу, понятную компьютеру. Для этого алгоритм дол- жен быть переведен на один из алгоритмических языков, а затем транслирован в двоичные коды. Пользователя компьютера обычно мало интересует процесс трансляции. Его скорее интересует результат решения задачи. Но умение грамотно написать программу на алгорит- мическом языке совершенно необходимо, даже если компьютер рас- сматривается как не более чем инструмент. Итак, основная цель нау- читься строить алгоритмы. Для этого нужно изучить основной словарь и грамматику языка. Но для реализации алгоритмов, т.е. для построе- ния программ и получения результатов их работы, необходимо иметь представление о среде программирования.

17

3.2. Среда программирования Visual Basic 6.0

Программа на Visual Basic называется проектом (Project).

Visual Basic – это объектно-ориентированный язык, в котором имеется специальная терминология. В данном курсе она не изучается во всех подробностях, так как главная наша задача построение ал- горитмов. Однако основные термины нужно знать.

На рис. 3.1 показано соотношение между основными элементами среды программирования.

Рис. 3.1. Основные элементы среды программирования

Дадим определения этих элементов.

Объект структурная компонента проекта (Project). Свойство характеристика объекта.

Событие действие на объекте.

Метод процедура, реализованная в результате события. Каждый из указанных элементов имеет множество имен. Имена

эти можно видеть на экране среды в соответствующих окнах. Для того чтобы их увидеть, нужно войти в пункт меню View, затем в пункт Object Brouser (список объектов). Появится окно, где можно видеть все возможные значения (имена) каждого из элементов.

Примеры имен приведены ниже.

Объект:

Форма (Form1);

Кнопка (Command1);

Окно для текста (Text1).

Свойство:

BackColor (цвет фона);

Caption (надпись);

Width (ширина);

Height (высота).

18

Событие:

Click (нажата левая клавиша мыши);

Load (загрузка);

Terminate (окончание работы).

Методы:

Print (вывод результатов);

SetFocus (выделение объекта для передачи ему управления);

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

создание проекта (форма с объектами на ней);

разработка и запись программного кода.

3.3.Основные конструкции языка

3.3.1.Алфавит

Вкачестве алфавита используются символы из таблицы ASCII.

Впрограммах можно использовать следующие символы:

буквы латинского алфавита;

буквы русского алфавита;

цифры (0–9) для представления чисел;

знаки операций (табл. 3.1);

разделители (табл. 3.2);

символы объявления типов данных (табл. 3.3).

Таблица 3.1

Знаки операций и их смысл

Знак

 

Значение

Знак

 

Значение

+

 

плюс

=

равно

 

минус

<

меньше

*

 

умножение

>

больше

/

 

деление обычное

^

возведение в степень

\

 

и целочисленное

 

 

 

 

a mod b

 

Остаток от целочисленного деления a на b

 

 

 

 

 

Таблица 3.2

 

 

Знаки разделителей и их смысл

 

 

 

 

 

 

Знак

 

Значение

Знак

 

Значение

,

запятая

 

апостроф

.

точка

(

 

открытая скобка

:

двоеточие

)

 

закрытая скобка

;

точка с запятой

_

 

подчеркивание

19

Таблица 3.3

 

Знаки символов объявления типов данных и их смысл

 

 

 

Знак

 

Значение

%

 

целые

&

 

длинные целые

!

 

обычной точности

#

 

двойной точности

$

 

символьные

3.3.2. Переменные

Переменная это величина, которая может меняться при выпол- нении программы, занимая в памяти компьютера определенное ме- сто. Переменные бывают двух основных видов: простые переменные (числовые и символьные) и массивы (числовые и символьные). Для размещения простой переменной в памяти компьютера достаточно указать ее имя.

Массив представляет собой группу переменных под одним име- нем. Для различения элементов группы применяется их индексация. В языке Visual Basic 6.0 имеются и другие типы переменных. Но на начальном этапе, когда основная проблема построение алгоритмов, эти типы нам не понадобятся.

Имя переменной может состоять из последовательности симво- лов. При этом первый символ должен быть обязательно латинской буквой. Следует избегать имен, являющихся зарезервированными словами языка. К таковым относятся команды, операторы, имена стандартных функций (например, SIN). Однако можно назвать пере- менную SINx. Список зарезервированных слов обычно имеется в конце руководства по программированию. Если же этот список не- доступен пользователю, транслятор Visual Basic 6.0 предупредит его об использовании запрещенного имени.

3.3.3. Константы

Кроме переменных в языке существует конструкция, называемая константой. Числовыми константами являются положительные или отрицательные числа, которые могут быть использованы как значе- ния переменных. Например,

Max = 287: PI = 3.141592: Min = –555

20

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]