Document 195006

advertisement
Муниципальное общеобразовательное учреждение «Лицей»
Муниципальное общеобразовательное учреждение «СОШ №2»
Программирование
Сборник задач
г.Новомосковск
20011
Горлатов А.М., Овчарик О.Н.
Программирование. Сборник задач. Методическое пособие. – Новомосковск, 2011.-69 с.
Методическое пособие "Программирование. Сборник задач"
предназначено для приобретения практических навыков алгоритмизации задач и программирования на языках Бейсик и Паскаль. В
нем приводятся основные приемы и методы программирования,
большое число типовых алгоритмов для решения задач различной
сложности и примеры их использования. Дается краткое описание
языков программирования Бэйсик и Паскаль.
 Горлатов А.М., Овчарик О.Н. 2011
Муниципальное общеобразовательное учреждение «Лицей»
Муниципальное общеобразовательное учреждение «СОШ №2»
http://ittutor.bos.ru
http://itteacher.bos.ru
2
Программироваие. Сборник задач.QO.DO.AM
Введение
Это методическое пособие предназначено для желающих самостоятельно научиться решать задачи по основным разделам предмета на языках Бейсик и Паскаль.
Предлагаемая методика включает:
теоретический материал;
задачи к урокам;
варианты контрольных работ;
вопросы для самопроверки.
Большое число наглядных, хорошо подобранных примеров облегчает восприятие.
В предложенном пособии предлагаются задачи из различных областей, в частности, обработка текстов, физика, химия, вычислительные задачи, социологические исследования, контроль знаний.
Горлатов А.М., Овчарик О.Н.
3
I. Представление информации.
Системы счисления.
I.1. Теоретическое введение.
В компьютерах информация передается в виде последовательности электрических сигналов – импульсов тока или напряжения. Каждой букве и цифре ставится в соответствие цифра
«1» или цифра «0». Таким образом, цепочку электрических сигналов можно рассматривать как
последовательность. Такая последовательность цифр «0» и «1», называется двоичным кодом или
двоичной системой счисления.
Каждая из цифр несет в себе двойную информацию:
1. имеет свое собственное значение
2. место, которое она занимает в записи числа (т. е. разряд)
Такие системы счисления называются позиционными.
Виды систем счисления:

десятичная система счисления

двоичная система счисления

восьмеричная система счисления

шестнадцатеричная система счисления
Существует несложный метод перевода чисел из десятичной системы счисления в любую другую систему счисления:
1. Разделить исходное число на основание нужной системы. Если частное больше или
равно основанию системы, надо снова разделить на основание системы. Эти операции провести до тех пор, пока частное и остатки ни будут соответствовать цифрам
нужной системы счисления.
2. Зафиксировать остатки и частное.
Чтобы перевести обратно в десятичную систему счисления, надо просуммировать степени основания системы счисления, соответствующие ненулевым разрядам в записи числа.
Чтобы перевести дробную часть числа, записанную Р-ричной системе счисления, умножают в
Р-ричной системе на основание системы q. Целая часть произведения будет первой цифрой изображения дроби в q-ричной системе счисления. Дробную часть произведения снова умножают на q.
Целая часть произведения будет следующей цифрой записи дроби в q-ричной системе счисления.
Процесс продолжается до тех пор, пока дробная часть произведения не будет нулевой или пока не
получат требуемое количество знаков записи дроби в q. Целые части, полученные в Р-ричной
системе счисления, необходимо записать в q.
4
Программироваие. Сборник задач.QO.DO.AM
Десятичная
система
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Двоичная
система
0
1
10
11
100
101
110
111
1000
1001
1010
1011
1100
1101
1110
1111
Восьмеричная
система
0
1
2
3
4
5
6
7
10
11
12
13
14
15
16
17
Формы представления чисел
Шестнадцатеричная
система
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
Операции с числами двоичной системы счисления
Вычитание
Умножение
0-0=0
0*0=0
1-0=1
0*1=0
1-1=0
1*0=0
10-1=1
1*1=1
Сложение
0+0=0
0+1=1
1+0=1
1+1=10
+
1
2
3
4
5
6
7
Операции с числами восьмеричной системы счисления
1
2
3
4
5
6
7
10
2
3
4
5
6
7
10
11
3
4
5
6
7
10
11
12
4
5
6
7
10
11
12
13
5
6
7
10
11
12
13
14
6
7
10
11
12
13
14
15
7
10
11
12
13
14
15
16
10
11
12
13
14
15
16
17
Горлатов А.М., Овчарик О.Н.
5
Операции с числами восьмеричной системы счисления
1
2
3
4
5
6
7
*
1
1
2
3
4
5
6
7
2
2
4
6
10
12
14
16
3
3
6
11
14
17
22
25
4
4
10
14
20
24
30
34
5
5
12
17
24
29
36
41
6
6
14
22
30
36
44
52
7
7
13
25
34
43
52
61
Пример:
6
12710
5 4 3
2 1 0
 11111112 1(111)(111) 2  1778
6 5 4 3 2 1 0
1111111
2
6 5 4
3 2 1 0
(0111)(1111) 2  7 F16
 1* 2 6  1* 25  1* 2 4  1* 23  1* 2 2  1* 2  1* 2 0  12710
0,101101
0*,1101101
0,034
,010110
,0101112
10 0
0,0110111
1,1101
0
,0101
0,01010111
1,10010001
,00100100
1
I.2. Задачи  уровня
1.
2.
3.
4.
5.
6.
7.
Перевести число 15610 в двоичную систему счисления.
Перевести число 56,24510 в двоичную систему счисления.
Перевести число 47310 в восьмеричную систему счисления.
Перевести число 7,92610 в восьмеричную систему счисления.
Перевести число 114710 в шестнадцатеричную систему счисления.
Перевести число 68,23510 в шестнадцатеричную систему счисления.
Перевести число 23,14210 в шестнадцатеричную систему счисления.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Перевести число 110012 в восьмеричную систему счисления.
Перевести число 1001112 в восьмеричную систему счисления.
Перевести число 1110112 в шестнадцатеричную систему счисления.
Перевести число 10111012 в шестнадцатеричную систему счисления.
Перевести число 75418 в двоичную систему счисления.
Перевести число 15638 в десятеричную систему счисления.
Перевести число 85E16 в двоичную систему счисления.
Перевести число C95616 в десятеричную систему счисления.
Перевести число 54738 в десятеричную систему счисления.
Перевести число 257F16 в восьмеричную систему счисления.
1.
2.
3.
4.
Найти 110112 + 100112
Найти 1,11002 - 0,10012
Найти 101012 * 100112
Найти 27,26438 + 46,11548
I.3. Задачи  уровня.
I.4. Задачи  уровня.
6
Программироваие. Сборник задач.QO.DO.AM
5.
6.
7.
8.
9.
Найти 115,35648 - 55,76748
Найти 0,324478 * 0,407028
Найти 287AB16 + 656216
Найти EC2A8216 - BD7C9A16
Найти 37,2116 * 5416
I.5. Контрольные работы
I.5.1. Контрольная работа № 1
1.
2.
3.
4.
5.
6.
Диктант
Какие цифры составляют двоичную систему счисления?
Какие цифры составляют восьмеричную систему счисления?
Какие цифры составляют шестнадцатеричную систему счисления?
Можно ли натуральное десятичное число представить в любой системе счисления?
Можно ли вещественное десятичное число представить в любой системе счисления?
Перечислите преимущества и недостатки двоичной системы счисления?
I.5.2. Контрольная работа № 2
1.
2.
3.
1.
2.
3.
1.
2.
3.
Вариант 1
Переведите число 24(10) в двоичную, восьмеричную и шестнадцатеричную систему
счисления?
Переведите число 11011(2) в десятеричную, восьмеричную и шестнадцатеричную
систему счисления?
Сложите два числа 1101(2) и 1111(2). Результат проверьте в десятичной системе счисления?
Вариант 2
Переведите число 57,23(10) в двоичную, восьмеричную и шестнадцатеричную систему счисления?
Переведите число 11011,101(2) в десятеричную, восьмеричную и шестнадцатеричную систему счисления?
Сложите два числа 1101,111(2) и 1111,111(2). Результат проверьте в десятичной системе счисления?
Вариант 3
Переведите число 524,859(10) в двоичную, восьмеричную и шестнадцатеричную систему счисления?
Переведите число 110111,1101(2) в десятеричную, восьмеричную и шестнадцатеричную систему счисления?
Сложите два числа 110111,111(2) и 111101,101(2). Результат проверьте в десятичной
системе счисления?
I.6. Вопросы для самопроверки.
1.
2.
3.
4.
Что называется системой счисления?
Какие системы счисления Вы знаете?
Как перевести число из одной системы счисления в другую?
Как перевести дробную часть числа в любую систему счисления?
Горлатов А.М., Овчарик О.Н.
7
II. Элементы математической логики
II.1. Теоретическое введение
Конъюнкция - "AND", "И", "^", "*"
A
B
A and B
0
0
0
0
1
0
1
0
0
1
1
1
Дизъюнкция - "OR", "ИЛИ", "^", "*"
A
B
A or B
0
0
0
0
1
0
1
0
0
1
1
1
Отрицание - "NOT", "НЕ"
A
not A
0
1
1
0
8
Импликация - "АВ", "
из А следует В" - истинна всегда, кроме
одного случая, если первое суждение истинно, а второе - ложно.
A
B
АВ
0
0
1
0
1
1
1
0
0
1
1
1
Эквивалентность - "АВ", истинна только
в тех случаях, когда оба если суждения
ложны или оба суждения истинны.
A
B
АВ
0
0
1
0
1
0
1
0
0
1
1
1
Программироваие. Сборник задач.QO.DO.AM
II.2. Логические высказывания
Высказывания, записанные на
естественном языке
1. Не А;
неверно, что А;
А не имеет места.
2. А и В;
как А, так и В;
не только А, но и В;
А вместе с В;
А, несмотря на В;
А в то время, как В
3. А, но не В;
не В, а А
Высказывания, записанные на
языке алгебры логики
Ā
А^В
А В
4. А или В;
А или В, или оба.
АВ
5. Либо А, либо В.
А  В  Ā В
6. Либо А, либо В и С
А  В  С  Ā В  С
7. Либо А и В, либо С и D
8. Если А, то В;
А только, если В;
А только тогда, когда В;
А достаточно для В;
А только при условии, что В;
В необходимо для А;
А значит В;
для В достаточно А;
А влечет В;
для А необходимо В;
из А следует В;
В тогда, когда А
9. А эквивалентно В;
А тогда и только тогда, когда В;
А если и только если В;
А необходимо и достаточно для В.
Горлатов А.М., Овчарик О.Н.
АВ С 
D  Ā  В С  D
АВ
АВ
АВ
9
II.3. Основные законы математической логики
Законы алгебры логики
Законы, записанные на языке алгебры логики
1. Закон тождества
АВ
2. Закон противоречия
А  Ā=0
3. Закон исключения третьего
А  Ā=1
4. Закон двойного отрицания
А
5. Коммутативный закон
6. Ассоциативный закон
7. Дистрибутивный закон
8. Закон поглощения
9. Закон идемпотентности
10. Законы исключения констант
11. Отрицание дизъюнкций
12. Отрицание конъюнкций
13. Закон исключения (или закон склеивания)
А
АВ=ВА
АВ=ВА
(А В)С = А(ВС) = АВС
(А ВС = А (ВС) = АВС
А(ВС) = (АВ) (АС)
А (ВС) = (АВ)  (АС)
А(АВ) = А
А (АВ) = А
АА = А
АА=А
А1= 1; А0= А
А1=А; А0= 0
АВ АВ
АВ АВ
(АВ)( ĀВ) = В
(АВ)( ĀВ) = В
II.4. Основные понятия математической логики
Суждение
Утверждение
Рассуждение
Дедукция
Индукция
Логика
Математическая
логика
10
- это некоторое высказывание, которое может быть истинным или
ложным
- это суждение, которое требуется доказать или опровергнуть
- это цепочка взаимосвязанных суждений, фактов, общих положений и умозаключений, получаемых из других суждений по определенным правилам вывода
- это рассуждения от общего к частному
- это рассуждения от частного к общему
- это наука о формах и законах человеческого мышления и, в
частности, о законах доказательных рассуждений
- изучает только рассуждения со строго определенными объектами и суждениями, для которых возможно однозначно решить,
истинны они или ложны
Программироваие. Сборник задач.QO.DO.AM
II.5. Задачи  уровня
На олимпиаде по ИВТ участвуют Аня, Вика, Саша и Дима. Болельщики высказали следующие предложения:
первым будет Саша:
второй будет Аня, Дима будет третий:
второй будет Аня, Дима будет четвертый.
Оказалось, в каждом предложении одно - истинно, другое - ложно.
Какое место занял каждый ученик?
2. перевести на язык алгебры логики:
неверно, что если погода пасмурная, то дождь идет тогда и только тогда, когда нет ветра.
3. Алеша, Боря и Гриша нашли в земле сосуд. Алеша предположил, что это греческий сосуд, Боря, что сосуд финикийский, Гриша - не греческий. Каждый мальчик прав только в одном случае.
4. Проверить равнозначность рассуждений:
если бригада отлично выполнит работу, то получит премию;
бригада не получила премию, значит, ее работа не была отличной.
5. Есть два подозреваемых А и В. У следователя имеются показания свидетелей.
Первый свидетель утверждает, что А невиновен, второй свидетель утверждает,
что В невиновен, третий свидетель утверждает, что показание третьего свидетеля
ложно.
Следствие установило, что четвертый свидетель прав. Кто виновен?
6. Вычислить значение логического выражения
F=A or B and C, если A=21(16); B=35(10); C=48(8)
7. Построить таблицу истинности для логической функции
(А (СВ))  (В+ С )
8. Дана логическая функция F=(А В)( ĀВ)
1.
II.6. Задачи  уровня
1.
2.
3.
Кто из друзей собирает марки? Иван, Петр, Алексей, Николай или Борис?
Если Борис собирает, то Иван и Николай собирают;
если Иван собирает то и Петр собирает;
из двух друзей - Петра и Алексея - собирает только один;
Алексей собирает лишь тогда, когда Николай собирает;
по крайней мере Николай или Борис собирают.
Кто участвовал в соревнованиях?
Если Иванов не участвовал или Петров участвовал, то Сидоров не участвовал;
если Иванов не участвовал, то Сидоров не участвовал.
Определить, истинны ли следующие высказывания:
если 3*3=9, то 33=51;
если 20 делится на 5, то 20 делится на 4;
30 делится на 5 тогда и только тогда, когда 30 делится на 6;
если 8 делится на 2, то 8 делится на 4;
Горлатов А.М., Овчарик О.Н.
11
4.
если я беру зонт, то идет дождь;
25 делится на 5 тогда и только тогда, когда 25 делится на 15.
Определить значения истинности Т и Р при условии, что:
"Если 3 - простое число, то Т" - истинное высказывание;
"Если Р, то 3 - составное число" - истинное высказывание;
"Если 3 - простое число, то Р" - ложное высказывание;
"Если Т, то 3 - составное число" - ложное высказывание;
"Т↔(4<5)" - истинное высказывание;
"Р↔ (4>5)" - истинное высказывание;
"Т↔ (4>5)" - ложное высказывание;
"Р↔ (4<5)" - ложное высказывание.
II.7. Задачи  уровня
1.
2.
3.
4.
12
Даны сложные высказывания:
а) если сторона и два прилежащих к ней угла одного треугольника соответственно равны стороне и двум прилежащим к ней углам другого треугольника, то такие треугольники равны;
б) если расстояние от центра окружности до прямой меньше радиуса окружности
(d< r), то прямая и окружность имеют две общие точки;
в) я позавтракаю и, если будет тепло, пойду на реку.
Каждое простое высказывание, входящее в сложное, обозначьте буквой и запишите их в символьной форме.
Дайте обоснованный ответ.
Экзамен сдавали 4 абитуриента А, В, С, Д. Известно:
для того, чтобы А не сдал или В сдал, необходимо, чтобы С сдал и Д не
сдал;
чтобы С не сдал, а В сдал, необходимо, чтобы А не сдал или Д сдал;
неверно: чтобы не сдал А, достаточно, чтобы не сдал Д.
Кто сдал экзамен?
На вопрос, кто из трех абитуриентов А, В, С может работать на персональном
компьютере, был получен ответ:
"Если может работать В, то может работать С, но неверно, что если может
работать А, то может работать С". Кто из трех абитуриентов может работать
на компьютере?
Узнику были предоставлены на выбор три комнаты. В одной - принцесса, в других - тигры. На дверях комнат таблички с надписями:
1 комната - "В этой комнате сидит тигр";
2 комната - "В этой комнате находится принцесса";
3 комната - "Тигр сидит в комнате два".
Король сообщил узнику, что одно из этих утверждений является истинным. В
какой из этих комнат находится принцесса?
Программироваие. Сборник задач.QO.DO.AM
II.8. Контрольные работы
II.8.1. Контрольная работа №1
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Диктант
Напишите таблицу истинности для операции конъюнкция.
Напишите таблицу истинности для операции дизъюнкция.
Напишите таблицу истинности для операции импликация.
Напишите таблицу истинности для операции эквивалентность.
Какая логическая связка соответствует конъюнкции.
Какая логическая связка соответствует дизъюнкции.
Какая логическая связка соответствует импликации.
Какая логическая связка соответствует отрицанию.
Какая логическая связка соответствует эквивалентности.
Что изучает предмет математическая логика?
Дайте определение понятию "рассуждение".
II.8.2. Контрольная работа №2
Вариант 1
Запишите логическое выражение, соответствующее таблице истинности, и упростите его:
A
B
C
0
0
1
0
1
1
1
0
0
1
1
0
2. Проверьте, истинно ли высказывание:
 ) (XY)
X( Y
3. Составьте четыре простых высказывания и объедините их в сложные, составьте
логическое выражение и упростите его.
Вариант 2
1. Запишите логическое выражение, соответствующее таблице истинности, и упростите его:
A
B
C
0
0
0
0
1
1
1
0
1
1
1
0
2. Проверьте, истинно ли высказывание:
(XY)X
 Y

3. Составьте четыре простых высказывания и объедините их в сложные, составьте
логическое выражение и упростите его.
1.
Горлатов А.М., Овчарик О.Н.
13
1.
2.
3.
Вариант 3
Запишите логическое выражение, соответствующее таблице истинности, и
упростите его:
A
B
C
0
0
1
0
1
0
1
0
0
1
1
0
Проверьте, истинно ли высказывание:
 ) (XY)
Y( X
Составьте четыре простых высказывания и объедините их в сложные, составьте логическое выражение и упростите его.
II.9. Вопросы для самопроверки
1.
2.
3.
4.
Знать операцию конъюнкции, дизъюнкции, импликации, эквивалентности,
отрицание высказывания.
Заполнять таблицы истинности И, ИЛИ, НЕ.
Уметь упрощать логическое выражение
По логическому выражению заполнять таблицу истинности.
III. Алгоритмы и их свойства.
Понятие о структурном подходе
к разработке алгоритмов
III.1. Теоретическое введение.
Алгоритм - это четкое описание последовательности действий, которые необходимо выполнить для решения задачи.
Виды алгоритмов
основной (в котором есть команда вызова другого, вспомогательного алгоритма)
вспомогательный (исполнение которого задается путем вызова из основного
алгоритма)
линейный (алгоритм без ветвлений и циклов, строго последовательно, в порядке записи команд)
рекурсивный ( при исполнении которого встречается вызов его же самого)
Заголовок алгоритма - начальная часть записи алгоритма до служебного слова
"начать", включающая имя алгоритма, перечень его аргументов и глобальных величин с
указанием типов их значений.
Тело алгоритма - часть алгоритма между словами "нач" и "кон".
Шаг алгоритма - этап исполнения алгоритма, состоящий в выполнении одной
простой команды или проверке условия.
14
Программироваие. Сборник задач.QO.DO.AM
Свойства алгоритмов
дискретность (Алгоритм состоит из последовательности законченных действий – шагов. переход к следующему шагу возможен лишь после завершения
предыдущего.)
определенность (Каждая команда точно понимается и исполняется. Это значит, что любая команда, выполненная много раз или различными исполнителями, имеющими эту команду в своей системе команд, при одних и тех же
исходных условиях всегда должна давать один и тот же результат.)
массовость (Неоднократное решение множества однотипных задач)
результативность (Решение задач за конечное число шагов. Под решением задачи понимают также и сообщение о том, что при заданных исходных данных
задача решения не имеет или алгоритм неприменим.)
Блок - схема - это графическое представление программы или алгоритма решения задачи в виде условных графических изображений.
-
Способы записи алгоритмов
1.Словесный
2. Графический
3. Алгоритмический
4.Языки программирования
-
Стандартные графические символы
начало, конец
ввод
проверка условия
вычисления
печать на бумаге
2).
3). алг "мин. из двух"
арг. a, b
рез. y
нач.
если a<b то y=a иначе y=b
все
кон.
4).
Горлатов А.М., Овчарик О.Н.
10 INPUT A,B
20 IF A<B then Y=A else Y-B
30 PRINT Y
40 END
15
Структурный подход - использовать метод последовательного уточнения алгоритма, применять вспомогательные алгоритмы, описывать с помощью трех основных
структур: следования, ветвления, повторения
а).
б).
в).
III.2. Задачи  уровня
1.
2.
Составить алгоритм задачи: Нахождение максимального из трех чисел.
Составить алгоритм задачи: Задано число x. Вычислить функцию
-1, если x < 0,
S=
0, если x = 0,
1, если x > 0.
3.
Составить алгоритм задачи: Разделить натуральное число n на натуральное
число m, получить в качестве результата частное от деления k и остаток l, т. е.
представить число в виде: n=k*m+1, где l<m, k - целое. Операцию деления не
использовать.
Составить алгоритм задачи: Заданы числа p, x, y. Если p<0, то вычислить
t=x+y; если p>=0, то t=x-y.
Исходные данные: 1). p=-6, x=4, y=2; 2). p=3, x=4, y=2.
Составить алгоритм задачи: Задано число p. Если p<0, то значение y вычислить по формуле y=p2; если p>=0 - по формуле y=p3.
Исходные данные: 1). p=2; 2). p=-3.
Составить алгоритм задачи: Найти сумму 10-и произвольных чисел.
Составить алгоритм задачи: Найти произведение 4-х произвольных чисел.
4.
5.
6.
7.
8.
9.
III.3. Задачи  уровня
Составить алгоритм задачи: Заданы три числа x, y, z. Если x+y>z, положить
S=x+y+z. Если x+y<=z, то S=x+y-z. Исходные данные: 1). x=4, y=3, z=8; 2).
x=7, y=1, z=3.
2. Составить алгоритм задачи: Ввести произвольно n чисел. Определить, сколько среди них положительных. Результат получить в переменной k.
3. Составить алгоритм задачи: Ввести произвольно n чисел. Определить, сколько среди них превосходит первое число.
4. Составить алгоритм задачи: Найти максимальное из n положительных чисел.
5. Составить алгоритм задачи: Заданы два числа x, y. Если x+y>0, то P=x2+y2.
Если x+y<=0, то P=(x+y)2.
Программироваие. Сборник задач.QO.DO.AM
1.
16
7.
Исходные данные: 1). x=-4, y=7; 2). x=4, y=8.
Составить алгоритм задачи: Вычислить z=xk, используя операцию умножения.
Исходные данные задать произвольно.
III.4. Задачи  уровня
1.
2.
3.
4.
5.
Составить алгоритм задачи: Вычислить
Исходные данные: n=8.
n
S  i
i 1
n
Составить алгоритм задачи: Вычислить z 
i2

Исходные данные: m=3, n=6.
i m
Составить алгоритм задачи: Вычислить F=1*2*…*m=m!
Исходные данные: m=6.
Составить алгоритм задачи: Вычислить F=m*(m+1)*…*n, m<n.
Исходные данные: m=5, n=9.
Составить алгоритм задачи: Задано n троек чисел a, b, c. Вводя их по очереди
и интерпретируя как длины сторон треугольника, определить, сколько троек
может быть использовано для построения треугольника (числа a, b, c при вводе расположены в порядке возрастания a<=b<=c). Результат получить в переменной k.
III.5. Контрольные работы
III.5.1. Контрольная работа №1
1.
2.
3.
4.
5.
6.
7.
8.
Диктант
Строгая последовательность действий, ведущая к решению задач.
Графическое представление программы.
Алгоритм без ветвлений и циклов.
Алгоритм, ведущий к результату за конечное число шагов.
Неоднократное решение однотипных задач.
Начальная
часть
слова
до
служебного
слова
BEGIN.
Этап исполнения алгоритма, ведущий к выполнению одной простой команды
или проверке условия.
Метод последовательного уточнения действий.
III.5.2. Контрольная работа №2
1.
Вариант 1
Составить алгоритм решения задачи: Вычислить S=1+2+3+4+…+N
x2  4
1.
Составить алгоритм решения задачи: y 
, если x изменяется от
А до В с шагом С.
x 3  27
Вариант 2
Составить алгоритм решения задачи: Вычислить S=1*2*3*4*…*N
2.
Составить алгоритм решения задачи: Вычислить
2.
45
i 1
i4
i 1
Горлатов А.М., Овчарик О.Н.
17
1.
Вариант 3
Составить алгоритм решения задачи: Найти корни квадратного уравнения: y=
x2+4*x-6
(1) i

i 1 ( 2i  3)
65
2.
Составить алгоритм решения задачи: Вычислить
1.
2.
3.
4.
5.
6.
7.
Что называется алгоритмом?
Какие виды алгоритмов вы знаете?
Какими свойствами обладают алгоритмы?
Какие конструкции алгоритмов вы знаете?
Какие способы записи алгоритмов вы знаете?
Что называется блок - схемой и какие блоки вы знаете?
Что называется заголовком алгоритма, его телом и шагом?
(Ответы на все вопросы сопровождать примерами!)
III.6. Вопросы для самопроверки
IV. Введение в алгоритмические языки
BASIC и PASCAL
IV.1. Теоретическое введение.
Большинство программ создаются для решения какой-либо задачи. Решение задачи
достигается благодаря обработке информации или данных. Поэтому как программист вы
должны знать:
1. как ввести информации в программу (ввод);
2. как хранить информацию в программе (данные);
3. как указать правильные команды для обработки данных (операции);
4. как передать обратно данные из программы пользователю (вывод).
Вы можете упорядочить команды таким образом, чтобы:
некоторые из них выполнялись только, если выполняется некоторое условие
или ряд условий (условное выполнение);
другие выполнялись повторно некоторое число раз (циклы);
третьи выделялись в отдельные части, которые могут быть выполнены в разных местах программы (подпрограммы).
Таким образом, перечислены все семь основных элементов программирования; ввод,
данные, операции, вывод, условное выполнение, циклы и подпрограммы. Этот список не
является исчерпывавшим, однако, он содержит те элементы, которые обычно присущи всем
программам (и языкам программирования).
Ввод
Это означает считывание значений, поступавших с клавиатуры, с диска или из порта
ввода/вывода.
Данные
Это константы, переменные и структуры, содержащие числа (целые и вещественные),
текст (символы и строки) или адреса (переменных и структур).
18
Программироваие. Сборник задач.QO.DO.AM
Операции
Операции осуществляют присваивание значений, и комбинирование (сложение, деление и так далее) и сравнение значений (равные, не равные и так далее).
Вывод
Это означает запись информации на экран, на диск или в порт ввода/вывода.
Условное выполнение
Условное выполнение предполагает выполнение набора команд в случае, если выполняется (является истинным) некоторое условие (если это условие не выполняется, то эти
команды пропускается или же выполняется другой набор команд) или если некоторый
элемент данных имеет некоторое специальное значение или значение из некоторого спектра.
Циклы
Благодаря циклам некоторый набор команд выполняется повторно или фиксированное число раз или пока является истинным некоторое условие; или пока некоторое условие
не стало истинным.
Подпрограммы
Подпрограммы представляют собой наборы инструкций, которые имеют самостоятельное имя и которые могут быть выполнены из любого места программы при обращении
к ним по имени.
IV.2. Бейсик (BASIC).
Основным режимом в Бейсик является программный режим, когда заранее составленная программа полностью вводиться в ЭВМ и выполняется. Другой, вспомогательный
режим является режимом непосредственного исполнения, когда операторы, как команды
выполняются сразу после ввода в ЭВМ.
Программа, написанная на языке Бейсик состоит из пронумерованных строк. В 1ой строке может содержаться один или несколько операторов, разделенных символом ":"
или "\". Обычно строки нумеруются, начиная с 10, с шагом 10. Вводиться строки могут в
любом порядке, а выполняются только в порядке возрастания их номеров. Номера строк
используются в операторах передачи управления при этом оператор, которому передается
управление, должен быть первым в строке.
Символы языка Бейсик:
1. 26 заглавных букв латинского алфавита "A..Z".
2. Цифры от 0 до 9.
3. Знаки (".", ";", ",", " ").
4. Арифметические операции ("+", "-", "*", "/", "^").
5. ( ) - круглые скобки, символ пробела.
6. <, >, =, <=, >=, <>.
7. &(коммерческое "и" - амперсенд), @("эт"), \, %, #.
Данные
1. Числовые константы:
а) целые - имеют вид десятичных целых чисел со знаком или без него:
пример: 123
-2564
б) вещественные - числа с фиксированной запятой (имеющие десятичную точку)
пример: 2.45
-102.356
Горлатов А.М., Овчарик О.Н.
19
в) вещественные, записываемые в экспоненциальной форме, состоит из мантиссы
и порядка, отделенного от мантиссы буквой Е.
пример: 235.568Е-7 = 0.0000235568 235Е6=235000000
г) шестнадцатеричные константы
пример: &Н76
&НА4
д) восьмеричные константы
пример: &О43 &О45
е) двоичные константы
пример: &B010001
&B0111110
2. Текстовая константа - последовательность символов, заключенная в кавычки:
пример: "ПРИВЕТ"
"IBM 01 34"
3. Переменные. Переменные имеют символическое имя - идентификатор, состоящий
из любого количества букв латинского алфавита и цифр. Имя переменной обязательно должно начинаться с буквы. В конце может иметь знак, определяющий тип
переменной.
$ символьные
% целые
пример: K12
G%
S$
4. Функция - это заранее определенные операции над данными.
пример: sin (x) - "sin x"
cos (x) - "cos x"
atn (x) - "arctg x"
log (x) - "ln x"
log 10 (x) - "lg x"
exp (x) - ex
int (x) - целое число
abs (x) - |x|
sqr (x) - √x
Pi -  =3.1415
rnd (x) - случайное число от 0 до 1
IV.3. Паскаль (PASCAL)
Типы данных
При написании программы Вы имеете дело с информацией, которая, как правило,
относятся к одному из следующих пяти основных типов; целые числа, вещественные числа,
символы и строки, булевские выражения и указатели.
Целые числа - это числа, с помощью которых
вы
учились считать
(например, 1,5,-21 и 752).
Вещественные
числа - имеют
дробную
часть
(3.14159)
и
экспоненту (2,579 1024). Иногда их также называют числами с плавающей запятой.
К символам относятся все буквы алфавита, знаки и числа 09. Они могут использоваться по отдельности (a, Z, i, 3) или соединяться друг с другом в строки ('Это только проверка').
20
Программироваие. Сборник задач.QO.DO.AM
Булевы выражения могут принимать одно из двух значений: True или False (истина или
ложь). Они используются в условных выражениях.
Указатели содержат адрес ячейки в памяти компьютера, которая в свою очередь содержит некоторую информации).
Типы целочисленных данных
В стандартном Паскале целочисленный тип данных определяется как содержащий значения в интервале от Maxint до 0 и от 0 до Maxint, где Maxint - наибольшее возможное целое значение, допустимое для используемого компьютера.
Целочисленные типы данных
Тип
Размер в байтах
Диапазон
целое длиной в байт (Byte)
1
0255
короткое целое (Shortint)
1
-128127
целое (Integer)
2
-32 76832 767
целое длиной в слово (Word)
2
065 535
длинное целое (Longint)
4
-2 147 483 6482 147 483 647
Примечание. Турбо-Паскаль позволяет использовать шестнадцатеричные целые значения (с основанием 16). При определении шестнадцатеричной константы перед ней указывается знак доллара ($); например, $27=39 (в десятичном исчислении).
Типы вещественных данных
В стандартном Паскале вещественный тип данных представлен в виде значений с плававшей запятой, содержащих мантиссу (дробную часть), умноженную на экспоненту (степень 10). Количество цифр (так называемых значащих цифр) в мантиссе и диапазон значений экспоненты зависят от компьютера. В Турбо-Паскале вещественный тип имеет
длину в 6 байт, допускает 11 значащих цифр и использует диапазон экспоненты от 10 -38 до
1038.
Типы вещественных данных
Тип
Диапазон
Размер в байтах
вещественный (real)
6
10-381038
с одинарной точностью
4
10-381038
(singl)
с двойной точность
15
10-381038
(double)
с повышенной точность
19
10-4931104931
(extended)
-263263-1
сложный (comp)
?
Типы символьных и строковых данных
Паскаль предлагает встроенный тип данных char, имевший длину в 1 байт и содержащий только один символ. Символьные константы выражаются символом, заключенным в
одиночные кавычки (например, 'А', 'е', '?', '2'). Отметим, что '2' означает символ 2 в то время, как 2 означает целое число 2 (а 2.0 означает вещественное число 2).
Горлатов А.М., Овчарик О.Н.
21
Определение строки
При описании строковой переменной можно указывать, сколько символов (до 255)
она может содержать. Если вы описываете переменную (или параметр) с типом string и не
указываете длину, то в этом случае предполагается длина по умолчанию в 255 символов.
Тип булевских данных
Встроенный тип булевских данных может иметь два значения True и False (истина и
ложь). Вы можете описать переменную с этим типом, затем присвоить ей значение True или
False или же присвоить ей значение выражения, которое при вычислении принимает одно
из этих значений.
Булевское выражение (Boolean) - это такое выражение, которое принимает значение
True или False. Оно состоит из выражений отношений, булевских операций, булевых переменных и/или других нулевых выражений.
Тип данных "указатель"
Все рассмотренные выше типы данных содержат только данные. Указатель (или ссылочный тип) содержит другой вид информации - адреса. Указатель представляет собой
переменную, которая содержит не сами данные, а адрес в памяти (RAM), где эти данные
хранятся. Другими словами, он указывает на данные, как, например, адресная книга или
индекс.
Идентификаторы
Имена, которые даются константам, типам данных, переменным и функциям, называются идентификаторами. Упоминаемые дальше идентификаторы используются для:
integer, real, string
Встроенных типов данных
Hello, DoSutil, DoRatiо
Основной функции программы
Name, n, B, Sum, Ratio
Переменных, определяемых пользователем
Write, Writeln, Readln
Встроенных процедур
Турбо-Паскаль имеет несколько новых правил использования идентификаторов:
Все идентификаторы должны начинаться с буквы (a...z или A...Z). В остальной
части идентификатора могут содержаться буквы, знаки подчеркивания и/или цифры (09), никакие другие символы не допустимы.
Идентификаторы используются без учета регистра, это означает, что строчные
буквы (a...z) рассматриваются тождественными прописным буквам (A...Z).
Например, идентификаторы idnx, Idnx и IDNX являются тождественными.
Идентификаторы могут иметь любую длину, но только первые 63 символа являются значащими.
Операции
После того, как данные получены программой (и присвоены переменным), их нужно
каким-то образом обрабатывать, для этого в вашем распоряжении имеются операции. Эти
операции относятся к восьми типам; операции присваивания, унарные/бинарные операции,
поразрядные операции (операции над битами), операции отношений, логические операции,
операции над адресами, операции над множествами и операции над строками.
Большинство операций в Паскале являются бинарными; то есть имеют два операнда;
остальные являются унарными, то есть имеют только один операнд. Бинарные операции
имеют обычную алгебраическую форму, например, а + b. Унарная операция предшествует
своему операнду, например, -b.
В сложных выражениях порядок выполнения операций устанавливается правилами
приоритета.
Приоритет операций
22
Программироваие. Сборник задач.QO.DO.AM
Операции
Приоритет
Категории
@, not
Первый(высший)
унарные операции
*, /, div, mod, and
Второй
мультипликативные операции
+,-, ог
Третий
аддитивные операции
=,<>,<,>,<=,>=
Четвертый (низший)
операции отношения
Операции с равным приоритетом, как правило, выполняются справа налево, хотя
иногда компилятор может перегруппировать операнды в целях генерации оптимального
кода.
Последовательности операций с одинаковым приоритетом вычисляются слева направо. Выражения, заключенные в скобки, вычисляются первыми независимо от того, каковы
предшествующие или последующие операции.
Операции присваивания
Базовой операцией является операция присваивания, как, например - Ratio:=23. В
Паскале знак присваивания представляет собой комбинацию из двоеточия и знака равенства :=. В приведенном примере значение 23 справа от знака присваивания присваивается
переменной Ratio, которая стоит слева.
Унарные и бинарные операции
Паскаль поддерживает стандартный набор бинарных арифметических операций, которые выполняются над целыми и вещественными значениями!
- умножение (*)
- деление целых чисел (div)
- деление вещественных чисел (/)
- взятие по модулю (mod)
- сложение (+)
- вычитание (-)
Кроме
того,
Паскаль
поддерживает
унарные операции: унарный
минус
(а+(-b)), который выполняет дополнение до двух, и унарный плюс (а+(+b)), который ничего не выполняет, но введен для полноты.
Операции отношений
Операции отношения позволяют сравнивать два значения, возвращая в результате
булевское значение True или False. Ниже приводятся операции отношения, реализуемые в
Паскале:
больше
>
больше или равно
>=
меньше
<
меньше или равно
<=
равно
=
не равно
<>
Логические операции
Имеются четыре логические операции - and, xor, ог и not, которые хотя и аналогичны
поразрядным операциям, но не тождественны им. Логические операции выполняются над
логическими значениями (True и False), позволяя комбинировать выражения отношения,
булевы переменные и булевские выражения.
Горлатов А.М., Овчарик О.Н.
23
Операции над адресами
Паскаль поддерживает две специальные операции над адресами: операцию вычисления
адреса (@) и операцию разыменования (^) .
Операция @ возвращает адрес заданной переменной. Если Sum является переменной
целочисленного типа, то @Sum представляет собой адрес (ячейку в памяти) этой переменной. Аналогичным образом, если ChrPtr является указателем для типа char, то ChrPtr
представляет собой символ, на который указывает ChrPtr.
Операции над множествами
Операции над множествами выполняются в соответствии с правилами теории множеств. Операции над множествами включают:
+
объединение
разность
*
умножение
Операции над строками
Единственной операцией над строками является операция, которая используется для
конкатенации двух строк ('А'+'Б').
V. Операторы линейной структуры
Линейным называется алгоритм, в котором команды выполняются последовательно друг за другом.
V.1. Бейсик
Оператор присваивания
LET v = ар. выр., где v - переменная, которой присваивается значение
пример:
LET x%=2;
LET
LET
LET
LET
x=2.56;
y=x*log(x);
A$="Переменная";
C$=A$+B$
Оператор комментарий
REM комментарий - все, что записано за словом REM до конца строки, воспринимается как комментарий и при выполнении программы игнорируется.
пример:
REM Программа табулирования функции
Оператор безусловного перехода
GO TO N, где N - номер строки. Этот оператор передает управление первому
оператору в строке с номером N.
пример:
GO TO 20
Оператор ввода INPUT
INPUT v1 [ , v2, …], где v1, v2, … - переменные.
При использовании оператора INPUT данные вводятся с клавиатуры дисплея во время выполнении программы. При выполнении этого оператора ЭВМ делает паузу, на экране высвечивается "?" и ЭВМ ждет ввода данных.
пример:
INPUT A, B, C;
INPUT "Сила тока"; I
24
Программироваие. Сборник задач.QO.DO.AM
Операторы DATA, READ, RESTORE
DATA a1 [ , a2, …], где a1, a2, … - константы.
READ v1 [ , v2, …], где v1, v2, … - вводимые переменные.
RESTORE [ар. выр.]
Оператор DATA содержит данные, которые при выполнении операторов READ
будут по очереди вводиться в переменные, перечисленные в списке ввода операторов
READ. Данные из области DATA можно считывать повторно, используя оператор
RESTORE.
пример:
DATA 10.6, 2.4, 5,8
пример задачи:
READ A, B, C
RESTORE \ READ E, F
10 REM Многократное вычисление объема
15 REM и площади цилиндра
20 READ D, H
30 S=3.1416*(D/2+H)*D
40 V=3.1416*D^2*H/4
50 PRINT "S="; S, "v="; V
60 GOTO 20
70 DATA 0.6, 1, 1.4, 2.3, 0.9, 11.2
Оператор вывода PRINT
PRINT список
Используется для вывода на экран дисплея результатов вычислений. Список вывода может
содержать имена переменных, числа, арифметические выражения и тексты.
пример:
PRINT B, C;
PRINT A%;
PRINT k+ABS(ATN(x);
PRINT "значение переменной Y="; Y; "вольт"
пример задачи: Вычислить площадь и объем цилиндра, если известны его диаметр - d высота - h.
10 REM Многократное вычисление объема
15 REM и площади цилиндра
20 INPUT D, H
30 S=3.1416*(D/2+H)*D
40 V=3.1416*D^2*H/4
50 PRINT "S="; S, "v="; V
60 GOTO 20
V.1.2. Графические операторы
экрана.
Оператор переключения экранов SCREEN
SCREEN <экран>
Экран - целое выражение от 0 до 9, указывающее номер графического режима
Применение любых графических операторов допустимо только в режиме графического экрана.
Горлатов А.М., Овчарик О.Н.
25
Оператор вывода точки PSET
PSET (арг1, арг2, арг3)
арг1 - целое выражение, задающее координату Х точки;
арг2 - целое выражение, задающее координату У точки;
арг3 - целое выражение, задающее цвет точки.
Оператор вычерчивания линии и прямоугольников LINE
LINE (арг1, арг2)-(арг3, арг4), арг5, арг6
арг1 - целое выражение, задающее координату Х начальной точки объекта;
арг2 - целое выражение, задающее координату У начальной точки объекта;
арг3 - целое выражение, задающее координату Х конечной точки объекта;
арг4 - целое выражение, задающее координату У конечной точки объекта;
арг5 - целое выражение, задающее номер цвета объекта;
арг6 - если В, то выводится прямоугольник, если BF - то закрашенный прямоугольник.
Оператор вычерчивания окружностей, эллипсов и дуг CIRCLE
CIRCLE арг1, арг2, арг3, арг4, арг5, арг6, арг7
арг1 - целое выражение, задающее координату Х центра окружности;
арг2 - целое выражение, задающее координату У центра окружности;
арг3 - целое выражение, задающее радиус окружности;
арг4 - целое выражение, задающее номер цвета окружности;
арг5 - целое выражение, задающее положение начальной точки дуги (в радианах);
арг6 - целое выражение, задающее положение конечной точки дуги (в радианах);
арг7 - целое выражение, задающее коэффициент "сжатия" эллипса;
Оператор окрашивания PAINT
PAINT арг1, арг2, арг3, арг4
арг1 - целое выражение, задающее координату Х начальной точки;
арг2 - целое выражение, задающее координату У начальной точки;
арг3 - целое выражение, задающее номер цвета;
арг4 - целое выражение, задающее номер цвета границы закрашиваемой области.
Оператор графических команд DRAW
DRAW <символьное выражение>
<символьное выражение> - строка, содержащая графическую команду. Графическая команда состоит из буквы и аргумента.
Команды:
U длина - черчение вверх от текущей точки;
D длина - черчение вниз от текущей точки;
L длина - черчение влево от текущей точки;
R длина - черчение вправо от текущей точки;
E длина - черчение вправо-вверх от текущей точки;
F длина - черчение вправо-вниз от текущей точки;
G длина - черчение влево-вниз от текущей точки;
26
Программироваие. Сборник задач.QO.DO.AM
H длина - черчение влево-вврех от текущей точки;
B - перемещать, но не чертить;
C арг - задает цвет черчения.
Для черчения с указанием координат - команда М х,у. Перемещение в точку с координатами Х=100 и У=200 команда - М 100,200.
пример:
10 A%=100
20 B%=150
30 SCREEN 9
40 DRAW "BM=A%,150; E10F10D20L20U20R20"
V.2. Паскаль
Вывод
Процедура Writeln
Writeln(элемент,элемент,...),
где каждый элемент - это то, что нужно напечатать на экране. Элементом может быть
литеральное значение, например, целое или вещественное число (3, 42, -1732.3), символ
('a', 'Z'), строка (‘Hel1o, Оля’) или булево значение (True). Кроме того, им может быть
именованная константа, переменная, разыменованный указатель или обращение к функции,
если она возвращает значение, которое имеет целый, вещественный, символьный, строковый или булев тип. Все элементы печатаются в одной строке в заданном порядке. После
этого курсор устанавливается в начало следующей строки. Если вы хотите оставить курсор на той же строке после последнего элемента, то используйте оператор;
Wгitе(элемент,элемент,...).
Когда распечатываются элементы по оператору Writeln, между ними автоматически
не вставляются пробелы. Если Вы хотите разделить элементы пробелами, то Вы должны
указать их сами, например:
Writeln(элемент,' ',элемент,' ',...);
Поэтому по следующим операторам будет получен указанный вывод;
А := 1; В := 2; С := 3;
Name := ' Frank ';
Writeln(A,B,C);
Writeln(A, ' ',B, ' ' ,C);
Writeln('Hi', Name);
Writeln ('Hi , ',Name,'.');
123
123
HiFrank
Hi, Frank.
Кроме того, можно использовать спецификаторы для определения ширины поля для
данного элемента. В этом случае оператор имеет формат:
Writeln(элемент: ширина,...)
где ширина - целое выражение (литерал, константа, переменная, обращение к функции или комбинация из них), определяющее общую длину поля, в котором должен быть
записан элемент. Например, рассмотрим следующую программу и полученный в результате вывод:
А:= 10; В:= 2; С:= 100;
Writeln(A,B,C);
Writeln(A:2, B:2, C:2);
Writeln(A:3, B:3, C:3);
Writeln(A,B:2, C:4);
Горлатов А.М., Овчарик О.Н.
102100
10 2100
10 2100
10 2 100
27
Отметим, что элемент дополняется начальными пробелами слева с тем, чтобы соответствовать указанной длине поля. Само значение выравнивается справа.
Что если ширина поля меньше, чем необходимо? Во втором операторе Writeln из приведенного выше примера для С, имеющего значение 100, ширина поля указана 2, хотя
необходима ширина 3. Как Вы видите в выводе, Паскаль увеличил ширину до минимального необходимого размера.
Этот способ выполняется для всех допустимых элементов: целых чисел, вещественных чисел, символов, строк и булевых выражений. Однако, при указании спецификатора
ширины поля вещественные числа распечатывается в экспоненциальной форме:
Х:=421.53;
Writeln(X);
Writeln(X:8);
4.2153000000E+02
4.2Е+02
Поэтому Паскаль позволяет добавить второй спецификатор ширины поля: (элемент:ширина:цифры). Это второе значение указывает распечатать вещественное число в
формате с фиксированной точкой и определяет, сколько цифр поместить после десятичной
точки:
Х:=421.53;
Writeln(X:6:2) ; 421.53
Writeln(X:8:2); 421.53
Writeln(X:8:4); 421.5300
Ввод
Стандартный Паскаль имеет две основные функции ввода Read и Readln, которые
используются для чтения данных, вводимых с клавиатуры. Общий формат этих операторов
следующий;
Read(элемент,элемент,...) или Readln(элемент,элемент,...),
где каждый элемент представляет собой переменную целого, вещественного, символьного или строкового типа. Числа должны отделяться от других значений пробелами или
нажатием клавиши <Enter>.
Комментарий
Комментарий начинается левой фигурной скобкой {, которая указывает компилятору
игнорировать все последующее до тех пор, пока не будет обнаружена правая фигурная
скобка } .
Комментарии можно даже располагать на нескольких строках, например:
{Это пример длинного комментария, занимающего несколько строк.}
Кроме того, Паскаль допускает альтернативную форму комментария, начинавшегося
левой круглой скобкой со звездочкой (* и заканчивающегося правой круглой скобкой со
звездочкой *). Этим принимаются в расчет ограничения на вложения комментариев, поскольку комментарий, начинающийся с (* игнорирует все фигурные скобки, и наоборот.
V.3. Задачи  уровня
1.
2.
3.
28
Вычислить площадь треугольника по трем сторонам (пользуясь формулой Герона).
Найти гипотенузу и площадь прямоугольного треугольника по двум данным
катетам.
Треугольник задан величинами своих углов и радиусом описанной окружности. Вычислить длины сторон треугольника.
Программироваие. Сборник задач.QO.DO.AM
4.
5.
6.
Смешали V1 литров воды с температурой T1 градусов Цельсия с V2 литрами
воды с температурой T2 градусов Цельсия. Вычислить объем и температуру
полученной смеси.
Вычислить сумму членов арифметической прогрессии, зная ее первый член,
разность прогрессии и число членов.
Напишите программу, которая вывела бы на экран вашу фамилию, имя, адрес.
V.4. Задачи  уровня
1.
2.
3.
4.
5.
Дано трехзначное число. Выделить число сотен и число единиц.
Дана длина ребра куба. Найти площадь грани, площадь полной поверхности и
объем этого куба.
Вычислить расстояние между двумя точками с координатами (X1,Y1), (X2,Y2),
(X3,Y3) своих вершин. Найти периметр и площадь треугольника.
Вычислить длины медиан треугольника, заданного длинами сторон.
Вычислить длину окружности, площадь круга и объем шара одного и того
же заданного радиуса.
V.5. Задачи  уровня
1.
2.
3.
Определить силу притяжения F между телами массы М1 и М2, находящиеся на
расстоянии R друг от друга.
Определить время, через которое встретятся два тела, равноускоренно движущиеся навстречу друг другу, если известны их начальные скорости, ускорения и начальное расстояние между ними.
Вычислить период колебания маятника длины L.
V.6. Контрольные работы
V.6.1. Контрольная работа №1
1.
2.
3.
4.
5.
Диктант
Что такое линейный алгоритм?
Опишите типы переменных.
Какой оператор выводит значение переменной на экран?
Какой оператор вводит известное значение переменных.
В чем отличие при вводе значний с помощью оператора INPUT и READ?
V.6.2. Контрольная работа №2
1.
2.
1.
Вариант 1
Написать на языке программирования:
а) ввести А, В;
б) увеличить А в 10 раз;
в) уменьшить В в 4 раза;
г) вывести А, В.
Составить программу вычисления площади прямоугольного треугольника.
Вариант 2
Написать на языке программирования:
а) ввести А, В;
б) найти сумму А и В;
Горлатов А.М., Овчарик О.Н.
29
2.
1.
2.
в) увеличить сумму А и В в 10 раз;
г) вывести результат.
Составить программу вычисления площади параллелограмма
Вариант 3
Написать на языке программирования:
а) ввести А, В;
б) поменять местами А и В;
в) вывести результат.
Даны три сопротивления соединенные параллельно. Найти общее сопротивление соединения.
V.6.3. Вопросы для самопроверки
1.
2.
3.
4.
5.
Что называется линейным алгоритмом?
Как ввести значения в переменные?
Как вывести значения из переменных?
Какие графические операторы Вы знаете?
Как сделать комментарий в программе?
(Ответы на все вопросы сопровождать примерами!)
VI. Условные операторы
Независимость программы от данных часто требует в зависимости от конкретного
набора данных выбирать один из двух или более различных вариантов вычислительного
процесса (т. е. осуществлять разветвление вычислительного процесса).
Разветвляющийся алгоритм - алгоритм, в котором проверяется условие, в зависимости от которого выполняется то или иное действие.
да
нет
IF условие THEN оператор,
где условие - выражение, результат которого значение TRUE или FALSE
оператор - любой оператор.
Действие условного оператора заключается в следующем: если условие TRUE, то
выполняется оператор, следующий за THEN.
VI.1. Бейсик
пример:
30
IF x<0
THEN GOTO 90;
IF x<0
THEN PRINT "ОК! x<0";
IF A$="Да" THEN GOTO 90
Программироваие. Сборник задач.QO.DO.AM
пример задачи: Составить программу табулирования функции Y=x*ln(x) на отрезке [2; 3] c шагом 0,1.
10 x=2
20 Y=x*log(x)
30 PRINT x, Y
40 x=x+0.1
50 IF x<=3 GOTO 20
60 END
VI.2. Паскаль
Иногда бывает необходимо, чтобы некоторая часть программы была выполнена, если
некоторое заданное условие имеет значение True или же не имеет, или если некоторое
заданное выражение принимает определенное значение. Посмотрим, как это реализуется в
Паскале.
Посмотрим, как использовался оператор IF в предыдущих примерах. Отметим, что
он может иметь следующий обобщенный формат;
IF выражение then оператор1 ELSE оператор2,
где "выражение" обозначает любое булевское выражение (при вычислении дающее
значение True или False), а "оператор1" и "оператор2" - допустимые в Паскале операторы.
Если выражение имеет значение True, то выполняется оператор1, в противном случае выполняется оператор2.
Необходимо разъяснить два важных момента в
использовании
операторов
IF/THEN/ELSE. Во-первых, оператор ELSE является необязательным, другими словами,
является допустимым следующий оператор IF:
IF выражение THEN оператор1
В этом случае оператор1 выполняется в том и только в том случае, если выражение
имеет значение True. Если выражение имеет значение False, то оператор1 пропускается и
продолжается выполнение программы.
Во-вторых, как быть, если необходимо выполнить более одного оператора в случае,
когда указанное выражение принимает значение True или False. В этом случае следует использовать составной оператор. Составной оператор состоит из ключевого слова BEGIN,
нескольким операторов, разделенных точкой с запятой, и ключевого слова END.
В примере с вычислением отношения в предложении IF используется одиночный оператор:
IF В = 0
then Writeln ('Деление на нуль запрещено.')
а в предложении else - составной оператор:
else begin
Ratio = A / В;
Writeln('Отношение равно ', Ratio) end;
Как вы могли уже заметить, тело каждой написанной вами программы представляет
собой составной оператор, в конце которого стоит точка.
Оператор Case
Этот оператор позволяет осуществить в программе выбор между альтернативами, не
используя большого числа операторов IF.
Оператор Case состоит из выражения (селектора) и списка операторов, каждому из которых предшествует метка case, имеющая тот же тип, что и селектор. Это означает, что тот
оператор должен быть выполнен, чья метка case равна текущему значению селектора.
Горлатов А.М., Овчарик О.Н.
31
Если ни одна из меток case не содержит значения селектора, то или не выполняется ни
один оператор, или выполняются операторы, стоящие после необязательного зарезервированного слова else. (Ключевое слово else представляет собой расширение стандартного Паскаля).
Метка case состоит из нескольких констант или поддиапазонов, за которыми стоит
двоеточие и которые разделены между собой запятыми, например:
case BirdSight of
'С', 'с' : Curlews := Curlews + 1;
'H', 'h' : Herons := Herons + 1;
'E', 'e' : Egrets := Egrets +1;
'Y', 't' : Terns := Terns +1;
end; { case }
Поддиапазон записывается в виде двух констант, разделенных ограничителем поддиапазона. Тип константы должен соответствовать типу селектора. Оператор, стоящий после
метки case выполняется в том случае, если значение селектора равно значению констант
или если оно попадает в один из поддиапазонов.
VI.3. Задачи  уровня
1.
Составить программу для решения задачи при x=3.
F  ( x  1) 2  3( x  1)
Составить программу для решения задачи: Вычислить квадрат первых десяти
чисел.
3. Составить программу для решения задачи: Составит таблицу перевода миль в
километры для расстояний от 5 до 75 миль с шагом 5 (1 миля составляет 1.609
км).
4. Составить программу для решения задачи: Составить таблицу перевода сантиметров в дюймы для расстояний от 5 до 65 сантиметров с шагом 4. (1 дюйм
составляет 2.54 сантиметра)
5. Составить программу для решения задачи: Напечатать таблицу умножения
для числа 12.
6. Составить программу для решения задачи: Найти корни квадратного уравнения:
5x 2  6 x  8.5  0
7. Составить программу для решения задачи: Нахождение максимального из
двух чисел. (x, y задать самостоятельно).
2.
VI.4. Задачи  уровня
1.
2.
3.
4.
5.
32
Составить программу для решения задачи: В классе N учеников. Определить
средний рост учеников класса, вводя в ЭВМ по очереди рост каждого ученика.
Составить программу для решения задачи: Найти наибольший общий делитель двух целых положительных чисел.
Составить программу для решения задачи: В ЭВМ по очереди поступают результаты соревнований по плаванию, в которых участвует n спортсменов.
Выдать лучший результат после ввода результата очередного спортсмена.
Составить программу для решения задачи: Группа, состоящая из n студентов,
сдает нормы ГТО по метанию гранаты. Определить сколько студентов выполнило нормы ГТО.
Составить программу для решения задачи: Ученикам 1-го класса назначается
дополнительно стакан молока (200 мл), если их вес составляет меньше 30 кг.
Программироваие. Сборник задач.QO.DO.AM
Определить, сколько литров молока потребуется ежедневно для одного класса, состоящего из n учеников.
VI.5. Задачи  уровня
1. Составить программу для решения задачи: Траектория снаряда, вылетающего из
орудия под углом  c начальной скоростью 0, описывается уравнениями:
x=0 cos (),
y=0 sin (-g2/2),
где g= 9,8м/с2 - ускорение свободного падения,  - время. Вводя n заданных пар 0, , определить, сколько снарядов поразит цель высотой P, расположенную в вертикальной плоскости ствола орудия на расстоянии R на высоте
H(см.рис.)
y
P
H
0
x

R
2.
Разработать программу вычисления значения функции.
x + y, если (x) делится на (y) без остатка
f(x, y) =
x - 1, если (x) не делится на (y) без остатка
3.
Составить программу вычисления (генерирования) 100 членов последовательности, заданной формулой
A
4.
k

k*k
, ( k  1, 2 ,...,100)
k*k1
Составить программу вычисления суммы всех членов ряда
n

k  1
Горлатов А.М., Овчарик О.Н.
( 1 )
k  1
k!
xk  1
33
VI.6. Контрольные работы
VI.6.1. Контрольная работа №1
1.
2.
3.
4.
5.
Диктант
Дайте определение разветвляющегося алгоритма.
Опишите виды разветвляющегося алгоритма.
Напишите сокращенную форму условного оператора.
Нарисуйте блок-схему сокращенной формы условного оператора.
Напишите полную форму условного оператора.
VI.6.2. Контрольная работа №2
Вариант 1
1. Составить программу, реализующую эпизод сказки: спрашивает, куда предпочитает пойти герой (налево, направо или прямо), и печатает, что его ждет в
каждом случае.
2. Заданы площади круга и квадрата. Поместится ли квадрат в круге?
Вариант 2
1. Составить программу, которая спрашивала бы сокращенное имя, а печатала
полное (например, Саша-Александр), для двух ваших друзей.
2. Заданы площади квадрата и круга. Составить программу, проверяющую, поместится ли круг в квадрате.
Вариант 3
1. Дано число N <= 999. Определить, является ли это число перевернутым (например, 356653, 55, 6886 ).
3. Заданы координаты двух точек. Определить, лежат ли они на одной окружности с центром в начале координат?
VI.6.3. Контрольная работа №3
Вариант 1
1. Дано действительное число а. Для функции f(x) вычислить f(a).
34
Программироваие. Сборник задач.QO.DO.AM
2.
Определить,
принадлежит
ли
точка
А(х,у)
данной
области?
Вариант 2
1. Дано действительное число а. Для функции f(x) вычислить f(a).
2. Определить, принадлежит ли точка А (х, у) данной области?
Вариант 3
1. Дано действительное число а. Для функции f(x) вычислить f(a).
2.Определить, принадлежит ли точка А (х,у) данной области?
Горлатов А.М., Овчарик О.Н.
35
VI.7. Вопросы для самопроверки
1. Какая команда называется командой ветвления?
2. Какие служебные слова образуют структуру команды?
Формы команды ветвления.
3. Что надо помнить при организации команды ветвления в алгоритме?
4. Особенности команды ветвления на Бейсике и на Паскале.
5. Что такое разветвленный алгоритм?
(ответы на все вопросы сопровождать примерами)
VII. Операторы цикла
Циклом называется многократно выполняемая последовательность действий (операторов). Цикл является типичной структурой алгоритмов, реализуемых на ЭВМ.
Структура цикла "ДО":
"ПОСТУСЛОВИЕ"
начальные
присвоения
Структура цикла "ПОКА"
"ПРЕДУСЛОВИЕ"
начальные
присвоения
тело цикла
да
условие
условие
да
нет
тело цикла
нет
Цикл "ДО" применяется при необходимости выполнить какие-либо вычисления
несколько раз до выполнения некоторого условия. Особенность этого цикла в том, что он
всегда выполняется хотя бы один раз, так как первая проверка условия выхода из цикла
выполнено.
Цикл "ПОКА" отличается от цикла "ДО" тем, что проверка условия проводится до
выполнения тела цикла, и если при первой проверке условие выхода из цикла выполняется,
то тело цикла не выполняется ни разу.
VII.1. Бейсик
В Бейсике - это пара операторов FOR - NEXT.
FOR v=A1 TO A2 STEP A3
NEXT v
где v - любая переменная - управляющая переменная цикла;
A1, A2, A3 - начальное, конечное значения и шаг изменения управляющей переменной
цикла - любые арифметические выражения.
36
Программироваие. Сборник задач.QO.DO.AM
Если A3=1, то конструкцию STEP A3 можно опустить. Операторы, расположенные
между операторами FOR и NEXT, образуют тело цикла и выполняются многократно.
Выполнение цикла, образованного операторами FOR-NEXT, заключается в следующем: переменной v присваивается начальное значение A1, и она сравнивается с конечным значением A2. Если при положительном шаге A3 удовлетворяется условие A1<=A2 или
при отрицательном шаге A3 удовлетворяется условие A1>=A2, то выполняются операторы,
расположенные между операторами FOR-NEXT, и по оператору NEXT осуществляется
возврат к началу цикла. Значение v изменяется на шаг A3, т. е. v=v+ A3 , и снова проверяется условие. Если условие удовлетворяется, то тело цикла выполняется повторно. В противном случае происходит выход из цикла и переход к оператору, следующему за NEXT.
пример:
10 FOR I=1 TO 100
пример задачи:
20 NEXT I
30 END
10 REM Табулирование
20 PRINT "X", "F"
30 FOR X=0 TO 1 STEP .05
40 F=LOG (X+1) / (X^2+1)
50 PRINT X, F
60 NEXT X
VII.2. Паскаль
Имеется три основных вида циклов: цикл while, цикл repeat и цикл for. Рассмотрим
их в этом же порядке.
Оператор цикла с предусловием (цикл While)
Оператор while используется для проверки некоторого условия в начале цикла. Введем
следующую программу:
program Hello;
var
Count: integer;
begin
Count:= 1;
while Count <= 10 do begin
Writeln(' Здравствуйте и до свидания ');
Inc(Count)
end;
Writeln(' Это конец! ') end.
Первое, что произойдет при запуске этой программы, это присваивание Count значения 1, затем следует цикл while. Здесь сначала проверяется, не является ли значение
Count меньшим или равным 10. Если да, то выполняется тело цикла (begin…end). При
этом на экране печатается сообщение "Здравствуйте и до свидания", затем значение
Count увеличивается на 1. Count проверяется заново и тело цикла выполняется еще раз.
Это продолжается до тех пор, пока значение Count при проверке меньше или равно 10.
Как только Count принимает значение 11; цикл завершается, и на экране печатается строка
"This is the end!" (" Это конец ").
формат оператора while имеет вид:
while выражение do оператор
Горлатов А.М., Овчарик О.Н.
37
где "выражение" - это булевское выражение, а оператор - одиночный или составной
оператор.
В цикле while вычисляется выражение. Если оно имеет значение True, то оператор
выполняется и выражение вычисляется заново. Если выражение имеет значение False, то
цикл while завершается и выполнение программы продолжается.
Оператор цикла с постусловием (цикл Repeat..untiI)
Второй вид представлен циклом repeat..unti1, который использован в программе DORATIO.PAS:
program DoRatio;
var
A,В: integer;
Ratio: real;
Ans: char;
begin
repeat
Write(' Введите два числа: ');
Readln(A,B);
Ratio := A / B;
Writeln(' Отношение равно ', Ratio)
Write(' Повторить (Y/N) ');
Readln(Ans)
until (Ans = ' n ') or (Ans = ' N ')
end.
Как указывалось выше, эта программа повторно выполняется до тех пор, пока не будет
получен ответ n или N на вопрос "Повторить". Другими словами, заключенное между repeat и until повторно выполняется до тех пор, пока выражение после until имеет значение
True.
Обобщенный формат для цикла repeat..unti1 имеет вид:
repeat
оператор;
оператор;
• • •
оператор
until выражение
Имеется три основных различия между циклом while и циклом repeat. Во-первых, операторы в цикле repeat всегда выполняются хотя бы один раз, поскольку проверка выражения осуществляется не сразу после ключевого слова repeat. Наоборот, в цикл while, если
выражение изначально имеет значение False, то пропускается все тело цикла.
Во-вторых, цикл repeat выполняется до тех пор, пока выражение не примет значение
True; в отличие от него цикл while выполняется, пока выражение имеет значение True. Это
означает, что следует внимательно заменять один тип цикла на другой. Например; рассмотрим программу HELLO, переписанную с использованием цикла repeat:
program Hello;
var
Count: integer;
begin
Count:= 1;
repeat
.
Writeln (' Здравствуйте и до свидания ');
38
Программироваие. Сборник задач.QO.DO.AM
Inc(Count)
until Count > 10;
Writeln(' ЭTO конец! ')
end.
Отметим, что теперь проверяется, не является ли значение Count большим 10, в то
время как в цикле while проверялось, не является ли значение Count меньшим или равным
10.
Наконец, цикл repeat может содержать несколько операторов, не образующих составной оператор. Заметьте, что в последней программе не используется begin..end, в то время
как в варианте с циклом while это имело место.
Кроме того, следует запомнить, что цикл repeat всегда выполняется по крайней мере
один раз. Цикл while может и не быть выполненным в зависимости от выражения.
Оператор цикла с параметром (цикл For)
В обычном случае набор операторов выполняется фиксированное число раз, пока некоторая переменная (так называемая индексная переменная) принимает значения из указанного диапазона. Например, модифицируем приводимую ранее программу HELLO следующим образом;
ргоgram Hello;
var
Count: integer;
begin
for Count:= 1 to 10 do
Writeln(' Здравствуйте и до свидания ');
Writeln(' Этo конец ')
end.
\
При выполнении этой программы можно убедиться, что рассматриваемый цикл выполняется так же, как циклы while и repeat и фактически он точно эквивалентен циклу
while. Обобщенный формат для цикла for имеет следующий вид:
for индекс:= выражение1 to выражение 2 do оператор
где индекс - это переменная скалярного типа (целого типа, символьного, булева или
перечисляемого типа), "выражение1" и "выражение 2" представляют собой выражения,
имеющие тип, совместимый с индексом, а "оператор" - это одиночный или составной оператор. Индекс увеличивается на 1 после каждого прохождения цикла.
Вы можете также уменьшать, а не увеличивать индексную переменную, для этого
нужно заменить ключевое слово to на dоwntо.
Цикл for эквивалентен следующей программе:
index:= expri;
while index <= expr 2 do
begin
оператор
Inc(индекс)
end;
Основным недостатком цикла for является то, что он позволяет увеличивать или
уменьшать только на 1. К его основным преимуществам относятся краткость и возможность
использования символьного и перечисляемого типов в диапазоне значений.
VII.3. Задачи  уровня.
10
S   xi
Горлатов А.М., Овчарик О.Н.
i 1
39
1.
Вычислить сумму 10 слагаемых.
2.
Вычислить:
4.
5.
6.
7.
8.
n
P   x i  x1  x 2  ...  xn
i1
Вычислить: P  n!
Напечатать таблицу перевода температуры из градусов по шкале Цельсия (C)
в градусы шкалы Фаренгейта (F) для значений от 150 C до 300 C с шагом 10 C.
(Перевод осуществляется по формуле: F=1,8C+32).
Составить таблицу стоимости порций сыра весом 50, 100, 150, …1000 г(цена
1 кг 3 руб.)
Плотность воздуха убывает с высотой по закону =0--hz. Считая, что 0=1.29
кг/м3, z=1.25*10-4 1/м, напечатать таблицу зависимости плотности от высоты
для значений от 0 до 1000 м с шагом 100 м.
Плотность воздуха  с высотой h убывает по закону =0--hz . Определить, на
какой высоте плотность будет меньше 1кг/ м3
VII.4. Задачи  уровня
1.
2.
3.
4.
5.
6.
В ЭВМ вводятся фамилии и рост учеников 7-го класса. Вывести на экран фамилии тех учеников, рост которых больше 170 см (для определения кандидатов в баскетбольную команду).
В соревнованиях по бегу принимают участие 30 спортсменов. Водя по очереди фамилии и результаты участников в ЭВМ, определить, сколько из них выполнило норму ГТО, и напечатать их фамилии.
Вводя в цикле по 3 оценки каждого студента, подсчитать число студентов, не
имеющих оценок 2 и 3 . В группе учится n студентов.
Около стены наклонно стоит палка длиной x. Один ее конец находится на
расстоянии y от стены. Определить значение угла  между палкой и полом
для значений x=4.5 м и y, изменяющегося от 2 до 4 с шагом 0.2.
Одноклеточная амеба каждые 3 часа делится на 2 клетки. Определить, сколько клеток будет через 3, 6, 9, …, 24 часа.
Вычислить приближенно площадь фигуры, ограниченной функцией y=x2 и
прямой y=5+x/2, разбивая отрезок изменения x на 10 частей и суммируя площади прямоугольников с основанием, равным 1/10 отрезка, и высотой, определяемой значениями функций в середине основания.
VII.5. Задачи  уровня
Составить программу помощника кассира в универсальном магазине. ЭВМ
должна запрашивать цену товара и его количество, подсчитывать суммарную
стоимость купленных товаров, запрашивать сумму денег, внесенных покупателем, и определять причитающуюся ему сдачу.
2. Ученикам 1-го класса назначается дополнительно стакан молока (200 л), если
их вес составляет меньше 30 кг. Определить, сколько литров молока потребуется ежедневно для одного класса, состоящего из n учеников. После взвешивания вес каждого ученика вводится в ЭВМ.
3. Составит программу, подсчитывающую число посещений в поликлинике врачей-специалистов (лора, хирурга и окулиста). В конце дня выдавать итоговое
1.
40
Программироваие. Сборник задач.QO.DO.AM
сообщение. В начале программы должна вводиться дата, которая будет фигурировать в итоговом сообщении.
4. Составить программу для определения подходящего возраста кандидатуры для
вступления в брак, используя следующее соображение: возраст девушки равен
половине возраста мужчины плюс 7, возраст мужчины определяется соответственно как удвоенный возраст девушки минус 14. Данные для проверки работы программы задать самостоятельно.
5. Сберегательный банк начисляет 7% годовых, т.е. через год вклад увеличивается
без участия вкладчика. Какой станет сумма "К" рублей, положенная в банк на
'W лет?
6. Каждая бактерия в банке делится на две через каждые 3 минуты. В начальный
момент имеется 1 бактерия. Сколько их будет через N минут?
7. До древней легенде мудрец, который изобрел шахматы, потребовал от персидского шаха такое количество пшеницы, чтобы им можно было покрыть шахматную доску, положив на первую клетку 1 зерно, на вторую - 2, на третью - 4
и т.д., т.е. на каждую следующую клетку в два раза больше зерен, чем на
предыдущую. Какое количество зерна может покрыть шахматную доску? Считать, что в одном грамме 15 зерен. Результат получить в тоннах.
8. Получить и напечатать последовательность из N - натуральных чисел, образованную по следующему правилу: каждое число в последовательности, начиная
с третьего, получается сложением двух предыдущих чисел. Такая последовательность называется числами Фибоначчи.
9.Составить программу для вычисления произведения т членов арифметической
прогрессии, если известны значения первого члена а и разность арифметической прогрессии?
VII.6. Контрольные работы
VII.6.1. Контрольная работа №1
Диктант
1. Дайте определение цикла.
2. Какие данные необходимы для организации цикла?
3. Опишите операторы цикла FOR и NEXT и порядок их выполнения.
4. Что такое управляющая переменная цикла ?
5. Какие операторы существуют в языке Паскаль для выполнения цикла?
6. Что вы знаете о шаге в цикле?
VII.6.2. Контрольная работа №2
Вариант 1
1. Для данного N составить алгоритм вычисления значения выражения: sin(1) + sin(2)
+ sin(3) + sin(4) + ... + sin(N)
2. Составить алгоритм вычисления куба суммы всех четных чисел от 2 до 100.
Вариант 2
1. Для данного N составить алгоритм вычисления значения выражения: cos(1) + cos(3)
+ cos(5) + ... + cos(2N-1).
2. Составить алгоритм вычисления суммы кубов всех нечетных чисел от 0.707 до 301.
Горлатов А.М., Овчарик О.Н.
41
Вариант 3
1. Распечатать 100 случайных чисел, расположенных на отрезке [А, В].
2. Составить алгоритм вычисления квадрата всех положительных чисел от
-2.456 до 3.236
VII.7. Вопросы для самопроверки
1.
2.
3.
4.
5.
Что такое цикл? Циклы ДО и ПОКА, различия между ними.
Какие данные необходимы для организации цикла?
Что такое управляющая переменная цикла?
Операторы цикла FOR и NEXT и порядок их выполнения.
Что такое вложенные циклы?
(Ответы на все вопросы сопровождать примерами!)
VIII. Операции и стандартные функции
для символьных переменных
Переменные, значениями которых являются строки символов, называются символьными (или строковыми) переменными.
Символьным выражением называется:

строка символов, заключенная в кавычки;

символьная переменная;

Элемент символьного массива;

символьная функция;

какие-либо из перечисленных элементов, соединенных знаком + или &.
Для символьных переменных определена одна операция: сочленение (обозначается &). При выполнении этой операции две переменные объединяются в одну.
Кроме операции сочленения, для символьных переменных определены стандартные функции.
Основные стандартные функции для символьных переменных
Основные функции языка Бейсик
ASC(X$)
LEN(X$)
MID$(X$,Y,Z)
STR$(X)
CHR$(X)
LEFT$(A$,N)
42
Переводит двоичный код символа в десятичное
число
Вычисляет количество символов в символьной
переменной X$
Выбирает Z символов из символьной переменной
X$ с позиции У
Преобразует значение Х из числовой формы в
символьную
преобразует ASCII-код в символ
выбирает N левых символов из символьной переменной X$
Программироваие. Сборник задач.QO.DO.AM
RIGHT$(X$,N)
VAL(X$)
выделяет N правых символов из символьной переменной Х$
преобразует символьную переменную X$ в число
Основные функции языка Паскаль
CHR(X: BYTE): CHAR
возвращает символ,
числу Х по ASCII-коду
соответствующий
ORD(X:CHAR):BYTE
возвращает число, соответствующее символу Х в ASCII - таблице
UpCase(X:CHAR):CHAR
преобразует символы из строчных букв в
прописные
Length (X:STRING):INTEGER определяет фактическую длину текстовой
переменной X
VIII.1. Задачи  уровня.
1. Подсчитать, сколько раз среди символов заданной строки встречается буква
"F".
2. В заданном тексте удалить часть текста, заключенную в скобки (вместе со
скобками).
3. Определить количество слов в тексте.
4. Сколько раз в тексте встречается заданное слово (слова разделены пробелами).
5. Напечатать самое длинное слово из заданного текста.
6. Напишите программу, которая вывела бы на экран Вашу фамилию, имя, адрес.
VIII.2. Задачи  уровня
1. Составить программу, которая печатает заданное слово задом наперед.
2. Подсчитать количество цифр в заданной строке.
3. Подсчитать количество слогов в слове.
4. Проверить, является ли заданное слово палиндромом (КАЗАК, ШАЛАШ, МАДАМ и т.д.). Палиндром - это слова, которые читаются в прямом и обратном
порядке одинаково (например: казак, шалаш).
5. Среди натуральных чисел от 1 до N найти все такие, запись которых совпадает с
последними цифрами записи их квадратов (5-25, 6-36, 25-625 и т.д.).
6. Выдать номер позиции заданной строки, в которой впервые встречается буква
"а", если такой буквы нет, то вывести сообщение" END".
7. Из заданной строки получить новую, удалив все символы, не являющиеся буквами латинского алфавита.
8. В заданной строке преобразовать все заглавные буквы латинского алфавита в
строчные, а строчные в заглавные L.
VIII.3. Задачи  уровня
1. Дана строка из слов. Выбрать из них палиндромы и составить новую строку.
Палиндром - это слова, которые читаются в прямом и обратном порядке одинаково (например: казак, шалаш).
Горлатов А.М., Овчарик О.Н.
43
2. Дана строка символов. Если слово в строке является палиндромом, то необходимо занести в новый вектор 7, иначе 0. Палиндром - это слова, которые читаются в прямом и обратном порядке одинаково (например: казак, шалаш).
3. Дана строка из слов. Сколько слов начинается с последней буквы первого слова?
4. Дана строка символов. Найти слово, которое имеет четную длину и начинается с
заданного символа.
5. Дана строка символов. Найти слова, которые имеют нечетную длину, а также
начинаются и заканчиваются одним и тем же символом.
6. Определить количество слов в строке символов между словами максимальной и
минимальной длины.
7. Составить вектор из слов строки символов, в которых ни одна буква не повторяется.
8. Подсчитать количество символов, включая пробелы, между словами с максимальной и минимальной длиной.
9. Дана строка символов. Переставить местами слова с максимальной и минимальной длиной.
VIII.4. Контрольные работы
VIII.4.1. Контрольная работа №1
Диктант
1. Какие способы задания текста вы знаете?
2. Какие операции определены для символьных переменных?
3. Функция определения длины текста.
4. Как вы думаете, в чем сходство способов обработки текстов и обработки массивов?
5. Дайте определение символьной переменной.
VIII.4.2. Контрольная работа №2
Вариант 1
1. Подсчитать длину первого слова в строке.
2. Вводится строка. Определить, сколько слов начинается с той же буквы, с которой начинается первое слово.
Вариант 2
1. Определить, сколько слов в заданной строке начинается на букву "а".
2. Вводится строка. Вывести на экран слова, начинающиеся и заканчивающиеся на
одну и ту же букву.
Вариант 3
1. Какой процент слов в строке начинается на букву " k ".
2. В строке слова разделены пробелами. Сформировать новую строку, где те же
слова разделялись бы двумя пробелами.
VIII.5. Вопросы для самопроверки
1. Опишите способы ввода текста в память компьютера.
2. Какие стандартные функции определены для символьных переменных?
3. Как определить позицию заданного символа (или цепочки символов) в строке?
4. Как получить подстроку, которая начинается с заданной позиции?
5. Как удалить из строки или вставить в нее последовательность символов?
44
Программироваие. Сборник задач.QO.DO.AM
6. Как разделить текст на строки?
7. Как выделить слова из строки? Как выделить последнее слово? Почему этого
нельзя сделать по общему правилу?
8. Как определить, какие символы и как часто встречаются в строке?
9. Как определить, является ли данная буква согласной или гласной?
10.Какие типовые алгоритмы обработки массивов могут быть использованы при
обработке текстов?
(Ответы на все вопросы сопровождать примерами!)
IX. Простейшие алгоритмы обработки
одномерных массивов
Массивом называется совокупность данных, выполняющих аналогичные функции,
и обозначаемая одним именем. Если за каждым элементом массива закреплен только один
его порядковый номер (индекс), то такой массив называется линейным, или одномерным.
массив А(5)
индекс
значение
1
2
3
4
5
4
8
9
5
6
IX.1. Бейсик
Описывать массив DIM A(N) - это значит предоставить N свободных ячеек в памяти
ЭВМ для массива с именем А.
Если описание массива отсутствует, то под одномерный массив выделяется 10 ячеек памяти.
Каждый элемент массива в общем виде описывается как А (I), где
А - имя массива,
I - номер или индекс массива ( 0 < I < N, но практически употребляется 1 < I < N)
A(I) - значение элемента массива.
пример:
Организовать ввод чисел в массив случайным образом, а вывод чисел в
строчку.
10 REM Ввод - вывод элементов массива
20 INPUT "Ввести количество элементов массива"; N
30 DIM A(N)
40 FOR I=1 TO N
50 A(I)=INT(RND(2)*10)
60 PRINT "A("I")="; A(I)
70 NEXT I
80 END
IX.2. Паскаль
<имя массива> : array [<количество элементов>] of <mun переменной>;
Каждый элемент массива в общем виде описывается как А[1], где
А- имя массива,
I - номер или индекс массива (0 < I < N, но практически употребляется 1 < I < N)
Горлатов А.М., Овчарик О.Н.
45
A[I] - значение элемента массива.
пример:
program zadacha ;
{ввод-вывод элементов массива}
var
a:array[1..10] of integer;
i:integer;
begin
for i:=1 to 10 do begin
a[i]:=random(30);
writeln('A(' ,I, ')=' ,a[i])
end;
end.
IX.3. Задачи  уровня
1. Организуйте ввод чисел в массив с клавиатуры, а вывод в столбик.
2. Организуйте ввод чисел в массив случайным образом, а вывод чисел в строчку.
3. Организуйте ввод чисел в массив с помощью операторов READ и DATA, а вывод
в столбик (для языка Бейсик ).
4. Определить количество значений элементов массива, удовлетворяющих условию А(1)<Т.
5. Просуммировать значения элементов массива, удовлетворяющих условию
А(1)>Т.
6. Для массива X(N), в котором есть отрицательные, положительные и нулевые
значения элементов массива, вычислить:
а) среднее арифметическое положительных значений элементов массива;
б) сумму значений элементов, стоящих на четных местах;
в) среднее арифметическое значений элементов массива, удовлетворяющих условию 1 < X,<. 2;
г) количество значений положительных, отрицательных и равных нулю
элементов массива.
IX.4. Задачи  уровня
1. Дан массив А, состоящий из N элементов. Найти сумму всех значений элементов
данного массива.
2. Подсчитать количество четных значений элементов в заданном массиве А(10).
3. В массиве А(20) есть хотя бы одно отрицательное значение элемента:
а) вычислить произведение значений элементов массива до первого отрицательного значения;
б) вычислить сумму значений элементов массива после первого отрицательного
значения.
4. Найти наименьшее значение элемента в массиве и удалить его.
5. В массиве А(10) поменять местами наибольшее и наименьшее по величине значения элементов.
6. Дана линейная таблица, состоящая из N элементов. Найти, на сколько единиц
максимальное значение элемента больше минимального значения элемента
этой таблицы.
46
Программироваие. Сборник задач.QO.DO.AM
7. Дан массив, состоящий из N элементов. Найти все положительные значения
элементов массива, среди положительных значений выбрать наименьшее.
8. Изменить порядок следования значений элементов в массиве на обратное.
10. В заданном одномерном массиве переставить местами значения элементов,
стоящих на четных местах, со значениями элементов, стоящими на нечетных
местах (размерность массива произвольна).
IX.5. Задачи  уровня
1. Дан массив:
а) подсчитать количество квадратов нечетных значений элементов данного массива;
б) подсчитать количество удвоенных нечетных значений элементов данного массива.
2. Дана линейная таблица, состоящая из 20 элементов. Требуется определить, сколько элементов таблицы с номером 1, 2, 4, 8, 16,... имеют значения, меньшие 0.25.
3. Составить программу для вычисления суммы значений элементов массива A(N),
имеющих четные индексы, и произведение значений элементов этого массива,
имеющих нечетные индексы.
4. Осуществить циклическую перестановку значений элементов массива на К элементов влево.
5. Дан массив С(30). Поменять местами значение первого четного элемента массива
со значением последнего нечетного элемента массива.
6. Дан массив А(30). Сформировать новый массив из:
а) четных значений элементов массива 4;
б) отрицательных значений элементов массива А;
в) значений элементов массива А, кратных 5;
г) сумм трех рядом стоящих значений элементов массива А.
7. Дан массив, содержащий К элементов, заполненный датчиком случайных чисел.
Сформировать новый массив из четных значений элементов исходного массива и
найти сумму всех значений элементов этого массива.
8. Дан массив А(К). Сформировать новый массив из положительных значений элементов массива и найти в новом массиве минимальное значение.
9. Дана линейная таблица В(М). Сформировать новую линейную таблицу из значений элементов, кратных 3, исходной таблицы. Найти среднее арифметическое значение в новой таблице и выдать его на печать.
10. В соревнованиях по фигурному катанию N судей выставляют оценки. Наибольшая и наименьшая отбрасываются, а по остальным выставляется средняя. Составить программу, вычисляющую среднюю оценку, и выдайте на печать номера судей, которые поставили наименьшую и наибольшую оценки.
IX.6. Контрольные работы
IX.6.1. Контрольная работа №1
Диктант
1. Какая форма организации данных называется массивом?
2. Для чего нужно описывать массив?
Горлатов А.М., Овчарик О.Н.
47
3. Чем отличается номер элемента массива от его значения?
4. Как организовать вывод линейного массива в строку? В столбец?
5. Как можно ввести значения элементов массива в память?
6. Как подсчитать сумму, количество и произведение значений элементов массива?
7. Как присвоить значения элементам массива датчиком случайных чисел на интервале [-150; 250] ?
IX.6.2. Контрольная работа №2
Вариант 1
1. Для массива X(N) найти наименьший из положительных значений элементов.
2. Дан массив A(N). Требуется умножить значения элементов этого массива на 4,
если А(1) >0, или на 7, если А(1) <=0.
Вариант 2
1. Для массива X(N) найти наибольшее и наименьшее значения элементов и поменять их местами.
2. Дан одномерный массив из N элементов. Сформировать новый массив из значений элементов данного массива, больших 5 и имеющих индексы, кратные 4.
Вариант 3
1. Дан линейный массив, содержащий N элементов и заполненный с клавиатуры.
Найти минимальное значение элемента и приравнять его к единице.
2. Дан массив A(N), заполненный датчиком случайных чисел. Найти минимальное
значение элемента и переместить его в конец массива.
IX.7. Вопросы для самопроверки
1. Что такое массив? Как осуществляется доступ к элементам массива?
2. Для чего нужно описывать массив?
3. Способы заполнения массивов.
4. Типовые алгоритмы обработки массивов:
- суммирования;
- поиск MIN, МАХ;
- умножения;
- включения элемента;
- удаления;
- преобразования;
- обмен местами;
- упорядочения.
X. Простейшие алгоритмы обработки
двумерных массивов
Двумерным называется массив, элемент которого зависит от его местоположения в
строке и в столбце. В общем виде элемент двумерного массива обозначается A(I,J).
где А - имя массива,
I - индекс (номер) строки,
J - индекс (номер) столбца.
массив А(3,5)
48
Программироваие. Сборник задач.QO.DO.AM
индексы
1
2
3
1
4
3
6
2
8
3
7
3
9
5
8
4
5
8
5
5
6
8
4
X.1. Бейсик
DIM A(I,J) - описать матрицу (двумерный массив) это значит предоставить свободные ячейки
в памяти ЭВМ для элементов данной матрицы. В памяти ЭВМ элементы двумерного массива располагаются по строкам, поэтому индекс строки изменяется медленнее, чем индекс столбца.
Прямоугольной называется двумерный массив, в котором количество строк не равно количеству
столбцов.
Квадратной называется двумерный массив, в котором количество строк равно количеству столбцов.
пример: Дана матрица, состоящая из N строк и M столбцов. Ввести значения элементов матрицы с
клавиатуры и вывести значения элементов матрицы на экран в столбик.
10 REM Ввод с клавиатуры, вывод в столбик
20 INPUT "Ввести количество строк и столбцов матрицы"; N, M
30DIM A(N, M)
40 FOR I=1 TO N
50 FOR J=1 TO M
60 INPUT "Ввести значение элемента"; A(I,J)
70 PRINT "A("I","J")="; A(I,J)
80 NEXT J
90 NEXT I
100 END
X.2. Паскаль
Двумерный массив можно задать двумя способами:
I. <имя массива >: array <кол-во строк> of array <кол-во столбцов> of <тип переменной>;
II. <имя массива >: array <кол-во строк>,<кол-во столбцов> оf <тип переменной>.
Соотношение индексов в квадратной матрице
I=J
элементы матрицы расположены на главной диагонали
KJ
элементы матрицы расположены над главной диагональю
I>J
элементы матрицы расположены под главной диагональю
I+J=N+1
элементы матрицы расположены на побочной диагонали
(N - количество строк или столбцов в квадратной матрице)
I+J<N+1
элементы матрицы расположены над побочной диагональю
I+J>N+1
элементы матрицы расположены под побочной диагональю
пример:
program zadacha (input, output);
{ввод с клавиатуры, вывод в столбик}
Горлатов А.М., Овчарик О.Н.
49
var
a:array [1..10, 1..10] of real;
i, j: integer;
begin
for i:=1 to 10 do
for j:=1 to 10 do begin
readln (a[i, j]);
writeln ('a(' , i, ',' , j,')=', a[i, j]
end;
end.
X.3. Задачи  уровня
1. Введите с помощью операторов DATA-READ значения элементов матрицы А(3,4) и выдайте их на экран в виде таблицы (для языка БЕЙСИК).
2. Дана матрица, состоящая из N строк и М столбцов. Ввести значения элементов матрицы с клавиатуры и вывести значения элементов матрицы на экран в столбик.
3. Заполните случайными числами таблицу 5*5.Выведите ее на экран в строчку.
4. Сформировать единичную матрицу. (Единичная матрица -это квадратная числовая таблица, главная диагональ которой состоит из единиц, все остальное - из нулей.)
5. Найти наибольшее значение элементов двумерного массива.
6. Дана квадратная матрица A(N,N). Найти значение максимального элемента на главной
диагонали матрицы.
7. Дана матрица A(N,M). Выдать на печать значения максимальных элементов каждой
строки матрицы.
8. Дан двумерный массив, состоящий из N строк и М столбцов. Подсчитать сумму значений всех элементов этого массива.
9. Дана квадратная матрица A(N,N). Подсчитать сумму значений элементов каждой строки
матрицы.
X.4. Задачи  уровня
1. Дана квадратная матрица A(N,N). Вычислить значения четырех максимальных элементов, расположенных в четырех четвертях между главной и побочной диагоналями
(элементы, стоящие на главной и побочной диагоналях, не учитывать).
2. Дан массив A(N,N). Подсчитать количество положительных значений элементов в
каждой строке матрицы.
3. В двумерном массиве найти суммы значений элементов в каждом столбце и сформировать из них одномерный массив.
4. Найти абсолютное значение разности максимального и минимального значения элементов двумерного массива.
5. Дана матрица A(N,M). Сформировать одномерный массив из четных значений элементов матрицы.
6. Найти наибольшее и наименьшее значение элементов в главной диагонали двумерного
массива (данный двумерный массив является квадратной числовой таблицей).
7. Дана матрица A(2*N, 2*N). Подсчитать сумму значений элементов в каждой четверти
матрицы.
8. Дана матрица C(N,N). Сформировать одномерный массив из:
50
Программироваие. Сборник задач.QO.DO.AM
а) сумм каждого столбца матрицы;
б) минимальных значений элементов каждой строки матрицы;
в) значений элементов матрицы, расположенных на главной диагонали.
9. Дана квадратная матрица 3*3, заполненная с помощью операторов READ-DATA (для
языка БЕЙСИК) или случайными числами (для языка ПАСКАЛЬ). Сформировать одномерный массив из элементов матрицы, расположенных по спирали, начиная с первого элемента матрицы.
10. Дана матрица, состоящая из К строк и М столбцов. Сформировать одномерный массив из минимальных элементов каждой строки матрицы.
11. Дана матрица M*N. Найти среднее геометрическое значение элементов матрицы и
выяснить, каких элементов в матрице больше больших среднего геометрического или
меньших среднего геометрического.
13. Дана действительная матрица 5*4, все элементы различны. В каждой строке выбирается элемент с меньшим значением, затем среди этих чисел выбирается наибольшее.
Указать индекс найденного элемента.
X.5. Задачи  уровня
1. Подсчитать общую стоимость товаров I, II, Ш и высшего сорта, если известны стоимость
единицы товара, его количество и качество, закодированное следующим образом:
W - высший; I - первый; II - второй; III - третий сорт.
Таблица имеет вид:
№
Качество
Стоимость
Количество
10
W
24555
345
20
I
45662
23
30
III
3456
12
...
№
II
...
1156
8
2. Температура измеряется каждые три часа. Определить наивысшую среднесуточную температуру за прошедшую неделю. Для заполнения таблицы температур используйте датчик случайных чисел.
3. В таблицу заносятся результаты выступлений спортсменов в трех попытках. Победитель
определяется по сумме трех попыток. Напечатать лучший результат и номер чемпиона.
4. Создайте таблицу данных "МОЙ КЛАСС". Оценки класса за год по математике и информатике занесите в таблицу данных. Напечатать:
- фамилии неуспевающих учеников по предметам;
- есть ли неуспевающие по данному предмету;
- фамилии отличников;
- общее число неуспевающих.
5. Дан двумерный массив А(10,10). Определить сумму значений элементов, расположенных
по контуру данного массива. (Эту задачу можно решить для матрицы A(N,M).)
6. Дана матрица C(N,M). Сформировать вектор В, элементами которого являются значения
элементов тех строк исходного массива, сумма которых положительна.
Горлатов А.М., Овчарик О.Н.
51
7. Дан массив D(M,N). Обнулить строки и столбцы, в которых есть 0. Можно завести дополнительный одномерный массив.
8. Дана матрица A(N,M). Удалить строку и столбец, на пересечении которых находится
МАХ элемент массива.
X.6. Контрольные работы
X.6.1. Контрольная работа №1
Диктант
1. Как осуществить ввод матрицы по строкам и по столбцам?
2. Какая форма организации данных называется матрицей?
3. Какие типовые алгоритмы обработки массивов вы знаете?
4. Как можно ввести значения элементов матрицы в память?
5. Как элементы матрицы расположены в ЭВМ?
6. Как можно вывести на печать значения элементов матрицы?
X.6.2. Контрольная работа №2
Вариант 1
1. Заполните случайными числами массив 6*6. Выведите на печать четвертую строку
массива.
2. Составить программу вычисления произведения тех значений элементов двумерного
массива, которые больше 10.
Вариант 2
1. Определить, имеется ли в двумерном массиве значение элемента, равное В. Элементы
массива вводятся с клавиатуры.
2. Составить программу вычисления суммы положительных значений элементов двумерного массива.
Вариант 3
1. Сформировать двумерный массив, у которого значения элементов равны 5, если сумма
индексов этого элемента четная, и равны 0, если сумма индексов - нечетная.
2. Составить программу, определяющую, содержится ли в матрице столбец, состоящий из
одинаковых значений элементов.
X.6.3. Контрольная работа №3
1.
1.
1.
52
Вариант 1
Дана квадратная матрица М*М. Найти максимальные значения элементов, расположенных на главной и побочной диагоналях, и выяснить, какой из них больше.
Вариант 2
Дана квадратная матрица К*К, заполненная случайными числами от -50 до 49.
Сформировать одномерный массив из элементов матрицы, стоящих над главной
диагональю. Найти сумму элементов этого массива.
Вариант 3
Дана матрица, состоящая из N строк и М столбцов, заполненная случайными числами. Найти среднее арифметическое значение элементов матрицы и сформировать
одномерный массив из элементов матрицы, больших среднего арифметического
значения. Найти максимальное и минимальное значения элементов нового массива.
Программироваие. Сборник задач.QO.DO.AM
X.7. Вопросы для самопроверки
1. В чем особенности организации программ для обработки массивов произвольных размеров?
2. Алгоритм преобразования:
- матрицы в вектор;
- вектора в матрицу.
3. Способы заполнения матрицы.
4. Типовые алгоритмы обработки массивов:
- суммирования;
- умножения;
- поиск MIN, МАХ;
- удаления;
- включения элемента;
- транспонирования;
- преобразования;
- обмен местами;
- упорядочения.
(Ответы на все вопросы сопровождать примерами!)
XI. Использование подпрограмм и функций
При решении задач часто приходится в различных местах программ выполнять одну и
туже последовательность операторов, причем обычно с разными значениями переменных. В этих
случаях указанную последовательность операторов целесообразно оформить в виде подпрограммы, т. е. записать их один раз и выполнять по мере необходимости.
По отношению к каждой подпрограмме все переменные программы условно разделены
на четыре группы: входные, выходные, внутренние и прочие.
Входные - это переменные, которым присваиваются значения исходных данных, необходимые для решения задачи, реализуемой данной подпрограммой.
Выходные - это переменные, в которых получаются результаты работы подпрограммы, т.
е. через входные и выходные переменные основная программа осуществляет обмен информацией
с подпрограммой.
Внутренние - это переменные подпрограммы. Внутренняя переменная должна обладать
тем свойством, что если везде в данной подпрограмме заменить имя этой переменной на любое
другое, не фигурирующее в основной программе, то работа в целом всей программы не изменится.
Прочие - это все остальные переменные основной программы.
Для того, чтобы составленную подпрограмму можно было использовать в других задачах, к каждой подпрограмме составляется инструкция по ее использованию. В инструкцию, как
правило, включаются следующие пункты:
1. Назначение подпрограммы.
2. Используемый метод.
3. Переменные, используемые подпрограммой (с разделением на входные, выходные и
внутренние).
4. Используемые данной подпрограммой другие подпрограммы и функции.
Горлатов А.М., Овчарик О.Н.
53
5.
6.
Требования к вызывающей программе (какие должны быть описаны массивы, какие
функции и подпрограммы, какие необходимо сделать присвоения пред обращением
к данной подпрограмме).
Возможные изменения подпрограммы.
XI.1. Бейсик
В Бейсике подпрограмма оформляется как группа операторов, которая должна выполняться при обращении к ней, и составляет с программой единое целое.
Обращение к подпрограмме осуществляется оператором
GOSUB N
где N - номер строки, с которой начинается подпрограмма. Последним оператором, выполняемым в подпрограмме, должен быть оператор RETURN.
пример: Составит программу для вычисления числа сочетаний. Вычисление
факториала вычислить в виде подпрограммы.
Cm
n 
n!
m! ( n  m)!
Список используемых переменных.
Исходные данные: N, M - целые неотрицательные числа, N>=M.
Результат: С - число сочетаний из N по M.
Вспомогательные переменные: С1=N!, С2=M!.
Переменные в подпрограмме: L - переменная, факториал которой вычисляется
в подпрограмме, P=L! вычисляется в подпрограмме, I - управляющая переменная цикла.
10 PRINT "Введите N, M"
20 INPUT N, M
30 L= N \ GOSUB 1000 \ C1= P
40 L= M \ GOSUB 1000 \ C1= P
50 L=N-M \ GOSUB 1000
60 C = C1/ (C2*P)
70 PRINT "Число сочетаний из "; N; "по"; M; "="; C
80 STOP
1000 REM подпрограмма вычисления факториала
1010 P=1
1020 FOR I=1 TO L
1030 P=P*I
1040 NEXT I
1050 RETURN
XI.2. Паскаль
Как упоминалось ранее, процедуры и функции, известные как подпрограммы, могут появиться в любом месте до основного тела программы. Для процедур используется следующий
формат:
procedure имя-процедуры(параметры);
54
Программироваие. Сборник задач.QO.DO.AM
label
метки;
const
описания констант;
type
определения типов данных;
var
описания переменных;
procedures и functions;
begin
основное тело процедуры;
end;
Функции имеют такой же формат, что и процедуры за исключением того, что они начинаются с заголовка function и заканчиваются типом данных для возвращаемого значения функции:
function имя_функции(параметры) : тип данных;
Как можно видеть, здесь имеется только два различия от структуры обычной программы:
процедуры и функции начинаются с заголовка procedure или function, а не с заголовка program, и
заканчиваются не точкой, а точкой с запятой. Процедуры и функции могут иметь свои собственные константы, типы данных, переменные и даже собственные процедуры и функции. Но все эти
элементы могут использоваться только в тех процедурах и функциях, в которых они определены.
Ниже приводится вариант программы DORATIO.PAS, в котором используется процедура
для получения двух значений и функция для вычисления коэффициента:
пример:
program DoRatio;
var
A,В: integer;
Ratio: real;
procedure GetData ( var X,Y : integer);
begin
Write(' Введите два числа: ');
Readln (X,V)
end;
function GetRatio ( I,J : integer) : real;
begin
GetRatio := I/J
end;
begin
GetData (A,B);
Ratio := GetRatio (A,B);
Writeln ('Отношение равно', Ratio)
end.
При компиляции и запуске программы первым в теле программы выполняется оператор
GetData (A,B). Этот тип оператора называется вызовом процедуры. При обработке этого вызова
программа выполняет операторы в GetData, заменяя Х и Y (формальные параметры) на A и В
(фактические параметры). Ключевое слово var перед Х и Y в операторе вызова процедуры
GetData указывает, что фактические параметры должны быть переменными и что значения пе55
Горлатов А.М., Овчарик О.Н.
ременных могут быть изменены и переданы обратно вызывающей программе. Поэтому процедуре GetData нельзя передавать литералы, константы, выражения и так далее. При завершении
выполнения GetData управление передается в основное тело программы оператору, следующему
за вызовом GetData.
Этим следующим оператором является вызов функции GetRatio. Отметим здесь некоторые важные различия. Во-первых, GetRatio возвращает значение, которое затем должно быть гденибудь использовано; в данном случае это значение присваивается Ratio. Во-вторых, в основном
теле функции значение присваивается GetRatio. Таким образом функция определяет, какое значение следует возвратить. В-третьих, перед формальными параметрами I и J здесь отсутствует
ключевое слово var. Это означает, что фактические параметры могут быть любыми целочисленными
выражениями, например, Ratio:= GetRatiо(A+В,300) и что, даже если значения формальных параметров в теле функции будут изменены, новые значения не будут переданы обратно
вызывающей программе. Это, кстати, не является различием между процедурами и функциями;
Вы можете использовать оба типа параметров с любым видом подпрограмм.
XI.3. Задачи  уровня
1. Сколькими способами можно отобразить команду в составе 5 человек из 8 кандидатов; из 10 кандидатов? Подсчет количества способов отбора оформит в виде подпрограммы.
2. Футболист ударом ноги посылает мяч вертикально вверх с высоты 1 м с начальной
скоростью 20 м/с. На какой высоте мяч будет через 1с., 3с., 4с?
3. Два спортсмена одновременно начинают движение из одной точки. Первый спортсмен
начинает движение со скоростью 10 км/ч и равномерно за каждый следующий час
увеличивает скорость на 1 км. Второй начинает движение со скоростью 9 км/ч и равномерно за каждый следующий час увеличивает скорость на 1.6 км/ч. Выяснить, какой спортсмен преодолеет больший путь через 1 час, через 4 часа. Вычисление путей
оформить с помощью функций
4. В задаче 3 определить, когда второй спортсмен догонит первого. Решение квадратного
уравнения оформить в виде подпрограммы.
5. Два треугольника заданы своими сторонами a, b и c. Вычислить площади треугольника по формуле Герона и определить, какой треугольник имеет большую площадь.
При решении задачи взять следующие данные: дя первого треугольника a=3, b=4,
c=5; для второго треугольника a=2, b=
37
c= 37 . Вычисление площади треугольника по формуле Герона оформить в виде функции. (
S  p( p  a)( p ,bгде
)( pр-полупериметр).
 c)
XI.4. Задачи  уровня
1.
2.
56
Вычислить приближенно площадь фигуры, ограниченной осью x, прямыми x=1 и x=3
и кривой y=y(x)=1/x+5; разбивая интервал изменения x на 10 частей и суммируя площади десяти прямоугольников с основанием 0.2 и высотой, равной значению функции
в середине каждого интервала. Вычисление y(x) оформить с помощью функции. Вычисление площади оформить в виде подпрограммы.
Даны А(7), В(7), С(7). найти длины этих трех одномерных массивов и определить
наименьший из них. Вычисление длины оформить в виде подпрограммы.
Программироваие. Сборник задач.QO.DO.AM
XI.5. Задачи  уровня
1.
На плоскости заданы координаты пяти точек A, B, C, D, E. Выяснить, какие точки
находятся на максимальном и минимальном расстояниях друг от друга, и вычислить
сумму всех расстояний между точками. Задачу решить для A(1, 1), B(2, 3), C(4, 3), D(5,
6), E(6, 4), A(1, 2), B(2, 4), C(3, 3), D(5, 1), E(5, 5). Вычисление матрицы расстояний
ммежду точками оформить в виде подпрограммы. Поиск максимального расстояния
оформить в виде подпрограммы. Суммирование расстояний оформить в виде
подпрограммы.
XI.6. Контрольные работы
XI.6.1. Контрольная работа №1
Диктант
1. Часть программы, к которой происходит неоднократное обращение?
2. Переменные, которым присваиваются значения исходных данных?
3. Переменные, в которых получаются результаты работы подпрограммы?
4. Остальные переменные основной программы
5. Переменные подпрограммы?
6. Оператор обращения к подпрограмме?
7. Как можно вывести на печать значения элементов матрицы?
XI.6.2. Контрольная работа №2
Вариант 1
1. Два треугольника заданы координатами своих вершин A, D, C. Вычислить площади
треугольников с помощью формулы Герона и определить, какой треугольник имеет
большую площадь. Пир решении задачи использовать следующие данные: для первого треугольника A(1, 1), B(4, 2), C(2, 3.5); для второго треугольника A(1, 2), B(4, 1),
C(3, 3.5). Вычисление длин сторон треугольника и его площади по формуле Герона
оформить в одной подпрограмме.
Вариант 2
1. Два треугольника заданы координатами своих вершин A, D, C. Вычислить площади
треугольников с помощью формулы Герона и определить, какой треугольник имеет
большую площадь. Пир решении задачи использовать следующие данные: для первого треугольника A(1, 1), B(5, 2), C(3, 3); для второго треугольника A(2, 5), B(4, 3),
C(6, 4). Вычисление длин сторон треугольника и его площади по формуле Герона
оформить в одной подпрограмме.
Вариант 3
1. Два треугольника заданы координатами своих вершин A, D, C. Вычислить площади
треугольников с помощью формулы Герона и определить, какой треугольник имеет
большую площадь. Пир решении задачи использовать следующие данные: для первого треугольника A(1, 2), B(6, 3), C(4, 2); для второго треугольника A(2, 1), B(5, 1),
C(4, 1). Вычисление длин сторон треугольника и его площади по формуле Герона
оформить в одной подпрограмме.
XI.6.3. Вопросы для самопроверки
1. В каких случаях целесообразно использовать подпрограммы?
2. Оформление подпрограммы. Обращение к подпрограмме. Операторы описания.
Горлатов А.М., Овчарик О.Н.
57
3. Как осуществляется обмен информацией между основной программой и подпрограммой?
4. Взаимосвязь основной программы и подпрограммы.
5. Цель и содержание инструкции к подпрограммам.
XII. Создание программы в Turbo Паскале
Когда Вы в первый раз входите в Турбо-Паскаль, вы оказываетесь в основном меню. Нажмите клавишу Е для перехода в окно редактирования (или же вы можете использовать клавиши
управления движением курсора для выбора команды Edit, а затем нажмите клавишу "Enter").
Теперь вы находитесь в редакторе, и курсор расположен в верхнем левом углу. Можно начать
набирать следующую программу, нажимая "Enter" в конце каждой строки:
program MyFirst;
var
A,В: integer;
Ratio: real;
begin
Write(' Введите два числа: ');
Readln(A,B);
Ratio:= A / В;
Writeln (' Отношение равно ', Ratio);
Writeln (' Нажмите клавишу <Enter>');
end.
Для передвижения в окне редактирования используйте клавиши управления движением курсора. (Если Вы не знакомы с командами редактирования, где рассмотрены все имеющиеся в вашем распоряжении команды редактирования). Отметим только необходимость точки с запятой в
конце большинства строк и необходимость точки в конце последней строки. В случае, если вы
допустите ошибку, можно использовать клавиши управления движением курсора для перемещения. Для удаления символов можно использовать клавишу "Backspace", а для вставки
просто набирайте новый текст.
XII.1. Запись программы на диск
Для этого, находясь в меню "Файл" (File), выберите команду "Сохранить" (Save). Для выхода из окна редактора нажмите F10 (или Ctrl-D) и вызовите основное меню. Затем нажмите F для
перехода в меню "Файл" и S для выбора команды "Сохранить". По умолчанию вашему файлу
было присвоено имя NONAME.PAS. Теперь
вы
можете
переименовать его, введя
MYFIRST.PAS, а затем нажав клавишу "Enter" (в интерактивной интегрированной среде программирования по умолчанию предполагается использование расширений только вы нажмете F2,
ваша программа будет сохранена на диске как MYFIRST.PAS).
При альтернативном методе записи программы на диск используется оперативная клавиша
команды "Сохранить" (File/Save) F2. Как и при выборе команды "Сохранить", в ответ на F2 вы
получите запрос, следует ли сохранить этот файл с именем NONAME.PAS. И в этом случае введите MVFIRST.РAS в качестве имени файла.
XII.2. Компиляция программы
Для компиляции вашей первой программы возвратитесь в основное меню. Если Вы все еще
находитесь в окне редактирования, то для этого нажмите F10 (или Ctrl-K D). Нажмите [С] для
выбора меню Compile (Компилировать), а затем нажмите С еще раз для вызова команды Compile
из этого меню или же нажмите F9. (Меню Compile имеет несколько средств; см. Главу 7).
58
Программироваие. Сборник задач.QO.DO.AM
Турбо-Паскаль оттранслирует вашу программу, переведя ее с языка Паскаль (который понятен вам) на машинный код 8086 для микропроцессора (который ваш персональный компьютер
может выполнить). Вы не можете видеть машинный код 8086, поскольку он хранится в памяти
(или на диске).
Паскаль, также как и обычный язык (например, английский) имеет определенные синтаксические правила, которые вы должны соблюдать. Однако структура Паскаля не допускает неточностей и синтаксических ошибок. Компилятор всегда должен понимать, что вы имеете в виду.
Если вы используете в операторах неподходящие символы или строите их некорректно, компилятор
Паскаля выводит во время трансляции программы сообщение о синтаксической ошибке.
С момента начала компиляции в середине экрана появляется прямоугольная рамка, в которой указываются сведения о происходящей компиляции. В рамке вспыхивает сообщение о
необходимости нажать клавиши Ctrl-Break, если нужно прервать компиляцию. Если компиляция
завершается успешно, то в рамке вспыхивает сообщение "Success: Press any key" ("Успешно!
Нажмите любую клавишу"). Рамка остается видимой до тех пор, пока вы не нажмете какую-либо
клавишу. Заметили, как быстро все происходило?
Если во время компиляции обнаруживается ошибка, то Турбо-Паскаль прекращает компиляцию, помещает курсор в редакторе в позицию, где содержится ошибка, и распечатывает сообщение об ошибке в верхней части окна редактирования. Нажмите любую клавишу с тем, чтобы
удалить сообщение об ошибке.
(Примечание: нажатие выбранной Вами клавиши используется редактором). Затем исправьте
ошибку, сохраните на диске обновленный файл и оттранслируйте его заново.
XII.3. Что же такое компилятор?
Ваш персональный компьютер PC, как и большинство микрокомпьютеров, имеет процессор,
который представляет собой его рабочий механизм. Процессор имеет набор команд в двоичном
представлении, которые выполняются на всех этих кристаллах. Передавая кристаллу правильный
набор команд, можно добиться, чтобы он вывел текст на экран, выполнил математические операции, переслал текст или данные, нарисовал картинку - словом, сделал все, что может вам потребоваться. Эти команды обычно называют машинным кодом.
Поскольку машинный код содержит чисто двоичную информацию, на нем трудно писать
программы и трудно их читать. Вы можете писать команды на машинном уровне в форме, удобной для чтения, используя ассемблер, то есть вы можете программировать на языке ассемблера.
Однако, при этом вы должны представлять, как работают микропроцессоры. И здесь вы убедитесь, что для выполнения простых операций - например, распечатать число, - часто требуется
большое количество команд.
Если вам нежелательно иметь дело с машинным кодом или языком ассемблера, можно использовать язык высокого уровня, например Паскаль. Программы на Паскале легко читать и писать, поскольку этот язык разработан для людей, а не для машин. Тем не менее персональный
компьютер воспринимает только машинный код. Компилятор Турбо-Паскаля транслирует (или
переводит) программу, написанную на Паскале, в команды, которые могут быть восприняты
компьютером. Компилятор, таким образом, является программой, пересылающей данные: она
считывает текст вашей программы и записывает его на соответствующем машинном коде.
XII.4. Выполнение программы
После устранения всех обнаруженных ошибок возвратитесь в основное меню и для запуска
программы выберете опцию "Выполнить" (Run).
Окно выходных данных увеличится до размера полного экрана, и на экране появится сообщение:
Введите два числа:
Введите два любых целых числа, разделенные пробелом, а затем нажмите "Enter". Появится
следующее сообщение:
59
Горлатов А.М., Овчарик О.Н.
Отношение равно:
вместе с числом, представляющим отношение первого числа ко второму. На следующей
строке будет выведено сообщение "Нажмите клавишу Enter"и программа будет ожидать ввода
клавиши Enter.
При завершении выполнения программы вы вернетесь в окно редактора. Для того, чтобы
просмотреть выведенную программой информацию, выберите "Запуск/Экран пользователя"
(Run/User Screen) или нажмите Alt-F5.
При завершении работы программы нажмите любую клавишу, и управление будет передано
Турбо-Паскалю. Вы окажетесь в том месте, откуда начали. При желании вы можете теперь модифицировать свою программу. Если вы выберете команду Run без внесения каких-либо изменений
в свою программу, то Турбо-Паскаль сразу выполнит ее без повторной компиляции.
При возврате в интерактивную интегрированную среду программирования вы можете
просмотреть выведенную вашей программой информацию, выбрав команду "Выполнение/Экран пользователя" (Run/User Screen). Это можно также сделать, нажав клавиши Аlt-F5.
Повторный выбор переместит вас обратно в среду Турбо-Паскаля.
XII.5. Что такое модуль?
Турбо-Паскаль обеспечивает вам доступ к большому числу встроенных констант, типов
данных, переменных, процедур и функций. Некоторые из них специфичны для Турбо-Паскаля,
другие специфичны для персонального компьютера IBM PC (и совместимых с ним компьютеров) или для операционной системы. Их количество велико, однако в своей программе вы редко
используете их все сразу. Поэтому они разделены на связанные группы, называемые модулями.
В этом случае можно использовать только те модули, которые необходимы в программе.
Программный модуль представляет собой набор констант, типов данных, переменных, процедур и функций. Каждый модуль аналогичен отдельной программе на Паскале, он может иметь
основное тело, которое вызывается перед запуском вашей программы и осуществляет необходимую инициализацию. Короче говоря, модуль представляет собой библиотеку описаний, которую
можно вставить в свою программу и которая позволит разбить программу на части, компилируемые отдельно.
Все описания внутри модуля связаны друг с другом. Например, модуль Crt содержит все
описания, необходимые для подпрограмм работы с экраном на вашей персональном компьютера.
XII.6. Структура модуля
Модуль обеспечивает набор средств благодаря процедурам и функциям при поддержке констант, типов данных и переменных, однако действительная реализация этих средств скрыта в
силу того, что модуль разделен на две секции: интерфейса и реализации. Если программа использует модуль, то все описания модуля становятся доступными этой программе, как если бы
они были определены в ней самой.
Структура модуля аналогична структуре программы, однако есть несколько существенных
различий. Например, рассмотрим модуль:
unit -<идентификатор>;
interface
uses <список модулей>; { Необязательный }
{ открытые описания }
implementation
{ закрытые описания }
{ процедуры и функции }
begin
{ код инициализации }
end.
60
Программироваие. Сборник задач.QO.DO.AM
Заголовок модуля начинается зарезервированным словом unit, за которым следует имя модуля (идентификатор) точно так же, как и в случае имени программы. Следующим элементом в
модуле является ключевое слово interface. Оно обозначает начало интерфейсной секции модуля секции, видимой всем другим модулям или программам, в которых он используется.
Программный модуль может использовать другие модули, для этого они определяются в
предложении uses. Предложение uses, если имеет место, то следует сразу после ключевого слова interface. Отметим, что здесь выполняется общее правило использования предложения uses;
если модуль, имя которого показано в предложении uses, использует другие модули, то имена
этих модулей также должны быть указаны в предложении uses, причем до того, как они будут
использованы.
XII.6.1. Интерфейсная секция
Интерфейсный раздел - "общедоступная" часть в модуле начинается зарезервированным словом interface, следует сразу после заголовка модуля и заканчивается перед зарезервированным
словом implementation. Интерфейс определяет, что является "видимым" для любой программы
(или модуля), использующей данный модуль. Любая программа, использующая этот модуль,
имеет доступ к этим "видимым" элементам.
В интерфейсе модуля можно определять константы, типы данных, переменные, процедуры
и функции. Как и в программе, они могут быть расположены в любом порядке, и секции могут
встречаться повторно (например, type ... var ... <процедуры> ... const ... type
Процедуры и функции, видимые для любой программы, использующей данный модуль,
описываются в секции интерфейса, однако их действительные тела - реализации - находятся в
секции реализации. Если процедура (или функция) является внешней, то в интерфейсе должно
быть указано ключевое слово external, а в секции реализации не нужно повторно указывать описание процедуры. Если процедура (или функция) является директивой inline, то в секции интерфейса будет находиться машинный код (список целочисленных констант).
"Компиляция" (Compile) - клавиши Alt-F9
Этот элемент меню является командой. Выполняется компиляция последнего файла, загруженного в редактор. При этом выводится окно с информацией о компиляции; имя основного
файла, имя компилируемого файла, количество откомпилированных строк, объем доступной памяти и успешно или нет выполнена компиляция программы. Если компиляция прошла успешно, нажмите любу» клавишу. При этом данное информационное окно исчезнет. В случае ошибки вы автоматически переходите в редактор на ошибочную строку.
"Создание" (Make) - клавиша F9
При выборе этого элемента меню вызывается последовательность Make Турбо-Паскаля. Если основному файлу присвоено имя, то компилируется этот файл. В противном случае компилируется последний файл, загруженный в редактор. Турбо-Паскаль проверяет все файлы, от которых
зависит компилируемый файл. Если в исходный файл некоторого модуля были внесены изменения со времени создания файла с расширением .TPU (объектный код), то этот модуль компилируется заново. Если была изменена интерфейсная секция некоторого модуля, то заново транслируются все модули, зависящие от указанного модуля. Если модуль компонуется с объектным
Файлом .OBJ (внешние подпрограммы) и этот объектный файл является более новым, чем файл
с расширением .TPU данного модуля, то этот модуль транслируется заново. Если модуль содержит включаемый Файл (файл типа include) и этот файл является более новым, чем файл с расширением .TPU данного модуля, то этот модуль транслируется заново.
Если исходный код модуля (файл .TPU) найти не удается, то этот модуль не компилируется,
а используется, в неизменном виде.
следующие описания:
procedure Iswap (var VI,V: integer);
function IMax(Vl,V2: integer): integer;
Горлатов А.М., Овчарик О.Н.
61
Секция реализации тогда будет иметь вид:
procedure ISwap; var
Temp:= integer; begin
Temp:= VI; VI:= V2; V2:= Temp end; { конец процедуры Swap }
function IMax(V1,V2: integer) : integer; begin
if VI > V2
then IMax:= VI
else IMax:= V2 end; { конец функции Мах }
Подпрограммы, локальные для секции реализации (то есть не описанные в секции реализации), должны иметь полный, несокращенный заголовок procedure/function.
XII.6.2. Секция инициализации
Обычно вся секция реализации модуля заключена между зарезервированными словами implementation и end. Однако, если перед end поместить зарезервированное слово begin, а между
ними - операторы, то получившийся составной оператор, очень похожий на основное тело программы, становится секцией инициализации модуля.
Секция инициализации представляет собой место, где инициализируются структуры данных
(переменных), которые использует программный модуль или которые он делает доступными
программе, использующей данный модуль. Вы можете использовать эту секцию для открытия
файлов, которые программа использует позже. Например, стандартный модуль Printer использует секцию инициализации для выполнения запросов на открытие (для вывода) текстового
файла Lst, который затем можно использовать в операторах Write и Writeln в вашей программе.
Если программа использует более одного модуля, то секции инициализации всех модулей
вызываются (в порядке, указанном в операторе uses в программе) перед тем, как выполнить основное тело программы.
XII.7. Как используются модули?
Модули, которые использует ваша программа, уже оттранслированы и хранятся, как машинный код; а не как исходный код на Паскале; поскольку они не являются включаемыми файлами (файлами типа Include). Даже интерфейсная секция хранится в специальном двоичном формате
символьной таблицы, используемом в Турбо-Паскале. Более того, определенные стандартные
модули хранятся в специальном файле (TURBO.TPL) и автоматически загружаются в память
вместе с Турбо-Паскалем.
В результате использование одного или нескольких модулей очень незначительно увеличивает время компиляции вашей программы (обычно менее, чем на секунду). Если программные
модули загружаются из отдельного файла на диске, то может потребоваться несколько дополнительных секунд для чтения с диска.
Как указывалось ранее, для использования специального модуля или набора модулей необходимо в начале программы поместить предложение uses, после которого указать список имен тех
модулей, которые будут использоваться; имена должны быть разделены запятыми;
program MyProg;
uses thisUnit,thatUnit,theOtherUnit;
Когда компилятор встречает это предложение uses, он прибавляет информацию из секции
интерфейса каждого модуля к таблице символов и присоединяет машинный код, представленный в секции реализации, к самой программе.
Модули присоединяются к таблице символов в указанном порядке. Этот порядок может
быть существенным, если один модуль использует другой.
Например, если thisUnit использует thatUnit, то предложение uses должно иметь вид:
uses thatUnit, thisUnit, theOtherUnit;
или
62
Программироваие. Сборник задач.QO.DO.AM
uses thatUnit, theOtherUnit, thisUnit;
Короче говоря, в списке модуль должен быть указан после всех тех модулей, которые он использует.
Если в программе не указано предложение uses, Typбо-Паскаль в любом случае присоединит стандартный модуль System. Этот модуль обеспечит выполнение некоторых стандартных
паскалевских подпрограмм, а также нескольких подпрограмм, специфических для ТурбоПаскаля.
XII.7.1. Ссылки на описания модуля
Как только вы включили модуль в свою программу, все константы, типы данных, переменные, процедуры и функции, описанные в секции интерфейса этого модуля, становятся доступными для вашей программы. Например, допустим, что имеется следующий модуль;
unit MyStuff;
interface
const
MyValue = 915;
type
MyStars = (Deneb,Antares,Betelgeuse);
var
MyWord : string [203];
procedure SetMyWord (Star : MyStars);
function TheAnswer : integer;
Та часть модуля, которая находится в интерфейсной секции, является видимой для вашей
программы (и может быть не использована). Благодаря этому можно написать следующую программу:
program TestStuff;
uses MyStuff;
var
I : integer;
AStar : MyStars;
begin
Writeln (myValue) ;
AStar := Deneb;
SetMyMord(AStar) ;
Writeln(MyMord);
I := TheAnswer;
Writeln(I)
end.
После того включения в программу предложения uses вы можете ссылаться навсе идентификаторы, описанные в интерфейсной секции модуля MyStuff (MyWord, MyValue и так далее).
Однако, рассмотрим следующую ситуацию:
program TestStuff;
uses MyStuff;
const
MyValue = 22;
var
I : integer;
AStar : MyStars;
Горлатов А.М., Овчарик О.Н.
63
function TheAnswe : integer;
begin
TheAnswer := 1 end;
begin
Writeln(MyValue) ;
AStar := Deneb;
SetMyMord (AStar);
Writeln(MyWord);
I := TheAnswer;
Writeln(I) end .
В этой программе переопределяются некоторые из идентификаторов, описанные в MyStuff.
Будучи оттранслированной и выполненной, эта программа будет использовать собственные
определения для MyValue и TheAnswer, поскольку они были описаны позже, чем определения в
MyStuff
Вероятно, вам интересно знать, каким образом в такой ситуации можно ссылаться на
идентификаторы в MyStuff. Для этого необходимо перед каждым идентификатором помещать
имя MvStuff с точкой . Например, рассмотрим еще одну версию этой программы:
program TestStuff;
uses MyStuff;
const
MyValue = 22;
var
I : integer;
AStar : MyStars;
function TheAnswer : integer;
begi n
TheAnswer := 1 end;
begin
Writeln(MyStuff.MyValue);
AStar := Deneb;
SetMyWord (AStar);
Writeln (MyWord);
I := MyStuff.TheAnswer
Writeln(I) end.
Эта программа даст такие же ответы, что и первая, даже в том случае, если вы переопределите MyValue и TheAnswer. В действительности вы имели полное право (хотя и довольно сомнительное) написать первую программу следующим
образом:
program TestStuff;
uses MyStuff;
var
I : integer;
AStar : MyStuff.MyStars;
begin
Writeln(MуStuff.MyValue);
AStar := My.Stuff.Deneb;
MyStuff.SetMyWord (AStar);
Writeln(My.Stuff.MyWord);
I := MyStuff.TheAnswer;
64
Программироваие. Сборник задач.QO.DO.AM
Writeln (I) end.
Отметим, что имя модуля может предшествовать любому идентификатору: константе, типу
данных, переменной или подпрограмме.
XII.7.2. Циклические ссылки на модули
В следующей программе показаны два модуля, которые "используют" друг друга. Основная
программа Circular использует модуль с именем Display. Модуль Display содержит в своей интерфейсной секции одну программу WriteXY, которая имеет три параметра: пару координат (х,у)
и сообщение для вывода на экран. WriteXY перемещает курсор в точку (x,у) и выводит там сообщение. В противном случае она вызывает простую программу обработки ошибки.
Пока мы не видим здесь ничего интересного: процедура WriteXY просто используется
вместо процедуры Write. Однако далее, когда программа обработки ошибки будет выводить сообщение на экран, начинаются циклические ссылки (ведь при этом она снова использует
WriteXY). Таким образом, мы имеем процедуру WriteXY, вызывающую процедуру обработки
ошибки SwapError, которая в свою очередь вызывает WriteXY для вывода сообщения на экран.
Если у вас уже от всего этого закружилась голова, не беда. Давайте рассмотрим исходный код в
примере и увидим, что все это не столь уж запутано.
Основная программа Circular очищает экран и выполняет три обращения к процедуре
WriteXY:
program Circular;
{ выводит текст, используя WriteXY }
uses
Crt, Display;
begin
ClrScr;
WriteXY(l, 1, 'Левый верхний угол экрана');
WriteXY(100, 100, 'За пределами экрана');
WriteXY(81 - Lenght ('Снова в экран..'), 15, 'Снова в экран.. ') ;
end.
Взгляните на координаты (х,у) при втором обращении к процедуре WriteXY. В точке с
координатами (100,100) на 80х25-символьном экране вывести текст невозможно. Давайте теперь посмотрим, как работает процедура WriteXY. Далее приведен текст исходного кода модуля
Display, в котором содержится процедура WriteXY. Если координаты (х,у) являются допустимыми, она выводит на экран сообщение. В противном случае она выводит сообщение об
ошибке.
unit Display;
{ содержит простую программу вывода информации на экран }
interface
inpleinentation uses
Crt, Error;
procedure WriteXY(X,Y : integer,
Message : string);
begin
if (X in [1..80] and Y in [1..25] then
begin
goto(X,Y);
Write(Message);
end;
else
ShowError('Неверные координаты в процедуре WriteXY'); end; end.
Горлатов А.М., Овчарик О.Н.
65
Процедура ShowError, вызываемая в процедуре WriteXY, показана в приведенном далее исходном коде модуля Error. Она всегда выводит сообщение об ошибке на 25-й строке экрана,
unit Error;
( содержит простую программу сообщения об ошибке }
interface
procedure ShowError(ErrMsg : string);
inplementation on
uses
Display;
procedure ShowError(ErrMsg : string);
begin
WriteXY(l, 25, 'Ошибка: '+ErrMsg);
end;
end.
Обратите внимание, что предложения uses в секции реализации обоих модулей (Display и Error) ссылаются друг на друга. Эти два модуля могут ссылаться друг на друга в секции реализации благодаря тому, что Турбо-Паскаль может для обеих модулей выполнять полную компиляцию интерфейсных секций. Другими словами, компилятор Турбо-Паскаля воспринимает ссылку
на частично скомпилированный модуль А в секции реализации модуля В, если интерфейсные
секции модуля А и модуля В не зависят друг от друга (и, следовательно, строго соблюдаются
правила Турбо-Паскаля, касающиеся порядка описания).
XII.8. Компиляция модуля
Модуль компилируется точно так же, как компилируется программа: он создается с помощью редактора, а затем вызывается команда Compile/Compile (Компилировать/Компилировать)
(или нажимаются клавишами Alt-C). Однако, вместо файла с расширением .ЕХЕ ТурбоПаскаль создает файл с расширением .TPU (Turbo Pascal Unit - модуль Турбо-Паскаля). После
этого Вы можете оставить этот файл как есть или же вставить его в TURBO.TPL с помощью
TPUMOVER.ЕХЕ.
В любом случае имеет смысл переслать файлы с расширением .TPU (вместе с исходными
файлами) в каталог модулей, который определен с помощью команды 0/D/Unit directories (Каталоги модулей). Таким образом, вы можете ссылаться на эти файлы, не указывая директивы
{$U} (Команда Unit directories (Каталоги модулей) позволяет задавать компилятору несколько
каталогов для поиска файлов модулей).
В одном исходном файле может находиться только один модуль, поскольку компиляция прекращается, как только обнаружен завершающий оператор end.
TURBO.TPL
Файл TURBO.TPL содержит стандартные модули: System, Crt, DOS, Printer, Graph, ТuгbоЗ и
GгарhЗ. Эти модули загружаются в память вместе с Турбо-Паскалем; они всегда доступны для
пользователя. Обычно файл TURBO.TPL хранится в том же каталоге, что и TURBO.EXE (или
ТРС.ЕХЕ). Однако, Вы можете хранить его в любом месте, если, конечно, это "любое место"
определено как каталог Турбо. Это можно определить с помощью программы TINST.EXE, которая инсталлирует каталог Турбо непосредственно в файл TURBO.EXE.
System
Используемые модули: нет
System содержит все стандартные и встроенные процедуры и функции Турбо-Паскаля. Любая подпрограмма Турбо-Паскаля, не являющаяся частью стандартного Паскаля и не находящая66
Программироваие. Сборник задач.QO.DO.AM
ся ни в каком другом модуле, содержится в System. Этот модуль присоединяется ко всем программам.
DOS
Используемые модули: нет
DOS определяет многочисленные паскалевские процедуры и функции, которые эквивалентны наиболее часто используемым вызовам DOS, как, например, GetTime, SetTime, DiskSize и так
далее. Кроме того, он определяет две программы низкого уровня MsDos и Intr, которые позволяют
активизировать любой вызов МS DOS или системное прерывание. Registers представляет собой
тип данных для параметра в МS Dos и Intr. Кроме того, определяются некоторые другие константы и типы данных.
Crt
Используемые модули: нет
Crt обеспечивает набор специфичных для IBM PC описаний констант, переменных и программ для операций ввода/вывода. Последние можно использовать для работы с экраном (задание окон, непосредственное управление курсором, цвет текста и фона). Кроме того, Вы можете
осуществлять "необработанный" ввод с клавиатуры и управлять платой генерации звукового
сигнала персонального компьютера. Этот модуль обеспечивает множество подпрограмм, которые были стандартными в версии 3.0.
Printer
Используемые модули: Crt
В модуле Printer дано описание переменной текстового файла Lst, которая связывается с
драйвером устройства, позволяющим направлять стандартный для Паскаля вывод на печатающее
устройство с помощью Write и Writeln. Например, включив Printer в свою программу, Вы можете
сделать следующее:
Write( Lst, 'Сумма ', A:4, ' и ', В:4, ' равна ' );
С:= А + В;
Writeln( Lst,C:8 );
Graph
Используемые модули: Crt
Graph обеспечивает набор быстродействующих, эффективных графических подпрограмм,
которые позволяют использовать в полной мере графические возможности Вашего персонального компьютера. Этот модуль реализует независимый от устройства графический драйвер фирмы "Борланд", позволяющий поддерживать графические адаптеры типа СGА, ЕGА, Hercules,
ATT 400, МСGА, 3270 PC и VGA.
Graph 3
Используемые модули: Crt
Graph 3 поддерживает полный набор графических подпрограмм для версии 3.0 - для обычной,
расширенной графики и графики, использующей относительные команды. Они идентичны по
имени, параметрам и функции подпрограмм версии 3.0.
TurboЗ
Используемые модули: Crt
Этот модуль содержит две переменные и несколько процедур, которые больше не поддерживаются Турбо-Паскалем. Они включают встроенную файловую переменную Kbd, булевую переменную CBreak и первоначальные целочисленные версии MemAvail и MaxAvail (которые возвращают размер свободной памяти в параграфах, а не в байтах, как это делают настоящие версии).
Graph
Используемые модули: нет
Модуль Graph не встроен в файл TURBO.TPL. Вместо этого он содержится на том же диске,
что и вспомогательные файлы .BGI и .CHR. Поместите файл GRAPH.TPU в текущем каталоге или
используйте для задания маршрута файла GRAPH.TPU полное имя пути доступа.
Горлатов А.М., Овчарик О.Н.
67
В модуле Graph содержится ряд быстрых и мощных графических процедур, позволяющих
вам полностью использовать графические возможности компьютера IBM PC (и совместимых с
ним). Он реализует независимый от устройств, графический драйвер фирмы Борланд, осуществляющий поддержку адаптеров СGА, ЕGА, Hercules, АТ&Т400, МGВА, 3270 PC, VGA и
графики 8514.
XIII. Стандартные процедуры и функции Паскаль
Стандартные процедуры и функции предварительно описываются. Так как записи с их предварительными описаниями действуют точно так же, как если бы они были описаны в окружающем программу модуле, при описании, переопределяющем тот же идентификатор внутри программы конфликта не возникает.
Процедуры управления работой программы
Процедура Exit
- позволяет немедленно выйти из текущего модуля.
Процедура Halt
- останавливает выполнение программы и возвращает выполнение
операционной системе.
Процедура RunError - останавливает выполнение программы и генерирует ошибку времени
выполнения.
функции передачи
Процедуры Pack и Unpack, определенные в стандартном Паскале, в Турбо-Паскале не реализованы.
Chr
- возвращает символ, заданный целым числам.
Ord
- возвращает порядковое число по значению перечислимого типа.
Round
- округляет значение вещественного типа до значения, имеющего длинный целый тип.
Trunc
- усекает значение вещественного типа до значения, имеющего длинный целый тип.
Арифметические функции
Abs
- возвращает абсолютное значение аргумента.
Arctan
- возвращает арктангенс аргумента.
Cos
- возвращает косинус аргумента.
Exp
- возвращает экспоненту аргумента.
Frac
- возвращает дробную часть аргумента.
Int
- возвращает целую часть аргумента.
Ln
- возвращает натуральный логарифм аргумента.
Pi
- возвращает значение числа Pi (3,141592653897932385).
Sin
- возвращает синус аргумента.
Sqr
- возвращает аргумент в квадрате.
Sqrt
- возвращает квадратный корень аргумента.
Процедуры и Функции перечислимого типа
Процедура Dec
- уменьшает значение переменной.
Процедура Inc
- увеличивает значение переменной.
Процедура Odd
- проверяет, является ли аргумент нечетным числом.
Процедура Pred
- возвращает предшествующее значение аргумента.
Процедура Succ
- возвращает его последующее значение.
68
Программироваие. Сборник задач.QO.DO.AM
Строковые процедуры и функции
- выполняет конкатенацию последовательности строк.
- возвращает подстроку строки.
- удаляет из строки подстроку.
- добавляет в строку подстроку.
- возвращает динамическую длину строки.
- производит поиск подстроки в строке.
- преобразует численное значение в его строковое предcтавление.
- преобразует строковое значение в его численное представление.
функции для работы с указателями и адресами
Addr
- возвращает адрес заданного объекта.
CSeg
- возвращает текущее значение регистра CS.
DSeg
- возвращает текущее значение регистра BS.
Ofs
- возвращает смещения для заданного объекта.
Ptr
- преобразует адрес базового сегмента и смещение в значение типа указатель.
Seg
- возвращает сегмент для заданного объекта.
SPtr
- возвращает текущее значение регистра SP.
SSeg
- возвращает текущее значение регистра SS.
Смешанные процедуры и функции
Процедура FillChar
- заполняет заданное число следующих друг за другом битов указанным значением.
Функция Hi
- возвращает старший байт аргумента.
Функция Lo
- возвращает младший байт аргумента.
Процедура Move
- копирует заданное число непрерывных байтов в указанных границах
из одного места в другое, границы которого также указываются.
Функция ParaMCount - возвращает число параметров, переданное программе в командной
строке.
Функция RandoM
- возвращает случайное число.
Процедура PandoMize - инициализирует встроенный генератор случайных чисел случайным
значением.
Функция SizeOff
- возвращает число байтов, заданных аргументом.
Функция Swap
- производит перестановку старших и младших битов
аргумента.
Функция Upcase
- преобразует символ в прописной.
Функция Concat
Функция Copy
Процедура Delete
Процедура Insert
Функция Length
Функция Pos
Процедура Str
Процедура Val
Горлатов А.М., Овчарик О.Н.
69
Введение ............................................................................................................... 1
I. Представление информации. Системы счисления. ................................... 4
I.1. Теоретическое введение. ............................................................................ 4
Задачи  уровня.................................................................................................. 6
I.3. Задачи  уровня. ......................................................................................... 6
I.4. Задачи  уровня. ........................................................................................ 6
I.5. Контрольные работы .................................................................................. 7
I.6. Вопросы для самопроверки. ...................................................................... 7
II. Элементы математической логики ............................................................ 8
II.1. Теоретическое введение............................................................................ 8
II.2. Логические высказывания ........................................................................ 9
II.3. Основные законы математической логики............................................ 10
II.4. Основные понятия математической логики .......................................... 10
II.5. Задачи  уровня ........................................................................................ 11
II.6. Задачи  уровня ....................................................................................... 11
II.7. Задачи  уровня ..................................................................................... 12
II.8. Контрольные работы ............................................................................... 13
II.9. Вопросы для самопроверки .................................................................... 14
III. Алгоритмы и их свойства. Понятие о структурном подходе к
разработке
алгоритмов ................................................................................................ 14
III.1. Теоретическое введение. ....................................................................... 14
III.2. Задачи  уровня ....................................................................................... 16
III.3. Задачи  уровня ..................................................................................... 16
Задачи  уровня ............................................................................................ 17
III.5. Контрольные работы ............................................................................. 17
III.6. Вопросы для самопроверки ................................................................... 18
IV. Введение в алгоритмические языки BASIC и PASCAL ..................... 18
IV.1. Теоретическое введение. ....................................................................... 18
IV.2. Бейсик (BASIC). ..................................................................................... 19
IV.3. Паскаль (PASCAL) ................................................................................ 20
V. Операторы линейной структуры .............................................................. 24
V.1. Бейсик ...................................................................................................... 24
V.2. Паскаль..................................................................................................... 27
V.3. Задачи  уровня ........................................................................................ 28
V.4. Задачи  уровня ...................................................................................... 29
V.5. Задачи  уровня ..................................................................................... 29
V.6. Контрольные работы............................................................................... 29
VI. Условные операторы ................................................................................. 30
VI.1. Бейсик ..................................................................................................... 30
VI.2. Паскаль ................................................................................................... 31
VI.3. Задачи  уровня ...................................................................................... 32
70
Программироваие. Сборник задач.QO.DO.AM
VI.4. Задачи  уровня ..................................................................................... 32
VI.5. Задачи  уровня ................................................................................... 33
VI.6. Контрольные работы ............................................................................. 34
VI.7. Вопросы для самопроверки................................................................... 36
VII. Операторы цикла ...................................................................................... 36
VII.1. Бейсик .................................................................................................... 36
VII.2. Паскаль .................................................................................................. 37
VII.3. Задачи  уровня. .................................................................................... 39
VII.4. Задачи  уровня .................................................................................... 40
VII.5. Задачи  уровня ................................................................................. 40
VII.6. Контрольные работы ............................................................................ 41
VII.7. Вопросы для самопроверки ................................................................. 42
VIII. Операции и стандартные функции для символьных переменных 42
VIII.1. Задачи  уровня. ................................................................................... 43
VIII.2. Задачи  уровня .................................................................................. 43
VIII.3. Задачи  уровня ................................................................................. 43
VIII.4. Контрольные работы ........................................................................... 44
VIII.5. Вопросы для самопроверки ................................................................ 44
IX. Простейшие алгоритмы обработки одномерных массивов ............... 45
IX.1. Бейсик ..................................................................................................... 45
IX.2. Паскаль ................................................................................................... 45
IX.3. Задачи  уровня ...................................................................................... 46
IX.4. Задачи  уровня ..................................................................................... 46
IX.5. Задачи  уровня ................................................................................... 47
IX.6. Контрольные работы ............................................................................. 47
IX.7. Вопросы для самопроверки................................................................... 48
X. Простейшие алгоритмы обработки двумерных массивов................... 48
X.1. Бейсик ...................................................................................................... 49
X.2. Паскаль..................................................................................................... 49
X.3. Задачи  уровня ........................................................................................ 50
X.4. Задачи  уровня ...................................................................................... 50
X.5. Задачи  уровня .................................................................................... 51
X.6. Контрольные работы............................................................................... 52
X.7. Вопросы для самопроверки .................................................................... 53
XI. Использование подпрограмм и функций ............................................... 53
XI.1. Бейсик ..................................................................................................... 54
XI.2. Паскаль ................................................................................................... 54
XI.3. Задачи  уровня ...................................................................................... 56
XI.4. Задачи  уровня ..................................................................................... 56
XI.5. Задачи  уровня .................................................................................... 57
XI.6. Контрольные работы ............................................................................. 57
XII. Создание программы в Turbo Паскале ................................................. 58
Горлатов А.М., Овчарик О.Н.
71
XII.1. Запись программы на диск................................................................... 58
XII.2. Компиляция программы ...................................................................... 58
XII.3. Что же такое компилятор? ................................................................... 59
XII.4. Выполнение программы ...................................................................... 59
XII.5. Что такое модуль? ................................................................................ 60
XII.6. Структура модуля ................................................................................. 60
XII.7. Как используются модули? .................................................................. 62
XII.8. Компиляция модуля ............................................................................. 66
XIII. Стандартные процедуры и функции Паскаль ................................... 68
72
Программироваие. Сборник задач.QO.DO.AM
Related documents
Download