
- •Информатика
- •Введение
- •1. Особенности вычислительного процесса в компьютере
- •1.1. Двоичная система счисления
- •1.2. Кодирование информации
- •2. Основы построения алгоритмов
- •2.1. Принципы описания алгоритмов
- •2.2. Примеры построения алгоритмов типовых задач
- •3. Вывод значений X и y
- •Конец цикла 2
- •3. Алгоритмический язык Visual Basic – основные сведения
- •3.1. Историческая справка
- •3.2. Среда программирования Visual Basic 6.0
- •3.3. Основные конструкции языка
- •3.3.1. Алфавит
- •3.3.2. Переменные
- •3.3.3. Константы
- •3.4. Типы переменных
- •3.4.1. Характеристики переменных
- •3.4.2. Способы задания типа
- •3.5. Основные функциональные операторы
- •3.5.1. Оператор присваивания.
- •3.5.2. Оператор условного перехода.
- •3.5.3. Операторы цикла.
- •3.6. Операторы ввода и вывода информации
- •3.6.1. Операторы ввода значений переменных с клавиатуры.
- •3.6.2. Операторы вывода значений переменных на экран.
- •3.7. Примеры типовых программ
- •4. Алгоритмический язык Visual Basic – более сложные структуры
- •4.1. Файловый ввод и вывод - общие сведения
- •4.2. Организация работы с файлом.
- •4.3. Подпрограммы и их использование для написания сложных программ
- •4.3.1. Назначение подпрограмм
- •4.3.2. Типы подпрограмм
- •4.3.3. Локальные переменные формы
- •5. Операторы и функции, работающие с символьными данными
- •5.1. Ввод символов с целью управления действиями
- •5.2. Функции, работающие с таблицей ascii-кодов
- •5.3. Функции, работающие со строкой символов
- •6. Графика
- •6.1. Воспроизведение цвета
- •6.2. Операторы (Методы) изображения стандартных фигур
- •6.3. Программирование движения фигур на экране.
- •9. Математические вычисления и встроенные функции.
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
Решение. В этом примере мы так же, как и в предыдущем, видим последовательное умножение. Значения множителей составляют закономерную последовательность. Очередной множитель на единицу больше предыдущего. Поэтому мы можем в качестве множителя использовать переменную счетчика. В результате получим алгоритм:
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 проверки условия записан не переход к другой операции (« идти к »), а сама эта операция. Если условие не выполнено, то указанная справа от него операция не выполняется. Затем выполняется следующая по порядку строка (это так называемая естественная последовательность в алгоритме). Современные алгоритмические языки построены именно таким образом. Поэтому в описании алгоритмов требуется дополнить формальное изображение условного перехода, как это показано в приведенном примере. В противном случае алгоритмы будут очень громоздкими. Например, в последнем алгоритме пришлось бы поставить каждый счетчик в отдельную строку с меткой, а после этой строки ставить строку безусловного перехода на конец цикла. В результате добавились бы лишние строки и алгоритм выглядел бы следующим образом:
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
Конструкция цикла, рассматриваемая до сих пор, не является единственно возможной. Дело в том, что встречаются задачи, где число повторений блока операций - тела цикла - не определено по условию задачи. Выход из такого цикла происходит не по значению переменной счетчика, а по некоторому условию, связанному со спецификой задачи. При этом условие выхода из цикла может стоять как в конце цикла, так и в теле цикла. Рассмотрим следующий пример.
Пример 2.6.
Вычислить
сумму
для фиксированного значения x>1,
определив значение последнего элемента
суммы по условию:
.
Вывести на печать число элементов суммы
n.
Решение. Заметим вначале, что возведение числа x в степень i может занять много времени, если i достаточно велико. Может, например, оказаться, что при заданном последнее значение i равно 100. Тогда совершенно нецелесообразно вычислять очередной элемент суммы по указанной формуле. В самом деле - зачем возводить x в степень 100, если в предыдущем вычислении уже есть значение x в степени 99. Лучше использовать так называемое рекуррентное вычисление, означающее вычисление очередного элемента суммы через значение предыдущего элемента. Выведем соответствующую формулу. Для этого обозначим через ai i-й элемент суммы. Запишем в соответствии с общей формулой:
.
Отсюда ясно, что
.
Последняя формула называется рекуррентной. В общем случае она может быть получена делением 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.
Решение. Здесь необходимо сделать два цикла – один внутри другого. При этом будет подразумеваться, что оператор «конец цикла» автоматически переводит операцию на начало цикла. Слова «выйти из цикла» будут означать переход к следующему оператору после оператора «конец цикла».
Цикл 1
Ввод чисел a и b
Если a < b, то выйти из цикла 1 (это означает - закончить задачу)
n=0
d=a
Цикл 2
d=d-b
n=n+1
если d<b, выйти из цикла 2 (это означает - вывести результат и
перейти к циклу 1)