Книга
Книга
Предисловие
Чтобы научиться программировать, нс достаточно прочитать книгу, посвященную языку программирования, надо писать программы, решать конкретные задачи. Но где их можно найти9 В учебниках, как правило, приводятся типовые, стандартные задачи, в основе которых лежит расчет по формулам. Такие задачи, несомненно, полезны, но они не всегда интересны.
В данной книге начинающему программисту предлагаются задачи, которые, с одной стороны ему по плечу, с другой — полезны и занимательны.
Книга состоит из трех частей и приложения.
В первой части собраны задачи. Они сгруппированы по темам и относятся практически ко всем разделам программирования: от объявления переменных и программ с линейной структурой до работы с графикой и файлами.
Во второй части приведены решения, представленные в виде хорошо документированных текстов программ, изучение которых поможет начинающему программисту даже в том случае, если задача решена им самостоятельно.
Третья часть представляет собой справочник по языку программирования Turbo Pascal, содержащий описание большинства процедур и функций.
Если вы имеете компьютер с процессором типа Pentium (Celeron), то используйте Turbo Pascal версии 7.1 Программы, созданные при помощи Turbo Pascal 7.0 и использующие библиотеку ctr, на компьютерах с пооцессором типа Pentium (Celeron) не работают, при их запуске возникает ошибка "деление на ноль".
Еще раз хочется повторить, что научиться программирова гь можно только программируя, т. с. решая конкретные задачи.
Поэтому, чтобы получить максимальную пользу от книги, вы должны работать с ней активно. Решайте задачи. Изучайте приведенные решения. Вводите их в свой компьютер. Не бойтесь экспериментировать — вносите изменения в программы. Чем большую работу вы проделаете самостоятельно, тем большему научитесь.
Как работать с книгой
Группы задач следуют в книге в том порядке, в котором традиционно изучаются соответствующие разделы в курсе программирования. Поэтому перед тем как приступить к решению задач нужно изучить соответствующую тему — прочитать раздел учебника. Если сразу решить задачу не получается, то можно посмотреть ее решение и затем еще раз попытаться решить задачу самостоятельно. Писать программу лучше сначала на бумаге, а уже затем вводить программу в компьютер.
Задача считается решенной, если программа работает так, как сказано в условии задачи.
Оформление решений
Важно, чтобы решенная задача была правильно оформлена, что предполагает использование:
осмысленных имен переменных, констант, функций и процедур;
отступов при записи инструкций;
комментариев.
Правильно оформленную программу легче отлаживать, кроме того, она производит хорошее впечатление.
Приведенные в книге примеры можно рассматривать как образцы оформления решений задач.
ы4- сь ;м ^Уы4- сь ;м ^УЧасть I. ЗадачиЧасть I. Задачи
ы
4- сь ;м ^У
ы
4- сь ;м ^У
Часть I. Задачи
Часть I. Задачи
(И-1М-1ач еб-по- ачу аге,как(И-1М-1ач еб-по- ачу аге,какОбъявление переменных
(И-
1М-
1ач еб-
по- ачу аге,
как
(И-
1М-
1ач еб-
по- ачу аге,
как
Приступая к решению задач этого раздела, следует помнить* что
каждая переменная программы должна быть объявлена;
объявления переменных помещают в раздел, который начинается словом var;
инструкция объявления переменной выгляди'] так: ИмяПеременной:Тип;
в имени переменной можно использовать буквы латинского алфавита и цифры (первым символом должна быть буква);
основными числовыми типами языка Turbo Pascal являются: integer (целый), real (дробный);
чтопро-чтопро-после инструкции объявления переменной рекомендуется указывать назначение переменной.
что
про-
что
про-
L Объявите переменные, необходимые для вычисления значения функции у = X2.
ромеЗраз-ромеЗраз-Объявите переменные, необходимые для пересчета веса из фунтов в килограммы.
роме
Зраз-
роме
Зраз-
Объявите переменные, необходимые для вычисления объема параллелепипеда.
Объявите переменные, необходимые для вычисления плошали круга.
Объявите переменные, необходимые для вычисления площади кольца.
Объявите переменные, необходимые для вычисления объема и площади поверхности цилиндра.
Объявите переменные, необходимые для вычисления стоимости покупки, состоящей из нескольких тетрадей, карандашей и линейки.
Объявите переменные, необходимые для вычисления стоимости покупки, состоящей из нескольких тетрадей и такого же количества обложек.
Инструкция присваивания
Приступая к решению задач этого раздела, следует вспомнить, что:
инструкция присваивания используется для изменения значений переменных, в том числе и для вычислений по формулам;
тип выражения, находящегося в правой части инструкции присваивания, должен соответствовать типу переменной, имя которой стоит слева от символа инструкции присваивания (при нарушении соответствия типа переменной и выражения компилятор выводит сообщение об ошибке Type miss match — несоответствие типов).
Запишите инструкцию, которая присваивает переменной х значение —1,5.
Запишите инструкцию, которая присваивает переменной st*ma нулевое значение.
Запишите инструкцию, которая увеличивает на единицу значение переменной п.
Запишите инструкцию, которая уменьшает на два значение переменной counter.
Запишите инструкцию вычисления среднего арифметического переменных xi и х2.
Запишите в виде инструкции присваивания формулу вычисления значения функции у = —2,7х3 + 0,23х2 — 1,4.
Запишите в виде инструкции присваивания формулу вычис
ления значения функции у =
Запишите в виде инструкции присваивания формулу пересчета веса из фунтов в килограммы (один фунт равен 409,5 г).
Запишите в виде инструкции присваивания формулу пересчета расстояния из километров в версты (одна верста равна 1066,8 м).
Запишите в виде инструкции присваивания формулу вычисления площади прямоугольника.
Запишите в виде инструкции присваивания формулу вычис-
1
ления площади треугольника: 5 = • * А , где a — длина основания треугольника, h — его высота.
Запишите в виде инструкции присваивания формулу вычис-
• h , где а и b — длины осно• h , где а и b — длины осноa + b
• h , где а и b — длины осно
• h , где а и b — длины осно
ления площади трапеции: 5 =
ваний, h — высота трапеции.
Запишите в виде инструкции присваивания формулу вычис
ления плошади круга: s = л ■ г2.
Запишите в виде инструкции присваивания формулы вычисления площади поверхности и объема цилиндра.
5 = 2 - л • г(А + г)
v = u- г" - h
Запишите в виде инструкции присваивания формулу вычисления объема параллелепипеда.
Запишите в виде инструкции присваивания формулы вычисления объема и плошади поверхности шара.
J з у = - . л • гJ з у = - . л • г45 = 4 • л • г245 = 4 • л • г2
J з у = - . л • г
J з у = - . л • г
4
5 = 4 • л • г2
4
5 = 4 • л • г2
Запишите в виде инструкции присваивания формулу вычисления объема цилиндра.
Запишите в виде инструкции присваивания формулу вычисления объема полого цилиндра.
/] — радиус цилиндра/] — радиус цилиндра?2 — радиус отверстия?2 — радиус отверстияh — высота цилиндраh — высота цилиндра
/] — радиус цилиндра
/] — радиус цилиндра
?2 — радиус отверстия
?2 — радиус отверстия
h — высота цилиндра
h — высота цилиндра
Запишите в виде инструкции присваивания формулу вычисления объема конуса.
Запишите в виде инструкции присваивания формулу вычисления объема цилиндра.
Запишите в виде инструкции присваивания формулу вычисления тока по известным значениям напряжения и сопротивления электрической цепи.
Запишите в виде инструкции присваивания формулу вычисления сопротивления электрической цепи по известным значениям напряжения и силы тока.
Запишите в виде инструкции присваивания формулу вычисления сопротивления электрической цепи, состоящей из трех последовательно соединенных резисторов.
Запишите в виде инструкции присваивания формулу вычисления сопротивления электрической цепи, состоящей из двух
П - г2 параллельно соединенных резисторов: г = ——— .
Л + ^2
Запишите в виде инструкции присваивания формулу пересчета сопротивления электрической цепи из омов в килоомы
Запишите в виде инструкции присваивания формулу вычисления стоимости покупки нескольких тетрадей, карандашей и линейки.
Запишите в виде инструкции присваивания формулу вычисления стоимости покупки некоторого количества (по весу) помидоров, огурцов и яблок.
Вывод
Приступая к решению задач этого раздела, следует вспомнить, что:
инструкции write и writelr предназначены для вывода на экран монитора сообщений и значений переменных;
одна инструкция write (writein) может вывести на экран значения нескольких переменных и (или) несколько сообщений;
инструкция writein без параметров переводит курсор в начало следующей строки экрана.
Написать программу, которая выводит на экран имя и фамилию.
Написать программу, которая выводит на экран сообщение Turbo Pascal 7.0.
Написать программу, которая выводит на экран четверо
стишие:
Унылая пора! Очей очарованье!
Приятна мне твоя прощальная краса - Люблю я пышное природы увяданье, В багрец и золото одетые леса.
А. С. Пушкин
Написать инструкцию вывода значения переменной а (тип real) с тремя цифрами в дробной части.
Определите, ч го делают инструкции:
write(а);
write(’а’);
Написать инструкцию, которая выводит значения дробных переменных а, ь и с в одной строке. Каждое число должно быть выведено с двумя знаками после десятичной точки:
writein(а:6:2,' ',b:6:2,' ',с:6:2);
Написать инструкции вывода значений переменных а, ь и с. Значение каждой переменной должно быть выведено на отдельной строке.
Написать инструкции вывода значений дробных переменных х1 и х2. На экране перед значением переменной должен быть выведен поясняющий текст, представляющий собой имя переменной, за которым следует знак ‘равно".
Факультатив
Стандартная библиотека ert содержит процедуры, используя которые, можно задать цвет фона и цвет символов, выводимых инструкциями write И write] п.
Приступая к решению задач этого раздела, следует вспомнить, что:
для того, чтобы программе были доступны процедуры и функции библиотеки Crt, первой инструкцией программы должна быть инструкция uses ctr;
цвет символов устанавливает процедура TextBackGround,
цвет фона устанавливает процедура Text Color;
при использовании процедур TextBackGround И TextColor Цвет можно задать с помощью именованной или целой константы;
процедура CirScr очищает экран;
в текст программы нужно включить директиву uses crt, чтобы МОЖНО было использовать процедуры CirScr, TextBackGround И TextColor.
Написать программу, которая выводит на синем фоне серыми буквами четверостишие:
Буря мглою небо кроет, Вихри снежные крутя. То как зверь она завоет. То заплачет, как дитя.
А. С. Пушкин
Написать программу, которая выводит на экран фразу. Каждый охотник желает знать, где сидят фазаны, позволяющую за помнить порядок следования цветов радуги (первая буква слова кодирует цвет: каждый — красный, охотник — оранжевый, желает — желтый, знать — зеленый, где — голубой, сидят — синий, фазаны — фиолетовый). Каждое слово фразы должно быть выведено наиболее подходящим цветом
Ввод
Приступая к решению задач этого раздела, следует вспомнить, что:
для ввода с клавиатуры во время работ ы программы исходных данных (значений переменных) предназначена инструкция readin;
используя одну инструкцию readin, можно ввести значения нескольких переменных;
тип данных, вводимых во время работы программы, должен соответствовать типу переменной, указанной в инструкции readin;
в случае несоответствия типа введенных данных типу переменной, значение которой вводится с клавиатуры, программа завершает работу и на экран выводится сообщение Error 106: invalid numeric format (если программа запущена из среды разработки, т. е. из Turbo Pascal) или Run time error Юб (если программа запущена из операционной системы).
Написать инструкцию, обеспечивающую во время работы программы ввод значения переменной radius.
Написать инструкции, которые обеспечивают ввод значений переменных и и г. Предполагается, что во время работы программы пользователь будет после набора каждого числа нажимать клавишу <Enter>.
Написать инструкцию, которая обеспечивает ввод значений переменных и и г. Предполагается, что во время работы программы пользователь будет набирать числа в одной строке.
Объявите необходимые переменные и напишите фрагмент программы вычисления объема цилиндра, обеспечивающий ввод исходных данных.
Объявите необходимые переменные и напишите инструкции ввода исходных данных для программы вычисления стоимости покупки нескольких тетрадей и карандашей. Предполагается, что во время работы программы пользователь будет вводить данные о каждой составляющей покупки в отдельной строке- сначала пену, затем количество.
Программы с линейной структурой
Приступая к решению задач этого раздела, следует вспомнить, что:
программы с линейной структурой являются простейшими и используются, как правило, для реализации обычных вычислений по формулам;
в программах с линейной структурой инструкции выполняются последовательно, одна за другой;
алгоритм программы с линейной структурой может быть представлен следующим образом:
Обработка (вычисления)Обработка (вычисления)С клавиатурыС клавиатурыНа экран монитораНа экран монитора
Обработка (вычисления)
Обработка (вычисления)
С клавиатуры
С клавиатуры
На экран монитора
На экран монитора
5L Написать программу вычисления площади параллелограмма. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом).
Вычисление площади параллелограмма.
Введите исходные данные:
Длина (см) —> 9
Ширина (см) —> 7.5
Площадь параллелограмма: 67.50 кв.см.
Написать программу вычисления объема параллелепипеда. Ниже представлен рекомендуемый вил экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом).
Вычисление объема параллелепипеда. Введите исходные данные:
Длинна (см) —> 9
Ширина (см) —> 7.5
ИНСТит ЭКОНОМИКИ и информ №и < БИБЛИОТЕКА 'ИНСТит ЭКОНОМИКИ и информ №и < БИБЛИОТЕКА 'Высота (см) —> 5
ИНСТит ЭКОНОМИКИ и информ №и < БИБЛИОТЕКА '
ИНСТит ЭКОНОМИКИ и информ №и < БИБЛИОТЕКА '
Объем: 337.50 куб.см.
Написать программу вычисления площади поверхности параллелепипеда. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом).
Вычисление площади поверхности параллелепипеда.
Введите исходные данные:
Длина (см) > 9
Ширина (см) —> 7.5
Высота (см) —> 5
Площадь поверхности: 90.00 кв.см.
Написать программу вычисления объема куба. Ниже представлен рекомендуемый вид экрана во время работ ы программы (данные, введенные пользователем, выделены полужирным шрифтом).
Вычисление объема куба.
Введите длину ребра (см) и нажмите <Enter> -> 9.5
Объем куба: 857.38 куб.см.
Написать профамму вычисления объема цилиндра Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом).
Вычисление объема цилиндра Введите исходные данные: Радиус основания (см) > 5 Высота цилиндра (см) —> 10 Объем цилиндра 1570.80 куб. см. Для завершения работы программы нажмите <Enter>.
Написать профамму вычисления стоимости покупки, состоящей из нескольких тетрадей и карандашей Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом).
Вычисление стоимости покупки.
Введите исходные данные:
Цена тетради (руб.) —> 2.75
Количество тетрадей —> 5
Цена карандаша (руб.) —> 0.85
Количество карандашей —> 2
Стоимость покупки: 15.45 руб.
Написать программу вычисления стоимости покупки, состоящей из нескольких тетрадей и такого же количества обложек к ним. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом).
Вычисление стоимости покупки.
Введите исходные данные:
Цена тетради (руб.) —> 2.75
Цена обложки (руб.) —> 0.5 Количество комплектов (шт.) —> 7
Стоимость покупки: 22.75 руб.
Написать программу вычисления стоимости некоторого количества (по весу) яблок. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом).
Вычисление стоимости покупки.
Введите исходные данные:
Цена одного килограмма яблок (руб.) —> 8.5
Вес яблок (кг) —> 2.3
Стоимость покупки: 19.55 руб.
Написать программу вычисления площади треугольника, если известна длина основания и высота. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом).
Вычисление площади треугольника.
Введите исходные данные:
Основание (см) —> 8.5
Высота (см) —> 10
Площадь треугольника 42.50 кв.см.
Написать программу вычисления плошали треугольника, если известны длины двух его сторон и величина угла между этими сторонами. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом).
Вычисление площади треугольника.
Введите (через пробел) длины двух сторон (см) треугольника
-> 25 17
Введите величину угла между сторонами треугольника
-> 30
Площадь треугольника: 106.25 кв.см.
Написать программу вычисления сопротивления электрической цепи, состоящей из двух параллельно соединенных сопротивлений. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом).
Вычисление сопротивления электрической цепи при параллельном соединении элементов.
Введите исходные данные:
Величина первого сопротивления (Ом) —> 15
Величина второго сопротивления (Ом)—> 20
Сопротивление цепи: 8.57 Ом.
Написать программу вычисления сопротивления электрической цепи, состоящей из двух последовательно соединенных сопротивлений. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом).
Вычисление сопротивления электрической цепи.1
Введите исходные данные: Величина первого сопротивления (Ом) —> 151
Величина второго сопротивления (Ом)—> 27.3
Сопротивление цепи (последовательное соединение): 42.30 См.
I
Написать программу вычисления силы тока в электрической 1 цепи. Ниже представлен рекомендуемый вид экрана во время 1 работы программы (данные, введенные пользователем, выделе- г ны полужирным шрифтом).Е
Вычисление силы тока в электрической цепи.
Введите исходные данные:
Напряжение (вольт) —> 36 Сопротивление (Ом) —> 1500
Сила, тока: 0.024 Ампер.
Написать программу вычисления расстояния между населенными пунктами, изображенными на карте. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом).
Вычисление расстояния между населенными пунктами.
Введите исходные данные:
Масштаб карты (количество километров в одном сантиметре) —> 120 Расстояние между точками, изображающими населенные пункты (см) — > 3.5
Расстояние между населенными пунктами 420 км.
Написать программу вычисления стоимости поездки на автомобиле на дачу (туда и обратно). Исходными данными являются: расстояние до дачи (в километрах); количество бензина, которое потребляет автомобиль на 100 км пробега; цена одного литра бензина. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом).
Вычисление стоимости поездки на дачу и обратно.
Расстояние до дачи (км) —> 67
Расход бензина (литров на ]ОС км пробега) —> 8.5
Иена литра бензина (руб.) —> 6.5
Поездка на дачу и обратно обойдется в 74.04 руб.
Написать программу вычисления объема цилиндра. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом)
Вычисление объема цилиндра.
Введите исходные данные:
Радиус основания (см) —> 5.5
Высота цилиндра (см) —> 7
Объем цилиндра: 665.23 куб. см.
Написать программу вычисления площади поверхности цилиндра. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом).
Вычисление площади поверхности цилиндра.
Введите исходные данные:
Радиус основания (см) —> 5.5
Высота цилиндра (см) —> 7
Площадь поверхности цилиндра: 431.97 кв.см.
Написать программу вычисления объема параллелепипеда. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом).
Вычисление объема параллелепипеда.<
Введите в одной строке длину, ширину и высоту параллелепипеда (в сантиметрах).
Числа разделяйте пробелами. После ввода последнего числа нажмите <Enter>.
-> 7.5 2.5 31
1
Объем параллелепипеда 56.25 куб. см.Г
Е
Написать программу пересчета расстояния из верст в кило- у метры (I верста равняется 1066,8 м). Ниже представлен рекомендуемый вид экрана во время работы программы (данные, 1 введенные пользователем, выделены полужирным шрифтом).
7 Пересчет расстояния из верст в километры.
Введите расстояние в верстах и нажмите <Enter>.
-> 1001
100 верст (а/ы) - это 106.68 км.
В]
Написать программу пересчета веса из фунтов в килограммы (1 российский фунт равен 409,5 г). Ниже представлен рекомен- 2^
дуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом).
Пересчет *веса из фунтов в килограммы. Введите вес в фунтах и нажмите <Enter> -> 5 5 фунт(а/ов) - это 2.05 кг.
Написать программу вычисления величины дохода по вкладу. Процентная ставка (в процентах годовых) и время хранения (в днях) задаются во время работы программы Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом).
Вычисление дохода по вкладу.
Введите исходные данные:
Величина вклада (руб.) —> 2500
Срок вклада (дней) —> 30
Процентная ставка (годовых) —> 20
Доход: 41.10 руб.
Сумма по окончании срока вклада: 2541.10 руб.
Написать программу пересчета величины временного интервала, заданного в минутах, в величину, выраженную в часах и минутах. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом).
Введите величину временного интервала (в минутах) и нажмите <Enter>
-> 150
150 минут это 2 ч. 30 мин.
Написать программу, которая преобразует введенное с кла виатуры дробное число в денежный формат. Например, число 125 должно быть преобразовано к виду 12 руб. 50 коп
Преобразование числа в денежный формат.
Введите дробное число —> 23.6
23.6 руб. — это 23 руб. 60 коп.
Написать программу пересчета веса из фунтов в килограммы (1 фунт равняется 409,5 г). Ниже представлен рекомендуемый вил экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом).
Пересчет веса из фунтов в килограммы. Введите вес в фунтах и нажмите <Enter>. -> 3.5
3.5 фунт(а/ов) — это 1 кг 420 г.
Написать программу, которая вычисляет площадь треугольника, если известны координаты его углов. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом).
Вычисление площади треугольника. Введите координаты углов (числа разделяйте пробелом): xl,yl —> -2 5 х2,у2 -> 1 7 хЗ,уЗ — > 5 —3
Площадь треугольника: 23.56 кв.см.
Выбор
If
Приступая к решению задач этого раздела, следует вспомнить, что:
инструкция if используется для выбора одного из двух направлений дальнейшего хода программы (последовательности инструкций, которые должны быть выполнены);
выбор последовательности инструкций осуществляется во время выполнения программы в зависимости от выполнения условия*,
условие — это выражение логического i ипа, которое может принимать одно из двух значений: true (истина — условие выполняется) или false (ложь — условие не выполняется);
при помощи логических операций And (логическое "И”) и or (логическое "Или") из простых условий можно строить сложные.
Написать программу, которая вычисляет частное от деления двух чисел. Программа должна проверять правильность введенных пользователем данных и, если они неверные (делитель равен нулю), выдавать сообщение об ошибке. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом).
Вычисление частного»
Введите в одной строке делимое и делитель, затем нажмите <Enter>
-> 12 О
Вы ошиблись. Делитель не должен быть равен нулю.
Написать программу вычисления площади кольца. Программа должна проверять правильность исходных данных. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом).
Вычисление площади кольца.
Введите исходные данные:
Радиус кольца (см) —> 3.5
Радиус отверстия (см) — > 7
Ошибка! Радиус отверстия не может быть больше радиуса кольца.
Написать программу вычисления сопротивления электрической цепи, состоящей из двух сопротивлений. Сопротивления могут быть соединены последовательно или параллельно. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом).
Вычисление сопротивления электрической цепи.
Введите исходные данные:
Величина первого сопротивления (Ом) —> 15
Величина второго сопротивления (Ом) —> 27.3
Тип соединения (1 - последовательное, 2 - параллельное) —> 2
Сопротивление цепи: 9.68 Ом.
А 1 2 3В]Bf А}8; пп< II пр Ж1А 1 2 3В]Bf А}8; пп< II пр Ж1
А 1 2 3
В]
Bf А}
8; п
п< II пр Ж1
А 1 2 3
В]
Bf А}
8; п
п< II пр Ж1
Написать программу решения квадратного уравнения. Программа должна проверять правильность исходных данных и в случае, когда коэффициент при второй степени неизвестного равен нулю, выводить соответствующее сообщение. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом).
* Решение квадратного уравнения *
Введите в одной строке значения коэффициентов и нажмите <Enter>
-> 12 27 -10
Корни уравнения:I
х1= -25.551I
х2=—28.449I
Написать программу вычисления стоимости покупки с уче- том скидки. Скидка в 10% предоставляется, если сумма покупки больше 1000 руб. Ниже представлен рекомендуемый вил экрана г во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом).J
Вычисление стоимости покупки с учетом скидки.
Введите сумму покупки и нажмите <Enter>3
-> 1200I
Вам предоставляется скидка 10%О
Сумма покупки с учетом скидки: 1080.00 руб.X
Написать программу вычисления стоимости покупки с учетом скидки. Скидка в 3% предоставляется в том случае, если сумма покупки больше 500 руб., в 5% — если сумма больше 1000 руб. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом).
Вычисление стоимости покупки: с учетом скидки.
Введите сумму покупки и нажмите <Enter>
-> 640
Вам предоставляется скидка 3%
Сумма покупки с учетом скидки: 620.80 руб.
Написать профамму проверки знания даты основания Санкт- Петербурга. В случае неверного ответа пользователя профамма должна выводить правильный ответ. Ниже представлен реко-
мендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом)
В каком году был основан Санкт-Петербург?
Введите число и нажмите <Enter>
-> 1705
Вы ошиблись, Санкт-Петербург был основан в 1703 году.
Написать программу проверки знания даты начала второй мировой войны. В случае неверного ответа пользователя программа должна выводить правильный ответ. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом).
В каком году началась вторая мировая война? Введите число и нажмите <Enter> -> 1939 Правильно.
Написать программу проверки знания истории архитектуры. Программа должна вывести вопрос и три варианта ответа. Пользователь должен выбрать правильный ответ и ввести его номер. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом).
Архитектор Исаакиевского собора:
Доменико Трезини
Огюст Монферран
Карл Росси
Введите номер правильного ответа и нажмите <Enter> -> 2
Вы ошиблись.
Архитектор Исаакиевского собора — Огюст Монферран.
।
Написать программу проверки знания истории архитектуры. Программа должна вывести вопрос и три варианта ответа, а пользователь — выбрать правильный ответ и ввести его номер. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом).
Невский проспект получил свое название:
По имени реки, на берегах которой расположен Санкт-Петербург
По имени близко расположенного монастыря Александро-Невской лавры
В память о знаменитом полководце Александре Невском
Введите номер правильного ответа и нажмите <Enter>
-> 2
Вы ошиблись.
Правильный ответ: 2.
Написать программу, которая сравнивает два числа, введенных с клавиатуры. Программа должна указать, какое число больше, или, если числа равны, вывести соответствующее сообщение. Ниже представлен рекомендуемый вид экрана во время работы программы.
Введите в одной строке два целых числа и нажмите <Enter>.
-> 34 67
34 меньше 67.
Написать программу, которая выводит пример на умножение двух однозначных чисел, запрашивает ответ пользователя, проверяет его и выводит сообщение ' Правильно!" или "Вы ошиблись" и правильный результат. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом).
Сколько будет 6x7?
Введите ответ и нажмите <Enter>
-> 56
Вы ошиблись. 6x7=42.
Написать программу, которая выводит пример на вычи гание (в пределах 100), запрашивает ответ пользователя, проверяет его и выводит сообщение "Правильно! ‘ или "Вы ошиблись' и правильный результат. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом).
Сколько будет 83-37?
Введите ответ и нажмите <Enter>
-> 67
Вы ошиблись. 83-17=66.
Написать программу, которая проверяет, является ли четным введенное пользователем целое число. Ниже представлен рекомендуемый вид экрана программы во время ее работы (данные, введенные пользователем, выделены полужирным шрифтом)
Введите целое число и нажмите <Enter>
-> 23
Число 23 — нечетное.
Написать программу, которая проверяет, делится ли на три целое число, введенное с клавиатуры. Ниже представлен рекомендуемый вид экрана программы во время ее работы (данные, введенные пользователем, выделены полужирным шрифтом).
Введите целое число и нажмите <Enter>
-> 451
Число 451 нацело на три не делится.
Написать программу определения стоимости разговора по телефону с учетом скидки 20%, предоставляемой по субботам и воскресеньям. Ниже представлен рекомендуемый вид экрана программы во время се работы (данные, введенные пользователем, выделены полужирным шрифтом).
Вычисление стоимости разговора по телефону.
Введите исходные данные:
Длительность разговора (целое количество минут) —> 3
День недели (1 — понедельник, . . . 7 — воскресенье) —> 6 Предоставляется скидка 20%.
Стоимость разговора: 5.52 руб.
Написагь программу, которая вычисляет оптимальный вес пользователя, сравнивает его с реальным и выдает рекомендацию о необходимости поправиться или похудеть. Оптимальный вес вычисляется по формуле: рост (в сантиметрах)-100. Рекомендуемый вид экрана во время работы программы приведен ниже (данные, введенные пользователем, выделены полужирным шрифтом).
Введите в одной строке через пробел рост (см) и вес (кг) затем нажмите <Enter> -> 170 68
Вам надо поправиться на 2.00 кг.
jI1jI1Case
j
I
1
j
I
1
Приступая к решению задач этого раздела, следует вспомнить, что:
инструкция Сазе используется для выбора одного из нескольких направлений дальнейшего хода программы (последовательности инструкций, которые должны быть выполнены);
9< 41 HJ1297 чь нь ме98 дн бо' по.9< 41 HJ1297 чь нь ме98 дн бо' по.выбор последовательности инструкций осуществляется во время выполнения программы в зависимости от равенства значения переменной-селектора константе, указанной перед группой инструкций;
9< 41 HJ
12
97 чь нь ме
98 дн бо' по.
9< 41 HJ
12
97 чь нь ме
98 дн бо' по.
в качестве переменной-селектора можно использовать переменную целого (integer) или символьного (char) типа.
Написать программу, которая запрашивает у пользователя номер месяца и выводит соответствующее название времени года. В случае, если пользователь укажет недопустимое числе, программа должна вывести сообщение “Ошибка ввода данных”. Ниже представлен рекомендуемый вид экрана во время работы программы.
Введите номер месяца (число от 1 до 12) и нажмите <Enter>
-> 11
Зима.
Вве Пос С н ЗавВве Пос С н ЗавНаписать программу, которая запрашивает у пользователя номер дня недели и выводит одно из сообщений: “Рабочий день", "Суббота" или "Воскресенье".
Вве Пос С н Зав
Вве Пос С н Зав
FoПрг что:FoПрг что:Написать программу, вычисляющую стоимость междугороднего телефонного разговора (цена одной минуты определяется расстоянием до города, в котором находится абонент). Исходными данными для программы являются код города и продолжительность разговора. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, и коды некоторых городов выделены полужирным шрифтом).
Fo
Прг что:
Fo
Прг что:
• ис ч• ис чВычисление стоимости разговора по телефону.
• и
с ч
• и
с ч
Введите исходные данные:
Код города -> 812
шть,:оль-юло- <ы);я во чства терелпере-ателя и го- исло, ных". 1ботышть,:оль-юло- <ы);я во чства терелпере-ателя и го- исло, ных". 1ботыГородКодЦена минуты, руб.Владивосток4232,2Москва0951/0Мурманск8151,2Самара8461,4ГородКодЦена минуты, руб.Владивосток4232,2Москва0951/0Мурманск8151,2Самара8461,4Длительность (целое количество минут)—> 3Город: ВладивостокЦена минуты: 2.20 руб.Стоимость разговора: 6.60 руб.Длительность (целое количество минут)—> 3Город: ВладивостокЦена минуты: 2.20 руб.Стоимость разговора: 6.60 руб.ютеля бочийюрод- 1яется 1сход- ЮДОЛ-й вид ользо- фНЫМютеля бочийюрод- 1яется 1сход- ЮДОЛ-й вид ользо- фНЫМ96 Написать программу, которая после введенного с клавиатуры числа (в диапазоне от 1 до 999), обозначающего денежную единицу, дописывает слово "рубль" в правильной форме. Например, 12 рублей, 21 рубль и т. д.
шть,
:оль-
юло- <ы);
я во чства терел
пере-
ателя и го- исло, ных". 1боты
шть,
:оль-
юло- <ы);
я во чства терел
пере-
ателя и го- исло, ных". 1боты
Город
Код
Цена минуты, руб.
Владивосток
423
2,2
Москва
095
1/0
Мурманск
815
1,2
Самара
846
1,4
Город
Код
Цена минуты, руб.
Владивосток
423
2,2
Москва
095
1/0
Мурманск
815
1,2
Самара
846
1,4
Длительность (целое количество минут)—> 3
Город: Владивосток
Цена минуты: 2.20 руб.
Стоимость разговора: 6.60 руб.
Длительность (целое количество минут)—> 3
Город: Владивосток
Цена минуты: 2.20 руб.
Стоимость разговора: 6.60 руб.
ютеля бочий
юрод- 1яется 1сход- ЮДОЛ-
й вид ользо- фНЫМ
ютеля бочий
юрод- 1яется 1сход- ЮДОЛ-
й вид ользо- фНЫМ
Написать программу, которая после введенного с клавиатуры числа (в диапазоне от 1 до 99), обозначающею денежную единицу, дописывает слово "копейка” в правильной форме. Например, 5 копеек, 41 копейка и т. д.
Написать программу, которая вычисляет дату следующего дня. Ниже представлен рекомендуемый вид экрана во время работы программы, (данные, введенные пользователем, выделены полужирным шрифтом).
Введите цифрами сегодняшнюю дату (число месяц год) —> 31 12 1999. Последний день месяца!
С наступающим новым годом!
Завтра 1.1.2000.
Циклы
For
Приступая к решению задач этого раздела, следует вспомнить, что:
инструкция for используется для организации циклов с фиксированным, определяемым во время разработки программы, числом повторений;
количество повторений цикла определяется начальным и конечным значениями переменной-счетчика;
переменная-счетчик должна быть целого типа (integer).
Написать программу, которая 10 раз выводит на экран имя и фамилию.
Написать программу, которая выводит таблицу квадратов первых десяти целых положительных чисел. Ниже представлен рекомендуемый вид экрана во время работы программы.
Таблица квадратов
Число Квадрат
12345678910123456789101
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
4
9
16
25
36
49
64
81
100
Написать программу, которая выводит таблицу квадратов первых пяти целых положительных нечетных чисел. Ниже представлен рекомендуемый вид экрана во время работы программы.
Таблица квадратов нечетных чисел
Число Квадрат
13579135791
1
3
5
7
9
1
3
5
7
9
9
25
49
81
Написать программу, которая вычисляет сумму первых п целых положительных целых чисел. Количество суммируемых
чисел должно вводиться во время работы программы. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом).
Вычисление суммы положительных чисел.
Введите количество суммируемых чисел —> 2С
Сумма первых 20 положительных чисел равна 210.
Написать программу, которая вычисляет сумму первых п целых положительных четных чисел. Количество суммируемых чисел должно вводиться во время работы программы. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужир ным шрифтом).
Вычисление суммы четных положительных чисел.
Введите количество суммируемых чисел и нажмите <Enter>
-> 12
Сумма первых 12 положительных четных чисел равна 156.
Написать программу, которая вычисляет сумму первых п членов ряда 1, 3, 5, 7, .... Количество суммируемых членов ряда задается во время работы профаммы. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом).
Вычисление частичной суммы ряда: 1,3,5,7, ...
Введите количество суммируемых членов ряда —> 15 Сумма первых 15 членов ряда равна 330.
нов ряданов рядаНаписать программу, которая вычисляет сумму первых и чле
нов ряда
нов ряда
Количество суммируемых членов
ряда задается во время работы профаммы. Ниже представлен рекомендуемый вид экрана во время работы профаммы (данные, введенные пользовагелем, выделены полужирным шрифтом).
Вычисление частичной суммы ряда: 1+1/2+1/3+ ...
Введите кол-во суммируемых членов ряда —> 15 Сумма первых 15 членов ряда равна 3.3182.
2 Зак. 16!
Написать программу, которая выводит таблицу степеней ц двойки (от нулевой до десятой). Ниже представлен рекомендуем н мый вид экрана во время работыпрограммы.д>
Таблица степеней двойки^
ТС
01
12Вь
24^
38
416->
532->
664—>
7128
8256
9512
301024
Написать программу, которая вычисляет факториал числа, 11 введенного с клавиатуры. (Факториалом числа п называется произведение целых чисел от 1 до п. Например, факториал числа 1 равен 1. а числа 8 — 40320.)^
пр.
Вычисление факториала.
Введите число, факториал которого надо вычислитьВы1
-> 7
Факториал 7 равен 5040.
нал
Написать программу, которая выводит таблицу значений -> функции у = —2,4х2 + 5х - 3 в диапазоне от -2 до 2 с шагом 0,5.->
Ниже представлен рекомендуемый вид экрана во время работы -> программы.->
—>
Сре х । УДля
-2 |
-22.60
111
-1.5|
-15.90
-1 1
-10.40
вате
-0.5 |
-6.10
выв
0 I
-3.00
телг
0.5|
-1.10
фаь
1 |
-0.40
1.5|
-0.90
Обрг
2 I
-2.60
ПОС!
-> 2
Написать программу, которая вводит с клавиатуры 5 дробных чисел и вычисляет их среднее арифметическое. Рекомендуемый вид экрана во время работы программы приведен ниже. Данные, введенные пользователем, выделены полужирным шрифтом.
Вычисление среднего арифметического последовательности дробных чисел. После ввода каждого числа нажимайте <Enter> -> 5.4 -> 7.8 -> 3.0 -> 1.5
>2.3
Среднее арифметическое введенной последовательности: 4.00 Для завершения работы программы нажмите <Enter>.
ПО. Написать программу, которая вычисляет среднее арифметическое вводимой с клавиатуры последовательности дробных чисел. Количество чисел должно задаваться во время работы программы. Рекомендуемый вид экрана во время работы программы приведен ниже.
Вычисление среднего арифметического последовательности дробных чисел.
Введите количество чисел последовательности —> 5
Вводите последовательность. После ввода каждого числа нажимайте <Епсег> -> 5.4 -> 7.8 -> 3.0 -> 1.5 -> 2.3
Среднее арифметическое введенной последовательности: 4.00 Для завершения работы программы нажмите <Enter>.
Написать программу, которая вводит с клавиатуры последовательность из пяти дробных чисел и после ввода каждого числа выводит среднее арифметическое полученной части последовательности. Рекомендуемый вид экрана во время работы программы приведен ниже.
Обработка последовательности дробных чисел. После ввода каждого числа нажимайте <Enter> -> 12.3
Введено чисел: 1 Сумма: 12.30 Сред.арифметическое: 12.30 -> 15
Введено чисел: 2 Сумма: 27.30 Сред.арифметическое: 13.65
-> 10
Введено чисел: 3 Сумма: 37.30 Сред.арифметическое: 12.43
-> 5.6
Введено чисел: 4 Сумма: 42.90 Сред.арифметическое: 10.73
-> 11.5
Введено чисел: 5 Сумма: 54.40 Сред.арифметическое: 10.88 Для завершения работы программы нажмите <Enter>.
И те. вь ср ду<**-к (Дп,И те. вь ср ду<**-к (Дп,112» Написать программу, которая вычисляет среднее арифмети
И те. вь ср ду<
**-
к (
Дп,
И те. вь ср ду<
**-
к (
Дп,
ческое последовательности дробных чисел, вводимых с клавиа- 11' туры. После того, как будет введено последнее число, программа стс должна вывести минимальное и максимальное число последова- гол тельности. Количество чисел должно задаваться во время работы мы программы. Рекомендуемый вид экрана приведен ниже. Данные, дел введенные пользователем, выделены полужирным шрифтом. Вве
Обработка последовательности дробных чисел.(кс
Введите количество чисел последовательности —>5—>
Вводите последовательность. После ввода каждого числа нажимайте <Enter>Вес
-> 5.4100
-> 7.8200
> 3.0300
> 1.5400
> 2.3500
600
Количество чисел: 5
Среднее арифметическое: 4.00
Минимальное число:
Максимальное число:I
Для завершения работы программы нажмите <Enter>.
116.
ИЗ» Написать программу, которая генерирует 10 случайных чи- фуН сел в диапазоне от 1 до 10, выводит эти числа на экран и вычис- шаг ляет их среднее арифметическое. Рекомендуемый вид экрана во время работы программы приведен ниже.Ц7в
*** Случайные числа *фуН:
шагшаг1342749621 сред.арифм. 3.9
шаг
шаг
Написать профамму, которая генерирует три последовательности из десяти случайных чисел в диапазоне от 1 до 10, выводит каждую последовательность на экран и вычисляет среднее арифметическое каждой последовательности. Рекомендуемый вид экрана во время работы программы приведен ниже.
*** Случайные числа ***
6 10 4 2 5 8 1 7 7 3 сред.арифм. 5.30
10 361 10 1387 6 сред.арифм. 5.50
>мети- павиа- рамма едова- >аботы 1нные, и.>мети- павиа- рамма едова- >аботы 1нные, и.522542216 10 сред.арифм. 3.90 Для завершения работы нажмите <Епгег>.
>мети- павиа- рамма едова- >аботы 1нные, и.
>мети- павиа- рамма едова- >аботы 1нные, и.
Написать программу, которая выводит на экран таблицу стоимости, например, яблок в диапазоне от 100 г до 1 кг с шагом 100. Ниже представлен рекомендуемый вид экрана программы во время ее работы (данные, введенные пользователем, выделены полужирным шрифтом).
Введите цену одного килограмма и нажмите <Enter> (копейки от рублей отделяйте точкой)
-> 16.50
Вес, г
Стоимость, руб.
100
1.65
200
3.30
300
4.95
400
6.60
500
8.25
600
9.90
700
11.55
800
13.20
900
14.85
1000
16.50
Написать программу, которая выводит таблицу значений ых чи- I функции у = |х|. Диапазон изменения аргумента — от -4 до 4, зычис- I шаг приращения аргумента — 0,5. ана во
Написать программу, которая выводит таблицу значений функции у = |х + 2| Диапазон изменения аргумента — от -4 до 4, шаг приращения аргумента — 0,5.
Написать программу, которая выводит таблицу значений функции у = |х - 2 + |х + 11. Диапазон изменения аргумента — от -*4 до 4, шаг приращения аргумента — 0,5.
Написать программу, которая выводит на экран таблицу умножения, например, на 7. Рекомендуемый вид экрана во время работы программы приведен ниже.
7 х 2 = 14
7 х 3 — 21
7 х 4 = 28
7 х 5 = 35
7 х 6 = 42
7 х 7 = 49
7 х 8 = 56
7 х 9 = 63
12:рЯ> п/£ этс12: ла124 ла125НИ( бел пре* **12:рЯ> п/£ этс12: ла124 ла125НИ( бел пре* **Написать программу, которая выводит двоичное представление введенного с клавиатуры десятичного целого числа в диапазоне от 0 до 255. Рекомендуемый вид экрана во время работы программы приведен ниже (данные, введенные пользователем, выделены полужирным шрифтом).
12:
рЯ> п/£ этс
12: ла
124 ла
125
НИ( бел пре
* *
*
12:
рЯ> п/£ этс
12: ла
124 ла
125
НИ( бел пре
* *
*
Преобразование десятичного числа в двоичное.
Введите целое число от 0 до 255 и нажмите <Enter>
-> 164
Десятичному числу 64 соответствует двоичное 10100100
Для завершения работы программы нажмите <Enter>.
* ** *Написать программу, которая выводит на экран квадрат Пифагора — таблицу умножения. Рекомендуемый вид экрана во время работы программы приведен ниже.
* *
* *
126 зов? экр;Прес Ввел -> 4 Деся ДляФаз127. Про 10 п 6 - став; Отве126 зов? экр;Прес Ввел -> 4 Деся ДляФаз127. Про 10 п 6 - став; Отве123456789 10 1123456789 10 2 2 4 6 8 10 12 14 16 18 20 3 3 6 9 12 15 18 21 24 27 30 4 4 8 12 16 20 24 28 32 36 40 5 5 10 15 20 25 30 35 40 45 50 6 6 12 18 24 30 36 42 48 54 60 7 7 14 21 28 35 42 49 56 63 70 8 8 16 24 32 40 48 56 64 ^2 80 9 9 18 27 36 45 54 63 72 81 90
126 зов? экр;
Прес Ввел -> 4 Деся Для
Фаз
127. Про 10 п 6 - став; Отве
126 зов? экр;
Прес Ввел -> 4 Деся Для
Фаз
127. Про 10 п 6 - став; Отве
Напишите программу, которая вычисляет частичную сумму ряда I—l/3-l-1/5—1/7+1/9—— и сравнивает полученное значение с л/4 (при суммировании достагочно большого количества членов этого ряда, величина частичной суммы приближается к л/4).
Напишите программу приближенного вычисления интеграла функции f(x) = 5х2 — х + 2 методом прямоугольников.
Напишите программу приближенного вычисления интеграла методом трапеций.
Напишите программу, которая выводит на экран изображение шахматной доски. Черные клетки отображать 'звездочкой”, белые — пробелом. Рекомендуемый вид экрана во время работ ы программы приведен ниже. * * * *
* * * *
* * * *
* * * *
* * * *
* * * *
* * * *
* * * *
Написать программу, которая преобразует введенное пользователем десятичное число в двоичное. Рекомендуемый вид экрана во время работы программы приведен ниже.
Преобразование десятичного числа в двоичное.
Введите целое число ст 0 до 255 и нажмите <Enter>
-> 49
Десятичному числу 49 соответствует двоичное 00110001
Для завершения работы программы нажмите <Enter>.
Факультатив
Написать программу проверки знания таблицы умножения. Программа должна вывести 10 примеров и выставить оценку: за 10 правильных ответов — 'отлично", за 9 и 8 —"хорошо", за 7 и 6 ™ '"удовлетворительно", за 6 и менее — "плохо". Ниже представлен рекомендуемый вид экрана во время работы программы. Ответы пользователя выделены полужирным шрифтом.
*** проверка знания таблицы умножения ***Пр
После примера введите ответ и нажмите <Enter>От
5 х3=15
7 х7=4912
1x4=448
4 х3=12дс
9 х4=36
8 х8=64Д
7 х8=52
Вы ошиблись! 7 х 8 = 56П
4 х7=28ЧТ
3 х5=15•
2 х5=10
Правильных ответов: 9
Оценка: Хорошо.*
Написать профамму проверки умения складывать и вычи- • тать числа в пределах 100. Программа должна вывести 10 примеров, причем в каждом примере уменьшаемое должно быть больше или равно вычитаемому, т. е. не допускается предлагать испытуемому примеры с отрицательным результатом. Оценка вы- j ставляется по следующему правилу: за 10 правильных ответов — отлично1, за 9 и 8 —"хорошо1, за 7 и 6 — "удовлетворительно', • за 6 и менее — "плохо". Ниже предст авлен рекомендуемый вид экрана во время работы программы. Ответы пользователя выде- е лены полужирным шрифтом.
13 ар ТО] ВИ поВы по: Вв<->13 ар ТО] ВИ поВы по: Вв<->Проверка умения складывать и вычитать числа. После примера введите ответ и нажмите <Enter> 75 - 4 = 71 35 - 9 = 29 Вы ошиблись! 35 - 9-26
13 ар ТО] ВИ по
Вы по: Вв<
->
13 ар ТО] ВИ по
Вы по: Вв<
->
37 - 19 = 28
Вы ошиблись! 37 - 19 = 18
53 - 14 = 39
94 - 87 = 7
90 - 16 = 74
— 2 = 2
89 - 41 - 48
Правильных ответов: 8
Оценка: Хорошо,
Написать программу, выводящую на экран "электронные часы", которые работают в течение, например, трех минут или до тех пор, пока пользователь не нажмет любую клавишу.
Repeat
Приступая к решению задач этого раздела, следует вспомнить, что:
число повторений инструкций цикла repeat определяется ходом выполнения программы;
инструкции цикла repeat выполняются до тех пор, пока условие, стоящее после слова until, ложно;
бытьбытьлагатька вы-лагатька вы-вычи- • после слова until надо записывать условие завершения гриме- цикла;
быть
быть
лагатька вы-
лагатька вы-
ны быть инструкции, выполнение которых влияет на условие завершения цикла;ны быть инструкции, выполнение которых влияет на условие завершения цикла;для завершения цикла repeat в геле цикла обязательно долж-
ны быть инструкции, выполнение которых влияет на условие завершения цикла;
ны быть инструкции, выполнение которых влияет на условие завершения цикла;
‘тев — I
льно", • цикл repeat *— это цикл с постусловием, т. е. инструкции те
ги видвыде-ги видвыде-ла цикла будут выполнены хотя бы один раз;
ги видвыде-
ги видвыде-
цикл repeat, как правило, используется для организации приближенных вычислений, задач поиска и обработки данных, вводимых с клавиатуры или из файла.
Написать программу, вычисляющую сумму и среднее арифметическое последовательности положительных чисел, которые вводятся с клавиатуры. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом).
Вычисление среднего арифметического последовательности положительных чисел.
Вводите после стрелки числа. Для завершения ввода введите ноль. -> 45 -> 23
-> 15
-> О
Введено чисел: 3
Сумма чисел: 83
Среднее арифметическое: 27.67.
Написать программу, которая определяет максимальное число из введенной с клавиатуры последовательности положительных чисел (длина последовательности не ограничена). Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом).
Определение максимального числа последовательности положительных чисел.
Вводите после стрелки числа. Для завершения ввода введите ноль.
-> 56
-> 75
-> 43
-> о
Максимальное число: 75.
Написать программу, которая проверяет, является ли целое число, введенное пользователем, простым. Рекомендуемый вид экрана во время работы программы приведен ниже. Данные, введенные пользователем, выделены полужирным шрифтом.
Введите целое число и нажмите <Enter> -> 45
45 — не простое число.
Написать программу приближенного вычисления интеграла методом трапеций. После каждого цикла программа должна выводить вычисленное значение, количество и величину интер- | валов.I
Написать программу, которая 'задумывает’' число в диапазоне от 1 до 10 и предлагает пользователю угадать число за 5 попыток. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом).
Игра "Угадай число".
Компьютер "задумал" от 1 до 10 число от 1 до 10.
Угадайте его за 5 попыток.
Введите число и нажмите <Enter> -> 5 Нет. -> 3 ЗЛЬНОе Вы выиграли! Поздравляю: )ЛОЖИ-
Н ижеФакул ьтати в
>1 про-
тужир- 135. Написать программу-таймер, которая по истечении заданного промежутка времени выдает звуковой сигнал. Величина временного интервала вводится с клавиатуры во время работы программы.
ноль.ноль.WhileWhile
ноль.
ноль.
While
While
Приступая к решению задач этого раздела, следует вспомнить, что:
число повторений инструкций цикла while определяется ходом выполнения программы:
целое | е инструкции цикла while выполняются до тех пор, пока усло- ш вид вие, записанное после слова whi Le, истинно;
анные,
после слова while надо записывать условие выполнения инструкций цикла;
для завершения цикла while в теле цикла обязательно должны присутствовать инструкции, влияющие на условие выполнения инструкций цикла;
сграла • цикл while — это цикл с предусловием, т. е. инструкции тела олжна цикла вообще могут быть не выполнены;
■~• цикл while, как правило, используется для организации при
ближенных вычислений, задач поиска и обработки данных, I вводимых с клавиатуры или из файла.
15 по- | |з^е Напишите программу, которая вычисляет л с заданной время пользователем точностью. Для этого воспользуйтесь тем, что таеле- значение частичной суммы ряда 1-1/3+1/5-1/7+1/9-... при суммировании достаточно большого количества членов приближается к л/4. Рекомендуемый вид экрана во время работы про граммы приведен ниже (данные, введенные пользователем, выделены полужирным шрифтом).
Задайте точность вычисления ПИ —> 0.001.
Значение числа ПИ с точностью 0.001000 равно 3.143589.
Просуммировано 502 членов ряда.
Си?
Написать программу, которая вычисляет наибольший общий делитель двух целых чисел.
14
ча<
Символы и строки
Приступая к решению задач этого раздела, следует вспомнить, шь что:
14:
каждому символу соответствует число — код символа;I
получить доступ к отдельному символу строки можно, указав пи< его номер в квадратных скобках после имени переменной фа1 (строки).ты
лe^
138с Написать программу, которая запрашивает имя пользовате
ля и здоровается с ним. Рекомендуемый вид экрана во время _> , работы программы приведен ниже (данные, введенные пользо- стр вателем, выделены полужирным шрифтом).изу
Как Вас зовут?
Введите свое имя и нажмите <Enter>143
-> Васяиз ।
Здравствуйте, Вася1
144
Написать программу, которая выводит на экран сообщение лен в "телеграфном" стиле, т. е. буквы сообщения должны появлять- экр ся по одной, причем с некоторой задержкой.вве,
лен:146.ден1лен:146.ден1Написать программу, которая выдает код символа, введенного пользователем. Программа должна завершать работу после ввода, например, точки. Рекомендуемый вид экрана во время работы программы приведен ниже (данные, введенные пользо- 1 вателем, выделены полужирным шрифтом).145
лен:
146.
ден1
лен:
146.
ден1
Введите символ и нажмите <Enter>.
Для завершения работы программы введите точку.
-> 1
Символ: 1 Код: 49.
in об-
инить.
указавениой
овате- время ользо-
щение влять-
веден- послс время эльзо-
-> 2
Символ: 2 Код: 50
-> ы
Символ: ы Код:235 -> .
Написать программу, которая выводит на экран первую часть таблицы кодировки символов (символы, имеющие коды от О до 127). Таблица должна состоять из восьми колонок и шестнадцати строк. В первой колонке должны быть символы, имеющие код от 0 до 15, во второй — от 16 до 31 и т. д.
Написать программу, которая в веденной с клавиатуры строке преобразует строчные буквы русского алфавита в прописные (учтите, что функция ирСазе с символами русского алфавита не работает). Рекомендуемый вид экрана во время работы программы приведен ниже (данные, введенные пользователем, выделены полужирным шрифтом).
Введите строку текста и нажмите <Enter>
—> изучив Паскаль, можно приступить к изучению С
Строка, преобразованная к верхнему регистру:
ИЗУЧИВ ПАСКАЛЬ, МОЖНО ПРИСТУПИТЬ К ИЗУЧЕНИЮ с.
Написать программу, которая удаляет начальные пробелы из введенной с клавиатуры строки.
Написать программу, которая проверяет, является ли введенная с клавиатуры строка целым числом. Рекомендуемый вид экрана во время работы программы приведен ниже (данные, введенные пользователем, выделены полужирным шрифтом).
Введите число и нажмите <Enter>
-> 23.5
Введенная строка не является целым числом.
Написать программу, которая проверяет, является ли введенная с клавиатуры строка двоичным числом.
Написать программу, которая проверяет, является ли введенная с клавиатуры строка шестнадцатеричным числом.
Написать программу, которая проверяет, является ли вве- денная с клавиатуры строка дробным числом.
Пр 148. Написать программу, которая преобразует введенное с кла- чтс виатуры восьмиразрядное двоичное число в десятичное. Рекомендуемый вид экрана во время работы программы представлен * ниже (введенные пользователем данные выделены полужирным шрифтом).•1
Введите восьмиразрядное двоичное число и нажмите <Enter>е1
-> 111010101
Двоичному числу 11101010 соответствуетдесятичное 234е
Для завершения работы программы нажмите <Enter>.}
1 149. Написать программу, которая преобразует введенное с кла- < виатуры двухразрялное шестнадцатеричное число в десят ичное. е
Написать программу, которая преобразует введенное пользователем десятичное число в число в указанной системе счис- 153 ления (от 2-х до 10-ти). Рекомендуемый вид экрана во время iMep работы программы приведенниже.вых
Введите целое число —> 67На I
Введите основание системысчисления—> 2рОС;
100011а|1]
a(2j 151. Написать программу, которая преобразует введенное поль- а13] зователем десятичное число в шестнадцатеричное.at4l
а^5]
Написать программу, которая вычисляет значение выраже- в М£ ния No01N102...OkNk, где N1 — целое одноразрядное число, О; — один из двух знаков простейших арифметических лейст- 154. вий: сложения или вычитания. Ниже представлен рекомендуе- мсн' мый вид экрана во время работы программы (данные, введенные став пользова гелем, выделены полужирным шрифтом).I (дав
шри
Введите арифметическое выражение, например, 4 ч 5-3-5+2 и нажмиет <Enter>I Поис
-> 9-5Н4+2-6Введ
Значение введенного выражения: 4и на
Для завершения программы нажмите <Enter>.
Мини
ш вве-с кла-J Реко- :тавлен !:ирнымш вве-с кла-J Реко- :тавлен !:ирнымМассивы
ш вве-
с кла-J Реко- :тавлен !
:ирным
ш вве-
с кла-J Реко- :тавлен !
:ирным
Приступая к решению задач этого раздела, следует вспомнить, что:
массив — это структура данных, представляющая собой совокупность элементов одного типа;
массив должен быть объявлен в разделе объявления переменных;
при объявлении массива удобно использовать именованные константы;
с кла- чное.> поль-: счис- времяс кла- чное.> поль-: счис- времядоступ к элементу массива осуществляется путем указания индекса (номера) элемента, в качестве которого можно использовать выражение целого типа, например, целую константу или переменную типа integer;
с кла- чное.
> поль-
: счис- время
с кла- чное.
> поль-
: счис- время
для ввода, вывода и обработки массивов удобно применять инструкции ЦИКЛОВ (for, while, repeat).
Написать программу, которая вводит с клавиатуры одномерный массив из 5 целых чисел и выводит количество ненулевых элементов. Перед вводом каждого элемента на экране должна появляться подсказка с его номером.
' поль-' поль-После ввода каждого числа нажмите <Enter> а[1] -> 12 а [2] -> О а[3] -> 3 а[4] -> -1 а[5] -> О
' поль-
' поль-
яраже- число, дейст- ендуе- [енныеяраже- число, дейст- ендуе- [енныеВ массиве 3 ненулевых элемента.
яраже- число, дейст- ендуе- [енные
яраже- число, дейст- ендуе- [енные
Написать программу, которая выводит минимальный элемент введенного с клавиатуры массива целых чисел. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользовагелем, выделены полужирным шрифтом).
Поиск минимального элемента массива.
Введите в одной строке элементы массива (5 целых чисел) и нажмите <Enter> -> 23 0 45 -5 12 Минимальный элемент массива: -5.
Написать программу, которая вычисляет среднее арифметическое ненулевых элементов введенного с клавиатуры массива целых чисел. Ниже представлен рекомендуемый вид экрана вс время работы программы (данные, введенные пользователем, выделены полужирным шрифтом).
Введите элементы массива (10 целых чисел) в одной строке и нажмите <Enter>.
-> 23 0 45 -5 12 0 -2 30 С 64
Сумма элементов массива: 184
Количество ненулевых элементов: 7
Среднее арифметическое ненулевых элементов: 23.86.
Написать программу, которая вычисляет среднюю (за неделю) температуру воздуха. Исходные данные должны вводиться во время работы программы. Рекомендуемый вид экрана во время работы программы приведен ниже (данные, введенные пользователем, выделены полужирным шрифтом).I
Введите температуру воздуха за неделю.
Понедельник —> 12
Вторник —> 10
Среда -> 16
Четверг —> 18
Пятница —> 17
Суббота —> 16
Воскресенье —> 14
Средняя температура за неделю: 14.71 град.
Написать программу, которая проверяет, находится ли в массиве введенное с клавиатуры число. Массив должен вводится во время работы программы.
Написать программу, которая проверяет, представляют ли! элементы введенного с клавиатуры массива возрастающую по -1 следовател ьность.
Написать программу, которая проверяет, образуют ли элементы введенного с клавиатуры массива неубывающую последовательность.
Написать программу, которая вычисляет, сколько раз введенное с клавиатуры число встречается в массиве.
фмети- 161. Написать программу, которая проверяет, есть ли во введен- бассива ном с клавиатуры массиве элементы с одинаковым значением. >ана во
ателем 1^2. Написать программу, которая методом прямого выбора сортирует по убыванию введенный с клавиатуры одномерный массив.
е163. Написать программу, которая методом обмена ("пузырька")
сортирует по убыванию введенный с клавиатуры одномерный массив.
Написать программу, которая объединяет два упорядоченных по возрастанию массива в один, также упорядоченный по возрастанию массив. Рекомендуемый вид экрана во время рабо- а неде- ты программы приведен ниже (данные, введенные пользовате- )диться дем, выделены полужирным шрифтом), во вре-
а ПОЛЬ- Объединение двух упорядоченных по возрастанию массивов.
Введите в одной строке элементы первого массива, (5 целых чисел) —> 13579
Введите в одной строке элементы второго массива, {5 целых чисел) —> 2 4 6 8 10
Массив — результат
123456789 10
Для завершения работы нажмите <Enter>.
Написать программу, которая, используя метод бинарного поиска, выполняет поиск в упорядоченном по возрастанию массиве.
ли в166. Написать программу, которая определяет количество уче-
юдитсяников в классе, чей рост превышает средний. Рекомендуемый
вид экрана во время работы программы приведен ниже (введенные пользователем данные выделены полужирным шрифтом).
пот ли (
ую по- *** ^а-™3 роста учеников ***
Введите рост (см) и нажмите <Enter>.
Для завершения введите 0 и нажмите <Enter>
[И эле-
->
175
юледо-
—>
170
—>
180
->
168
аз вве-
—>
170
—>
0
Средний рост; 172.6 см
У 2-х человек рост превышает средний.
Написать программу, которая вводит по строкам с клавиатуры двумерный массив и вычисляет сумму его элементов по столбцам.
158. Написать программу, которая вводит по строкам с клавиатуры двумерный массив и вычисляет сумму его элементов по строкам.
Написать программу, которая вычисляет сумму диагональных элементов квадратной матрицы.
Написать программу, которая вводит с клавиатуры двумерный массив по строкам и вычисляет среднее арифметическое его элементов.
Написать программу, которая вычисляет определитель квадратной матрицы второго порядка. Рекомендуемый вид экрана во время работы программы приведен ниже (введенные пользователем данные выделены полужирным шрифтом).
Введите матрицу второго порядка.
После ввода элементов строки нажимайте <Enter> -> 5 -7 -> 1 3
Определитель матрицы
5.00 -7.00
1.00 3.00
Равен 22.00
Написать программу, которая проверяет, является ли введенная с клавиатуры квадратная матрица магическим квадратом. Магическим квадратом называется матрица, сумма элементов которой в каждой строке, в каждом столбце и по каждой диагонали одинакова (см. приведенный ниже рисунок).
10 6 15
Написать программу, которая вычисляет определитель квадратной матрицы третьего порядка.
лавиа- 'ОВ по
Факультатив
павиа- ов по
эналь-
вумер- ческое
питель tэкра- поль-
173. Написать программу подведения итогов Олимпийских игр. В программу пользователь должен ввести количество медалей разного достойно] ва, завоеванное каждой командой-участи и ней, а программа — подсчитать общее число медалей и cootbcict- вующее число очков, после чего упорядочить список в соответствии с набранным количеством очков, которое определяется по следующему правилу: за золотую медаль команда получает 7 очков, за серебряную — 6, за бронзовую — 5.
Рекомендуемый вид экрана во время работы программы приведен ниже (данные, введенные пользователем, выделены полужирным шрифтом).
Итоги Олимпийских игр. Введите в одной строке серебряных и бронзовых Австрия —>359 Германия —> 12 9 8 Канада —>654 Китай —>062
Корея ->312 Норвегия ~> 10 10 5 Россия —>963
количество золотых, медалей.
и вве-
ратом.
центов
Итоги зимней Олимпиады в Нагано, 1998 г.
Очков
Страна
Золото Серебро Бронза Всего
й диа-
1
Германия
12
9
8
29
178
2
Норвегия
10
10
5
25
155
3
Россия
9
6
3
18
114
4
Австрия
3
5
9
17
96
5
Канада
6
5
4
35
92
6
США
6
3
4
13
80
7
Финляндия
2
4
6
12
68
8
Япония
5
1
4
10
61
США -> 6 3 4
Финляндия —>246
Япония >514
9Китай
10Корея
062846
312637
АБ—*в-дЕж3и• •Йе ■к— е —ле —м— —•Но—пе•АБ—*в-дЕж3и• •Йе ■к— е —ле —м— —•Но—пе•
А
Б
—*
в
-
д
Е
ж
3
и
• •
Й
е ■
к
— е —
л
е —
м
— —•
Н
о
—
п
е•
А
Б
—*
в
-
д
Е
ж
3
и
• •
Й
е ■
к
— е —
л
е —
м
— —•
Н
о
—
п
е•
Написать программу игры "Угадай число". Правила игры следующие. Играют двое. Один задумывает число, второй — у га-”
дывает. На каждом шаге угадывающий делает предположение, а _ задумавший число — говорит, сколько цифр числа yi аданы и сколько из этих цифр занимают правильные позиции в числе. I Например, если задумано число 725 и выдвинуто предположен j ние, что задумано число 523, то считаются угаданными две циф- ры (5 и 2) и одна из них (2) занимает верную позицию.
Ниже представлен рекомендуемый вил экрана во время работы Ч1 программы. Данные, введенные пользователем, выделены полужирным шрифтом.*
Компьютер задумал трехзначное число. Вы должны его отгадать. После очередного числа вам будет сообщено, сколько цифр угадано и сколько из них находится на своих местах.
После ввода числа нажимайте <Enter>.
Для завершения игры нажмите <Esc>.
Ваш вариант -> 123 Угадано: 0. На своих местах: 0
Ваш вариант—>456Угадано:1.Насвоихместах:0
Ваш вариант->654Угадано:2.Насвоихместах:2
Ваш вариант->657Угадано:2.Насвоихместах:2
Ваш вариант—>658Угадано:3.Насвоихместах:3
**♦ ВЫ УГАДАЛИ ! ***
Нажмите <Enter> для завершения.
1 <1176. Пар177. двух1 <1176. Пар177. двухНапишите программу-телеграф, которая принимает от пользователя сообщение и выводит его на экран в виде последовательности точек и тире. Вывод точек и i ире можно сопроводить звуковым сигналом соответствующей длительности. Азбука Морзе для букв русского алфавита приведена ниже.
1 <
1
176. Пар
177. двух
1 <
1
176. Пар
177. двух
игры — уга- ние. а аны и числе, хложс- 5 ЦИф-
р
с
т
—
У
, . —
ф
X
ц
ч
.
ш
—
ш
ъ
ы
— .
ь
э
10
. —
я
Функции
>аооты полу->аооты полу-Приступая к решению задач этого раздела, следует вспомнить, что:
>аооты полу-
>аооты полу-
;ать.;ать.для передачи данных в функцию надо использовать только параметры (глобальные переменные, т. е. переменные, объявленные вне функции, применять не рекомендуется);
;ать.
;ать.
среди выполняемых инструкций функции обязательно должна быть инструкция присваивания значения функции;
тип каждого фактического параметра (константы или переменной) в инструкции вызова функции должен быть таким же, как тип соответствующего формального параметра, указанного при объявлении функции;
' поль- [едова- водить Морзе' поль- [едова- водить Морзеесли в инструкции объявления функции перед именем формального параметра не стоит слово var, то при вызове функции можно использовать в качестве формального параметра константу или переменную соответствующего типа Если слово var указано, то формальным параметром может быть только переменная;
' поль- [едова- водить Морзе
' поль- [едова- водить Морзе
если параметры функции используются для возврата результата в про1рамму, вызвавшую функцию, то в объявлении функции перед именем соответствующего параметра должно ПрИСуТСТ BOBaTb СЛОВО var.
Написать функцию, которая вычисляет объем цилиндра. Параметрами функции должны быть радиус и высота цилиндра.
Написать функцию, которая возвращает максимальное из двух целых чисел, полученных в качестве аргумента.
Написать функцию, которая сравнивает два целых числа и возврашает результат сравнения в виде одного из знаков: >, < или =.
Написать функцию, которая вычисляет сопротивление цепи, состоящей из двух резисторов. Параметрами функции являются величины сопротивлений и тип соединения (последовательное или параллельное). Функция должна проверять корректность параметров: если неверно указан тип соединения, то функция должна возвращать -1.
Написать функцию, которая вычисляет значение аь. Числа а и ь могут быть любыми дробными положительными числами.
Написать функцию Procent, которая возвращает процент от числа, полученного в качестве аргумента.
Написать функцию Dohod, которая вычисляет доход по вкладу. Исходными данными для функции являются: величина вклада, процентная ставка (годовых) и срок вклада (количество дней).
Написать функцию Giasn, которая возвращает значение True, если символ, полученный функцией в качестве аргумента, является гласной буквой русского алфавита.
Написать функцию LTrim, которая удаляет начальные пробелы из строки, полученной в качест ве аргумента. ,
Написать функцию sogi, которая возврашает True, если символ, полученный функцией в качестве аргумента, является согласной буквой русского алфавита.
Написать функцию, которая возвращает преобразованную к верхнему регистру строку, полученную в качестве аргумента. Обратите внимание, если эту функцию назвать upcase (т. е. так, как называется функция языка Turbo Pascal, решающая подобную задачу для символов латинского алфавита), то функция программиста подменит функцию Turbo Pascal.
Написать функцию вычисления факториала (факториалом целого числа п называется число, равное произведению целых чисел от 1 до п).
исла иисла ицент отцент отПроцедурыПроцедурыie про-ie про-[ачение умента,[ачение умента,Числанами.Числанами.риалом । целыхриалом । целыхо вкла- вклада, геи).о вкла- вклада, геи).5, если вляется5, если вляется[ие це- 4 ЯВЛЯ- тедова- ь кор- ЗИЯ, то[ие це- 4 ЯВЛЯ- тедова- ь кор- ЗИЯ, тованную умента. . е. так, подоб-ункцияванную умента. . е. так, подоб-ункция
исла и
исла и
цент от
цент от
Процедуры
Процедуры
ie про-
ie про-
[ачение умента,
[ачение умента,
Числа
нами.
Числа
нами.
риалом । целых
риалом । целых
о вкла- вклада, геи).
о вкла- вклада, геи).
5, если вляется
5, если вляется
[ие це- 4 ЯВЛЯ- тедова- ь кор- ЗИЯ, то
[ие це- 4 ЯВЛЯ- тедова- ь кор- ЗИЯ, то
ванную умента. . е. так, подоб-
ункция
ванную умента. . е. так, подоб-
ункция
55
Факультатив
Написать функцию для решения квадратного уравнения. Параметрами функции должны быть коэффициенты и корни уравнения. Значение функции должно использоваться для передачи в вызывающую ее программу информации о наличии корней уравнения: 2 — два разных корня. 1 — корни одинаковые, 0 — уравнение не имеет решения Кроме того, функция должна проверять корректность исходных данных. Если исходные данные неверные, то функция должна возвращать - I.
Написать функцию, обеспечивающую ввод с клавиатуры целого положительного двухзначного числа При нажатии пользователем какой-либо клавиши соответствующий ей символ должен появляться на экране только в том случае, если этот символ является цифрой. Функция должна позволять пользователю редактировать введенное число при помощи клавиши <BackSpace>. Если пользователь ввел хотя бы одну цифру, то при нажатии клавиши <Entcr> функция должна завершать работу и возвращать введенное пользователем число вызвавшей ее процедуре.
Приступая к решению задач этого раздела, следует вспомнить, что:
для передачи информации в процедуру следует использовать параметры, а не глобальные переменные, т. е. объявленные вне процедуры;
тип каждого фактического параметра (константы или переменной) в инструкции вызова процедуры должен соответствовать типу соответствующего формального параметра, указанного при объявлении функции;
если в инструкции объявления процедуры перед именем формального параметра нет слова var, то в качестве формального параметра в инструкции вызова процедуры можно использовать константу или переменную соответствующего типа. Если слово var присутствует в инструкции, то формальным параметром можно назначить только переменную;
если аргумент процедуры применяется для возврата результа- ^ та в программу, вызвавшую эту процедуру, то перед именем е аргумента нужно поставить слово var.г
Ьеса
Написать процедуру, которая выводит на экран строку, состоящую из звездочек. Длина строки (количество звездочек) яв-| ляется параметром функции.| Е
Написать процедуру, которая выводи! строку, состоящую х из одинаковых символов. Длина строки и символ являются па-1 ь раметрами процедуры.
Написать процедуру, которая вычисляет объем и площадь
eid.eid.194.194.поверхности параллелепипеда.
eid.
eid.
194.
194.
Факультатив
Написать процедуру Frame, которая выводит на экран рамку. В качестве параметров процедуре должны передаваться координаты левого верхнего угла рамки и ее размер.
Графика
Приступая к решению задач этого раздела, следует вспомнить, что:
в графическом режиме экран представляет собой совокупность точек, каждая из которых может быть окрашена в один jg^ из 16 цветов;ОлиМ)
координаты точек возрастают слева направо и сверху вниз! клетке левая верхняя точка имеет координаты (0,0), а правая нижняя — (639,479);сны
для того, чтобы программа могла выводить на экран графические примитивы (линии, окружности, прямоугольники), необходимо инициализировать графический режим.I
Шаблон графической программы выглядит следующим образом
uses Graph;I
var
grDriver: Integer;■
ЗуЛЬТа-grMode: Integer;
именемErr Code: Integer;
res: integer;
begin
)KV, CO-I grDriver :- detect;
1СК) ЯВ- InitGraph(grDriver, grMode,1c:\tp\bgi1); ErrCode := GraphResult;
I if ErrCode = grOk then
гоящую Iy
I begin пся na- { сюда следует поместить основные инструкции } end;
[лощадь' CloseGraph; end.
Написать программу, которая вычерчивает на экране домик.
ан рам- :я коор-ан рам- :я коор-юмнить,юмнить,
ан рам- :я коор-
ан рам- :я коор-
юмнить,
юмнить,
ху вниз; ая ниж-ху вниз; ая ниж-
ху вниз; ая ниж-
ху вниз; ая ниж-
:овокуп-1
а в один 195 Написать программу, которая выводит на экран флаг
Олимпийских игр. Изображение флага приведено ниже (одной клетке соответствует пять пикселов).
рафиче-
1ки), не-
>бразом’
ане ко-ане ко-Написать программу, которая вычерчивает на экране узор из 100 окружностей случайного диаметра и цвета.
ане ко-
ане ко-
Написать программу, которая вычерчивает на экране ломанную линию, состоящую из 200 звеньев, окрашенных в разные цвета, выбираемые случайным образом, причем координаты звеньев тоже выбираются случайно.
Написать программу, которая выводит на экран контур пятиконечной звезды.
ракету.ракету.
ракету.
ракету.
Написать программу, которая выводит на экран пятиконечную звезду.
Написать программу, которая вычерчивает на экране шестиугольник.
базовойбазовойНаписать программу, которая рисует па экране Государственный флаг России.
базовой
базовой
Написать программу, которая рисует на экране веселую рожицу желтого цвета.
Написать программу, которая рисует на экране грустную рожицу.
211.ние 1211.ние 1212.краст212.краст
211.
ние 1
211.
ние 1
212.
краст
212.
краст
Написать программу, которая выводит на экран узор, изображенный ниже.
208с Написать программу, которая выводит на экран изобра-
должныдолжныбыгь разного цветабыгь разного цветаженный ниже узор. Окружности (см. таблицу кодировки цветов).
должны
должны
быгь разного цвета
быгь разного цвета
213. I(испо
выводитвыводитизображенный нижеизображенный ниже214. Н |Инстр оформ214. Н |Инстр оформ
выводит
выводит
изображенный ниже
изображенный ниже
214. Н |Инстр оформ
214. Н |Инстр оформ
Написать программу, которая узор.
выводитвыводитизображенный ни жизображенный ни ж
выводит
выводит
изображенный ни ж
изображенный ни ж
Написать программу, которая узор.
215. Нгван ну к
ор, изо-,ор, изо-,Написать программу, которая выводит на экран изображение шахматной доски.
ор, изо-,
ор, изо-,
Написать программу, которая рисует на экране флажок красного цвета.
изоора-[ о цвета.изоора-[ о цвета.
изоора-[ о цвета.
изоора-[ о цвета.
яй нижеяй ниже213. Написать программу, которая рисует (используйте метод базовой точки).213. Написать программу, которая рисует (используйте метод базовой точки).яй нижеяй ниже
яй ниже
яй ниже
213. Написать программу, которая рисует (используйте метод базовой точки).
213. Написать программу, которая рисует (используйте метод базовой точки).
яй ниже
яй ниже
на экране паровоз
Написать программу, которая рисует на экране автомобиль. Инструкции, обеспечивающие вычерчивание колеса автомобиля, оформите как процедуру.
Написать программу, которая выводит на экран оцифро
ванную координатную сетку.
5.0::-:i5
4.0 ;t\i\Г
з.о V-;=i‘1;T
2.0 IItiiiH
.0 44iVi4|-
0.0
0.000.5 1.01.5 2.02 53.03.5
Написать программу, которая выводит на экран точечный график функции у = 0,5х? + 4х — 3. Диапазон изменения аргумента — от -15 до 5, шаг аргумента —0,1. График вывести на фоне координатных осей, точка пересечения которых должна находиться в центре экрана.
Написать процедуру, которая рисует на экране кораблик. В качестве параметров процедура должна получать координаты базовой точки и цвет, которым следует рисовать. Используя эту процедуру, напишите программу, которая выводит на экран движущийся кораблик.
Написать программу, которая рисует окружность, движущуюся по экрану.
Написать программу, которая выводит на экран гистограмму успеваемости учеников класса, например, по итогам контрольной работы. Исходные данные следует ввести в алфавитно- цифровом режиме работы. Рекомендуемый вид экрана во время работы программы приведен ниже. На первом рисунке экран
показан во время ввода исходных данных, на втором приведен вид диаграммы на экране.
Обработка результатов контрольной работы.
Введите исходные данные:
пятерок —> 10
четверок —> 15
троек —> 7
двоек —> 1
Результаты контрольной работыРезультаты контрольной работыпятерок четверок троек двоекпятерок четверок троек двоек
Результаты контрольной работы
Результаты контрольной работы
пятерок четверок троек двоек
пятерок четверок троек двоек
Написать программу, которая выводит круговую диаграмму, отражающую товарооборот (в процентах) книжного магазина. Исходные данные (объем продаж в рублях по категориям: книги, журналы, открытки и канцтовары) вводятся во время работы программы. Пример диаграммы приведен ниже.
КанцтоваыКанцтоваыурналы - 31.4%%урналы - 31.4%%Книги - 34.3%Книги - 34.3%Прочее - 11.4%Прочее - 11.4%22.9%22.9%
Канцтоваы
Канцтоваы
урналы - 31.4%%
урналы - 31.4%%
Книги - 34.3%
Книги - 34.3%
Прочее - 11.4%
Прочее - 11.4%
22.9%
22.9%
Написать программу, которая выводит на экран изображение работающего светофора. Рекомендуемый вид светофора и алгоритм его работы приведены ниже.
Факультатив
Написать программу, которая выводит на экран изображение идущих часов, имеющих секундную и минутную стрелки.
Написать программу, которая выводит на экран график функции у = 2 Sin(x) е*/5.
Написать функцию, которая в графическом режиме вводит с клавиатуры дробное число. Набираемые пользователем символы (знак "минус”, цифры и точка должны появляться на экране в зависимости от текущего положения точки вывода. Во время ожидания очередною символа на экране должен мигать курсор. Требуется, чтобы функция обеспечивала пользователю возможность простейшего редактирования — удаление последнего введенного символа (при помощи клавиши <BackSpace>).
Файлы
Приступая к решению задач этого раздела, следует вспомнить, что:
в программе, которая выводит результаты в файл или читает исходные данные из файла, должна быть объявлена файловая
переменная типа text;
для доступа к конкретному файлу файловую переменную нужно связать с этим файлом (делается это при помощи инструкции assign);
для того, чтобы файл был доступен, его надо открыть (для чтения с помощью инструкции reset, для записи — rewrite, для добавления — append);
при работе с файлами возможны ошибки, например, из-за того, что программа пытается открыть файл, которого нет, поэтому после каждой инструкции, которая может привести к возникновению ошибки, желательно, используя функцию lOResuit, проверять код завершения операции с файлом: чтобы программа могла контролировать результат выполнения операции с файлом, в ее текст надо поместить директиву
запись в файл выполняют инструкции write и writein, чтение — read и readin, причем в качестве первого параметра этих инструкций следует указывать файловую переменную;
по завершении работы с файлом его нужно обязательно закрыть инструкцией close;
файл, созданный программой, в которой тип файловой переменной объявлен как text, можно просмотреть при помощи редактора текста.
Написать программу, которая на сменном диске компьютера (А:) создает файл numbcrs.txt и записывает в него 5 введенных пользователем целых чисел. Просмотрите при помощи редактора текста, например, встроенного в Norton Commander, созданный файл. Убедитесь, что каждое число находится в отдельной строке.
Напишите программу, которая дописывает в файл a:\numbers.txt 5 введенных пользователем целых чисел. Убедитесь при помощи редактора текста, что в файле находятся 10 чисел.
Написать программу, которая выводит на экран содержимое файла a:\numbers.txt.
Написать программу, которая вычисляет среднее арифметическое чисел, находящихся в файле a:\numbers.txL
3 Зак 161
Написать программу, которая позволяет просматривать текстовые файлы (выводит на экран содержимое файла), например, файлы исходных программ Turbo Pascal. Имя просматриваемого файла должно вводиться во время работы программы. Рекомендуемый вид экрана приведен ниже.
Просмотр текстового файла.
Введите полное имя файла и нажмите <Enter>
—> c:\tp\pas\nvmb.pas
Написать программу, которая дописывает в файл phone.txt, находящийся на диске А:, фамилию и номер телефона, например, вашего товарища. Если файла на диске нет, то программа должна создать его. В файле каждый элемент данных (имя, фамилия, телефон) должен находиться в отдельной строке. Рекомендуемый вид экрана во время работы программы приведен ниже.
Добавление в телефонный справочник.
Фамилия —> Сидоров
Имя —> Вася
Телефон —> 234-84-37
Информация добавлена.
Для завершения работы нажмите <Enter>.
Написать программу, используя которую можно за один сеанс работы добавить информацию о нескольких людях в файл a:\phone.txt.
Написать программу, которая позволяет найти нужные сведения в телефонном справочнике (a:\phone.txt). Программа должна запрашивать фамилию человека и выводить его телефон Если в справочнике есть одинаковые фамилии, то программа должна вывести список всех людей, имеющих эти фамилии. Рекомендуемый вид экрана во время работы программы приведен ниже.
Поиск в телефонном справочнике.
Введите фамилию и нажмите <Епсег>. Для завершения работы с программой сразу после приглашения нажмите <Enter>
—> Петров
В справочнике данных о Петров нет.
c- э, оi-c- э, оi-—> Иванов
c- э, о
i-
c- э, о
i-
Иванов Вася 578-12-45
Иванов Сергей 244-34-02 —>
Напишите программу, которая объединяет возможности программ Добавление в телефонный справочник И Поиск в телефонном справочнике. При запуске программы на экран должно выводиться меню:
t,aчt,aч*** Телефонный справочник ***
t,
a
ч
t,
a
ч
Добавление
Поиск
Завершение работы
Введите номер пункта меню и нажмите <Enter> ->
Факультатив
i iLL[i iLL[Написать универсальную программу тестирования. Тест, последовательность вопросов и варианты ответов должны находиться в текстовом файле. Имя этого файла программа должна получать из командной строки ее запуска. Количество вопросов теста не ограничено. Однако предлагается ввести следующее- ограничение: текст вопроса и альтернативных ответов не должен занимать более одной строки экрана.
i i
L
L
[
i i
L
L
[
Программа должна выставлять оценку по следующему правилу: ОТЛИЧНО — за правильные ответы на все вопросы, ХОРОШО — если испытуемый правильно ответил не менее, чем на 80% вопросов, УДОВЛЕТВОРИТЕЛЬНО — если правильных ответов более 60%, и ПЛОХО — если правильных ответов меньше 60%.
Ниже приведены рекомендуемая структура файла вопросов теста (Nj — количество альтернативных ответов к Ему вопросу, К;
номер правильного ответа), пример файла теста и вид экрана во время работы программы (номера ответов, введенные пользователем, выделены полужирным шрифтом).
S®№Йс^иёвс^о^ :М№ - ::; •' :
^9• ■ г 1 : -■ • : •■ • ,
ОЙкс^' Ионферран 1 карл. РоёсиАр^тёктор/ Зимнего торца;^ранчёско- Бартоломёс.ОйостЬМо^ :ОЙкс^' Ионферран 1 карл. РоёсиАр^тёктор/ Зимнего торца;^ранчёско- Бартоломёс.ОйостЬМо^ :XXНевский "проспека ‘подучил свое .наз^^ёНевский "проспека ‘подучил свое .наз^^ё3' ^по имени: реки | на ' которой &S&& ^нкт-ПетёрбУрг3' ^по имени: реки | на ' которой &S&& ^нкт-ПетёрбУргпо имение близко ^йодаэы^^лавры.^^памяч&б*;$наме^та& псшйё^рдре ^ Т "' Jпо имение близко ^йодаэы^^лавры.^^памяч&б*;$наме^та& псшйё^рдре ^ Т "' JАлёкйайлрё- Нё^фкруАлёкйайлрё- Нё^фкру
ОЙкс^' Ионферран 1 карл. Роёси
Ар^тёктор/ Зимнего торца;
^ранчёско- Бартоломёс.
ОйостЬМо^ :
ОЙкс^' Ионферран 1 карл. Роёси
Ар^тёктор/ Зимнего торца;
^ранчёско- Бартоломёс.
ОйостЬМо^ :
X
X
Невский "проспека ‘подучил свое .наз^^ё
Невский "проспека ‘подучил свое .наз^^ё
3' ^
по имени: реки | на ' которой &S&& ^нкт-ПетёрбУрг
3' ^
по имени: реки | на ' которой &S&& ^нкт-ПетёрбУрг
по имение близко ^йодаэы^^лавры.
^^памяч&б*;$наме^та& псшйё^рдре ^ Т "' J
по имение близко ^йодаэы^^лавры.
^^памяч&б*;$наме^та& псшйё^рдре ^ Т "' J
Алёкйайлрё- Нё^фкру
Алёкйайлрё- Нё^фкру
Сейчас Вам будет предложен тест.
К каждому вопросу дается несколько вариантов ответа.
Вы должны ввести номер правильного ответа и нажать <Enter>.
Архитектор Исаакиевского собора:
Доменико Трезини
Огюст Монферран
Карл Росси
-> 2
Архитектор Зимнего дворца:
Франческо Бартоломео
Карл Росси
-> 2
Невский проспект получил свое название:
По имени реки, на которой стоит Санкт-Петербург.
По имени близко расположенной Александро-Невской лавры.
В память о знаменитом полководце — Александре Невском. -> 2
Ваша оценка ОТЛИЧНО!
Для завершения работы программы нажмите <Enter>.
Напишите программу, которая по желанию пользова геля выводит таблицу пересчета из дюймов в миллиметры на экран, принтер или в файл. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным.
*** Таблица пересчета из дюймов в миллиметры *** Результат выводить:
— на экран;
— на принтер;
— в файл.
Введите число от 1 до 3 и нажмите <Enter>.
Ваш выбор —> 2
Дюймы
Миллиметры
0.5
12.7
1.0
25.4
1.5
38.1
2.0
50.8
2.5
63.5
3.0
76.2
3.5
88.9
4.0
101.6
4.5
114.3
5.0
127.0
Рекурсия
Приступая к решению задач этого раздела, следует вспомнить, что:
рекурсивной называется такая процедура или функция которая может вызывать сама себя;
для завершения процесса рекурсии в алгоритме рекурсивной функции (процедуры) обязательно должна быть веточка, обеспечивающая непосредственное завершение функции (процедуры).
Написать рекурсивную функцию вычисления факториала и программу, проверяющую ее работоспособность.
Написать программу, которая выводит на экран приведенный ниже узор.
Написать программу, которая вычисляет сопротивление электрической цепи, схема которой приведена ниже. Величины сопротивлений и порядок цепи (количество сопротивлений R2) должны вводиться во время работы программы
R1 R1 R1
Написать программу, которая вычерчивает на экране приведенную выше схему электрической непи. Порядок цепи должен вводиться во время работы программы.
Факультатив
Написать программу, которая вычерчивает на экране кривую Гильберта, показанную ниже. Обратите внимание, что кривая второго порядка образуется путем соединения четырех кривых первого порядка, две из которых повернуты на 90°: одна по часовой стрелке, а другая — против. Аналогичным образом получается кривая третьего порядка, но при этом в качестве "кирпичиков" используются кривые второго порядка. Порядок , вычерчивания кривой должен вводиться во время работы про- 1раммы.
Написать программу, которая вычерчивает кривую Серпин- ского. Порядок кривой должен задаваться во время работы программы. Вид кривых Серпинского первого, второго и третьего порядков приведен ниже.
Ж^й^«
w
i^»
Kei*
Cena*
Cena
sunin
^8*
Часть II. Решения
Задача 1
х: real; { аргумент функции } у: real; { значение функции }
Задача 2
funt: real; { вес в фунтах } kg: real; { вес в килограммах }
Задача 5
rl: real; { диаметр кольца ) r2: real; { диаметр отверстия } s: real; { площадь кольца )
Задача 7
CenaTetг: real;
{цена тетради }
*KolTetг: integer;
{ количество тетрадей }
CenaKar: real;
| цена карандаша )
KolKar: integer;
f количество карандашей }
CenaLin: real;
{ цена линейки }
Summa: real;
{ стоимость покупки }
Задача 11
п:=п+1;
Задача 14
у :=-2,7*х*х*х+0.23*х*х-1.4;
Задача 16
kg:=gunt*O.4095;
Задача 34 sum:=ct*nt+ck*nk+cl; {ct,ck —цена тетради, карандаша и линейки } { nt, nk —количество тетрадей и карандашей}
Задача 38
begin
writein(’Унылая пора! Очей очарованье! 1) ;
writein(’Приятна мне твоя прощальная пора.1);
writeln ('Люблю я пышное природы увяданье, ’);
writeln(’В багрец и золото одетые леса.'); writein;
writein (1А. С. Пушкин 1) ;
readin; { чтобы стихотворение не исчезло с экрана } end
Задача 42
writeln(а:6:2);
writein(Ь:6:2);
writeln(с:6:2);
Задача 43
writeln('xl=’,xl: 6: 2, ’ х2 = ' ,х2: 6:2);
Задача 44
uses Crt;
begin
TextBackGround(Blue); { цвет фона }
TextColor(LightGray); { цвет символов }
ClrScr;{ очистить экран }
writeln Г Буря мглою небо кроет’);
writeln(’Вихри снежные крутя.');
writeln('То как зверь она завоет,');
writeln(’То заплачет, как дитя.');
writein;
writein('А. С.Пушкин1);
readin; ( чтобы стихотворение не исчезло с экрана } . end.
Задача 45
Uses Crt;
begin-
TextBackGround (Black);
ClrScr;
TextColor (Red);
write(’Каждый 1);
Text Color (Li ghtRed); {оранжевый заменим светло-красным) write(’охотник 1);
TextColor(Yellow);
write(’желает ');
TextColor (Green);
write(’знать ’);
TextColor(LightBlue);
write(’где ’>;
TextColor(Blue);
write(*сидит 1);
TextColor(Magenta); -
write(’фазан.’);
readin; { чтобы фраза не исчезала с экрана } end.
Задача 47
readin (и);
readin(г); .
Задача 48
readin (и, г);
Задача 49
{ объявление переменных )
г, h : real; (радиус и высота цилиндра}
v: real; ( объем цилиндра}
{ фрагмент программы }
writein ('Введите исходные данные:');
write (1 Радиус цилиндра —> *);
readin ( г );
writein('Высота цилиндра —>');
readln(h);
Задача 51
( Вычисление площади параллелограмма } var
lfw: real; { длина и ширина параллелограмма}
real; { площадь параллелограмма)
begin
writein (' Вычисление площади параллелограмма *);
writein(1 Введите исходные даные:');
write ('Длина (см.)—> ');
readln(l);
write ('Ширина (см.) —>') ;
readln(w);
s:=l*w;
writein (' Площадь параллелограмма: ', s: 6: 2, ' кв.см.'); readln;
Задача 53
{ Вычисление площади поверхности параллелепипеда } var lfw,h : real; { длина, ширина и высота параллелепипеда] s: real; { площадь поверхности параллелепипеда}
begin
writein('Вычисление площади поверхности параллелепипеда');
writein('Введите исходные даные:');
write ('Длина (см) —> 1) ;
readln(l);
write ('ПЬфина (см) —>') ;
readln(w);
write (' Высота (см) —>');
readln (w) ;
= (l*w + l*h + w*h)*2;
writeln(’Площадь поверхности параллелепипеда : ’, s: 6: 2,
1 кв.см.’);1
readin; end.
Задача 55
{ Вычисление объема цилиндра } var
r,h,v: real; ( радиус основания, высота и объем цилиндра J begin
writeln(•Вычисление объема цилиндра ’) ;
writeln(’Введите исходные данные: ’);
write(’радиус основания (см) —> ’);
readin(г);
write (’ высота цилиндра (см) —> ’);
readln (h);
v := 2*3.1435926*r*r*h;
writeln(’Объем цилиндра ’fv:6:2,’ см.куб,’);
writeln(’Для завершения работы программы нажмите <Enter>’); readln;
end.
Задача 56
{ Вычисление стоимости покупки }
var
kar,tetr: real; { цена карандаша и тетради }
nk,nt: integer; { количество тетрадей и карандашей }
smrim: real; { стоимость покупки }
begin
writeln (’Вычисление стоимости покупки.’);
writeln(’Введите исходные данные:’);
write(’Цена тетради (руб.) —>’);
readln(tetr);
write(1 Количество тетрадей —>’);
readln(nt);
write(’Цена карандаша (руб.) —>');
readln (kar) ;
write(’Количество карандашей —>•);
readln (nk) ;
summ: =tetr*nt + kar*nk;
■ writein;
writein {’ Стоимость покупки: 1, suirm: 6:2,’ руб. 1) ; readln;
end
Задача 60
( Вычисление площади треугольника по двум сторонам и углу между ними }
var
a,b: real; { длины сторон }
f: real; { величина угла, выраженная в градусах }
s: real; { площадь треугольника }
begin
writein(’Вычисление площади треугольника.');
writein(’Введите в одной строке длины сторон треугольника’); write(’->’);
readln (а, Ь);
writein(’Введите величину угла между сторонами ’, ’треугольника1);
write(’->’);
read]n(f);
{ s=a*h/2
h (высота треугольника) может быть вычислена по формуле: h=b*sin(f).
Однако, в Turbo Pascal аргумент функции Sin должен быть выражен в радианах (1 рад, = 180/3.1415925, где 3.1415926 — число "ПИ").}
s:=a*b*sin(f*3.141592 6/180)/2;
writeIn;
writein(’Площадь треугольника:r,s:6:2,1 кв.см.’); readln;
end.
Задача 61
( Вычисление сопротивления электрической цепи, состоящей из двух параллельно соединенных элементов. }
var
rl,r2: real; { сопротивление элементов цепи }
г: real;{ суммарное сопротивление цепи }
— ———
begin
writein(’Вычисление сопротивления электрической цепи');
writein ('при параллельном соединении элементов.1);
writein('Введите исходные данные: *);
write(1Величина первого сопротивления (Ом) —>1}; readln(rl);
write('Величина второго сопротивления (Ом) —>');
readln (г2);
r:=rl*r2/(г!+г2);
writein;
writein(1Сопротивление цепи:1,г:6:2,1 Ом'); readln;
end.
Задача 65
{ Вычисление стоимости поездки на дачу и обратно } var
rast: real; { расстояние до дачи }
rash: real; { расход бензина на 100 км пути ]
сепа: real; { цена одного литра бензина ]
suinm: real; { стоимость поездки на дачу и обратно }
begin
writein (’Вычисление стоимости поездки на дачу и обратно.1);
write СРасстояние до дачи (км) —>');
readln(rast);
write('Расход бензина (литров на 100 км) —>');
readln(rash);
write('Цена литра бензина (руб-) —>’);
readln(сепа) ;
suinm: ==2 * газ t /100* rash* сепа;
writeIn;
writein('Поездка на дачу и обратно обойдется в1г surarn: 6:2,’ руб.1);
readln;
end.
Задача 67
( Вычисление площади поверхности цилиндра } var
г: real; { радиус основания цилиндра 1
real; { высота цилиндра }
real; { площадь поверхности цилиндра }
begin
writelnf'Вычисление площади поверхности цилиндра1);
writein (’ Введите исходные данные: 1) ;
write('радиус основания цилиндра (см) ->’);
readin(г);
write (1 высота цилиндра (см) —> ’);
readln(h);
(
pi — именованная константа, ее значение равно числу ”ПИ" Sqr — функция Turbo Pascal, ее значение равно квадрату аргумента, т. е. Sqr(x) * х*х
}
s:-2*pi*sqr(г)+2*pi*r*h;
writein;
writein (1 Площадь поверхности цилиндра *, s: 6 :.2, ’кв.см.'); readln;
end
Задача 69
{ Пересчет расстояния из верст в километры } var
real; { расстояние в верстах }
k: real; ( расстояние в километрах }
begin
writeln(’Пересчет расстояния из верст в километры1);
writein('Введите расстояние в верстах и нажмите <Enter>’);
write('->');
readln (v);
k:-v*l.C668;
writein (v: 6:2, r верст(а/ы) - это 1, k: 6 :2, \ км’) ;
writein(’Для завершения работы программы нажмите ’, 1<Enter>');
readln;
end,
Задача 71
{ Вычисление дохода по вкладу } var
sum: real; { сумма вклада }
srok:real;( срок вклада )
stavkazreal; f процентная ставка } dohodzreal; { доход по вкладу }
begin
writein('Вычисление дохода по вкладу.’);
writein(’Введите исходные данные:1);
write(’Величина вклада (руб.) —> ’);
readln(sum);
write (’Срок вклада (дней) —> ’);
readln(srok);
write(’Процентная ставка —>*);
readln(stavka);
dohod:=(sum*stavka/100)/365*srok; { 3 65 — кол-во дней в году }
sum: =sum+dohod;
writein;
writein (11) ;
writein (1 Доход ’,dohod: 9:2,’ руб. 1);
writeIn(•Сумма по окончании срока вклада:•,sum:9:2,
•руб.1);
readln;
end
Задача 72
( Преобразование величины, выраженной в минутах,
в соответсвующее ей значение, выраженное в часах и минутах } var
min: integer; { интервал в минутах )
integer;{ количество часов }
integer;{ количество минут )
begin
writein (’Введите величину временного интервала (в минутах)1); write('->’X;
readin (min);
h:= min div 60;
m:= min mod 60;
write! n;
writein (min, ’ мин. — это ’rh,’ час.’,m, ’ мин.’);
readln;
end.
Задача 73.
{ Преобразование числа в денежный формат } var
real; { дробное число } г: integer; { целая часть числа (рубли) } к; integer; { дробная часть числа (копейки) } begin
writeln('Преобразование числа в денежный формат.’); write('Введите дробное число —>’);
readin (п);У
r:= Round(n*100) div 10Q.;, k:= Round(n*100) mod 100; writein;
writein (n: 6:2, 1 руб. — это ’,rf’ руб.^к,’ коп.’);
*readln; end.
Задача 76
{ Вычисление частного } var
a,b,c: real; { делимое, делитель и частное } begin
writein('Вычисление частного');
writein(• Введите в одной строке делимое и делитель,’); writein (’затем нажмите <Enter>');
write ('->’); readln (a, b) ; if b <> 0 then begin c:=a/b;
writein('частное от деления ',a:6:3,’ на ',Ь:6:3, ’равно ’,c:6:3);
end else
writein('Ошибка! Делитель не должен быть ’, ’равен нулю’’);
readln;
end.
Задача 77
{ Вычисление площади кольца j
var
rl,г 2 : real; { радиус кольца и отверстия }
s : real; { площадь кольца }
begin
writeln( 'Введите исходные данные: ’);
write (’радиус кольца (см) —> 1);
readin(rl);
write(’радиус отверстия (см) —> 1);
readin (г2);
if rl > r2 then
begin
s:=2*3.14*(rl-r2);
writeIn(1 Площадь кольца *,s:6:2,1 кв.см’);
end
else writein(’Ошибка! Радиус отверстия не может быть ’, ’больше радиуса кольца.’);
writein (’Для завершения работы программы нажмите <Enter>’); readin;
end.
Задача 78
{ Вычисление сопротивления электрической цепи ]
var
rl,r2: real; { величины сопротивлений цепи }
г: real; { суммарное сопротивление }
t: integer; { тип соединения элементов:
— последовательное;
— параллельное }
begin
writein (1 Вычисление сопротивления электрической цепи ’) ;
writein('Введите исходные данные:');
write(’Величина первого сопротивления (Ом) —>’);
readln(rl);
write (’Величина второго сопротивления (Ом) —>’);
readln(г2);
write(’Тип соединения элементов (1-последовательное, ’, ’2-параллельное) —>');
readln(t);
if t=l'.
then r:»rl*r2
else r:=rl*r2/(rl+r2);
writein(’Сопротивление цепи: 1,г:5:2,* Ом’); readin;
end.
Задача 79
{ Решение квадратного уравнения }
program sqroot;
var.
a,b,c:real; { коэффициенты уравнения }
xl,x2:real;{ корни уравнения }
d: real; { дискриминант }
begin
writein(* * Решение квадратного уравнения *’);
write(1Введите в одной строке значения коэффициентов1); writeln(' и нажмите <Enter>*);
write(•->');
readin (a, b, с);{ ввод коэффициентов }
d:=b*b-4*a*c;{ вычисление дискриминанта )
if d >= О then
begin.
xl ;=-b+sqrt (d) / (2*а);
x2 :«-b-sqrt (d) / (2*a);
writein(1Корни уравнения:’);
, writein(’xl=’rxl;9:3);*
writein("x2=1,x2:9:3) ;
end else
writein (• Корней нет ’); end.
Задача 81
f Вычисление стоимости покупки с учетом скидки } var
begin
writein(’Вычисление стоимости покупки с учетом скидки.’] ;
writein(’Введите стоимость покупки и нажмите <Enter>.T); write(’->');
readln (summ);
if summ > 500 then ( предоставляется скидка }
begin if summ > 1000
then
begin
'writein (1 Вам предоставляется скидка 5% ’) ; '
summ:=0.95*summ;
end else begin
writein (’Вам предоставляется скидка 3% ’); summ: т0.97* summ;
end; (
writein(’Сумма покупки с учетом скидки: ’, summ:6:2,’ руб.’);
end
else
writein(1Скидка не предоставляется.’);
readln;
end.
Задача 82
{ Проверка знания истории ) var
year: integer; { ответ испытуемого )
begin
writein (ТВ каком году был основан Санкт-Петербург? ’);
writein{’Введите число и нажмите <Enter>’);
write (’->’);
readln (year);
if year = 1703
then writein(’Правильно.•) else
begin
write(1 Вы ошиблись, 1);
writein (’Санкт-Петербург был основан в 1703 году.*) end, reaaln;
end
Задача 84
( Проверка знания истории архитектуры } var
otv: integer; { номер ответа, выбранного испытуемым } begin
writein(*Архитектор Исаакиевского собора:1);
writein(' 1. Доменико Трезини’];
writeln(12. Огюст Монферран1);
writein(' 3. Карл Росси*);
write] п;
writein(’Введите номер правильного ответа и нажмите <Enter>');
write('->’);
readin(otv);
if otv = 2
then writein(1Правильно.') else begin
writein(* Вы ошиблись. 1);
writein(’Архитектор Исаакиевского собора ’, 1Огюст Монферран.1);
end;
readin;
end-
Задача 86
{ Сравнение двух целых чисел } var
а,Ь: integer; { сравниваемые числа }
begin
write('Введите в одной строке два целых ');
writein(’числа и нажмите <Enter>’);
write('->');
readln (а, Ь);
if а = b
then writein('числа равны1)
else if а < Ь
then writein(а,' меньше *, Ь)
else writein(а,1 больше ’, Ь) ; readln;
end.
Задача 87
{ Проверка умения умножать числа } var
ml,m2,p: integer; { сомножители и произведение } о tv: integer; { ответ испытуемого }
begin
Randomize;{ инициализация генератора случайных
чисел }
ml:-Random(9)+1;{ значение функции Random(а) — число )
{ в диапазоне от 0 до а-1)
m2:=Random(9)+1;
p:=ml*m2;
writein (’Сколько будет ’, ml, ' х1, m2, ' ?') ;
writein('Введите ответ и нажмите <Enter>’);
write(’ -> ');
readln(otv);
if p = otv
then writein(’Правильно.1)
else writein (1 Вы ошиблись. ’ ,mlf 'x* zm2, '=' ,p) ; readln;
end.
Задача 89
( Проверяет на четность введенное с клавиатуры число ) var
n: integer; { введенное пользователем число }
begin
writein('Введите целое число и нажмите <Enter>’);
write('->');
readln(n);
write (’Число 1,n, 1 — ’);
if n mod 2 = С
then writein(1четное.*)
else writein(1нечетное.’);
readin; { чтобы результат не исчез с экрана } end.
Задача 91
{ Вычисление стоимости телефонного разговора с учетом скидки, предоставляемой по субботам и воскресеньям }
vac
Time:integer; { длительность разговора )
Day:integer; ( день недели }
Summa:real; { стоимость разговора }
begin
writein(•Вычисление стоимости разговора по телефону.1);
writein(•Введите исходные данные:•);
write(1 Длительность разговора1);
write(• (целое кол-во минут) —>');
readin (Time);
write(•День недели1);
write(1 (1-понедельник,..,7-воскресенье)-> ’);
read In (Day);
Summa:- 2.3 * Time;{ цена минуты 2.3 руб.}
if (Day = 6) or (Day = 7)
then begin
writein(•Предоставляется скидка 20%1);
Summa: Summa * 0.8;
end;
writein (• Стоимость разговора : 1, Summa: 8:2, * руб. ’) ; readin;
end
Задача 92
{ Контроль веса }
var
w:real;{ вес }
h:real;{ рост }
opt:real; { оптимальный вес } d:real; ( отклонение от оптимального веса }
begin
writeIn(’Введите в одной строке через пробел’);
writein (.'рост (см) и вес (кг), затем нажмите <Enter>'); write(’->’);
readln (h,w);
opt:=h-100;
if w^opt then writein(’Ваш вес оптимален1 *) else
if w<opt
then begin d:=opt-w;
writein(’Вам надо поправиться на ’, d:5:2, 1 кг.’);
end
else begin d:=w-opt;
writein(’Вам надо похудеть на1, d:5:2, ’ кг1);
end;
readln;
end
Задача 93
{ Определение времени года по номеру месяца ) var month: integer; { номер месяца }
begin
writein(’Введите номер месяца (число от 1 до 12) и наймите <Enter> ’);
write(’->’);
readln (month) ;
case month of
1,2,3 2: writeln(r3HMa’);
. 5:writein(1 ВеснаT);
.8:writein(’Лето*);
.11: writeln(’Осень•j;
else writein('Число должно быть от 1 до 12’);
end;
readin;
end.
Задача 95,
{ Определение стоимости междугороднего телефонного разговора }
var
kod: integer; { код города }
cena: real; { цена минуты )
dlit: integer; { длительность разговора }
surum: real;( стоимость разговора )
begin
writein(’Вычисление стоимости разговора по телефону.’);
wrrteln(’Введите исходные данные:1);
write(’Код города —>’);
read!n(kod);
write(’Длительность разговора (целое кол-во минут) —>’); readin(dlit);
write(’Город: ’);
case kod of
432: begin
writeln(’Владивосток1);
cena:=2.2;
end;
095: begin
writein(’Москва*);
cena:=1;
end;
815: begin
writein('Мурманск1);
cena:=l.2;
end;
846: begin
writeIn(’Самара’);
cena:=1.4;
end;
end;
suium :- cena * dlit;
writein(’Иена минуты:1,cena:6:2,' руб.’);
writein ('Стоимость разговора:',suinm: 6:2,1 руб.1); readin;
Задача 96
( Дописывает после числа слово "рубль” в правильной форме ) var
n: integer; { число )
m: integer; { остаток от деления п на 100 (последние две цифры) }
г: integer; { остаток от деления п на 10 (последняя цифра/ ) begin
writein('Введите целое число (от 1 до 999) \
1 и нажмите <Enter>’);
write(*-> 1);
readln (n) ;
write(n,1 ');
{ окончание определяется двумя последними цифрами ) if n>100
Ithen m := n mod 100;
Iif (m >= 11) and (m <= 14)
then
Iwri teIn(1рублей’)
Ielse begin
r:=n mod 10;
Icase r of
I0, 5 .. 9: writein(’рублей’};
write]n (’рубль *);
I2..4: writein (rрубля’);
Iend;
end;
I readln;
I Задача 98
I { Вычисление даты следующего дня )
var
I day:integer;
month: integer;
year:integer;
last:boolean; I TRUE, если текущий день последний день месяца }
г:integer; { если год високосный, то остаток от ]
{ деления year на 4 равен нулю }
begin
write(1Введите цифрами сегодняшнюю дату1);
write(*(число месяц год) —> ');
readin (day, month, year);
last:-FALSE;
case month of
1,3,5,7,8,10,12 if day-31
then Last:-TRUE;
4,6,9,11:if day=30
then last:-TRUE;
if day - 28 then
begin
r:=year mod 4;
if r <> 0
then last:=TRUE;
end;
end; ( case }
if last
then begin
writeLn('Последний день месяца!1);
day:-l;
if month-12
then begin
month:-1;
year:-year + 1;
writein(’С наступающим Новым годом!1) ;
end
else month:-month + I;
end
else day:-day + 1;
writein('Завтра ’, day,*.', month,*.’,year );
readin;
end.
Задача 100
{ Выводит таблицу квадратов первых десяти j целых положительных чисел }
I var
х: integer; { число )
[у: integer; { квадрат числа }
Ii: integer; { счетчик циклов }
j begin
Iwritein(’Таблицаквадратов1);
writelnf’');
writein (’ЧислоКвадрат1);
writeln(’’);
Ifor i:=l to 10do
Iwritein(x:3,у:10);
Ix:—x+1;
end;
h writein(’’);
readin;
I end.
I Задача 102
I { Вычисляет сумму первых n целых положительных чисел }
I var
Яп: integer;{ кол-во суммируемых чисел )
summ: integer; { сумма }
ji: integer;{ счетчик циклов ]
I begin
Iwritein(’Вычисление суммы положительных чисел’);
Jwrite(’Введитеколичество суммируемых чисел—>’];
Ireadin (п);
Ismnm:=0;
I for i:=l to n do
Jsumm:=summ+i;
I write (’Сумма первых ’ ,nf’ целых положительных чисел ’);
writein (• равна *, summ); readin;
end.
Задача 104
{ Вычисляет частичную сумму ряда: 1,3, 5,7 .., ) var
е: integer; { член ряда ]
п: integer; { кол-во суммируемых членов }
summ: integer; ( сумма членов ряда }
integer; ( счетчик циклов }
begin
writein(’Вычисление частичной суммы ряда: 1,3,5, 7, .„.1) ;
writein (’Введите количество суммируемых членов —>’);
readin(п);
е:=1; { первый член ряда }
summ:=0;
for i:~l to n do
begin
summ:=suium+e; { прибавить к сумме очередной член ряда } е:~е+2;{ вычислить значение следующего члена
ряда }
end;
writein(’Сумма первых 1 ,n, ’ членов ряда равна ’, summ); readin;
end.
Задача 105
{ Вычисление суммы ряда 1+1/2+1/34 .., }
var
n: integer; { кол-во суммируемых членов ряда } i:integer; { номер элемента ряда } elem:real; { значение элемента ряда ] summ: real; { сумма элементов ряда }
writeIn(’Вычисление частичной суммы ряда 1+1/2+1/3+...’);
writein(’Введите кол-во суммируемых членов ряда'); write(’->’);
readln(n);
surnm: -0;
for i;—1 to n do
begin
elem:=l/i;
summ: =summ+elem;
end;
write (’Сумма первых ’ ,n);
writein (' членов ряда равна 1, summ: 6:4); readln;
end.
Задача 106
{ Таблица степеней двойки } var
n: integer; { показатель степени }
x: integer; { значение 2 в степени n }
begin
writeIn(’Таблица степеней двойки1);
x:=l;
for n:=0 to 10 do
begin
writein(n:2,x:6);
x:=x*2;
end;
readln; end.
Задача 108
{ Таблица функции } const
LB=~2;{ нижняя граница диапазона изменения аргумента }
НВ=2;{ верхняя граница диапазона изменения аргумента }
DX=0,5; { приращение аргумента }
var
х,у: real; { аргумент и значение функции )
n: integer; { кол-во точек } i: integer; { счетчик циклов )
begin
n:=Round((HB - LB)/DX)+1;
x:=LB;
writein (1’) ;
writein(1 x |у');
writein (11);
for i:-1 to n do
y:=-2.4 *rx*x+5*X”3;
writein(x:8:2,’ I ',y:8:2); x:=x+DX;
end;
writein(11) ;
readin;
end.
Задача 111
{ Вычисляет среднее арифметическое последовательности дробных чисел, вводимой с клавиатуры }
const
L=5; { длина последовательности }
var
a: real; { число }
n: integer; { кол-вс введенных чисел }
sum: real; { сумма введенных чисел }
sred: real; [ среднее арифметическое введенных чисел }
begin
writein(1Обработка последовательности дробных чисел’);
writein(•После ввода каждого числа нажимайте <Enter>1); sum:=O;
for n:=l to L do
write('->’);
readln(a);
sum:=sum+a;
sred:-surr/n;
writein(1 Введено чисел:’,n:3,
Сумма: 1, sum:6:2f
1 Сред, арифметическое: ', s red: 6:2) ;
end;
axaxЧасть IL Решения 97
ax
ax
writein(’Для завершения работы программы нажмите <Pnter>'); readln;
end.
Задача 112
{ Вычисляет среднее арифметическое и определяет минимальное и максимальное число последовательности дробных чисел, вводимых с клавиатуры }
var
i a: real; { очередное число } п: integer; { количество чисел } sum: real; { сумма введенных чисел I
| sred: real; { среднее арифметическое }
min: real; { минимальное число последовательности ) max: real; { максимальное число последовательности ) 1: integer; { счетчик циклов }
begin
। writein(’Обработка последовательности дробных чисел.’";
| write (’Введите количество чисел последовательности —>’); readln(п);
writein(’Вводите последовательность.’);
writein(1После ввода каждого числа нажимайте <Enter>’); write(’->’);
readln(а);{ вводим первое число последовательности )
{ предположим, что:}
min:=a; { первое число является минимальным } шах:=а; { первое число является максимальным } sum:=a;
{ введем остальные числа |
for i:=l to n-1 do
jwrite(’->’);
'readln(a);
sum:^sum+a;
if a < min then min:=a;
Jif a > max then max:=a;
end;
Isred:=sum/n;
4 Зак. 161
writein(•Количество чисел:', п);
writein(’Среднее арифметическое:1,sred: 6:2);
writein (1 Минимальное число: 1 r min: 6:2);
writeIn(’Максимальное число:’,шах:6:2);
writein(’Для завершения работы программы нажмите <Enter>’); readin;
end.
Задача 114
{ Генерирует три последовательности случайных чисел и вычисляет среднее арифметическое каждой последовательности }
const
N=3;{ кол-во последовательностей }
L=10; { длина последовательности }
var
г: integer; { случайное число } sum: integer; { сумма чисел последовательности } sred: real; { среднее арифметическое } irj: integer; { счетчики циклов }
begin
writein(1 Случайные числа’);
Randomize; I инициализация генератора случ. чисел } for i:=l to N do
begin
{ генерируем последовательность } sum:-O; { не забыть обнулить ’ } for j:=l to L do
r:^Random(10)+1;
write(r:3); sum:=sum+r;
end;
s red:—sum/L;
writein(’ Сред.арифм,: \ sred:6:2);
end;
writein(’Для завершения работы программы нажмите <Enter>'); readln;
erea< end.erea< end.ЗадеI Выв< var m:n:P: begin m: = foi be<enc rec end.ЗадеI Выв< var m:n:P: begin m: = foi be<enc rec end.end.
e
rea< end.
e
rea< end.
Заде
I Выв< var m:
n:
P: begin m: = foi be<
enc rec end.
Заде
I Выв< var m:
n:
P: begin m: = foi be<
enc rec end.
Задача 116
constLB—4;НВ=4;DX=0.5;varconstLB—4;НВ=4;DX=0.5;var{ Таблица функции у= | х | }
const
LB—4;
НВ=4;
DX=0.5;
var
const
LB—4;
НВ=4;
DX=0.5;
var
{ нижняя граница диапазона изменения аргумента } { верхняя граница диапазона изменения аргумента } { приращение аргумента }
Iхуу: real;{аргумент и значениефункции }
In: integer;{кол-во точек }
I1: integer;{счетчик циклов }
I begin
I writein(’Таблица значении функции у-|х| 1);
In:-Round((НВ - LB)/DX)+1;
Ix:=LB;
for i:=l to n do
I begin
y:=Abs(x);
Iwritein(x:6:2,y:6:2);
11x:=x+DX;
I end;
readln;
f end.
I I Задача 119
■ varJ m: integer;n: integer;p: integer;>* I beginIiv: =7;for n:-l to■ varJ m: integer;n: integer;p: integer;>* I beginIiv: =7;for n:-l toI Ц { Выводит таблицу умножения на 7 }
■ var
J m: integer;
n: integer;
p: integer;
>* I begin
Iiv: =7;
for n:-l to
■ var
J m: integer;
n: integer;
p: integer;
>* I begin
Iiv: =7;
for n:-l to
{ число, для которого надо вывеститаблицу умножения (множимое) )
{ множитель } { произведение }
10 do
begin
p:=m*n;
writein (m, *x' ,n, 1 = r ,p) ;
end;
readln; { чтобы результат не исчезал с экрана }
end.
Задача 120
{ Преобразование десятичного числа в двоичное } var dec: integer; { десятичное число } v: integer; { вес формируемого разряда } i: integer; { номер формируемого разряда )
begin
writein(’Преобразование десятичного числа в двоичное’);
writein(’Введите целое число от С до 255 и нажмите *, ’<Enter>’);
write(•->’); readin(dec); write(’Десятичному числу ’/dec,’ соответствует двоичное ’); v:-128;{ вес старшего разряда }
for i:=1 to 8 do begin if dec >= v then begin
write(’1’); dec:=dec-v; end else write (’O’);
v:—Round (v/2); { вес следующего разряда в два раза } { меньше веса текущего разряда }
end;
readin;
end.
Задача 121
{ Выводит на экран квадрат Пифагора - таблицу умножения. } var
i,j: integer; { номер строки и столбца таблицы )
р: integer; { произведение i на j }
begin
write(’’:4);{ левая верхняя клетка таблицы }
for j:-l to 10 do { первая строка - номера столбцов ) write(j : 4);
writein; for i:=1 to 10 do
begin
write(i:4);1 номер строки }
for j:=l to 10 do 1 строка таблицы ]
write(i*j:4);
writein;
end;
readin; { чтобы результат не исчезал с экрана } end.
Задача 122
{ Вычисление суммы ряда 1 -1/3 •*• 1/5 - 1/7 + ... } var х: real; { член ряда } n: integer; { количество суммируемых членов ] surcm: real; ( частичная сумма } i: integer; { счетчик циклов }
begin
writeIn(’Вычисление суммы ряда 1 -1/3 + 1/5 - 1/7 + ...’); write(’Введите кол-во суммируемых членов ряда ->’); readln(n); summ:^0; .
for i:= 1 to n do
begin x:=l/(2*i - 1); if (i mod 2) = 0 then x:=-l*x;
summ: -summ+x;
end;
writein (1 Сумма ряда:’, surnm: 8:6) ;
writein(’Значение pi/4 ’,pi/4:8:6);{ pi — именованная
константа } readin;
end.
Задача 123
{ Приближенное вычисление интеграла методом прямоугольников } var
а,Ь: reaJ;{ границы отрезка }
dx: real; { приращение аргумента (величина интервала) )
real;{приближенное значениеинтеграла}
integer; {количество интервалов}
real;{аргумент }
у:real;{значение функции в началеинтервала }
integer;
begin
writein(•Приближенное вычисление интеграла1);
write(’Нижняя граница отрезка -> *);
readin(а);
write('Верхняя граница отрезка -> ’);
readin(b);
write(’Приращение аргумента -> 1);
readln(dx);
n:=Round((b-a)/dx);
x: -a;
s:=C;
for i:-l to n do
begin
y:=5*x*x-x+2;{ значение функции в начале интервала )
s:=s Fy*dx;
x:~x+dx;
end;
writeIn(1 Значение интеграла: 1, s: 9:3) ;
writein(1Для завершения работы программы нажмите <Enter>1); readln;
end»
Задача 124
{ Приближенное вычисление интеграла методом трапеций } var
a,b: real; { границы отрезка }
dx: real; { приращение аргумента (величина интервала)}
real;{приближенное значениеинтеграла}
integer;{количество интервалов}
real;{аргумент }
yl,y2: real;{значение функции в началеивконце
интервала }
i: integer;
begin
writein(’Приближенное вычисление интеграла’);
write(’Нижняя граница отрезка -> );
readin(а);
write(’Верхняя граница отрезка -> ’);
readln (Ь);
write(’Приращение аргумента -> ’);
readln(dx) ;
n:=Round( (b-a) /dx) ;
x:=a;
s:=0;
for i:=l to n do
begin
yl:-5*x*x-x+2; { значение ф-и в начале интервала ) x:=x+dx;
у2:=5*х*х-х+2; { значение ф-и в конце интервала }
s:=s+(yl+y2)*dx/2;
end;
writeIn(’Значение интеграла: 1, s: 9:3);
writein(1Для завершения работы программы нажмите <Enter>’);
readln;
end.
Задача 126
{ Преобразование десятичного числа в двоичное } var
dec: integer; { десятичное число }
integer; { вес формируемого разряда }
1: integer; { номер формируемого разряда )
begin
writein(’Преобразование десятичного числа в двоичное’);
writein(1 Введите целое число от 0 до 255 и нажмите ’,
begin
if dec >= v then
begin
write('1') ;
dec:=dec-v;
end
else write('O');
v:=Round(v/2); { вес следующего разряда в два раза меньше }
end, readin;
end
Задача 127
then
koi:=ко1+1
else begin
writein(’ Вы ошиблись 1
’,numbl, *1,numb2, 1=1, res) ;
end;
end;
writein(1 Правильных ответов:1,koi);
write(’ Ваша оценка: ’);
case koi of
write]n(* 5’);
: write]n('4’);
writein(131);
0..5:writein(’21);
end;
writeIn(’ Для завершения работы с программой нажмите <Enter>’);
readin;
end.
Задача 128
kol:=0;
Randomize;
for i:-l to 10 do
begin
[ сгенерируем пример }
numbl:"Random(9) 4-1;{ первое число }
nuirib2:==Random(9) +1;{ второе число }
op:=Random(2);{ действие над числами ]
if ор=0 then
begin ( сложение) res: =патЫчпитЬ2 ; зор: = ’ч •;
begin { Вычитание }
sop:=’"’;
if numbl < numb2 then
begin { обменяем numbl и numb2}
buf:=numb2;
numb2:^numbl;
numbl:=buf;
end;
res:=numbl-numb2;
end;
write(’ \numbl, sop, numb2,' = '); { вывести пример }
readin(otv);{ получить ответ
испытуемого }
if otv = res
then
koi:=kol+l
else
begin
writeln(’ Вы ошиблись!
’,numbl,sop,numb2,1 =1,res);
end;
end;
writeIn(1 Правильных ответов:1,koi);
write(1 Ваша оценка:1);
case koi of
writein(’51);
: writein(’4’);
7,6: writein('31);
О..5:writein(121);
end;
writein(’ Для завершения работы с программой нажмите <Enter>•);
readln;
end.
Задача 129
( Простые электронные часы } uses Crt; { используем процедуры и функции библиотеки Crt ) var min,sec: integer; { минуты, секунды }
begin
ClrScr; { очистить экран } for min: =1 to 3 do begin for sec:=l to 60 do begin
Delay(LOCO); { задержка 1000 ms )
GotoXY(l,l); { установить курсор в 1-ю колонку 1-й строки } write (min, ':1, sec,’ ’); if KeyPressed { если нажата клавиша } then Halt; { завершить программу } end;
end; end.
Задача 130
{ Вычисление среднего арифметического последовательности положительных чисел }
var а : integer; { число, введенное с клавиатуры } n : integer; { количество чисел } s : integer; { сумма чисел ] m : real; { среднее арифметическое }
begin s:=0;
п:=0;
writein(1Вычисление среднего арифметического последовательности положительных чисел.1);
writein(’Вводите после стрелки числа. ’, ’Для завершения ввода введите ноль. ’);
repeat
write(’> ’);
readin(а) ;
s:=s+a;
n:=n+l;
untxl a <- 0;
n:=n-l;
writein(’Введено чисел:’,n);
writein(’Сумма чисел: ', s);
m := s/n;
write In (1 Среднее арифметическое: 1, m: 6:2) ;
writein (’Для завершения работы программы нажмите <Enter>’);
readin;
end
Задача 131
{ Определение максимального числа последовательности положительных чисел }
var
а : integer; { очередное число }
m : integer; { максимальное число }
begin
write(’Определение максимального числа’);
writein (’последовательности положительных чисел . ’);
writein(1Вводите после стрелки числа. ’,
’Для завершения ввода введите ноль.’);
ш:=0;
repeat
write(’>’);
readln(a);
if a > m then hi := a;
until a <- 0;
writein(’Максимальное число: ’ ,m);
игзге1п(’Для завершения работы программы нажмите <Enter>');
read In;
end.
Задача 132
{ Проверка, является ли введенное с клавиатуры целое число простым }
program prost; var
integer;
integer;
integer;
begin
write(•Введите целое число-> 1);
readin(n);
d:=2;{ сначала будем делить на два }
repeat
г:—n mod d;
if roO { n не разделилось нацело на d } then d:-d + 1;
until r-0; { пока не нашли число, на которое делится п } if d^n
then writein( n, 1 — простое число. ')
else writein(n,’ — не простое число.1);
end
Задача 134
{■ Игра "Угадай число" } const
NPOP=5; { количество попыток, предоставляемое игроку } var comp: integer; { число, "задуманное" компьютером } igrok: integer;' { вариант игрока } n: integer; { кол-во попыток, сделанное игроком ) begin
Randomize; { инициализация генератора случайных чисел } comp:-Random(9)+1; { компьютер задумал число }
writein(’Игра ’’Угадай число”. 1); writein('Компьютер "задумал” число от 1 до 10,’);
writein (’Угадайте его за 1 ,№0Р, ' попыток. 1); writein('Введите число и нажмите <Enter>.’); repeat n:=n+l;
wiite(’->’); read! n (igrok);
until (n = NPOP) or (comp = igrok); if comp = igrok
then writein (* Вы выиграли 1 1)
else wrireln (1 Вы проиграли! Компьютер задумал число 1, comp);
readin; end.
Задача 135
{ Таймер } uses Crt;
var
min,sec: integer; { задержка: минут и секунд } begin
writein(’Введите величину задержки в минутах и секундах, ’); writein(’например 2 30 и нажмите <Enter>.’);
write(’->’); readin(min,sec); ClrScr;
GotoXY(2,2); write(min,1:1,sec,’ ’);
repeat if sec = 0 then begin
min:=min~l; sec:=60;
end;
repeat
Delay(1000);{ задержка 1 сек }
sec:=sec-l;
GotoXY(2,2);
write(min,’: ’ fsee, 1 ’) ;
if KeyPressed( если нажата клавиша }
then Halt;{ завершить программу )
until sec = 0;
until (min = 0) and (sec = 0);
{ звуковой сигнал }
Sound(1000);( включить звук - сигнал частотой 1000 герц}
Delay(500); Nosound; { выключить звук} end.
Задача 136
{ Вычисление числа "ПИ"}
var
p:real;{ вычисляемое значение ПИ )
t:real;{ точность вычисления }
п:integer; { номер члена ряда } elem:real; { значение члена ряда ] begin р:=0; п:=1; elem:-l; { начальное значение} write(’Задайте точность вычисления ПИ-> ’); readln(t);
writein('Вычисление ПИ с точностью’, t: 9:6);
while elem >= t do
begin
elem:=l/ (2*n-l) ; if (n MOD 2) = 0 then p:=p-elem else p:=p+elem; n:=n+l; end; p:=p*4;
writeln{’Значение ПИ с точностью’,t:9:6,’ равно1zp:9:6); writein('Просуммировано *,n,* членов ряда.’); readin;
end.
Задача 137
{ Вычисление наибольшего общего делителя двух целых чисел }
var
nl,n2:integer; { числа, НОД которых надо найти J nod:integer; { наибольший общий делитель } г:integer; { остаток ст деления nl на п2 }
writein('Вычисление наибольшего общего делителя1); writein('для двух целых чисел.1);
write('Введите в одной строке два числа ');
writein('и нажмите <Enter>');
write('->');
readin (nl, n2) ;
while (nl mod n2) <>C do
begin
r:=nl mod n2; { остаток от деления} nl:=n2;
n2:=r;
end;
nod:=n2;
writein('НОД чисел ',nl,' и *,п2,* это 'rnod); readln;
end
Задача 138
( Приветствие }
var name: string[40j; { имя пользователя }
begin
writein(1Как Вас зовут?’);
writein('(введите свое имя и нажмите <Enter>');
write('->');
readln (name) ;
writein('Здравствуйте, ', name, '! '); readln;
end.
Задача 139
{ Посимвольный вывод сообщения } uses
Crt; ( для дос супа к процедуре Delay } var
msg: string[80];{ сообщение }
n: integer;{ номер выводимого символа ]
begin
msg: = ’Приветствую великого программиста I ’;
for п:=1 to Length (msg) do
begin
write (msg [n] );
Delay(100);{ задержка 0.1 сек }
end.
readin;
end
Задача 140
{ Выводит код введенного символа } var
sim: char; ( символ }
code: integer; { код символа }
begin
writein('Введите символ и нажмите <Enter>.');
writein('Для завершения работы программы введите точку.1); repeat
write(’->’);
readln(sim);
code:-Ord(sim);
writein('Символ: 1,sim,1 Код: *,code);
until sim = ’. 1;
end.
Задача 141
{ Вывод таблицы кодировки символов } var ch:char; { символ } dec:integer; { десятичным код символа } i,j:integer;
begin
dec:=O;
for i:=0 to 15 do { шестнадцать строк }
Begin dec:=i; { чтобы получить таблицу кодировки} ( для символов с кодами 128-255, } { эту инструкцию надо } { заменить на dec:=i+128;} for j:=1 to 8 do { восемь колонок } begin if(dec<7) or (dec>=14) then write(dec:4,1 -’,’ ', chr(dec):1,chr(179))
else { символы CR,LF, TAB не отображаются ) write(dec:4,1 -*,chr(179));
dec:=dec+16;
end;
writein; { переход к новой строке экрана } end;
readin;
end.x
Задача 142
var
st: string[80); { строка текста } len: integer; { длина строки } i: integer; { номер обрабатываемого символа } begin
writein(’Введите строку текста и нажмите <Enter>’); write(’->');
readln(st);
len:^Length(st);
for i:—1 to len do case st [ i ] of ’a’..'n': st[i]:=chr(ord(st[i])-32); ’p1..’я’: st[i]:=chr(ord(st[i])-80); end;
writein('Строка, преобразованная к верхнему регистру:*); writein(st);
readin;
end.
Задача 143
{ Удаление начальных пробелов строки }
var
st:string[80]; { строка }
begin
writein(1Удаление начальных пробелов строки.1);
write(’Введите строку:1);
readin(st);
while (pos(' ffSt) = 1) and (length (st)>0) do delete(st,1,1);
write(’Строка без начальных пробелов:’,st); readin;
end.
Задача 144
{ Проверка, является ли введенная с клавиатуры строка целым числом }
var
st: string[40I; { строка }
n: integer; { номер проверяемого символа }
begin
writein(’Введите число и нажмите <Enter>’);
write(’->’);
readln(st);
n:=l;
while (n <= Length (St)) and
((st[nJ >= ’O’) and (st[n) <-’9’))
do n:=n41;
write(’Введенная строка 1);
if n < Length(st)
then wrjte(1 не ’);
wri teln(’является целым числом. ’);
readln;
end.
Задача 146
{ проверяет, является ли введенная строка шестнадцатеричным числом }
var
st: string[20]; { строка }
integer; { номер проверяемого символа } error: boolean; { в строке есть неверный символ )
begin
writein(’Введите шестнадцатеричное число и нажмите <Enter>’);
write(’->’);
readln(st);
{ преобразуем введенную строку к верхнему регистру } for i:=l to Length(st)
do st[i]:=UpCase(st[i]);
i:=l;
error:=FALSE;
while (i <= Length (st)) and (not error)
do if ((st[i] >= ’O’) and (st[i] <= ’9')) or((st[i] >= ’A’) and (st[i] <= ’F’))
then i:=i+l
else error;=TRUE;
write(’Строка ’);
if error
then write (’не ’);
writein(’является шестнадцатеричным числом.’); readln;
end
Задача 147
{ проверяет, является ли введенная строка дробным числом без знака }
var
st: string[20]; { строка )
integer; { номер проверяемого символа ] err: boolean; ( TRUE - строка не дробное число ]
begin
writein(’Введите дробное число и нажмите <Enter>');
I write('->’);
Ireadin(sr);
Ii:=l;
I err:-TRUE; { пусть строка - не дробное число } if (st[i] >='lr) and (st[i) <=’9’) then { первый символ
Iцифра }
Ibegin
I( за цифрой возможно следут еще цифры }
Iwhile (st(i] >=,1|) and (st[ij <='9’) and
I (i<Length(st))
do i:*i+l;
{ за цифрами следует точка, но она не последний символ } if ((st[i] = ’.’) and (i < Length(st))) then { точка j
Ibegin
Ii:=i+l;
{ за точкой должна быть хотя бы одна цифре }
Iif ( (st[i] >=11’) and (st[i] <=r9’)) then
fbegin
Iwhile ((st[i] >=’1’) and (st[i) <=’9’) and
I(i<Length(st)))
do i:=i+l;
if i= Length (st) { последний символ — цифра) then err:=FALSE; { предположение об ошибке ложно }
end;
end;
end;
write (' Строка ’);
if err
then write(’не 1);
Iwritein('является дробным числом. ’);
readln;
end.
Задача 148
{ Программа преобразует введенное с клавиатуры двоичное восьмиразрядное число в десятичное ]
var
bin: string[8j; { изображение двоичного числа }
dec: integer; { десятичное число }
г: str±ng[l];{ i-й разряд двоичного числа }
v: integer;{ вес i-ro разряда двоичного числа }
integer; { номер разряда двоичного числа } begin
writein('Введите восьмиразрядное двоичное число');
writein('и нажмите <Enter>.1);
write('->');
readln(bin);
if Length(bin) <> 8 then
writeln('Число должно быть восьмиразрядным.')
else begin
dec:-0;
v:=128; {вес старшего (8-го) разряда двоичного числа } for i:=l to 8 do
begin
r:=bin[il; { вьщелить i-й разряд I
if r - ' 1' then
dec:=dec+v;
v:=Round(v/2);{ вычислить вес следующего разряда )
end;
write (1 Двоичному числу ’, bin, 1) ;
writein(' соответствует десятичное 1,dec);
end;
writein('Для завершения работы программы нажмите
<Enter>. ’);
readin;
end.
Задача 149
var
st: strang[2]; { шестнадцатеричное число )
d: integer; { десятичное число, соответствующее введенному шестнадцатеричному }
v: integer; .{ вес разряда шестнадцатеричного числа }
integer;
begin
writein('Введите двухразрядное шестнадцатеричное число г, 'и нажмите <Enter>.1);
write[’->’); readln(st);
{ преобразуем введенную строку к верхнему регистру ) for i:=l to Length(st)
do st[1]:=UpCase(st[i]);
i:=Length(st); { обрабатываем с младшего разряда } v:=l;(и его вес равен единице }
while (i>0) and
(((st[ij >= ’O’) and (st[i] <= ’91)) or
((st[i] >= ’A’) and (st[i] <= ’F’))) do begin
{ здесь символ - цифра или латинская буква от А до F} if [st[i] >- ’О’) and (st[ij <= 19’)
then d:=d + v * ( Ord (st [i])-46 )
{ Ord(’O’) * 48, Ord('le) = 49, и т.д. } else d:=d + v * (Ord(st[i]) - 55);
( Ord(’A’) = 65, OrdCB’) = 66, и т.д. }
i:=i-l; { к предыдущему разряду } v:=v*16;
end;
if i=0 { обработаны все разряды }
then writein ('Шестнадцатеричному числу ’, st,
1 соответствуе десятичное 1,d)
else writein(’Введенная строка не является 1,
1шеснадцатеричной цифрой.1);
readin; end,
Задача 150
{ Программа преобразует десятичное число
в число в указанной пользователем системе счисления (от 2-х до 10-ти) }
uses Ort;
var
о:integer; { Основание системы счисления }
n:integer; { Исходное число )
г:integer;{ Остаток от деления числа на основание
сист. счисл. )
s: string[16];{ Представление числа в заданной
сист. счисл. )
buf:string[1j;
begin
ClrScr;
write(*Введите целое число -> 1);
readln(n);
write(‘Введите основание системы счисления -> •);
readln (о) ;
s:=*1;
{ делим исходное число на основание системы счисления до тех пор, пока остаток от деления больше основания системы счисления.
Остаток от деления на каждом шаге - очередная цифра. }
repeat
r:-n mod о; ( очередная цифра ) n:-n div о; { целая часть деления ] Ser(г,buf); { преобразование цифры в строку] s:=buf+s;
until(n<o);
Str(n,buf);
s:=buf+s;
wrrteln(s);
readln;
end.
Задача 151
{ Программа преобразует десятичное число в шестнадцатеричное }
uses Crt;
var
n:integer; { Исходное число }
r:integer; { Остаток от деления числа на основание
сист. счисл. )
s:string[16];{ Представление числа в заданной
сист. счисл. )
buf: string [ 1 ];
begin
ClrScr;
write(1Введите целое число -> 1);
readln(n);
s:—'1;
{ делим исходное число на основание системы счисления (16) до тех пор, пока остаток от деления больше основания системы счисления.
Остаток от деления на каждом таге - очередная цифра. }
write ('Десятичному числу 1, п);
write(1 соотвествует шестнадцатеричное 1);
repeat
r:=n mod 16;{ очередная цифра )
n:=n div 16;{ целая часть деления }
if г<10
then buf:=chr(r+48){ chr(48) = 'О’, ctir(49]=1l'
и т.д. }
else buf:chr(г+55); { chr(65) = ’A', chr(66'='B’' и т.д. }
s:=buf+s;
until (n<16);
if n о 0 then begin
if n<10
then buf:=chr(n+48)
else buf:=chr(n4 55);
s:=buf+s;
end;
writein(s);
readln;
end.
Задача 152
{ Программа вычисляет значение арифметического выражения, введенного с клавиатуры }
uses Crt;
var
s:string[80];{сторока }
integer;(длина строки }
z:integer;{значение выражения)
n:integer;{очередное число }
integer;{номер числа в строке}
err: integer; { код ошибки, при преобразовании символа в число }
begin
ClrScr;
writein{1Введите арифметическое выражение,*);
writein(1 например, 4+5-3'-5+2 и нажмите клавишу <Enter>'); write(•->*);
readln(s);
val(s[1],z,err);
i:=3;
repeat
val(s[i],n,err); { получить очередное однозначноечисло }
if s[i-l] = *+*
then z:=z+n else z:-z-n;
i:-i+2;
until i > Length(s);
writein('Значение введенного выражения: *,z);
writein('Для завершения программы нажмите <Enter>.'); readin;
end,
Задача 153
{ Подсчет кол-ва ненулевых эл-тов массива } const
SIZE=5; ( размер массива } var
a: array[1..SIZE] of integer;
n: integer; { кол-во ненулевых эл-тов }
integer; { индекс }
begin
writein(1Ввод массива целых чисел.');
write(1После ввода каждого числа 1);
writein('нажимайте <Enter>1);
п:-0;
for i:=l to SIZE do
begin
write(’a[*,ir1] -> 1);
readln(a[i]);
if a[i] о 0 then n:=n+l;
end;
writein(’В массиве ', n, ’ ненулевых элемента.'); readin;
end»
Задача 154
{ Поиск минимального элемента массива } const
НВ-5;{ размер массива }
var
а : array [1..НВ] of integer;
min: integer; {минимальный элемент массива )
i : integer;
begin
writein(1 Поиск минимального элемента массива.');
writein(’Введите в одной строке элементы массива (1, НВ, 1 целых чисел)’);
writein('и нажмите <Enter>.');
write(' -> 1);
for i:=l to HB-1 do read(a[i]);
readln(a[HB]);{ чтобы правильно работала
находящаяся в конце программы инструкция readln }
min:=a[l]; { Предположим, что первый эл-т минимальный } { сравним оставшиеся эл—ты массива с минимальным )
for i:=2 to НВ do
if a[i] < min then min := a[i];
writein ('Минимальный элемент массива: ', min); readln;
end.
Задача 156
{ Вычисление средней (за неделю) температуры воздуха } const
{ названия дней недели - массив строковых констант } day: array[ 1. ► 7 ] of string[11] = (1Понедельник1,'Вторник1,
Среда *,'Четверг1,1 Пятница1 , ’Суббота', 'Воскресенье*) ;
var
temper: array [ 1.. 7 ] of real; ( температура ]
sum:real;{ сумма температур за неделю )
sredn: real;{ средняя температура за неделю )
i:integer;
begin
writein(’Задайте температуру воздуха за неделю.*);
for i:=l to 7 do
began
write(day [i],’->’); readln(temper[i]);
end;
{ вычисление средней температуры за неделю ] sum:^0;
for i:=l to 'do
sum:=sum -i temper [i];
sredn:=sum/7;
wrjteln (’Средняя температура за неделю:’,sredn:6:2); readln;
end.
Задача 157
{ Поиск в массиве методом перебора элементов } var
massiv:array[1..10] of integer; { массив целых) obrazec:integer; { образец для поиска ) naiden:boolean; { признак совпадения с образцом ) i:integer;
begin
{ ввод 10 целых чисел ) writeln(’Поиск в массиве.*); write(’Введите 10 целых в одной строке через пробел 1);
writein (’и нажмите <Fnter>');
write(’->’);
for i:=l to 10 do read(massiv[i]);
{ числа введены в массив )
write('Введите образец для поиска (целое число)-> 1); readln(obrazee);
I поиск простым перебором } naiden:=FALSE; { совпадений нет } i:-l; { проверяем с первого элемента массива } repeat if massiv[i] = obrazec
then naiden:=TRUE f совпадение с образцом } else i:=i+l;{ переход к следующему элементу }
until (naiden) or (i>10); { завершим, если совпадение } { с образцом или проверен } { последний элемент массива ) if naiden
then wrrteln('Совпадение с элементом номер1, 1:3, ’. ') else writein(1 Совпадений с образцом нет.1);
readln; end
Задача 158
{ Проверка, образуют ли элементы массива возрастающую последовательность } const
SIZE=5; var
а:array[1. .SIZE] o£ integer; { массив }
integer; { индекс }
ok: boolean; { ok = True - последовательность неубывающая ) begin
writeIn('Проверка, образуют ли элементы массива1) ;
wri teln(1 возрастающую последовательность’);
write(’Введите в одной строке ',SIZE,1 целых чисел ’];
write] п. (1 и нажмите <Enter>1) ;
for k:=l to SIZE 1 do
read(a[k]);
readln(a[SIZE]);
к:=1;
ok:=TRUE;
repeat
if а[к] < аГк+1]
then к:=к+1 else ok:—FALSE;
until (ok =FALSE) or (k = SIZE);
write(’Введенная последовательность ');
if not ok
then write(’не *);
writein(’является возрастающей.1);
readln;
end
Задача 160
{ Проверка, сколько раз введенное с клавиатуры число встречается в массиве }
const
НВ=5;
var
a: array[1..НВ] of integer; { массив }
obr: integer;{ образец }
integer; { кол-во элементов массива, значение которых равно образцу}
integer; { индекс }
begin
write(’Введите массив - ’);
writeIn(НВ, ’ целых чисел в одной строке.’);
write(’->’);
for i:=l to HB-1 do read(a[i]);
readln(a[HB]);
write(’Введите образец для сравнения ->’);
readln(obr);
n:=0;
{ обрабо*] ка } for i:=l to HB do if a|ij = obr then n:=n+l;
if n о О
then writein("Число ",obr, * встречается в массиве 1, nr’ раз.')
else writein ("Ни один элемент массива не равен образцу");
readin;
end.
Задача 162
( Сортировка массива по возрастанию методом прямого выбора } const
SIZE=5; ( размер массива }
var
a:array[1..SIZE] of integer;
i:integer; { номер элемента, от которого ведется поиск )
{ минимального эл-та }
min:integer; { номер минимального элемента в части )
{ массива от i до верхней границы массива } j: integer;{ номер эл-та, сравниваемого с минимальным }
buf:integer; { буфер, используемый при обмене эл-тов массива }
k:integer; { индекс для ввода и вывода }
begin
writein("Сортировка массива. *) ;
write(’Введите в одной строке 1,SIZE);
writein(1 целых чисел и нажмите <Enter>1);
write(* -> ’) ;
for k:=l to SIZE-1
do read(a[k]);
readin(a[SIZEJ};
writein('Сортировка’);
for i;=l to SIZE-1 do
begin
{- поиск минимального эл-та
в части массива от а[з] до a[SIZE])
min:=i;
for j:=i+l to SIZE do
if а [ j ] <а (min] then min : -j ;
{ поменяем местами a (min) и a[i] }
buf;=a[i];
a [1] :=a [min];
a [min] :=buf;
{ цикл сортировки закончен }
{ отладочная печать }
{ выведем промежуточное состояние массива }
for k:=l to SIZE do write(a[k],’ 1);
‘writein;
end;
writein;
{ выведем отсортированный массив }
writein('Массив отсортирован.');
for k:=l to SIZE do
write(a[kJ,’ r);
readin;
end.
Задача 163
{ Сортировка массива целых по возрастанию методом "пузырька" ] const
SIZE=5;
var
а:array[1..SIZE] of integer;
i:integer; { счетчик циклов }
k:integer; { текущий индекс элемента массива }
buf:integer;
writein('Сортировка массива методом "пузырька".’};
write('Введите в одной строке ’,SIZEz’ целых чисел '); writein (*и нажмите <Enter>’);
for k:=l to SIZE-1 do
read(a[k]);
readln(a(SIZE));
writein('Сортировка. 1);
for i:=l to SIZE-1 do
begin
for k:=] to SIZE-1 do
begin
if а|к]>а[к+1] then
begin
{ обменяем к-й и (к+1) -й элементы }
buf:=a[k];
а [к] :=а[к+1];
а[к+1]:=buf;
end;
end;
{ отладочная печать - состояние массива после очередного цикла сортировки }
for k:=l to SIZE do write(a[k],1 ’};
writein;
end;
writein;
writein(’Массив отсортирован.1);
for k:-l to SIZE do write(a[k], * 1);
readln;
end.
Задача 164
{ Объединение (слияние) двух упорядоченных массивов в один ) const
НВ = 5; ( размер исходных массивов }
var
a,b: array[1..НВ] of integer; { исходные массивы )
с: array 1..2*НВ] of integer; { массив - результат }
k, lrm : integer; ( индексы массивов а,Ь и с )
begxn
writein(’Объединение двух упорядоченных по возрастанию 1, 'массивов . ');
writein('Введите в одной строке элементы первого 1, 'массива,’);
write(1 (1,НВ,’ целых чисел) -> 1);
for k:-l to НВ 1 do
read(a[k]);
readln(a[HB]);
writeIn('Введите в одной строке элементы второго массива1);
write(’(’,НВ,' целых чисел) -> *);
5 Зак. 161
for 1:=1 to НВ-1 do read(b[l]);
readin (b [НВ]);
Хе"If li—If Itt*=lf repeat if a[k] < b[l] then begin c[m] :-a[k] ; m:=m+l; k:=k+l; end else if a[k] > b[l] then begin c[m] :=b[l]; mi^+l; 1:=1+1; end else begin c[m] :=a[k]; c[m+l] :=b[l]; k:=k+l; 1:=1H; m:=m+2; end, until (к > HB) or (1 > НВ); ( один из двух исходных массивов полностью переписан в массив С )
while к <= НВ do { есть эл-ты А, не переписанные в С > begin»
c[m] :«а[к]; к:-к+1; m:=m+l; end;5
while 1 <- НВ do ( есть эл-ты В, не переписанные в С } begin
c[m] :=b[l];
1:=14-1;
m:=m+l;
end;
writein(’Массив - результат1);
for i:=l to 2*HB do
write(c[i],’ ’);
writein;
writein(1 Для завершения работы нажмите <Enter>.’);
read] n;'у
end.
Задача 165
{ Бинарный поиск в упорядоченном массиве } label
bye;
const
HB=1C;
var
a:array! 1.. IC] of integer; { массив целых ) obr:integer;{ образец для поиска }
ok: boolean;{ TRUE - массив упорядочен ]
sred,verb,niz:integer; { номера среднего, верхнего и нижнего эл-тов массива}
found.* boolean; { признак совпадения с образцом } n:integer; { счетчик сравнений с образцом } .
i:integer;
begin
{ ввод массива }
writein('*♦* Бинарный поиск в упорядоченном массиве ***’);
write(’Введите массив (в одной строке ’,НВ);
writein(’ целых чисел) и нажмите <Enter>’);
write(’->’);
for i:=l to HB-1 do
read(a[i]);
readin (a [HB]);
{ проверим, является ли массив упорядоченным } i:=l;
ok:=TRUE; { пусть массив упорядочен } while (i < НВ) and ok do if a[i] <= a[i+l] then i:=i+l else ok:=FALSE;
if not ok then
begin
writein(*Введенный массив не является’, 1 упорядоченным по возрастанию1) ;
goto bye;
end;
write(тВведите образец для поиска (целое число) ~> ’); readin (obr) ;
{ бинарный поиск }
verh:=l;
niz:=HB;
found:=FALSE;
n:=0;
repeat
s red := (niz-verb) div 2 + verb; { делим массив пополам } n:=n+l;
if a[sred]=obr
then found:-TRUE
else
{ в какой части, в верхней или в нижней, может находиться искомый элемент? } if obr<a[sred]
then niz:=sred-l
else verh:=sred+l;
until (verb > niz) or found;
if found
then write (1 Совпадение с элементом номер ’, sred,1. Выполнено 1, n, ’ сравнений.r)
else writein(1Образец в массиве не найден.’);
bye:
readln;
end.
Задача 166
{ Анализ роста учеников ) const
NSB-30; { максимально возможное кол-во учеников в классе ) var rost: real; { рост ученика } class: array[1..NSB] of real; { рост учеников } n: integer; { кол-во учеников, о которых введены сведения } sred: real; { средний рост } m: integer; { кол-во учениковf чей рост больше среднего } sum: real; { суммарный рост } 1: integer;
begin
writeIn(’*** Анализ роста учеников ***’); writein(’Введите рост (см) и нажмите <Enter>’); writein (’Для завершения введите 0 и нажмите <Enter>’);
п:=0;
repeat write (’->'); readln(rost); if rost <> 0 then begin n:=n+l; class [n] :=rost; sum: =s am+rost; end;
until (n > NSB) or (rost - 0);
if n > 0 then begin sred:=sum/n;
m:=0;
( сравним рост каждого co средним ] for i:=l to n do
if class[i] > sred then m:=m+l;
writein(1Средний рост: 1, sred:6:1,' см*);
writein("У ’,ш, ’-х учеников рост превышает ’, 1 средний. 1) ;
end
else writein(’Нет данных для обработки.1);
readin;
end.
Задача 167
{ Вычисление суммы элементов массива (по столбцам) } const
ROW-3; { кол-во строк }
COL=5; { кол-во столбцов }
var
a: array[1..ROW,1..COL] of integer; { массив J
array 4., COL] of integer; { сумма элементов }
i,j: integer;
begin
writein (’Введите массив. ’);
write In (’После ввода элементов каждой строки,’, COL, ’ целых чисел, нажимайте <Enter>1);
for i:-l to ROW do { ROW строк )
begin
wri te(’->’) ;
for j:-l to COL-1 do read(a[i, j]);
readin(a[i,COL]);
end;
writein(’Введенный массив’);
for i:=l to ROW do
begin
for j: =1 to COL- 1 do
write(a(i,j):4);
writein(a[i,COL]: 4);
end;
[ обработка }
for j: =1 to COL do { для каждого co олбца }
for i =1 to ROW do { суммируем эл-ты одного столбца } s[j] :=s[j]+a[i,j];
writein (’)'
for i:=l to COL do write(s[i]:4); writein; readin; end
Задача 170
{ вычисление определителя матрицы второго порядка ] var
a: array[1..2,1..2) of real; det: real; { определитель (детерминант) } irj: integer; { индексы массива )
begin
writein(’Введите матрицу второго порядка.');
writein('После ввода элементов строки нажимайте <Enter>’); for i:=l to 2 do
begin write('->'); read(a[i,1]); readin(a[i,2]); end; det:=a[l,1]*a[2,2] - a [1,2] *a [2,3 ];
writeIn('Определитель матрицы 1); for i:=l to 2 do
begin for j:=l to 2 do write(a(i,j]:6:2) ; writein; end; writein(1равен ’,det:6:2); readin; end.
Задача 171
{ Проверяет, является ли матрица магическим квадратом } const
МАХ=5; { максимальный размер матрицы }
var
a: array[1. .МАХ, 1. .MAX] of integer; ] матрица }
n: integer;( размер проверяемой матрицы }
ok: boolean;{ TRUE - матрица является маг. квадратом г
i,j: integer; { индексы массива )
sum: integer; { сумма эл-тов главной диагонали матрицы } temp: integer; { сумма элементов текущей строки, столбце
или второй диагонали матрицы }
begin
write (’Введите размер матрицы (3.. 4) ', 'и нажмите <Enter> ->’);
readin(п);
Writein(’Введите строки матрицы*);
Write! п(’После ввода строки1,п,‘ целых чисел,’, ’нажимайте <Enter>');
for i:=l to n do
begin
write(’->’);
for j:=l to n-1 do read(a[i., j ] );
read Ln (a [j ,n]);
end;
ok:-TRUE; { пусть матрица - магический квадрат } sum:=0;
{ вычислим сумму элементов главной диагонали }
for i:=l to n do
sum:=sum+a[i, i |;
{ вычисляем суммы по строкам}
i:=l;
repeat
temp:^0; { сумма эл-тов текущей строки } for j:=1 to n do temp:=temp+a[i,j];
i:=i+l;
if temp <> sum then ok:=FALSE; until (not ok) or (i > n) ;
if ok then
{ здесь сумма элементов каждой строки равна сумме эл-тов главной диагонали }
begin
{ вычисляем суммы по столбцам }
j:=l;
repeat
temp:=O; { сумма эл-тов текущего столбца } for i:=l to n do temp:=temp+a[i,j];
j:=j+l;
if temp о sum then ok:=FALSE;
until (not ok) or (j > n) ;
if ok then
{ здесь сумма эл-тов каждой строки равна сумме эл-тов каждого столбца и равна сумме эл-тов главной диагонали)
begin
{ вычислим сумму эл-тов второй
. главной диагонали }
temp:=С;
j :=п;
for i:-l to n do
begin
temp:=temp+a[i, j 1;
end;
if temp <> sum then ok:-FALSE;
end;
end;
write(’Введенная матрица ’);
if not ok
then write (1 не ’);
writeIn(’является магическим квадратом.1); readin;
end.
Задача 173
{ Подводит итоги Олимпийских игр }
const
№10; {количество стран-участниц )
st rana: array [ 1.. N ] of string { 9 ] = (1 Австрия ’, ’ Германия’,
’Канада’,*Китай’, 1Корея1, * Норвегия*,1 Россия 1, ’США’, ’Финляндия1, ’Япония');
var
{ таблица результатов }
result: array[1..N+l, 1..5] of integer;
{ N+l—я строка используется как буфер при сортировке таблицы }
i,j: integer;
max: integer; ( номер строки таблицы, в которой количество очков максимально }
buf: string[9]; { используется при сортировке }
begin
writein (1 Итоги Олимпийских игр ’) ;
writeIn(’Введите в одной строке количество золотых, 1, ’серебряных и бронзовых медалей.’);
{ ввод исходных данных }
for i:=l to N do
begin
write(strana[i],' ->’);
read(result[ i, 1 ],result[1,2]); { кол-во золотых
и серебряных )
readln(result[i,3]);{ кол-во бронзовых }
end;
{ вычислим общее кол-во медалей и очков )
for i:=l to N do
begin
result[i, 4]:-result [i, l]+result[i,2]+resultfi,3]; re
sult [i, 5) :-result [i, 1] *7+result [i, 2] *6-i result [i,3]*5;
end;
{ сортировка массива в соответствии с количеством очков ) { методом простого выбора }
for i:=l to N-l do
begin
( в части таблицы начиная со строки i найти j-ю строку, в которой элемент result [j, 5] максимальный }
max:-i; { пусть это строка с номером i }
for j:=i+l to N do
if result [ j, 5 ] > result [max, 5 ] then max: = j;
{ Обменяем i-ю строку со строкой с номером шах.
В качестве буфера используем последнюю, не используемую строку таблицы. ) buf:=strana[i];
strana[i]:-strana[max];
strana[max]:=buf;
for j: =1 to 5 do
begin
result [NH,j] :-result ft, j];
end;
for j: =1 to 5 do
begin
result[i,j]:-result[max,jj;
end;
for j: =1 to 5 do
begin
result[max,j]:-result[№1, j ];
end;
end;
{ здесь таблица упорядочена } writein;
writein('Итоги зимней Оттим^иат^т в Нагано, 1998 г.1);
writeln(■Страна1:12 , 1Золото1:8,’Серебро1:8,1Бронза* : 8,
•Всего’:8,’Очков1:8) ;
for i:=l to N do
begin
write(i:2,strana[i]:10);
for j:—1 to 5 do
write(result[i, j]:8);
writein;
end;
readln; end.
Задача 174
{ Игра "Угадай число" }
const
N=3; { уровень сложности - количество цифр в числе )
4
var
igrok: array _1. .N]of char; { комбинация игрока )
comp: array 1..N]of char; { комбинация компьютера ]
a: array[l. .N] of boolean; { a[i] = TRUE, если i-я цифра компьютера совпала с одной из цифр игрока }
ugad:integer;{ угадано чисел }
mesto:integer;{ из них на своих местах }
i,j: integer; { индексы массива }
begin
writein('Компьютер задумал трехзначное число. ’,
1 Вы должны его отгадать.1};
writein(’После ввода очередного числа, вам будет ’, ’сообщено, сколько цифр’);
writein(’угадано и сколько из них находятся 1, 'на своих местах. 1);
writein('После ввода числа нажимайте <Enter>.’);
{ компьютер ”задумывает” свое число } randomize;
for i: =1 to N do
comp[i]:=chr(random (10)+48); { 48 - код символа ’0* }
write ('Компьютер задумал: '); for i: =1 to N do write (comp [i]);'writein;
repeat
write(’Ваш вариант-> ');
{получить вариант игрока }
for i:=l to N-l do
read(igrok[i]);
readin(igrok[N]);
for i:=l to N do a[i]:=FALSE;
{ a[i] = TRUE, если i-я цифра числа компьютера совпала с одной из цифр числа игрока }
{ проверим, сколько цифр угадано ) ugad:=0;
for i:=l to N do { проверим каждую цифру игрока ]
for j: =1 to N do
begin
if (igrok[i] = comp[j]) and not a[j] then begin
ugad:=ugadH1;
a[j]:-TRUE; { запретим сравнивать эту цифру компьютера с оставшимися, еще не проверенными цифрами игрока } end;
end;
{ проверим, сколько на своих местах } inesto:=0;
for i:—1 to М do if igrok[i] = compfi] then mesto:=mesto+l;
writein(1Угадано: ’,ugad, '. На своих местах:1 ,mesto) ; until (ugad = N) and (mesto = N) ;
writein(****ВЫ УГАДАЛИ ЧИСЛО!***’);
write(’Нажмите <Enter> для завершения.1); readin;
end
Задача 175
[ Телеграф - передача сообщений при помощи азбуки Морзе. ] { Замечание: возможно надо увеличить величины задержек. } uses Crt;
const
morse: array[128..159I of strxng[4] =(
{А,Б,В,Г} (Д,ЕГЖ,3} {И,Й,К,Л} {М,Н,О,Г} (Р,С,Т,У} (Ф,ХГЦ,Ч} {Ш,Щ,Ъ,Ы) {Ь,Э,Ю,Я}
{ параметры передачи }
TONE=100; { частота сигнала (гц) }
Ll=50;(длительность (мс) "точки" }
L2=100; ( длительность (мс) "тире")
13=50;[пауза (мс) между точками и тире одной буквы )
14=100; ( пауза (мс) между буквами }
L5=150; { пауза (мс) между словами }
varmes: string;varmes: string;{ сообщение ){ сообщение )
var
mes: string;
var
mes: string;
{ сообщение )
{ сообщение )
sim: string[4]; { символ в кодировке Морзе - последовательность точек и тире }
znak: string[1]; { "передаваемый" знак - тире или точка }
i, j: integer; begin
( номер символа и знака }
ClrScr;
writein(’*** Телеграф ***');
writein('Введите сообщение, которое надо передать');
writein(’(используйте только большие русские буквы)1); write('->');
readin (mes);
for i :=1 to Length(mes) do"
begin
if (mes[i] >= 'A') and (mes[ij <='Я') then
{ определим код очередной буквы (ф-я Ord) сообщения и получим из таблицы кодировки соответствующий элемент массива - последовательность точек и тире }
sim:^morse|ord(mes|i])];
j:=l;
repeat
if (sim[j] = *-') or (sim[j] = '.') then begin
write (sim[ j]);
sound(1000);
case sim[j] of
’.’: Delay(50) ;
'-': Delay(100);
end;
NoSound;
Delay(50);
end;
Iз:=Э+1;
Iuntil ((sim[j] = * ') or (j>4));
IDelay(100); { пауза между буквами |
I end else
Iif mes[i] = 1 ’ then { пробел между словами }
Ibegin
Iwrite (• T);{ пробел между словами сообщения }
IDelay(150);
Iend;
Iend;
Iwritein;
Iwritein(’Сообщениепередано!’);
Iwritein(’Длязавершенияработы с программой нажмите 1,
I’<Enter>r);
Ireadin;
I end.
I Задача 177
u { Функция max возвращает максимальное из двух чисел )
I function max (a,b: integer): integer;
[ begin
I if a > b
ithen max:=a
else max:=b;
end;
I Задача 178
И { Возвращает результат сравнения чисел
Iв виде символа отношения }
. I function Сотпра re (а, b: гeal): char;
Ibegin
I if a > b then Compare:-^’ else
if a < b then Compare: -1 <1else Compare:='=';
I end;
var
xl,x2: real; ( сравниваемые числа }
res: char; ( результат сравнения }
begin
writein(’Введите два числа и нажмите <Enter>');
write(’->*);
readln(xl,x2);
res:^Compare(xl,х2);{ вызов функции программиста ]
writein(xl:6:2,res, х2:6:2);
readln;
end.
Задача 179
{ Вычисляет сопротивление электрической цепи ) function Sopr(rl,r2: real; t: integer): real;
{ rlfr2 - величины сопротивлений t - тип соединения:
- последовательное;
- параллельное.
Если тип соединения указан неверно, то возвращает -1 }
begin
if t=l then Sopr:- rl+r2;
if t=2 then Sopr:~ rl*r2/(rJ+r2) else Sopr:—1;{ неверно указан тип соединения}
end;
Задача 180
{ Вычисление степени числа с использованием свойств логарифмов }
function InStep(a,b:real):real;
begxn
{ А в сепени В равно С
Логарифмируем обе части равенства и получаем: В*In (А) - In (С)
Нас интересует значение С, поэтому вычисляем
Е в степени В*In(А). Значение этого выражения равно С, что и требовалось вычислить. }
TnStep:=exp(b*ln(a));
end;
var
real; { число }
real; { степень }
real; { число в степени }
begin
writeIn('Введите число и показатель степени1);
readln(a,b);
c:=InStep(a,b);
writein(a:6:3,1 в степени r,b:6:3,' = ’,0:6:3); readln;
end.
Задача 182
{ вычисляет доход по вкладу }
function Dohod(sum: real; ( сумма вклада } stavka: real; { процентная ставка (годовых) } srok: integer { срок вклада (дней) )
): real;
Dohod:=sum*(stavka/100/365)*srok; { 365 кол-во дней в году )
end;
Задача 183
{ Проверяет, является ли символ гласной буквой } Function Glasn(sim:char): boolean;
const
{ гласные буквы )
ListOtGlasn:string =’АаЕеИиОоУуЫыЭэЮюЯя’; var p: byte; { позиция проверяемого символа в списке гласных }
begin
р:=Pos(sim,ListOfGlasn);{ !! ?! }
if p о О { символ найден в списке }
then Glasn:=True
else Glasn:=False;
end;
Задача 184
( Удаляет из строки начальные пробелы } function LTrim(st: string >: string;
begin
while (pos(’ ’,st} * 1) and (length(st) > 0) do delete(st,1,1);
LTrim:=st;
end;
{ проверка работы функции LT rim} var
s:string[80]; { строка }
begin
writein('Удаление из строки начальных пробелов.1);
write(1 Введите строку ->1);
readin(s);
write(’Строка без начальных пробелов:1,LTrim(s));
readin;
end.
Задача 186
{ Преобразование строчных букв в прописные }
{ Замещает стандартную процедуру UpCase)
function UpCase(st:string): stri ng; var
i:integer;
begin
for i:=0 to Length (st) do { символы нумеруются с нуля ! } case st[i] of { латинские буквы)
’a’..’z*:UpCase[i}:=chr(ord(st[i])-32);
{ русские буквы)
’a’..’n1:UpCase[i]:=chr(ord(st[i])-32);
•p'..’я1:UpCase[i]:=chr(ord(st[i])-80);
else { остальные символы не преобразуем } UpCase[ i ]:=st[ 2 ];
end;
end;
{ пример использования фикции UpCase } var
st: string;
begin
writein (1 Введите текст и нажмите <Enter>');
write(•->’);
read] n (st);
writein(UpCase(st));
readln;
end.
Задача 188
{ Решение квадратного уравнения }
function KvadrUr(a,bfс: real; var xl,x2: real): integer; { a,b,с - коэффициенты уравнения ) { xl,x2 - корни уравнения } { значение функции - количество корней или -1, если неверные исходные данные }
var
real; { дискриминант }
begin
if а = С then KvadrUr := -1
else begin
d:=b*b-4*a*c;
if d < 0 then
KvadrUr:=0 { уравнение не имеет решения }
else begin if d > О then KvadrUr:=2{ два разных корня }
else KvadrUr:-!; { корни одинаковые } xl:=(-b+Sqrt(d))/(2*а);
x2:=(-b-Sqrt(d))/(2 ^a);
end;
end;
end;
гг{ основная программа }
г
г
var
a,b,c: real; { коэффициенты уравнения }
xl,x2: real; { корни уравнения }
begin
writein(’Решение квадратного уравнения’);
writein(1 Введите в одной строке коэффициенты и нажмите 1, ’<Enter>');
write(•->’);
readin (a, b, с);
case KvadrUr(a, b, с, xl, x2) of
-1: writein(1Ошибка исходных данных.1);
0: writein(1 Уравнение не имеет решения,•);
writein(1х-1,xl:6:2,г Корни одинаковые.*];
writein(’xl=1,х1:6:2,1 х2-1,х2:6:2);
end;
readin;
end.
Задача 189
uses Crt;
var
a:integer; { число, введенное пользователем }
endendwwwwww{ Функция Getlnt предназначена для ввода целого положительного числа, состоящего из одной или двух цифр. Во время ввода для редактирования может использоваться <Backspace>.
end
end
w
w
w
w
w
w
При нажатии <Enter> функция возвращает введенное число. }
function Getlnt:integer;
const
K_BACK—8;{ код клавиши <Backspace> }
K_ENTER==13; { код клавиши <Enter> }
wwwwvar
w
w
w
w
ch:char; { символ )
dec;byte; { код символа )
wwbuf:array[1..2] of char; { введенные цифры }
w
w
n:integer;{ кол-во введенных цифр )
w www wwx,у:integer; { положение курсора )
w w
w
w w
w
begin
buf[!]:=’ '; buf[2]:=’ ';
т
п:-0;
repeat
ch:=Readkey;
dec:=ord(ch);
if (ch>=’0’) and (ch<=’9’) and (n<2) then
begin
write (ch) ;
m-n+l;
buf[n]:=ch;
end
else
if (dec=K_BACK) and (n>0) then
begin
n:=n-l;
x:=WhereX;
y:=WhereY;
GotoXY(x-1,y); write(’ ’) ;
GotoXY(x-l,y) ;
end;
until (n>0) and (dec=K_ENTER); i { преобразуем введенную строку в число } if п=2
then Getlnt:=(ord(buf[1)) -48) *10+ord (buf LF2] )-48 else Getlnt:=ord(buf[1])-48;
end
begin
ClrScr;
writein('*** Демонстрация работы функции Getlnt. ***'); writein;
writein(•Функция Getlnt предназначена для ввода целого 1, ’положительного числа,1);
writein('состоящего из одной или двух цифр.’);
writein (’Во время ввода для редактирования может ’, ’использоваться <Backspace>.1);
writein(’При нажатии <Enter> функция возвращает 1, 'введенное число ’);
writein;
writein(’Введите число и нажмите <Enter>');
write(’->’);
а:—Getint;
writein;
write(’Вы ввели число 1,а) ;
readin;
end.
Задача 190
{ Выводит строку из звездочек } procedure StarLine(len: integer);
var
integer;
begin
for j:=1 to len do write('*’);
end
Задача 193
( Вычерчивает рамку )
procedure Frame(1:integer; t:integer; w:integer; h:integer); { l,t - координаты верхнего левого угла, w - ширина рамки, h - высота рамки }
var
х, у: integer; { координаты выводимого символа ) i;integer;
cl,с2,сЗ,с4,с5,сб:char;{ символы,из которых рисуется рамка }
begin
cl:=chr(218); { символ верхнего левого угла ] { функция chr возвращает символ, номер которого ] { указан при вызове функции } c2:=chr(196); { символ горизонтальной линейки } c3:=chr(191); { символ правого верхнего угла } с4:=chr(179); { символ вертикальной линейки ) c5:-chr(192); { символ левого нижнего угла } c6:=chr(217); { символ правого нижнего угла ) GoToXY(l,t) ;
write(cl) ;
for i:—1 to w-2 do { символы верхней границы рамки } write(с2);
write(сЗ);
y:=t+l;
x:=l+w-l;
for i:=l to h-2 do{символы левой и правой границ }
begin
GoToXY(l,y) ;
wrj te (c4) ;
GoToXY(x,y) ;
wrjte(c4);
y:-y+l;
end;
GoToXY(l,y);
write(c5);
for i:=l to w-2 do { символы нижней границы ) write(c2);
write(c6);
end;
Задача 195______
{ Рисует Олимпийский флаг }
uses Graph;
var
grDnver: integer; { драйвер }
grMode: integer; { графический режим. )
grPath:string; { место расположения драйвера }
ErrCode:integer; { результат инициализации граф, режима ]
begin
grDriver := VGA;{ режим VGA}
grMode :=VGAHi;{ разрешение 640x480)
grPath:=*e:\tp\bgi’; { драйвер, файл EGAVGA.BGI, находится в каталоге e:\tp\bgi }
InitGraph(grDriver, grMode,grPath);
ErrCode :- GraphResult;
if ErrCode <> grOk then
begin
writein(eОшибка инициализации графического режима . ’);
write In (’Для завершения работы программы нажмите ’, 1<Enter>т);
readln;
Halt(l);
end;
{ полотнище флага )
SetFilLStyle(Solidrill,LightGray); [ сплошная заливка серым цветом }
Ваг (80,80,200,135) ;
( кольца }
SetColor(Green);{ зеленое }
Circle (100, ЮС, 15);
SetColor(Black);{ черное }
Circle(140, 100,15);
SetColor(Red);{ красное }
Circle(180,100,15);
SetColor(Yellow);{ желтое }
Circle(120,J15,15);
SetColor(Blue);{ синее )
Circle(160,115,15);
readln;
CloseGraph;
end
Задача 198
( Рисует кораблик с использованием метода базовой точки ) uses Graph;
const
{ шаг сетки }
dx=5; [ по X}
dy=5; ( по Y}
var
grDriver:integer; { драйвер }
grMode: integer; { графический режим }
grPath strxng.* { место расположения драйвера ]
ЕгrCode:integer;{ результат инициализации граф, режима }
х,у:integer; { координаты базовой точки кораблика }
begin
grDriver : = VGA;{ режим VGA}
grMode:-VGAHi;{ разрешение 640x480}
grPath:='e:\ tp\bgi’; { драйверr файл EGAVGA.BGI, находится в каталоге d:\tp\bgi }
InitGraph(grDriver, grMode,grPath);
ErrCode := GraphResult;
if ErrCode <> grOk then Halt(1);
x:=10;
y:=200;
{ корпус }
MoveTo (x, y) ;
LineTo (x, y~2*dy);
LineTo(x+10*dx,y-2*dy);
LineTo(x+ll*dx,y-3*dy);
LineTo(x+17 *dx,y-3*dy);
LineTo (x+14*dx, у) ;
LineTo (x, у) ;
{ надстройка }
MoveTo(x+3*dx,y-2*dy);
LineTo(x+4*dx,y-3*dy);
LineTo(x+4*dx,y-4*dy);
LineTo(x+13 kdx,y-4*dy);
LineTo(x+13 kdx,y-3*dy);
Line (x+5*dx,y- 3 My, x+9*dx, y-3*dy) ;
{ капитанский мостик }
Rectangle(x+8*dx,y-4*dy,x411*dx,y-5 My);
( труба }
Rectangle(x+7*dx,y-4*dy,x+8*dx,y-7*dy);
{ иллюминаторы }
Circle(x+12*dx,y-2*dy,Trunc(dx/2));
Circle(x+14*dx,y-2*dy,Trunc(dx/2)); { мачта )
Line(x+10*dxfy-5*dy,x+10*dx,y-10*dy) ;
( оснастка }
MoveTo(x+17*dx,y-3*dy);
LineTo(x+10*dxfy-10*dy);
LineTo(xry-2*dy);
¥
readln;
CloseGraph;
end.
Задача 199
{ Выводит узор из 100 произвольно размещенных окружностей произвольного радиуса и цвета }
Uses Graph;
var
grDriveг:integer;
grMode:integer;
grPath:string;
ErrCode:integer;
x,y,r: integer; { координаты центра и радиус окружности } i: integer;
begin
grDriver:-VGA;
grMode:—VGAHi;
grPath: - * e:\tp\bgi';
InitGraph (grDriver,grMode,grPath);
ErrCode:=GraphResult;
if ErrCode <> grOK then
begin
writein (’Ошибка инициализации графического режима. 1); writein (’Для завершения работы нажмите <Enter>’); readin;
Halt (1);
end;
Randomize;
for i:=l to ICO do
begin
x: -Random (640);
у:-Random (4 80);
r:-Random(240);
Setcolor{Random(16));
Circle(x,y,r);
end;
readin;
end.
Задача 200
{ Выводит узор из 200 случайно размещенных линий разного цвета }
Uses Graph; var
grDriver:integer;
grMode:integer;
gr Path: string ;
ErrCode:integer;
x,y: integer; ( координаты конца линии ) i; integer;
begin
grDriver:=VGA;
grMode:=VGAHi;
grPath: = ’ e: \tp\bgi1;
InitGraph (grDriver,grMode, grPath);
ErrCode:=GraphResult;
if ErrCode <> grOK then
begin
writein ('Ошибка инициализации графического режима.1); writein (’Для завершения работы нажмите <Enter>']; readin;
Halt (1);
end;
Randomize;
for i:=l to 200 do
begin
x:-Random(640);
y:=Random(480);
Setcolor(Random(16) ) ;
LineTo(x,y);
end, readln;
end.
Задача 201/
{ Рисует контур пятиконечной звезды } uses Graph;
label
bye;
var
r: integer; { радиус звезды }
хО,уО: integer; { координаты центра звезды }
х,у^ integer; { координаты конца луча }
a: integer; { угол между осью ОХ и прямой, соединяющей центр звезды и конец луча }
integer;
grDriver: Integer;s
grMode: Integer;
ErrCode: Integer;
res: integer;
begin
grDriver := detect;
InitGraph(grDriver, grMode, * e:\tp\bgi');
ErrCode := GraphResult;
if ErrCode <> grOk then
begin
writein('Ошибка инициализации графического режима.1);
goto bye;
end;
x0:=100;
y0:=100;
r:=20;
a:=18; { строим от правого гор, луча }
х:=хОHRonnd(r*cos(a*2*pi/360));
у:=уО-Round(r*sin(a*2*pi/360));
Novelо(x,у);
for i:=l to 5 do
begin
a:=a+36;
x:=xO+Round(r/2*cos(a*2*pi/360));
y:=yC~Round(r/2*sin(a*2*pi/360));
LineTo(x,y);
a:=a+36;
xf a > 360 then a:~18;
x:=x0bRound(r*cos(a*2*pi/360));
y:=yO-Round(r*sin(a*2 kpi/360));
LineTo (xry) ;
end;
readin;
bye:
end
Задача 202
{ Рисует пятиконечную звезду }ч
uses Graph;
label
bye;
const
k-0.01745; { коэф, пересчета величины угла из градусов в радианы к=2*р/360, где р - число "ПИ” }
var
г: integer; { радиус звезды }
x0,y0: integer; { координаты центра звезды }
р: array[1,.10] of PointType; ( координаты концов лучей и впадин звезды )
a: integer; { угол между осью ОХ и прямой, соединяющей центр звезды и конец луча или впадину }
integer;
grDriver: Integer;
grMode: Integer;
ErrCode: Integer;
res: integer;
begin
grDriver := detect;
InitGraph(grDriver, grMode,1e:\tp\bgi1);
ErrCode := GraphResult;
if ErrCode <> grOk then
begin
writein(10шибка инициализации графического режима- *);
goto bye;
end;
хО:=1ОО;
уО:=1ОО;
г:=20;
а.=18; { строим от правого гор» луча }
for i:=l to 10 do
begin
if (i mod 2) <> 0 then
begin { луч }
p[i]»x:=xO+Round(r*cos(a*k));
p[i] .y:=yC--Round( r*sin(a*k)); end
else
begin { впадина }
p[i].x:=x0HRound(r/2*cos(a*k));
p[i].y:=yO-Round(r/2*sin(a *k)); end, a:=a+36;
if a > 360 then a:-18;
end;
SetFillStyle(SolidFill,Red);
FillPo]у(10,p);
readln;
bye:
end
Задача 204
{ Рисует российский флат }
uses Graph;
var
x,у: integer; ( координаты левого верхнего угла флага ) l,h: integer; { длинами высота флага } w: integer; { ширина полосы флага }
grDriver: Integer;
grMode: Integer;
ErrCode: Integer;
res: integer;
begin
grDriver := detect;
TnitGraph(grDriver, grMoae,’e:\tp\bgi1);
ErrCode :- GraphResult;
if ErrCode = grOk then
begin
x:=100;
y:=100;
l:=50;
h:=25;
w:=Round(h/3);
{ рисуем флаг }
SetFillStyle(SolidFi11,White);
Bar(xryrx+l,y+w);
SetFillStyle(SolidFill,Blue);
Bar(x,уbw,x+1,y+2*w);
SetFillStyle(SolidFi11,Red);
Bar(x,y+2*w,x+1,y+3*w);
OuLTextXY (x, y-rh+5, * Россия1) ;
end;
readln;
CloseGraph;
end.
Задача 205
{ Рисует веселую рожицу желтого цвета }
uses Graph;
var
grDriver:integer;( драйвер )
grMode: integer;{ графический режим )
grPath: string:{ место расположения драйвера ]
ErrCode:integer; { результат инициализации граф, режима }
begin
grDriver .:= VGA;( режим VGA}
grMode:=VGAHi;( разрешение 640x480}
grPath:=' e:\tp\bgi*; { драйвер, файл EGAVGA.BGI, находится в каталоге e:\tp\bgi }
InitGraph(grDriver, grMode,grPath);
ErrCode := GraphResult;
if ErrCode <> grOk then
begin
writein(*Ошибка инициализации графического режима. ');
writein(’Для завершения работы программы ’, ’нажмите <Enter>•);
readin;
Halt(l) ;
end;
SetFiJIStyle(SolidFill,Ye]low);
Setcolor(Yellow);{ чтобы на круге не было линии }
PieSlice(100,100,0,360,20) ;
SetColor(Black);
ArcdOO, 102,180,360,10);{ рот }
{ глаза }
Circle[93,93,2);
Circle(107,93,2);
readin;
CloseGraph;
end.
Задача 208
{ Выводит узор из концентрических окружностей разного цвета } Uses Graph;
var
grDriver:integer;
grMode:integer;
grPath:string;
ErrCode:integer;
x,y,r: integer; { координаты центра и радиус окружности } dr: integer; { приращение радиуса окружности } i: integer; { счетчик циклов }
begin
grDriver:=VGA;
grMode: =VGAHi;
grPath:=’e:\tp\bgi';
InitGraph (grDriver,grMode,grPath);
ErrCode:=GraphResult;
if ErrCode <> grOK then
begin
writein ('Ошибка инициализации графического режима.'); writein ('Для завершения работы нажмите <Enter>'); read]n;
Halt (1);
end;
x:=100; y:=100;
r:=5; dr:=5;
for i:=l to 15 do
begin
SetColor(i);
Circle(x,у,r); r;=r+dr;
end;
readln;
end.
Задача 209
{ Вычерчивает узор из окружностей } Uses Graph;
var
grDriver:integer;
grMode:integer;
grPath:string;
ErrCode:integer;
xry: integer;{ координаты центра окружности }
r: integer;{ радиус окружности }
integer;{ расстояние между центрами окружностей
i,j: integer;i,j: integer;{ счетчики циклов }{ счетчики циклов }
i,j: integer;
i,j: integer;
{ счетчики циклов }
{ счетчики циклов }
begin
grDriver; =VGA;
grMode: =VGAHi;
grPath:=' e:\tp\bgi';
InitGraph (grDriver,grMode,grPath);
ErrCode:=GraphResult;
if ErrCode <> grOK then
begin
write In ('Ошибка инициализации графического режима.'); writein ('Для завершения работы нажмите <Enter>');
6 Зак 161
readin;
Halt (1);
end;
у: =100;
г:=20;
1:=30;
for i:=l to 4 do
begin
x:=100;
for j:=l to 5 do
begin
Ci rcle(x,y,r) ;
x:=x+l;
end;
y:^1;
end;
readin;
end.
Задача 210
{ Вычерчивает узор из квадратов } Uses Graph;
var
grDriver:integer;
grMode:integer;
grPath:string;
ErrCode:integer;
x,y: integer;{коорд. левого верхнего углаквадрата }
d: integer;{длина стороны квадрата }
n: integer;{кол-во квадратов в ряду )
if ErrCode <> grOK then
begin
write]n (’Ошибка инициализации графического режима.'); writein (’Для завершения работы нажмите <Enter>r); readin;
Halt (1);
end;
у:—100;
d:=30;
l:=10;
for i;=l to 5 do
begin
if ((i mod 2) = 1)
then begin { нечетный ряд } n:=5; { пять квадратов в ряду } х:=100;
end
else begin { четный ряд )
и: =4 ;
x:=100+Round(d/2+l/2);
end;*
for j: =1 to n do
begin
Rectangle(x,y,x+d,y+d);
x:=x+d+l;
end;
y:-=y+Round(d/2+l/2);
end;
readln;
end.
Задача 211
{ рисует на экране шахматную доску } uses Graph;
var
хО,уО: integer; ( координаты левого верхнего угла доски } х,у: integer;{ координаты левого верхнего угла клетки )
w: integer; { размер клетки ) irj: integer; { номер строки и колонки }
grDriver: Jnteger;
grMode: Integer;
ErrCode: Integer;
res: integer;
begin
grDriver := detect;
InitGraph(grDrjver, grMode, 1e:\rp\bgi’);
ErrCode := GraphResult;
if ErrCode = grOk then
begin
x0:=100;
yO:—100;
w:-25;
x:=xO;
y:=yO;
for i:=l to 8 do { восемь строк }
begin
for j: =1 to 8 do { восемь клеток в строке }
begin
{ если сумма номера строки и номера колонки, на пересечении которых находится клетка, четная, то клетка - коричневая, иначе - желтая }
if ((i+j) mod 2) = О
then SetFillStyle(SolidFj11,Brown)
else SetFillStyle(SolidFd11,Yellow);
Bar(x,y,x+w,y+w);
x:=x+w;
end;
x:=xO;
y:=y+w;
end;
readin;
end,
CloseGraph;
end.
Задача 212
{ Рисует флажок }
Uses Graph;
var
grDriver:integer;
grMode:integer;
grPath: string;
ErrCode:integer;
flag: array П . -6] of PointType; { коотринаты точек флажка ) begin
grDriver: ^VGA;
grMode:-VGAHi;
grPath: = * e:\tp\bgi*;
Ini tGraph (grDriver,grMode,grPath);
ErrCode: ^GraphResul tГ
if ErrCode <> grOK then
begin
writein ('Сшибка инициализации графического режима.*);
writein ("Для завершения работы нажмите <Enter>’); readin;
•Halt (1) ;
end;
{ задать координаты контура - флажка )
flag(l].x:=100;flag[l],у:=100;
flag(2].x:=160;flag[2].у:=100;
flag[3].x:=140;flag[3].y:=120;
flag[4].x:=160;flag[4].y:=140;
flag[5]. x™100; flag [5 ] .y:=140;
flag[6|.x:=100;flag[6].y:=100;
SetFillStyle(SolidFill,Red/;
FillPoly(6,flag);
Line(100,140,100,170);
readin;#
end.
Задача 213
{ Выводит на экран паровоз ) uses Graph;
var
grDriver: Integer;
grMode: Integer;
ErrCode: Integer;
res: integer;
tr[1].у:—уОч7*dy; tr[2].у:=уОч 6*dy ; tr[3].y:=y046*dy; tr[4].y:=y0+3*dy; tr|5].у:=y0+3*dy; tr[6].y:=y0+0*dy; tr[7].y:-y0+0*dy; tr[8 j.у:=yC+3 *dy; tr[9].y:=y0+3*dy; tr[10].y:=yO+l*dy; tr[ll].y:=yO+l*dy; tr[12].y:=y0+2*dy; tr[13].y:=y0+2*dy; tr[14].y:=y0+7*dy; tr[15].y:=y0+7*dy;tr[1].у:—уОч7*dy; tr[2].у:=уОч 6*dy ; tr[3].y:=y046*dy; tr[4].y:=y0+3*dy; tr|5].у:=y0+3*dy; tr[6].y:=y0+0*dy; tr[7].y:-y0+0*dy; tr[8 j.у:=yC+3 *dy; tr[9].y:=y0+3*dy; tr[10].y:=yO+l*dy; tr[ll].y:=yO+l*dy; tr[12].y:=y0+2*dy; tr[13].y:=y0+2*dy; tr[14].y:=y0+7*dy; tr[15].y:=y0+7*dy;
tr[1].у:—уОч7*dy; tr[2].у:=уОч 6*dy ; tr[3].y:=y046*dy; tr[4].y:=y0+3*dy; tr|5].у:=y0+3*dy; tr[6].y:=y0+0*dy; tr[7].y:-y0+0*dy; tr[8 j.у:=yC+3 *dy; tr[9].y:=y0+3*dy; tr[10].y:=yO+l*dy; tr[ll].y:=yO+l*dy; tr[12].y:=y0+2*dy; tr[13].y:=y0+2*dy; tr[14].y:=y0+7*dy; tr[15].y:=y0+7*dy;
tr[1].у:—уОч7*dy; tr[2].у:=уОч 6*dy ; tr[3].y:=y046*dy; tr[4].y:=y0+3*dy; tr|5].у:=y0+3*dy; tr[6].y:=y0+0*dy; tr[7].y:-y0+0*dy; tr[8 j.у:=yC+3 *dy; tr[9].y:=y0+3*dy; tr[10].y:=yO+l*dy; tr[ll].y:=yO+l*dy; tr[12].y:=y0+2*dy; tr[13].y:=y0+2*dy; tr[14].y:=y0+7*dy; tr[15].y:=y0+7*dy;
хО,уО: integer; { координаты базовой точки паровоза }
dx,dy: integer; ( шаг координатной сетки }
tr: arrayfl..15] of PointType; { координаты точек контура паровоза }
begin
grDriver := detect;
InitGraph(grDriver, grMode,1e:\tp\bgi1);
ErrCode := GraphResult. if ErrCode = grOk then begin
x0:=100; y0:=100; dx:=5; dy:=5;
( корпус } tr[l].x:=xO+C*dx; tr[2],x:=xO+O*dx; tr(3].x:=xO+l*dx; tr [4 ].x:=xO+l*dx; tr[5].x:=x0+2*dx; tr[6].x:=x0+2*dx; tr [7 ].x:=x0+3*dx; tr[8].x:=x0+3*dx; tr[9].x:=x0+7*dx; tr{10].x:=x0+7*dx; tr[ll].x:=x0+13*dx; tr[12].x:=x0+13*dx; tr[13].x:=xOH2*dx; tr[14],x:=x0+12*dx; tr[15].x:=xO+O*dx; DrawPoly(15, tr);
{ окно }1
Rectangle(x0+8*dx, yO+2*dy,xOFlO*dx,y0t4*dy); { колеса }
SetFillStyle(SolidFill,Red);
SetColor(Red);
PieSlice (xC-F3*dx, yC F7*dy, 0, 360, l*dx);
PieSlice(xCF6*dx,yCF?*dy,0,360,l*dx);
PieSlice(xOF9*dx,yOF7*dy,0,360,l*dx);
{ окантовка колес }
SetColor(White);
Circle(x0+3*dx,yO+7 *dy,l*dx);
Circle(x0+6*dx,yO+7*dy,l*dx);
Circle (x0-r9*dx, yO+7 *dy, l*dx);
read Ln;
end;
CloseGraph;
end.
Задача 215
{ Координатные оси и оцифрованная сетка } program grid;
uses Graph;
var
xO,yO:integer; { координаты начала координатных осей } dx,dy: integer; | шаг координатной сетки (в пикселах) ) h,w:integer; { высота и ширина области вывода координатной сетки }
х,у:integer;
lx,ly;real;{ метки (оцифровка) линий сетки по X Y }
dlx, dly:real; { шаг меток (оцифровки) линий сетки по X и Y } st:string; { изображение метки линии сетки }
grDriver: Integer;
grMode: Integer;
ErrCode: Integer;
begin
grDriver := VGA;
grMode:=VGAHi;
InitGraph(grDriver, grMode,1 e:\tp\bgi1);
ErrCode ;= GraphResult;
if ErrCode <> grOkthen Halt(l);
x0:=50; y0:=450;{осиначинаются вточке(40,450)}
dx:=40; dy:=40;{шагкоординатнойсетки40 пикселей}
dlx:=0.5;(шагметок оси X,метками будут:0.5,1.0,
1.5 и т. д. }
dly:=l;{ шаг меток оси Y, метками будут: ], 2, 3
и т.д. }
h:=300;
w:=400;
1х:=0;{ начало координат помечается метками 0 }
1у:=0;
Line(хО,уО,хО,yO-h);{ ось X }
Line(xO,yO,xO+w,уО);{ ось Y )
{ засечки, сетка и оцифровка по оси X )
х:=хО;
repeat
{ засечка }
SetLineStyle (So] idLn, 0, NormWidth);
Line(x, yO-3,x, yO+3);
{ оцифровка }
Str(lx:0:l,st) ;
OutTextXY(x-8,yO+5, st);
lx:=lx+dlx;
{ линия сетки }
SetLineStyle(DottedLn, 0, NormWidth);
Line(x,y0-3,x,yO-h);
x:=x+dx;
until (x>x0+w);
{ засечки, сетка и оцифровка по оси Y }
у:=уО;
repeat
{ засечка )
SetLineStyle (SolidLn, 0, NormWidth) ;
Line (xO-3, у,хО+3/у);
{ оцифровка }
Str(1у:0:1,st) ;
OutTextXY(х0-40,у,st);
1у:=1у+с11у;
{ линия сетки }
SetLineStyle(DottedLn, 0, NormWidth);
Line (xO+3, у, xO+w, у);
SetLineStyle(SolidLn, 0, NomWidth) ;
y:=y-dy;
until (y<yO~h);
Readin;
CloseGraph;
end
Задача 216
Uses Graph; var x,dx: real; { аргумент и его приращение } xl,x2: real; { диапазон изменения аргумента } у: real;{ значение функции }
mx,my: integer; ( масштаб по X и Y - кол-во точек экрана, соответствующее единице по осям координат ]
хО,уО; integer; { начало осей координат }
рх,ру: integer; { координаты точек на экране ) х
grDriver:integer;
grMode:integer;
grPath:string;
ErrCode:integer;
i: integer;
begin
grDriver:=VGA;
grMode:=VGAHi;
grPath: ’e:\tp\bgi’;
InitGraph (grDriver,grMode,grPath);
ErrCode:=GraphResvlt;
if ErrCode <> grOK then
begin
write] n (’Ошибка инициализации графического режима . ’); writein (’Для завершения работы нажмите <Enter>’); readin;
Halt (1);
end#
х0:=320; у0:=240;
гох:=20; ту:=20;
{ оси координат }
Li ne (10, у0, 630, у0);
Line(х0,10,хО,470);
{ график } х1:=-15;
х2:-5;
dx:=0.1;
х:=х1;
while (х<х2) do
begin
у:= 0.5*х*х+х*4-3;
рх: =x0+Round (х*гох);
ру: =у0-Round (у *шу);
PutPixel(рх,ру,White);
x:=xi-dx;
end;
readln;
end.
Задача 217
{ Движущееся сложное изображение }
uses Graph, Crt;
var
grDriver: integer;{ драйвер }
grMode:integer;{ графический режим }
grPath: string; { место расположения драйвера )
ErrCode:integer; { результат инициализации граф, режима }
х,у:integer; { координаты кораблика }
color:word; ( цвет кораблика ] bkcolor:word; { цвет фона экрана }
{ Кораблик }
Procedure Titanik(x,у:integer; { координаты базовой точки } color:word); { цвет корабля )
const
var
OldColor:word;
begin
OldColor:=GetColor; ( сохранить текущий цвет ) SetColor(color);{ установить новый цвет )
{ корпус ) MoveTo(xfу); LineTo(x,y-2*dy); LineTo(x+10*dx,y-2*dy);
LineTo(x+ll*dx,y-3*dy);
LineTo(x+17*dx,y-3*dy);
LineTo(x+14*dx,y);
LineTo(x,y); { надстройка } MoveTo(x+3*dx,y-2*oy);
LineTo (x+4*dx, y-3*dy) ;
LineTo (x+4*dx, y-4*dy) ;
LineTo (x+13*dx,y-4*dy);
LineTo(x413*dxry-3*dy);
Line(x+5*dx,y-3*dyfx+9*dx,y-3*dy);
{ капитанский мостик },
Rectangle (x+8*dx, y-4*dy, x+l^dx, y-5*dy);
{ труба )
Rectangle(x+7~dx,y-4*dyfx+8*dx,y-7*dy); { иллюминаторы }
Circle(x+12*dx,y-2*dy,Trunc (dx/2));
Circle(x+14*dx,y-2*dy,Trunc(dx/2)); { мачта }
Line (x-rlO*dx, y-5*dy,x+10*dx,y-10*dy) ; ( оснастка }
MoveTo(x+17*dx,y-3*dy);
LineTo(x+10*dx,y-10*dy);
LineTo(x,y~2*dy);
SetColor(OldColor); { восстановить текущий цвет } end;
begin
grDriver := VGA;{ режим VGA}
grMode:=VGAHi;{ разрешение 640x480}
grPathi-'e:\tp\bgi•; { драйвер, файл EGAVGA.BGIf находится в каталоге d:\tp\bgi ]
InitGraph(grDriver, grMode,grPath);
ErrCode := GraphResult;
if ErrCode <> grOk then Halt(l);
x:=10;
y:=200;
color:=LightGray;
SetBkColor(Blue);
bkcolor: ~=GetBkColor;
repeat
Titanik(x,y,color);( нарисовать корабль }
Delay(100);
Titanik(x,у,bkcolor);{ стереть корабль }
PutPixe](x, у, color); { след от корабля ] x:=x+2;
until (x>500);
OutTextXY(10,10, 1 Рейс завершен! ’);
readln;
CloseGraph;
end.
Задача 219
{ Обрабатывает результаты контрольной работы и отражает их в виде диаграммы }
uses Crt, Graph;
{ возвращает изображение дробного числа} function RealToStr(г: real; n,m: integer): string;
var
st: string;
begin
Str(r:n:m,st) ;
RealToStr:=st;
end;
const
{ подсказка при вводе исходных данных и подпись рядом с прямоугольником легенды }
mes: array[2..5] of string!10] =
(’двоек’,’троек*,’четверок’,’пятерок’);
var
n: array[2..5] of integer; { количество пятерок, четверок, троек и двоек }
s: integer;{ всего оценок }
р: array[2..5] of real;{ процент каждой оценки ]
h: array(2..5] of integer; { высоты столбиков диаграмм }
тп: integer; { номер максимального эл-та массива п } i: integer; { индекс массива }
х,у: integer; { координаты левого нижнего угла столбика
диаграммы }
grDr^ver:integer; grMode:integer;grPath: string;ErrCode:integer;grDr^ver:integer; grMode:integer;grPath: string;ErrCode:integer;{ драйвер 1
grDr^ver:integer; grMode:integer;
grPath: string;
ErrCode:integer;
grDr^ver:integer; grMode:integer;
grPath: string;
ErrCode:integer;
{ графический режим }
{ место расположения драйвера )
{ результат инициализации граф, режима )
begin
{ ввод исходных данных }
TextBackground(Blue);
TextColor(LightGray);
ClrScr;
writein(’Обработка результатов контрольной работы1);
writein(’Введите исходные данные:1);
for i:=5 downto 2 do
begin
write(mes[i],' -> ’);
readln(n[i]);
end;
for j:—2 to 5 do s:=s+n[i]; { всего оценок }
{ вычислим процент каждой оценки } for i:=2 to 5 do p[i]:=(n[i)/s)*100;
{ вычислим высоту каждого столбика диаграммы, ] { но сначала определим, каких оценок больше } т:=5; { пусть больше всего пятерок }
for i:=4 downto 2 do if n[i]>n[m] then m:=i;
{ Пусть количеству оценок, которых больше, соответствует столбик высотой 200 пикселей. Вычислим высоты остальных столбиков. ]
for i:-5 downto 2 do h[i]:=Round( (200/n[m])*n[i] );
{ обработка выполнена, строим диаз рамму }
grDriver := VGA; { режим VGA}
grMode:-VGAHi;{ разрешение 640x480}
grPath:='e:\tp\bgj’; { драйвер, файл EGAVGA.BGJ, находится в каталоге e:\tp\bgi }
InitGraph(grDriver, grMode,grPath);
ErrCode := GraphResult;
if ErrCode .<> grOk then
begin
writeln('Ошибка инициализации графического режима.'); writein('Для завершения работы программы ',
'нажмите <Enter>');
readln;
Halt(l);
end;
{ строим диаграмму }
OuttextXY(40,50,'Результаты контрольной работы');
Rectangle(40,80,170,310);
х:=50; у:=300; { левый нижний угол первого столбика }
{ столбики диаграммы }
for i:=5 downto 2 do
begin
SetFillStyle(SolidFill,i);
Bar(x,y,x+10,y-h[ij); { столбик }
I OutTextXY(x,y-h[i]-10,RealToStr(p [i ], 5,2) +1 %1); } x:=x+20;
end;
{ численные значения }
х:=50;
for i:=5 downto 2 do
begin
SetFil] StyJe(SolidFill,i);
{Bar(x,у,хч10,y-h[i]); { столбик }
OutTextXY(x,y-h[i]-10,RealToSrr(p[i], 5,1) +'% ’);
x:=x+20;
end;
{ легенда }
х:-200;у:=100;
for i:=5 downto 2 do
begin
SetFillStyle(SolidFill,i);
Bar(x,y,x+20,y+10); { столбик }
OutTextXY(x+25,y,mes[i]);
y:=y+20;
end;
readin;
CloseGraph;
end.
Задача 220
{ Выводит круговую диаграмму }
uses Graph;
const
N-4; { количество категорий }
name: array [ 1.. N] of
string [ 10] = (’ Книги’, ’Журналы’, ’Канцтовары1, 1 Прочее ’) ;
var
koi: array[1..N] of real; { количество для категории
dol: array[l..N] of real; { доля категории в общем количестве }
sum: real;{ общее кол-во по всем категориям }
al,a2: integer;{ угол начала и конца сектора ]
х,у: integer;{ координаты вывода легенды }
st: string;{ изображение числа }
1: integer;
grDriver:integer; { драйвер }
grMode:integer;{ графический режим }
grPath: string;{ место расположения драйвера }
ErrCode:integer;{ результат инициализации граф, режима }
begxn
grDriver := VGA; { режим VGA}
grMode:-VGAHi;{ разрешение 640x480}
grPath:-'e:\tp\bgi*; { драйвер, файл EGAVGA.BGI, находится
в каталоге e:\tp\bgi )
InitGraph(grDriver, grMode,grPath);
ErrCode := GraphResult;
if ErrCode <> grOk then
begin
writein (' Ошибка инициализации графического режима. 1);
writein (1 Для завершения работы программы 1, 1нажмите <Enter>г);
readln;
Halt(l);
end;
{ ввод исходных данных }
writein(1Введите количество по каждой категории1);
sum: И);
for i:=l to N do
begin
write(name[i],* ->f);
readln(koi[i]);
sum: =sum+kol [i ];
end;
{ вычислим долю каждой категории в общей сумме }
for i:=l to N do
dol[i]:=kol[i]/sum*100;
{ строим диаграмму }
al:=O;{ от оси OX }
x:=350; y:=100;{ левый верхний угол области легенды }
for i:=l to N do
begin
{ сектор }
a2 :=al+Round (3.6*Dol [i]);{ 1% - 3<6 градуса }
if a2 > 360 then a2:=360;
SetFilJsty]e(SolidFill,i);
PieSlice(200,200,al,a2,100);
al:=a2;{ следующий сектор - от конца текущего }
i легенда )
Ваг(х,у,х+30,у+10);
Rectangle(х,у,х+30,у+10);
Str(dol[i]:6:1,st);
OutTextXY(x+50,y,name[i] +1 -1+st+1 %1);
y:=y+20;
end;
readin; CloseGraph;
end.
Задача 221
{ Светофор ) uses Graph, Crt;
var
grDriver: Integer; grMode: Integer; ErrCode: Integer; res: integer;
i,j: integer; { счетчики циклов }
{ Рисует круг заданного цвета)
{ х,у,г - координаты центра и радиус круга }
{ fc,bc - цвет круга и окантовки }
Procedure Krug(х,у, г: integer; fcrbc: integer);
begin
SetFillStyle(Soli drill,fc); SetColor(fc);
PieSlice (x, y,0,360, r) ; SetColor(be);
Ci rcle (x, y, r);
end,
( Основная программа }
begin
grDriver := detect;
InitGraph(grDriver, grMode,*e:\tp\bgi’);
ErrCode := GraphResult;
if ErrCode = grOk then
begin
OutTextXY(10,10, 'Соблюдайте правила уличного движения!1); Rectangle(88,88,112,152);
{ Горит 1фасный свет } Krug(100,100,10,Red,White);
Krug(100,120,10,LightGray,White);
Krug(100,140,10,LightGray,White);
for i:=l to 3 doI I
begin { Здесь горит красный } Delay(3000);{ задержка 3 сек )
Krug(100,120,10,Yellow,White); ( Включить желтый ]
Delay(1000); Krug(100,100,10,LightGray,White); { Выключить красный } Krug(100,120,10,LightGray,Wnite); { Выключите желтый ]I
Krug(100,140,10,Green,White);{ Включить
зеленый }
DeJay(2000); { Мигающий зеленый сигнал } for j:=l to 3 do { мигает 5 раз } begin Delay(500);
Krug(100,140,10,Green,White);{ Включить I
зеленый }
Delay(500);I
Krug(ICO,140,10,LightGray,Wnite); { Выключить зеленьм } end, Krug(100,120,10,Yellow,White);{ Включить
желтый } I Delay(1500); Krug(100,120,10,LightGray,White);{ Выключить
желтый }
Krug(100,100,10,Red,White);{ Включить
красный } end;
end;I
CloseGraph; end-
Задача 222
( Часы с минутной и секундной стрелками } uses Graph, Crt;
{ Выводит вектор заданной длины из текущей точки )|
{ Используется для вывода изображения стрелки ]
procedure Vector(э: integer; { угол между вектором и осью ОХ }
1: integer); { длина вектора }
const
GRAD=0.0174532; ( коэф, пересчета величины угла из градусов в радианы }
var
x0,y0: integer; { координаты начала вектора }
xl,yl: integer; I координаты конца вектора }
begin
xO:-GetX;
yO:=GetY;
xl:-Round(x0+l*cos(a*GRAD));
yl:-Round(y0-l*sin(a*GRAD));
LineTo(xl,yl);
end;
{ главная процедура }
var
res: integer; x0,y0: integer; d: integer;s: integer; m: integer; as: integer; am: integer;sts: string;res: integer; x0,y0: integer; d: integer;s: integer; m: integer; as: integer; am: integer;sts: string;grDriver: Integer; grMode: .Integer; ErrCode: Integer;
res: integer; x0,y0: integer; d: integer;
s: integer; m: integer; as: integer; am: integer;
sts: string;
res: integer; x0,y0: integer; d: integer;
s: integer; m: integer; as: integer; am: integer;
sts: string;
{ координаты центра часов }
{ диаметр циферблата )
{ время, кол-во секунд }
I время, кол-во минут }
{ угол наклона секундной стрелки ]
1 угол наклона минутной стрелки }
1 кол-во секунд }
stm: string; { кол-во минут }
begin
grDriver := detect;
InitGraph(grDriver, grMode, ' e:\tp\bgir);
ErrCode := GraphResult;
if ErrCode = grOk then
begin
x0:-80; y0:=80;
d:=50;
s:=0;
m:=0;
( начальное положение стрелок: угол между стрелкой и осью ОХ равен 90 град. } as :“90;
ат: =90;
Circle (хО, уО, d+5) ;
SetFillStyle(Solidrill,0);
Str (m, stm);
repeat
( вывести секундную стрелку }
MoveTo(хО, уО);
SetColor(Yellow);
Vector(as,d);
{ вывести минутную стрелку } MoveTo(хО,yO);
SetCoJ or (Green);
Vector(am,d~10);
{ вывести "цифровые” часы ) Bar(10,10,50,20);
Str(s,sts);
OutTextXy(10,10,stm+’:'+sts);
Delay(100); { задержка }
( стереть стрелки } * SetColor(0);
{ секундную ) MoveTo(x0,y0); Vector(as,d);
{ минутную } MoveTo (x0,y0) ;
Vector(am,d-10);
s:«s+l;
if s = €0 then
begin
m:=m+l;
Str (m, stm) ;
s:=0;
xl,x2:real; yl,y2:real;x:real; у:real;dxireal; l,b:integer; w,h:integer; mx,my:real;x0,y0:integer;xl,x2:real; yl,y2:real;x:real; у:real;dxireal; l,b:integer; w,h:integer; mx,my:real;x0,y0:integer;st:string;st:string;{ изображение числа }{ изображение числа }
xl,x2:real; yl,y2:real;
x:real; у:real;
dxireal; l,b:integer; w,h:integer; mx,my:real;
x0,y0:integer;
xl,x2:real; yl,y2:real;
x:real; у:real;
dxireal; l,b:integer; w,h:integer; mx,my:real;
x0,y0:integer;
st:string;
st:string;
{ изображение числа }
{ изображение числа }
Sound(1000);
Delay(10);
NoSound;
am:=am-6; ( шаг движения минутной стрелки 6 градусов }
if am < 0 then am: -354;
end;
as:-as-6;
if as < 0 then as:—354;
until KeyPressed;
end;
CloseGraph;
end-
Задача 223
{ Построение графика функции ) program groffunc;
uses Graph;
var
{ границы изменения аргумента функции ]
{ границы изменения значения функции }
{ аргумент функции }
{ значение функции в точке х}
{ приращение аргумента }
{ левый нижний угол области вывода графика }
{ ширина и высота области вывода графика }
{ масштаб по осям X и Y }
{ точка - начало координат }
grDriver: Integer; grMode: Integer; ErrCode: Integer;
{ Функция, график которой надо построить } Function f(х:real):real;
begin
f:=2*Sin(x) *ехр(х/5);
end;
Function f2(x:real):real;
begin
f2:=Ln(x);
end;
begin
grDriver :- VGA;
grMode: -VGAHi;
InitGraph (grDriver, grMode, 1 e: \tp\bgi1);
ErrCode := GraphResult;
if ErrCode <> grOk then Halt(l) ;
l:=40;
b:-=400;
h:=200;
w:=200;
xl:=0;
x2:=25;
dx:=0.01;
{ найдем максимальное и минимальное значения функции на отрезке [х1,х2] }
yl:=f(xl); { минимум }
y2:^f(xl); { максимум }
х:=х1;
repeat
y:=f(x);
if y<yl then yl:=y;
if у>у2 then у2:=у;
х -x dx;
until (x>=x2);
my:-h/abs(y2-y 1);
mx:^w/absfx2-xl);
{ оси )
xO:=l;
yO: =b~Abs (Round {yl*my)) ;
Line (I,b, I,b-h);
Line(xO, yO^xO+w, yO);
Str(y2:5:lrst);
OutTextXY (1+5, b-h, st);
Str(yl:5:1,st);
OutTextXY(1+5,b,st);
{ построение графика } x:-xl;
repeat
y:=f (x) ;
PutPixel (xO+Round(x*mx), yO-Round (y*my), 15) ;
x:—x+dx;
until (x>“x2);
Readln;
CloseGraph;
X
end.
Задача 224
uses Graph,Crt;
{ в графическом режиме вводит с клавиатуры дробное число } Function GetReal: real;
var
ch: char;{ символ нажатой клавиши }
buf: string|80j; { введенная строка )
numb: real; { введенное число )
code: integer; { код ошибки преобразования строки в число )
begin
buf^";
repeat
{ ждем нажатия клавиши, курсор мигает }
repeat
if not KeyPressed then
begxn
Setcolor(White);
Line(Getz,GetY,GetX,GetY+8);
Delay(250);
Setcolor(Black);
Line(GetX,GetY,GetX,GetY+8);
end,
if not KeyPressed then Delay(250);
until KeyPressed;
l здесь нажата клавиша } ch:=ReadKey;
Setcolor(White);
case ch of
r01..’ 9 ’: begin Outtext(ch); buf:-buf4ch; end;
.’: if Pos(1 . ,Buf) = 0 then begin Outtext(ch); buf:=buf4ch; end;
’-': if Length (buf) = C then begin Outtext(ch); buf:~ch; end;
Chr(8): if Length(buf) <> C then ( нажата <BackSpace> } begin
SeLFillStyle(SolidFill,Black];
Bar (GetX, GetY, GetX-8, GetY4-8) ;
MoveTo (GetX-8, GetY);
Delete (Buf, Length (buf), 1) ;
end;
end;
until ch=Chr(13);
Vai(buf,numb,code);
GetReal:-numb;
end,
var
grDriver:integer; { драйвер )
grMode:integer; ( графический режим )
grPath:string; { место расположения драйвера }
ErrCode:integer;{ результат инициализации граф, режима }
п: real; ( дробное число }
begin
grDriver := VGA; { режим VGA)
grMode:=VGAHi;{ разрешение 640x480)
grPath:=’e:\tp\bgi’; { драйвер, файл EGAVGA.BGI, находится в каталоге e:\tp\bgi )
InitGraph(grDriver, grMode,grPath);
ErrCode := GraphResult;
if ErrCode <> grOk then
begin
writeln(’Ошибка инициализации графического режима.*);
writein(’Для завершения работы программы нажмите <Enter>’);
readln;
На] t(l);
end;
outtext(’Введите целое число -> ’);
n:=GetReal;
readin;
CloseGraph;
end.
Задача 225
{ Создает на диске А: файл и записывает в него 5 целых чисел, введенных пользователем ]
var
text; ( текстовый файл )
integer; { числе }
integer; { счетчик чисел ]
begin
writein(1Создание файла1);
writein('Введите пять целых чисел.*);
writein('После ввода каждого числа нажимайте <Enter>’);
Assign(f, ’ а:\numbers.txt'); Rewrite(f);{ открыть в режиме перезаписи }
for i:=l to 5 do
begin
write(’->’);
readln (n) ;
writein (f,n);
end;
close(f);{ закрыть файл }
writeIn(’Введенные числа записаны в файл ', ’а:\numbers.txt');
readln;
end.
Задача 226
{ Дописывает в файл a:\numbers.txt пять введенных пользователем целых чисел )
var
text;{ текстовый файл }
n: integer; { число }
integer; { счетчик чисел }
begin
writeIn(’Добавление в файл а:Xnumbers.txt1); writein("Введите пять целых чисел.1);
writeIn("После ввода каждого числа нажимайте <Enter>*]; Assign(f, 'a:\numbers.txt') ;
Append(f);{ открыть файл в режиме добавления }
for i:=l to 5 do begin write(*->’); readln(n) ; writein(ffn); end;
Close(f); { закрыть файл }
writeIn(1Введенные числа добавлены в файл 1, ’а:Xnumbers.txt1);
readln;
end.
Задача 227
{ Выводит на экран содержимое файла а:Xnumbers.txt ] var f: text; ( текстовый файл } n: integer; { число } begin
writeJn(’Содержимое файла a:Xnumbers.txt1);
writein (1*);
Assign(f,1 a:Xnumbers,txt *);
Reset(f);( открыть файл для чтения )
While not EOF(f) do 1 пока не достигнут конец файла ) begin readJn(f, n); { прочитать число из файла } writein(п);{ вывести прочитанное число на экран }
end;
Close(f);{ закрыть файл }
writein (•r);
readin;
end»
Задача 228
{ Вычисляет среднее арифметическое чисел, находящихся в файле aAnumbers.txt }
var
f: text; { текстовый файл }
n: integer; { число, прочитанное из файла } koi: integer; { кол-во прочитанных чисел I sum: integer; { сумма прочитанных чисел } sa: real;{ среднее арифметическое }
begin
write In (’ Вычисление среднего арифметического чисел,'); writeln(*находящихся в файле а:\numbers.txtг);
writein(1 Чтение из файла. Подождите А);
sum:-С;
kol:=C;
Assjgn(f,'а:\numbers.txt1);
Reset(f);{ открыть файл для чтения }
While пот. EOF(f) do { пока не достигнут конец файла } begin readln(f,n); { прочитать число из файла } sum:=sym+nj kol:=kol+l;
end;
Close(f);{ закрыть файл }
sa:=sum/kol;
writein(’Прочитано чисел: ’,koi);
writein(1Сумма чисел: *,sum) ;
writein(’Среднее арифметическое: ',за:9:2); readin;
end.
Задача 229
{ Выводит на экран содержимое файла, имя которого указано пользователем }
uses Crt;
var
f: text;{ текстовый файл ]
fname: stringг80]; { имя файла }
st: string;( строка, прочитанная из файла }
nst: integer;{ кол-во выведенных на экран строк }
key: char;{ клавиша, нажатая пользователем ]
begin
ClrScr; { очистить экран }
writein(1Просмотр текстового файла');
writein(1Введите полное имя файла и нажмите <Enter>’);
write(’-> ’);
readin (fname);
Assign(f,fname);
Reset(f);{ открыть файл для чтения }
ClrScr;
nst:=0;
While not EOF(f) do { пока не достигнут конец файла }
begin
readln(f, st); { прочитать число из файла ]
writein(st);
nst:=nst+l;
if nst — 23 then { выведены очередные 23 строки }
begin^
wrjteln;
write ('Для продолжения вывода *, 'нажмите любую клавишу... *) J
key:=Readkey;
GotoXY(l,WhereY); { курсор в начало
текущей строки )
DelLine; { удалить сообщение
"Для продолжения ...")
nst:=0;
end;
end;
Close(f);{ закрыть файл }
writein;
write('Для завершения просмотра нажмите любую ', * клавишу... ’) ;
key:=Readkey;
end.
Задача 230
с }с }{ Дописывает в файл а:\phone.txt фамилию, имя и номер телефона. Если файла на диске нет, то создает его. }
с }
с }
label
bye;
var
f: text; ( текстовый файл } fam: string [15];{ фамилия }
name: string[15]; { имя }
tel: string [ 9 ];{ номер телефона }
begin
writein('Добавление в телефонный справочник');
Assign(f,’a:\phone.txt1);
{$!-}
Append(f);{ сначала откроем в режиме добавления }
if lOResult <> С then
{ вероятно файла phone.txt нет на диске А;} { создадим его }
begin Rewrite(f); { открыть в режиме перезаписи } if lOResult о 0 then
begin
writeIn('Ошибка обращения к диску А: 1);
goto bye;
end;
end;
{ получим данные от пользователя )
write(•Фамилия ->1);
readln (fam);
write(’Имя ->');
readln (name);
write(’Телефон ->');
readln(tel);
{ и запишем их в файл } writein(f,fam);
writein (f,name) ;
writein(f,tel);
close(f);
writein('Информация добавлена.’);
bye: writein (’Для завершения работы 1, ’нажмите <Enter>. ’);
readin;
end
Задача 232
{ Поиск в телефонном справочнике ) label
bye; var
f: text;{ текстовый файл j
obr: string [15];{ фамилия для поиска }
n: integer;{ кол-во записей, удовлетворяющих
запросу }
fam: string [15];{ фамилия }
name: string,. 15]; ( имя }
tel: string 9];{ номер телефона }
begin
wri teln (’Поиск в телефонном справочнике1);
Assign(f,’ a:\phone.txt1);
<$!-}
reset(f);{ откроем файл для чтения )
if lOResult о 0 then
{ вероятно файла phone.txt на диске А: нет } begin
writein('Файл а: \phone.ext не доступен');
goto bye;
end;
repeat
write(’Фамилия ->’);
read]n(obr);
if Length(obr) <> 0 then { пользователь ввел строку ) begin
reset (f) ; { просматриваем файл от начала ) n:=0;
while not EOF(f) do ( просматриваем весь файл begin
{ читаем из файла } readln (f, fam);
readln (f, name) ;
readln(f,tel);
if fam — obr then { найдена нужная фамилия )
begin writein(fam,’ ’, name,* r,tel); n :=n+l;
end;
end;
if n = 0 then writein (’Сведений о 1 , obr,1 нет.1);
end;
until Length(obr) = 0;
bye:
writein(’Для завершения работы нажмите <Enter>.’); readln;
end.
Задача 234
{ Универсальная программа тестирования ) uses Crt;
label
bye;
var
fname: string[40J; имя файла теста ) f: text; { файл теста }
VsegoVopr: integer; { количество вопросов теста } PravOtv:integer; { количество правильных ответов }
( для текущего вопроса }
nOtv: integer; { количество альтернативных ответов } prav: integer; { номер правильного ответа]
Otv: integer; { номер ответа, выбранного пользователем }
st: string; ( строка, читаемая из файла теста } р: integer; { процент правильных ответов )
1: integer; { счетчик циклов }
begin
if ParamCount = 0 then
begin
writein(’He задан файл вопросов теста!’);
writein(’Командная строка: test ИмяФайлаТеста’);
goto bye;
end;
fname: =ParamStr (1) ; { имя файла из командной строки } Assign(f,fname);
{$!-}{ это директива компилятору, а не коментарий! )
Reset(f);{ открыть файл для чтения }-
{$!+)
if lOResult о 0 then
begin
writein(’Не найден файл теста ’, fname);
goto bye;
end;
writein(’Сейчас Вам будет предложен тест. ’);
writein('К каждому вопросу дается несколько вариантов ’, ’ответа.’);
writein(1Вы должны ввести номер правильного ответа’, 1и нажать клавишу <Enter>’);
writein;
writein(’Удачи! Для начала тестирования нажмите <Enter>’);
ТехtBackGround(Blue);
ClrScr;
VsegoVopr:=0;
Prav;=O;
while not EOF(f) do
begin
{ClrScr;)
VsegoVopr:-VsegoVopr+1;
readln(f,st);{ читаем из файла вопрос }
Textcolor(White);
writein(st);{ выводим вопрос на экран )
readln(f,nOtv,Prav);{ читаем кол-во альтернативных
ответов и номер правильного ответа }
TextColor(LightGray);
for i:=l to nOtv do { читаем и выводим альтернативные ответы }
begin readln(f,st); writein(з,1. ',st); end; writein; i write(’Bam выбор ->1) ; readln(Otv}; if Otv = Prav then PravOtv:=PravOtv+l; writein; end; { обработка результата тестирования } { вычислим процент правильных ответов } p:=Round((PravOtv/VsegoVopr)*100); write(’Ваша оценка 1); case р of 100:write!п('ОТЛИЧНО!');
8 0».9 9:wri teln ('ХОРОШО.*);
60..79:writein(1УДОВЛЕТВОРИТЕЛЬНО. ') ; else writein(•ПЛОХО!’);
end;
bye:
write (’Для завершения работы программы нажмите <Enter>’); readln;
end.
Задача 235
{
Выводит таблицу пересчета из дюймов в миллиметры на экран, принтер или в файл } var f:text; { файл вывода } fname: string; { имя файла вывода } dest:integer; { 1 - на экран, 2 - на принтер, 3 - в файл } d: real; { величина в дюймах ) m: real; { величина в миллиметрах)
begin writein(’*** Таблица пересчета из дюймов ’, ’ в миллиметры ***’);
writein(1 Результат выводить: *) ;
writein('1 - на экран;1);
writein('2 - на принтер;');
writein('3 - в файл.');
writein('Введите число от 1 до 3 и нажмите <Enter> ');
write(1Ваш выбор -> ’);
readin(dest);
case dest of
fname: ='';{на экран )
begin{ на принтер }
fname:-'prn1;
write('Включите принтер и нажмите <Enter>'); readin;
end;
begin{ в файл }
write('Задайте имя файла для вывода -> ’); readln(fname);
end;
end;
assign(f,fname);
rewrite (f);
writein (f, 1 ’);
writein (f, ' Дюймы Миллиметры') ;
writein (f, '-1) ;
d:=0.5;
while d < 10 do
begin
m:=25.4*d; { 1 дюйм - 25,4 мм )
writein(f,d:6:l,m:10:1);
d:=d+0.5;
end;
writein(f,’ 1);
close(f) ;
if dest = 3
then writein('Таблица записана в файл ',fname);
writein('Для завершения работы программы', 'нажмите <Enter>1);
readin;
end
Задача 236
( Рекурсивная функция "Факториал”, } function factorial(k:integer):integer;
begin
if к = 1
then factorial:=1
else factorial: k*factorial(k-1);
end;
var
n: integer; { число, факториал которого надо вычислить} f: integer; { факториал числа п }
begin
writein(’Вычисление факториала. 1);#
writein(’Введите число, факториал которого надо 1, ’вычислить’);
write(’->’);
readln(n);
f:-factorial (и) .;
writein(’Факториал числа 1 r nr 1 равен 1,f); readin;
end.
Задача 237
{ Выводит на экран узор } Uses Grap'h,Crt';
{ Рисует элемент узора } procedure Е1ет(х,у,г,р: integer);
{ х,у,г - координаты и радиус центра основного элемента узора
р - порядок узора 1
begin
if р>=0 then begin
Circle (x, у, г);
Delay(100);
Elem(x+r,у,Round(г/2),p-l);
Elem(x,y-r.Round(r/2),p-l);
Elem(x-r,y,Round(r/2),p-l);
Elem(x, y+r,Round(r/2), р-1);
end;
end,
var
grDriver:integer; { драйвер }
grMode:integer; { графический режим }
grPath:string;{ путь к файлу драйвера }
ErrCode:integer; { код ошибки графического режима )
begin
grDriver:=VGA;
grMode:=VGAHi;
grPath:=re:\tp\bgi*;
InitGraph (grDriver,grMode,grPath);.
ErrCode: =GraphResult;
if ErrCode <> grOK then
begin
writein (’Ошибка инициализации графического режима.1) ;
writein (’Для завершения работы нажмите <Enter>’); readln;
Halt (1);
end;
{ основная программа }
Elem( 320,24 0,60,3);{ рисуем узор 3-го порядка }
ОиЬТехгС’Для завершения работы программы ’, ’нажмите <Enter>’);
readln;
end
Задача 238
[ Используя механизм рекурсии, вычисляет сопротивление n-звенной электрической цепи }
var
г1,г2,гЗ: real; { величины сопротивлений, из которых состоит цепь }
n: integer;{ количество звеньев (порядок) цепи }
rc: real;{ сопротивление цепи }
{ величина сопротивления цепи n-го порядка ) function Сер(n: integer): real;
begin
if n=l
then Cep:=Rl+R2HR3
else begin
rc:=Cep(n-l);
Cep:=R2*rc/(R2+rc);
end;
end;
{ основная процедура )
begin
writein{'Вычисление сопротивления электрической цепи.’); writein(’Введите величины сопротивлений (Ом): ’);
'write(’ rl -> ’);
readln(rl);
write(’г2 ->’);.
1 •'); I . readln(г2);
) * Iwrite (’ гЗ ->’);
Ireadln(гЗ);
Iwrite(’Порядокцепи->’);
Ireadln(п);
Пwritein(1Сопротивление цепи:*,Сер(п): 6:2, 1 См’);
I( величины соротивленийпередаются
Iв процедуру Сер через глобальные
Iпеременные rl, г2 и гЗ )
I readln;
I end.
— I Задача 239
I { Вычерчивает схему сложной электрической цепи. }
I { При вычерчивании схемы цепи используется рекурсия.)
Uses Graph;
I const
I{шагсетки )
Idx=7;
Idy=7;
var
grDriver:integer;
grMode:integer;
grPath:string;
ErrCode:integer;
x,y: integer;
integer; { порядок цепи }
епа(USvaепа(USva[ выводит схему цепи k-ro порядка } Procedure Cep(k: integer; x,y: integer); begin
еп
а
(
US
va
еп
а
(
US
va
SetColor(Green);
Line(x,y,x+2*dxfy);
Rectangle(x+2*dxry-dy,x+6*dx,y+dy);
Line(x+6*dx,y,x+8*dx,y);
OuttextXY(x+3*dxry-3kdy,’RI');
SetCoJor(Yellow);
Line(x+8*dx,y,x+8*dx,y+2*dy);
Rectangle(x+7*dxry+2*dyrxH9*dx,y+6*dy);
Line (x-*-8*dx, y+6*dyr x+8*dx, y+8*dy) ;
OuttextXY(x+10*dx,y+2*dy,’R21);
SetColor(LightGray);
Line(x,y+8*dyrx+2*dx, y+8*dy);
Rectangle(x+2*dx,y+7*dy, x+6*dx,y+9*dy);
Line(x+6*dx,y+8*dy,x+8 *dx,y+8*dy);
OuttextXY(x+3*dx,y+5*dy,1R31);
if k>1 then Cep(k-1,x+8*dx,y); end;
begin
grDriver:=VGA;
grMode: -VGAHi ;
grPath: =e e: \tp\bgi ’ ;
InitGraph (grDriver,grMode,grPath);
ErrCode;=GraphResult;
if ErrCode <> grOK then begin
writein (’Ошибка инициализации графического режима . ’); writein (’Для завершения работы нажмите <Ei)ter>');
readin;
Halt (1);
end;
OutTextXY(10,10,’Введите порядок цепи и нажмите <Enter>’);
readin (k) ;
сер(k, 10,50) ;
readin5
CloseGraph;
end.
Задача 240
{ Демонстрация понятия "рекурсия". Программа строит кривую Гильберта. }
uses Graph, Crt;
var
u: integer; { Длина штриха кривой Гильберта }
( Заменяет стандартную процедуру для вычерчивания по точкам горизонтальных и вертикальных линии, }
procedure LineTo(х2, у2: integer);
const
DT = 3; { задержка между выводом точек линии }
var
xl,yl: integer; { координаты начала прямой, х2,у2 - координаты конца }
х,у : integer;{координатытекущей точки }
dx: integer;{приращениеаргумента }
dy: integer;{приращениеу при рисовании
вертикальной линии }
color: integer; { цвет линии)
a,b: real;{ коэф-ты уравнения прямой }
integer; { кол-во точек }
integer;
begxn
xl:=GetX;
yl:=Get¥;
if xl о х2 then begin
{ не вертикальная линия }
а.=(у2-у1)/(х2-х!);
b:=yl-a*xl;
n:=abs(х2-х])+1; if х2 > х!
then dx:=l
else dx:=-l;
x:=xl;
color;=GetColor;
for i:=l to n do
begin
y:=Round(a*x+b);
PutPixel (x, y, color) ;
delay (DT) ;
x:=x+dx;
end;
end
else begin { вертикальная линия } n:=abs(y2-yl);
if y2 > yl
then dys=l
else dy:=~l;
x:=xl;
y:=yl;
color:-GetColor;
for i:=1 to n do
begin
PutPixel(x, y,color);
delay(DT);
y:-y+dy;
end, end;
PutPixel(x2,y2,color);
MoveTo(x2,y2);
end;
{ Кривая состоит из четырех элементов: azbfc и d. Каждый элемент строит соответствующая процедура. )
procedure a(i:integer); external;
201
procedure b(i:integer); external; procedure c(i:integer); external; procedure d(i:integer); external;
{ Элементы кривой. } procedure a(i: integer) ;
begin
if i > 0 then
begin
d(i-l); LineTo (GetX-uf GetY) ;
a(i-1); LineTo(GetX, GetY+u);
a (i-1); LineTo(GetX+u,GetY);
b(i-l);
end;
end;
procedure b(i: integer);
begin
if i > 0 then
begin
c(i-1); LineTo(GetX,GetY-u);
b(i-l); LineTo(GetX+u,GetY);
b(i-3); LineTo(GetX,GetY+u);
a(i-1);
end?
end;
procedure c{i: integer);
begin
if i > 0 then
begin
b(i-1); LineTo(GetX+u,GetY);
c (i-1); LineTo(GetX,GetY-u);
c(i-1); LineTo(GetX-u,GetY); d(i~l);
end;
end;
procedure d < i; integer);
begin
if i > C then
begin
a(i-l); LineTo(GetX,GetY4u);
d(i-l); LineTo(GetX-u,GetY);
d(i-1); LineTo(GetX,GetY-u); c(i-l);
end, end;
{ главная процедура } var
grDriver: Integer;
grMode: Integer;
ErrCode: Integer; res: integer;
p : integer; .{ Порядок кривой Гильберта } st: strxng;
begin
grDriver := detect;
TnitGraph(grDriver, grMode,’e:\tp\bgi1);
ErrCode := GraphResult;
if ErrCode = grOk then
begin
p:=5;
Str (p:2,st);
OuttextXY(0,0,1Кривая Гильберта1+st+1-го порядка.•);
MoveTo(450,50);
u:—10;
a (p) ;
OuttextXY(0,16, ’Для завершения работы программы 1, 1нажмите <Enter>. 1) ;
readin;
end;
CloseGraph;
end.
Задача 241.
{ Программа строит кривую Серпинского.
см. Вирт Н. Алгоритмы и структуры данных:
Пер. с англ. - М.: Мир, 1989. - 360 с.: ил. }
uses Graph, Crt;
var
u: integer; { Длина штриха }
{ LineTo - вычерчивает по точкам линию из текущей точки в заданную.
Заменяет стандартную процедуру
LineTo для того, чтобы можно было видеть
процесс вычерчивания. Возможно надо увеличить величину задержки между выводом точек. } procedure LineTo(х2,у2: integer);
{ х2,у2 - координаты конца линии]
const
DT = 3; ( задержка между выводом точек линии }
var
xl,yl: integer;{координатыначала прямой}
х,у : integer;{координатытекущей точки}
dx: integer;{приращениеаргумента }
dy: integer;{приращениеу при рисовании
вертикальной линии }
color: integer; a,b: real;n: integer;i: integer;color: integer; a,b: real;n: integer;i: integer;{ цвет линии}
color: integer; a,b: real;
n: integer;
i: integer;
color: integer; a,b: real;
n: integer;
i: integer;
{ коэф-ты уравнения прямой }
{ кол-во точек }
begin
xl:=GetX;
yl:-GetY;
if xl <> x2
then begin
{ не вертикальная линия }
a: —(y2-yl) / (x2-xl);
b:=yl-a*xl;
n:=abs(x2-xl)+1;
if x2 > xl
then dx:~l
else dx:=-l;
x:=xl; ч
color:=GetColor;
for i:=l to n do
begxn
y:=Round(a*x+b);
PutPixel(x,y,color);
delay(DT);
x:-x+dx;
end;
end
else begin { вертикальная линия } n:=abs(y2-yl);
if y2 > yl then dy:-l else dy:—1; x:=xl;
y:=yl;
col or:-GetColor;
for i:=l to n do
begin
PutPixel(x,y,color);
delay(DT);
y:-y+dy;
end
end;
PutPixel(x2,y2,color);
MoveTo(x2,y2);
end;
procedure Vector(a: integer; { a - угол между вектором и осью ОХ ]
integer); { длина вектора } { Угол задается целым числом от 0 до 7.
О соответствует нулю градусов, 1 - 45, 2 - 90 и т. д. } var x0,y0: integer; { координаты начала вектора } xl,yl: integer; { координаты конца вектора )
begin
xO:=GetX;
yO:-Get¥;
xl:-Round(хО+1*cos(a*Pi/4));
yl:-Round(yO-1*sin(a*Pi/4));
LineTo(xl,yl);
end;
{ Кривая состоит из четырех элементов: а,Ь, с и d.
Каждый элемент строит соответствующая процедура. ] procedure a(i:integer); external;
procedure b (1;integer); external;
procedure c(i:integer); external; procedure d(i:integer); external;
( Элементы кривой. ] procedure a(i: jnteger);
begin if i > 0 then begin
a(i-l) / Vector (7, u);
b(i-l)/Vector(0,2*u) d(i-l)/Vector (l,u) /
end/
procedure b(i: integer)/ begin
if i > 0 then
begin
b(i-l) / Vector (5,u);
c(i-l)/Vector(6,2*u);
a(i-l)/Vector(7,u); b(i-l);
end;
end;
procedure c(i: integer)/
))begin if i > 0 then begin
)
)
c(i-l>;Vector(3,u);
d(i-l)/Vector(4,2^u); b(i-l)/Vector(5,u);
c(i-l)/ end;
end;
procedure d(i; integer);
begin
if i > 0 then
begin
d(i-l);Vector(l,u);
a(i-l);Vector(2,2*u);
c(i-l);Vector(3,u);
d(i-l);
end;
end,
{ главная процедура } var
grDriver: Integer;
grMode: Tnteger;
ErrCode: Integer; res: integer;
p : integer; { Порядок кривой Гильберта } st: string, i: integer;
begin
writein (’Демонстрация понятия "рекурсия”. ’);
writein(’Программа строит кривую Серпинского.’);
writeIn (’Введите порядок кривой (1-4) ’, 'и нажмите <Enter>’);
write(’->’); readln(p);
grDriver := detect;
InitGraph(grDriver, grMode,1e:\tp\bgt1);
ErrCode := GraphResult;
if ErrCode * grOk then begin
Str(p:2,st) ;
OuttextXY(0,0,’Кривая Серпинскогоr+st+’-го порядка.’);
MoveTo(1С,30);
u:=5;
a(pj; Vector(7,u);
b(p); Vector(5,u);
с(р); Vector(3,u);
d(p); Vector(l#u);
OiittextXY(0,16,
’•Дйя ^верго^Ния дэабйты 1р^грам»ы нажмите <Enter§ ' V. readlti;
end;
Glo'seSraph;
Ш
V.
■ ^ a" < к & SB
^ ^ jU Ж ^ til
> и
Часть III. Справочник
Структура программы
Программа на языке Pascal состоит из разделов:
раздел объявления меток;
раздел объявления констант;
раздел объявления типов;
раздел объявления переменных;
раздел объявления процедур и функций;
раздел инструкций программы.
Структура программы в общем виде выглядит следующим образом:
label
( объявления меток } const.
{ объявления констант } type
{ объявления типов } var
{ объявления переменных )
{ объявления процедур и функций программиста }
begin
{ инструкции основной программы} end-
Основные типы данных
К основным типам данных языка Pascal относятся:
целые числа (integer и др.);
действительные числа (real и др.);
символы (char);
строки (string);
логический (boolean).
Целые числа и числа с плавающей точкой могут быть представлены в различных форматах.
Целые числа
Формат
Диапазон значений
SHORTINT
-128-127
INTEGER
-32 768-32 767
LONGINT
-2 147 483 648-2 147 483 647
BYTE
0—255
WORD
0-65 535
Действительные числа
Формат
Диапазон значенийКоличество значащих цифр
REAL
2.9Е-39—1.7е3811-12
SINGLE
1.5Е-45—3.4е387-8
DOUBLE
5 0Е-324-1.7е30815-16
EXTENDED
3 4Е-4932—1.1е493219-20
Строки
Строки могут быть объявлены двумя способами.
Вариант 1:
Имя: string;
Объявлена переменная-строка длиной 255 символов.
Вариант 2:
Имя'. stxingUlnMHaCTpOKM ] ;
Объявлена переменная-строка указанной длины.
• представ-
। Массивы
Объявление одномерного массива:
ИмяМассива, array [НиянийИшгекс. . ВерхнийИндекс^ of ТипЭлементов;
Объявление двумерного массива:
ИмяМассива: array [НижнийИадекс^ .. ВерхнийИндекс!,
НижчийИндекс2.. ВерхнийИндекс2 ] of ТипЭлементов;
Записи
Записи можно объявить двумя способами.
Вариант 1:
ПеременнаяЗапись: record
|Ифр|ИфрПоле!: Тип! ;
|Ифр
|Ифр
Поле2: Тип2;
Полев: ТипИ;
end;
Вариант 2 (сначала объявляется тип записи, затем — переменная-запись).
type
ИмяТипаЗаписи: record
Поле!: Тип!;
Поле2: Тип2;
Полев: Типв;
end;
var
ПеременнаяЗапись: ИмяТипаЗаписи;
Выбор
Инструкция IF
Вариант 1:
if Условие
then
begin
{ Эти инструкции выполняются, }
{ если Условие истинно }
end else begin
{ Эти инструкции выполняются, }
{ если Условие ложно } end,
Вариант 2:
if Условие
then
begin
{ Эти инструкции выполняются, }
( если Условие истинно )
end;
( Примечание )
Если между begin и end находится только одна инструкция, то слова begin и end можно не писать.
Инструкция CASE
Вариант 1;
case Выражение of
Список_констант1: begin
{ Инструкции ] }
end;
Список констант2*. begin
{ Инструкции 2 } end;
Сиисок^константСГ: begin
{ Инструкции 3 } end;
end:
Вариант 2:
case Выражение of
Список-Констант!: begin
{ Инструкции I } end;
Список_констант2х begin
{ Инструкции 2 } end;
Список константЛ: begin
{ Инструкции J } end
else begin
{ Инструкции } end;
end
я, тоя, тоИнструкции между begin и end выполняются в том случае, если значение выражения после слова case совпадает с константой из соответствующего списка. Если это не так, то выполняются инструкции, следующие после else, расположен ные между begin И end..
я, то
я, то
Циклы
Инструкция FOR
Вариант 1 (с увеличением счетчика):
for Счетчик := НачальноеЗначение to КонечноеЗначение do begin
{ Инструкции } end;
Инструкции между begin И end ВЫПОЛНЯЮТСЯ [(КонечноеЗначение — НачальноеЗначение) + I] раз.
Если НачальноеЗначение больше, чем КонечноеЗначение^ ТО ИНСТРУКЦИИ между begin и end не выполняются.
Примечание J
Если между begin и end находится только одна инструкция, то слова begin и end можно не писать.
Вариант 2 (с уменьшением счетчика):
for Счетчик : = НачальноеЗначение down to КонечноеЗначение de begin
{ Инструкции } end;
Инструкции между begin И end выполняются [(НачальноеЗначение — КонечноеЗначение) + I ] раз.
Если НачальноеЗначение меньше, чем КонечноеЗначение; ТО ИНСТРУКЦИИ между begin И end НС ВЫПОЛНЯЮТСЯ.
Инструкция REPEAT
repeat
begin
{ Инструкции } end
until Условие;
Выполняются инструкции, находящиеся между begir И end (инструкции цикла), после этого проверяется значение выражения Условие. Если оно равно False (т. е. условие не выполняется), то инструкции ыикла выполняются еще раз. И так продолжается до тех пор, пока Условие не станет истинным. Таким образом, после слова until записывается условие завершения цикла.
Примечание j
Если между begin и end находится только одна инструкция, то слова begin и end можно не писать.
Инструкция WHILE
while Условие do
begin
{ Инструкции }
end;
Проверяется значение выражения Условие, если оно равно True (условие выполняется), то выполняются инструкции, находящиеся между begin и end (инструкции цикла). Затем снова проверяется значение выражения Условие, и так продолжается до тех пор, пока значение выражения Условие не станет равным False. Таким образом, после слова while записывается условие выполнения инструкций цикла.
( Примечание J
Если между begin и end находится только одна инструкция, то слова begin и end можно не писать.
Безусловный переход
Инструкция GoTo
GoTo Метка;
Осуществляется переход к инструкции, перед которой указана метка, объявленная в разделе label.
Объявление функции
Function ИмяФункции (var Параметр!: Тип!;
var Параметр2: Тип2;
var Параметр J: ТипЛ : Тип;
const
{ Описание констант ] var
( Описание переменных } begin
{ Инструкции функции }
ИмяФункции:=Значение;
end;
Объявление процедуры
Procedure ИмяПроцедуры (var Параметр! : Тип!;
var Параметр?; Тип2;
var Параметр J: ТипЛ) ;
const
{ Описание констант } var
{ Описание переменных )
begin
{ Инструкции процедуры } end;
Встроенные функции и процедуры
При описании функций и процедур приняты следующие обозначения:
имена функций и процедур выделены полужирным шрифч ом;
параметры выделены курсивом (В качестве параметра могут использоваться константы, переменные или выражения соответствующих типов. Если параметром обязательно должна быть переменная основной программы, то перед ним поставлено слово var. После параметра указывается его тип.);
после списка параметров функций через двоеточие указан тип результата, возвращаемого функцией.
Математические
Abs(Выражение)
Sqr (Выражение)
Sqrt (Выражение: real) : real
Sin (Выражение: real) : геа 1
Cos(Выражение:real):real
Arctan (Выражение: real) : real
Exp (Выражение: real) : real
Ln (Выражение: rea 1) : rea I
Int (Выражение: real) : real
Trunc (Выражение: real) : longint
Round (Выражение: rea 1) : 1 ongi nt
Str (Выражение; var Строка: string)
Vai (Строка: string; var Переменная, var КодОшибки:integer)
КомментарийКомментарийАбсолютное значение аргумента (целый или вещественный тип)Квадрат аргумента (целый или веществен ный тип)Квадратный корень из аргументаСинус аргумента, выраженного в радианахКосинус аргумента, выраженного в радианахАрктангенс аргумента, выраженного в радианахЭкспонента аргументаНатуральный логарифм аргументаЦелая часть аргументаЦелая часть аргументаОкругление значения аргумента до ближайшего целогоАбсолютное значение аргумента (целый или вещественный тип)Квадрат аргумента (целый или веществен ный тип)Квадратный корень из аргументаСинус аргумента, выраженного в радианахКосинус аргумента, выраженного в радианахАрктангенс аргумента, выраженного в радианахЭкспонента аргументаНатуральный логарифм аргументаЦелая часть аргументаЦелая часть аргументаОкругление значения аргумента до ближайшего целогоПреобразование числового выражения в строкуПреобразование строки, изображающей целое или вещественное число, в числоПреобразование числового выражения в строкуПреобразование строки, изображающей целое или вещественное число, в числоДля работы со строками и символамиКомментарий
Комментарий
Комментарий
Абсолютное значение аргумента (целый или вещественный тип)
Квадрат аргумента (целый или веществен ный тип)
Квадратный корень из аргумента
Синус аргумента, выраженного в радианах
Косинус аргумента, выраженного в радианах
Арктангенс аргумента, выраженного в радианах
Экспонента аргумента
Натуральный логарифм аргумента
Целая часть аргумента
Целая часть аргумента
Округление значения аргумента до ближайшего целого
Абсолютное значение аргумента (целый или вещественный тип)
Квадрат аргумента (целый или веществен ный тип)
Квадратный корень из аргумента
Синус аргумента, выраженного в радианах
Косинус аргумента, выраженного в радианах
Арктангенс аргумента, выраженного в радианах
Экспонента аргумента
Натуральный логарифм аргумента
Целая часть аргумента
Целая часть аргумента
Округление значения аргумента до ближайшего целого
Преобразование числового выражения в строку
Преобразование строки, изображающей целое или вещественное число, в число
Преобразование числового выражения в строку
Преобразование строки, изображающей целое или вещественное число, в число
Concat(Строка7:string; . . .;
Объединение нескольких строк в однуОбъединение нескольких строк в однуСтрокам: string):string
Объединение нескольких строк в одну
Объединение нескольких строк в одну
(окончание)
Для работы co строками и символами
Комментарий
Copy (Строка .-string; НомерСимвола: integer;
Выделение
Длина :integer):string
подстроки
Delete(var Строка:srting;
Удаление части
НомерСимвола:integer; Сколько:integer)
строки
Length(Строка:string):integer
Длина строки
Pos(Строка:string;Подстрока:string):byte
Позиция подстроки в строке
Chr(КодСимвола:byte):Char
Символ с указанным кодом
Зарезервированные слова и директивы
Зарезервированные слова языка Turbo Pascal:
and
file
not
then
array
for
object
to
asm
function
of
type
begin
goto
or
unit
case
packed
until
const
implement at ion
procedure
uses
constructor
in
program
var
destructor
inherited
record
while
div
inline
repeat
with
do
interface
set
xor
downto
label
shl
else
mod
shr
end
nil
string
Директивы языка Tuibo Pascal:
absolute
assembler
external far
forward interrupt
near
private
public virtual
Процедуры и функции
В описании функций и процедур приняты следующие обозначения:
имена функций и процедур выделены полужирным шрифтом;
параметры выделены курсивом (В качестве параметра можно использовать константы, переменные или выражения соответствующих типов. Если параметром обязательно должна быть переменная основной программы, то перед ним поставлено слово var, а после параметра — его тип);
необязательные параметры заключены в квадратные скобки;
после списка параметров функций (через двоеточие) указан тип результата, возвращаемого функцией.
Математические функции
Abs
Синтаксис:
function Abs(X) ;
Действие
Возвращает абсолютное значение аргумента, в качестве которого можно использовать выражение целого или вещественного типа.
Arctan
Синтаксис:
function Arctan(X: real): real;
Действие:
Возвращает арктангенс аргумента — угла, вел ичина которого выражена в радианах.
Cos
Синтаксис:
function Cos(X: real): real;
Действие
Возвращает косинус аргумент а — угла, величина которого выражена в радианах.
Ехр
Синтаксис:
function Ехр(Х: real): real;
Действие:
Возвращает значение, равное экспоненте аргумента.
Ln
Синтаксис:
function Ln(X: real): real;
Действие:
Возвращает значение, равное натуральному логарифму аргумента.
Sin
Синтаксис:
function Sin(X: real): real;
Действие:
Возвращает синус аргумента — угла, величина которого выражена в радианах
Sqr
Синтаксис-
function Sqr(X) ;
Действие.
Возвращает квадрат аргумента, в качестве которого можно использовать выражение целого или вещественного типа.
Sqrt
Синтаксис:
function Sqrt(X: real): real;
Действие:
фафаВозвращает значение, равное квадра гному корню из аргумента.
фа
фа
Random
Синтаксис:
function Random [ (Диапазон: word) ] ;
Действие:
Если параметр Диапазон не указан, то возвращает случайное число X, которое удовлетворяет условию 0 <= X < 1. Если параметр диапазон указан, то функция возвращает случайное число типа word, удовлетворяющее условию 0 <= X < Диапазон.
( Примечание
та.та.Перед первым обращением к функции Random необходимо с помощью вызова процедуры Randomize инициализировать программный генератор случайных чисел
та.
та.
Randomize
Синтаксис:
procedure Randomize;
жс-жс-Действие:
жс-
жс-
Инициализирует программный генератор случайных чисел
Функции и процедуры преобразования
Int
ис-ис-Синтаксис:
ис-
ис-
function Int (X: real): real;
Действие:
Возвращает целую часть аргумента как значение вещественного типа. Дробная часть аргумента при преобразовании не учитывается, т. е. функция не производит округление.
Round
Синтаксис:
function Round (X: real): longint;
Действие:
Возвращает округленное к ближайшему целому значение аргумента.
Str
Синтаксис:
procedure 3tr(X [:ВсегоСимволов [ :ДробнаяЧасть ]};
var Строка: string);
Действие:
Выполняет преобразование числового выражения в его строковое представление* ВсегоСимволов и ДробнаяЧасть — необязательные выражения целого типа, которые задают общее количество символов и количество символов дробной части в изображении числа.
Trunc
Синтаксис:
function Trunc(X: real): longint;
Действие:
Возвращает целую часть аргумента как значение целого типа. Дробная часть аргумента при преобразовании не учитывается, т. е. функция не производит округление.
Vai
Синтаксис:
procedure 7al(Строка: string: var Переменная; var Ошибка : integer);
Действие:
Выполняет преобразование строки, изображающей целое или вещественное число, в число. Полученное значение присваива-
ется переменной, указанной при вызове процедуры. Если преобразование не может быть выполнено, то в переменную сшибка записывается номер символа строки, который явился причиной неудачи преобразования. Если преобразование выполнено успешно, то значение Ошибка равно нулю.
Функции и процедуры для работы со строками и символами
Chr
Синтаксис:
function Chr (КодСимвола: byte) : char;
Действие:
Возвращает символ с указанным кодом.
Concat
Синтаксис:'
function Concat (si [, s2, . . ., sN] : string): string;
Действие:
Возвращает строку, являющуюся объединением строк, указанных при вызове функции.
Сору
Синтаксис:
function Copy(s: string; minteger; 1: integer): string;
Действие:
Возвращает подстроку — часть строки з. Подстрока начинается с символа с номером п и состоит из 1 символов.
Delete
Синтаксис:
procedure Delete(var s: srting; НомерСимвола: integer; Сколько: integer);
Действие:
Удаляет из строки s ее часть, которая начинается с символа с номером п и состоит из 1 символов.
Length
Синтаксис:
function Length(Строка: string): integer;
Действие:
Возвращает значение, равное количеству символов строки-аргумента.
Pos
Синтаксис:
function Pos(Строка: string; Подстрока; string): byte;
Действие:
Возвращает позицию (номер символа) подстроки в строке.
Процедуры иПроцедуры иункцииункции
Процедуры и
Процедуры и
ункции
ункции
графического режима
Аге
Синтаксис:
procedure Arc (х, у: int еде г; УголНа чала, УголКонца: integer; Радиус: integer);
Действие:
Вычерчивает дугу с центром в точке с координатами (х,у). Параметры УголНачала и УголКонца задают угловые координаты начальной и конечной точек линии дуги, которая вычерчивается против часовой стрелки от начальной точки к конечной. Угловые координаты задаются в градусах. Значение угловой координаты возрастает против часовой стрелки. Параметр Радиус задает радиус дуги.
Дуга вычерчивается цветом, заданным процедурой setcolor.
Bar
Синтаксис:
procedure Bar(xl,yl,x2,у2: integer) ;
Действие:
Вычерчивает закрашенный прямоугольник Параметры xl и yl задают положение левого верхнего угла прямоугольника, х2 и у2 — правого нижнего. Используемый стиль и цвет заливки задается Процедурой SetFillStyle.
ВагЗО
Синтаксис:
procedure ВагЗО(xlryl, х2, у2: integer; Глубина: word;
Граница: boolean);
Действие:
Вычерчивает параллелепипед. Параметры xl и yl задают положение левого верхнего, а х2 и у2 — правого нижнего угла ближней грани параллелепипеда. Параметр Глубина задает расстояние между передней и задней гранями. Параметр граница определяет, нужно ли вычерчивать верхнюю границу задней грани параллелепипеда.
Цвет и стиль закраски ближней грани параллелепипеда можно задать при помощи процедуры SetFillStyle, цвет линий границы — процедурой Setcolor.
Circle
Синтаксис:
procedure Circle(х^у: integer; г: word);
Действие.
Вычерчивает окружность радиуса г с центром в точке с координатами (х,у).
Цвет окружности можно задать при помощи процедуры setcolor.
8 Зак 161
DetectGraph
Синтаксис:
DetectGraph (var Драйвер, Режим: integer) ;
Действие:
Проверяет графический адаптер и определяет, какой графический драйвер и режим используются.
Ellipse
Синтаксис:
procedure Ellipsе(х,у: integer; УголНачала, УголКонца: word ;
РадиусХ, РадиусУ: word);
Действие:
Вычерчивает эллипс или дугу эллипса с центром в точке с координатами (х,у). Параметры УголНачала и УголКонца задают угловые координаты начальной и конечной точек линии эллипса, которая вычерчивается против часовой стрелки от начальной точки к конечной. Угловые координаты задаются в градусах, их значения возрастают против часовой стрелки. Параметры Радиусх и Радиусу определяют горизонтальный и вертикальный радиусы эллипса. Линия эллипса или дуги вычерчивается в соответствии с установками процедуры Setcolor.
GetX, GetY
Синтаксис:
function GetX: integer; function GetY: integer;
Действие:
Возвращают координаты x и у указателя вывода.
GraphResult
Синтаксис:
function GraphResult: integer;
Действие:
Возвращает результат (код ошибки) последней выполненной графической операции. Если операция выполнена успешно, функция возвращает ноль. Код ошибки выполнения графической операции устанавливают процедуры ваг, ваг?зо, initGraph, PieSlice, SetFillPattern, SetFilLStyle, SetLineStyie, SetTextStyle И др.
InitGraph
Синтаксис:
InitGraph (var Driver: integer; var Mode: integer; Path: string;
Действие:
Инициализирует графический режим. Параметр Driver определяет драйвер видеосистемы, параметр Mode — режим работы видеосистемы, параметр Path — каталог, где находится драйвер.
Line
Синтаксис:
procedure Line(xl,yl,х2,у2: integer);
Действие:
Вычерчивает линию между двумя точками экрана, координаты которых указаны при вызове процедуры. Линия вычерчивается стилем, установленным процедурой SetLineStyie. Цвет линии можно задать при помощи процедуры Setcoior.
LineTo
Синтаксис:
procedure Line (xl, yl: integer);
Действие:
Вычерчивает линию от текущего положения указателя вывода до точки, координаты которой указаны при вызове процедуры. Линия вычерчивается стилем, установленным процедурой SetLineStyie. Цвет линии можно задать при помощи процедуры SetColor.
MoveTo
Синтаксис:
procedure MoveTo(x,y: integer);
Действие:
Перемещает указатель вывода в точку с координатами х и у.
MoveRel
Синтаксис:
procedure MoveRel(dx:, dy: integer);
Действие:
Перемешает указатель вывода на dx и dy пикселов. Если значение параметра dx (dy) положи гельное, то указатель перемещается вниз (влево), если отрицательное, то — вверх (вправо).
OutText
Синтаксис:
procedure OutText(Текст: string);
Действие:
Выводит строку символов Текст от текуще! о положения указателя вывода и перемешает указатель вывода в точку, расположенную за последним выведенным символом.
Цвет выводимых символов можно задать при помощи процедуры Setcolor, а шрифт — SetTextStyle.
OutTextXY
Синтаксис:
procedure OutTextXY(х, у: integer; Текст: string);
Действие:
Устанавливает указатель вывода в точку с координатами (х,у) и выводит строку символов текст, при этом указатель вывода своего положения нс меняет, остается в точке с координатами (х, у).
Цвет выводимых символов можно задать при помощи процедуры SetColor, а Шрифт — Процедурой SetTextStyle.
PieSlice
Синтаксис:
procedure PieSlice (х, у: integer; УголНачала, УголКонца, Радиус: word);
Действие:
Вычерчивает сектор радиуса Радиус с центром в точке с координатами (х/у). Параметры УголНачала И УголКонца задают уГЛОВЫС координаты начальной и конечной точек линии окружности (в градусах), которая вычерчивается против часовой стрелки от начальной к конечной точке. Значение угловой координаты возрастает против часовой стрелки. Нулевому углу соответствует горизонтальный отрезок, проведенный из точки (х,у) в сторону возрастания координаты х. Если УголНачала равен 0°, а УголКонца равен 360°, то процедура PieSlice вычерчивает круг.
Сектор закрашивается в соответствии со стилем, заданным процедурой SetFilisiyle, линия и границы вычерчиваются цветом, установленным процедурой Setcolor.
PutPixel
Синтаксис:
procedure PutPixel(xzу: integer; Цвет: word);
Действие:
Окрашивает пиксел, точку с координатами ^х,у), цветом цвет. В качестве параметра цвет обычно используют именованную константу (см. Setcolor).
Rectangle
Синтаксис:
procedure Rectangle(xl,yl,х2,у2: integer);
Действие:
Вычерчивает прямоугольник. Параметры xl и yl залают положение левого верхнего угла прямоугольника, х2 и у2 — правого нижнего угла прямоугольника.
Вид контура прямоугольника можно задать при помощи процедуры SetLineStyle, а цвет — при помощи процедуры SetColor.
Sector
Синтаксис:
procedure Sector(х,у: integer; Угол 1, Угол2, РадиусХ, РадиусУ: word);
Действие:
Вычерчивает эллиптический (РадиусХ * Радиусу) или круговой (радиусХ = Радиусу) сектор. Параметры х и у задают положение центра сектора, Угол1 и Угол2 - углы прямых, ограничивающих сектор, а РадиусХ и Радиусу — радиусы эллипса по осям X и Y, из которого "вырезается" отображаемый сектор. Нулевому углу соответствует горизонтальный отрезок, проведенный из точки (х,у) в сторону возрастания координаты х. Если Угол! равен 0°, а Угод2 равен 360°, то процедура sector вычерчивает полный круг (эллипс).
Цвет и стиль заливки можно задать при помощи процедуры setFiilstyle, цвет границы сектора —процедурой setcolor.
SetColor
Синтаксис:
procedure SetColor(Цвет:word);
Действие:
Задает цвет для вывода текста (процедуры OutTextxv и ourText), ВЫЧерЧИВаНИЯ ЛИНИЙ И фигур (Процедуры Line, Circle, Recktangie и др.). В качестве параметра цвет обычно используют именованные константы.
Цвет
Константа
Значение константы
Черный
Black
0
Синий
Blue
1
Зеленый
Green
2
Бирюзовый
Cyan
3
(окончание)
Цвет
Константа
Значение константы
Красный
Red
4
Сиреневый
Magenta
5
Коричневый
Brown
6
Белый
LightGray
7
Серый
DarkGray
8
Голубой
LightBlue
9
Светло-зеленый
LightGreen
10
Светло-бирюзовый
LightCyan
11
Светло-красный (алый)
LightRed
12
Светло-сиреневый
LightMagenta
13
Желтый
Yellow
14
Белый, яркий
White
15
SetFillStyle
Синтаксис
procedure S еtFi 11S tу 1 е (СтильfЦвет: word);
Действие:
Устанавливает стиль и цвет заливки (закрашивания), используемый процедурами вывода областей (ваг, вагзо, sector и др.). В качестве параметра стиль обычно используют одну из именованных констант, список которых приведен ниже. Параметр цвет также задается именованной константой (см. setcoioi).
Константа
Стиль заполнения области
EmptyFill
Без заливки (сплошная заливка цветом фона)
SolidFill
Сплошная заливка текущим цветом
LineFrll
Горизонтальная штриховка
•_(окончание)
Константа
Стиль заполнения области
LtSlashFill
Штриховка под углом 45° влево тонкими линиями
SlashFill
Штриховка под углом 45° влево
BkSlashFill
Штриховка под углом 45е вправо тонкими линиями
LtBkSlashFill
Штриховка под углом 45° вправо
HatchFill
Штриховка клеткой
XhatchFill
Штриховка под углом 45° редкой косой клеткой
InterleaveFill
Штриховка под углом 45° частой косой клеткой
WideDotFill
Заполнение редкими точками
CloseDotFill
Заполнение частыми точками
UserFill
Тип заполнения определяется программистом
SetLineStyle
Синтаксис:
procedure SetLineStyle(ТипЛинии: word; Образец: word; Толщина; word);
Действие:
Устанавливает стиль вычерчиваемых контуров и линий (см. процедуры Line, Circle И Др.).
Параметр ТипЛинии, в качестве которого обычно используется одна из именованных констант, определяет вид линии.
Константа
Тип линии
SolidLn
Сплошная, непрерывная
DottedLn
Пунктирная, с постоянной длиной штрихов
CenterLn
Штрих-пунктирная линия
DashedLn
Пунктирная, длина штрихов чуть больше, чем у линии типа DottedLn
UserBitLn
Определенный программистом тип линии
Параметр толщина определяет толщину линии. Линия может быть обычной ТОЛЩИНЫ (константа Normwidth) или утолщенная (константа ThickWidth).
Параметр образец используется в том случае, если процедура setLinestyle устанавливает тип линии, определяемый программистом. Значением параметра образец должна бы гь четырехраз рядная шестнадцатеричная константа, кодирующая отрезок линии длиной в 16 пикселов.
SetTexStyle
Синтаксис:
procedure SetTexStyle(Дрифт, Ориентация, Размер: word);
Действие:
Устанавливает шрифт, размер и ориентацию текста, выводимого процедурами OutTextxy и OutText. В качестве параметра шрифт можно использовать одну из перечисленных ниже конст ант.
Константа
Значение Шрифт
DefaultFont
0Стандартным Каждый выводимый
символ формируется в квадрате размером 8 на 8 пикселей
TriplexFont
1Triplex шрифт
SmallFont
2Мелкий
SansSerifFont
3SansSerif шрифт
GothicFont
4Готический
Примечание )
В шрифтах, отличных от стандартного (DefaultFont), букв русского алфавита нет.
Параметр ориентация задает ориентацию выводимого процедурами OutText и OutTextxy текста. Текст может быть ориентирован обычным образом (значение параметра ориентация в этом случае равно именованной константе Normal) или вертикально, т. е.
снизу вверх (в этом случае значение параметра ориентация равно Vertical).
Процедуры и функции для работы с файлами
Append
Синтаксис:
procedure Appendivar F: text);
Действие:
Открывает существующий файл, связанный с файловой переменной f в режиме добавления в конец файла. При попытке открыть несуществующий файл появляется ошибка времени выполнения программы.
Assign
Синтаксис:
procedure Assign(var F; ИмяФайла: string);
Действие:
Связывает файловую переменную к с конкретным файлом.
Close
Синтаксис:
procedure Close(var F) ;
Действие:
Закрывает файл, связанный с файловой переменной F.
EOF
Синтаксис:
function EOF(var F) : boolean;
Действие:
Проверяет, не достигнут ли конец файла (end of file) при чтении из файла, связанного с файловой переменной г. Если указатель
чтения достиг конца файла, то функция eof возвращает значение true, в противном случае — false.
Erasre
Синтаксис:
procedure Erase(var F) ;
Действие:
Уничтожает файл, имя которого связано с файловой переменной г.
lOResult
Синтаксис:
function lOResult: integer;
Действие:
Возвращает код результата последней выполненной операции файлового ввода-вывода (в том числе открытия и закрытия файла). Если операция ввода-вывода выполнена успешно, функция возвращает ноль.
( Примечание )
Чтобы программа могла использовать функцию lOResult, надо перед инструкциями, в результате которых может возникнуть ошибка ввода-вывода, поместить директиву {$!-}, а после этих инструкций — директиву ($и }.
Reset
Синтаксис:
procedure Reset (var F [:file; RecSize: word.]];
Действие:
Открывает существующий файл. Тип файла может быть любым. Если элементы файла не относятся к одному из стандартных типов, то параметр Recsize задает длину записи (в байтах). При попытке открыть несуществующий файл возникает ошибка времени выполнения.
Rewrite
Синтаксис:
procedure Rewrite(var F [:file; RecSize: word]);
Действие:
Создает и открывает файл, имя которого связано с файловой переменной г. Если файл с таким именем уже существует, то процедура Rewrite его уничтожает и создает новый.
Прочие функции
ClrEol
Синтаксис:
procedure ClrEol;
Действие:
Очищает текущую строку (строка, в которой находиться курсор) от позиции, в которой находится курсор, до конца строки, закрашивая ее текущим цветом, заданным процедурой TextBackGround.
ClrScr
Синтаксис:
procedure ClrScr;
Действие:
Очищает текущее (заданное процедурой window) окно экрана, закрашивая его цветом, заданным процедурой TextBackGround.
Delay
Синтаксис:
procedure Delay (Задержка: word);
Действие:
Обеспечивает задержку выполнения программы в миллисекундах.
Dispose
Синтаксис:
procedure Dispose(var p);
Действие:
Освобождает память, занимаемую динамической переменной, на которую указывает р.
Eoin
Синтаксис:
function Eoin [ (var F: text)]: boolean;
Действие:
Если при обращении к функции Eoin параметр не указан, то функция проверяет, не является ли очередной символ, читаемый из буфера клавиатуры, символом * новая строка*. Если является, то функция возвращает значение true, в противном случае — false. Если параметр указан, то функция аналогичным обра зом проверяет очередной символ текстового файла, связанного с файловой переменной, указанной при вызове функции.
GotoXY
Синтаксис:
procedure G0T0XY(х,у: byte);
Действие:
Перемещает курсор в точку экрана, имеющую координаты (х,у).
Halt
Синтаксис:
procedure Halt [ (, Код За вершения: word) ];
Действие:
Завершает выполнение программы и передает управление операционной системе.
New
Синтаксис:
procedure New(var р);
Действие:
Выделяет память для динамической переменной и присваивает указателю р адрес выделенной области.
ParamCount
Синтаксис:
function ParamCount: word;
Действие:
Возвращает количество параметров командной строки.
ParamStr
Синтаксис:
function ParamStr(№ word): string;
Действие:
Возвращает параметр командной строки, номер которого указан при обращении к функции. Значением Paramstr(C) является путь к файлу выполняемой программы и его имя (например, c:\tp\exe&tpu\myprog.exe).
ReadKey
Синтаксис:
function ReadKey : char;
Действие:
Возвращает символ, соответствующий нажатой клавише. Используя функцию Ord, можно получить код нажатой клавиши.
Если нажата служебная клавиша (например, клавиша перемещения курсора), то функция ReadKey возвращает символ с кодом 0. В этом случае для идентификации служебной клавиши следует еше раз вызвать функцию ReadKey, которая теперь вернет код служебной клавиши.
Ниже приведены коды некоторых часто используемых клавиш
Клавиша
Код
<Esc>
27
<Backspace>
8
<Enter>
13
<Space>
32
сКурсор вверх>
0;72
сКурсор вниз>
0;80
сКурсор влево
0;75
сКурсор вправо
0;77
TextBackGround
Синтаксис:
procedure TextBackGround(Цвет: byte);
Действие:
Задает цвет фона сообщений, выводимых инструкциями write и writein. В качестве параметра Цвет может использоваться одна из перечисленных ниже именованных констант.
Константа
Цвет
Номер цвета
Black
Черный
0
Blue
Синий
1
Green
Зеленый
2
Cyan
Бирюзовый
3
Red
Красный
4
Magenta
Сиреневый
5
Brown
Коричневый
6
LightGray
Белый
7
TextColor
Синтаксис
procedure TextColor(Цвет: byue);
Действие
Устанавливает цвет символов сообщений, выводимых инструкциями write и writein. В качеез ве параметра цвет может использоваться одна из перечисленных ниже именованных констант.
Константа
Цвет
Номер цвета
Black
Черный
0
Blue
Синий
1
Green
Зеленый
2
Cyan
Бирюзовый
3
Red
Красный
4
Magenta
Сиреневый
5
Brown
Коричневый
6
LightGray
Белый
7
DarkGray
Серый
8
LightBlue
Голубой
9
LightGreen
Светло-зеленый
10
LightCyan
Светло-бирюзовый
11
LightRed
Светло-красный (алый)
12
LightMagenta
Светло сиреневый
13
Yellow
Желтый
14
White
Белый, яркий
15
WhereX
Синтаксис:
function WhereX: byte;
Действие:*
Возвращает координату х курсора в текущем окне, заданном процедурой Window..
WhereY‘'
Синтаксис:' '
function WhereY: byte;.
Действие:..,.■■
Возвращает координату y курсора в текущем окне, заданном Процедурой Window.
Window'
Синтаксис:',
procedure Window(xir уI,x2ry2: byte) ;
Действие:
Определяет окно — область экрана. Параметры xi,yi задают координаты левого верхнего угла окна, а параметры х2,у2 — правого нижнего угла.
г
1^*1 -Illi UI.™ II 41WWl'1'WPW* I*1^*1 -Illi UI.™ II 41WWl'1'WPW* I*
1^*1 -Illi UI.™ II 41WWl'1'WPW* I*
1^*1 -Illi UI.™ II 41WWl'1'WPW* I*
Приложение
Вывод иллюстраций
В языке Turbo Pascal нет стандартной процедуры, которая обеспечивала бы вывод на экран картинки, находящейся в файле. Программист сам может разработать такую процедуру. Однако эта задача является довольно сложной. Поэтому ниже приведен текст разработанной автором функции Draw, которая выводи'] на экран 16-цветную картинку, созданную в среде Windows, например, при помощи графического редактора Paint.
{ (с) Культин Н. Б., 2000 }
Выводит 16-цветную картинку, содержимое bmp-файла }
function Draw(x0,y0: integer; fname: string; transparent: boolean ):integer;
x0,y0 — координаты левого верхнего угла области вывода;
fname — имя файла картинки;
transparent = True — не выводить точки, цвет которых совпадает с цветом левой нижней точки каргинки.
Значения функции:
успех — высота картинки в пикселах;
1 — не найден файл;
2 — картинка не является 16-цветной.
}
Label
bye;
const
таблица преобразования кодировки цвета из Windows в DOS } color: array(0..15] of byte - (0,4,2,6,1,5,3,7,8,12,10, 14,9,13,11,15);
Прочитав из bmp-файла эту запись, можно получить информацию о находящейся в этом файле картинке: размере и кол-ве цветов, )
bmpinfo = record
hl,h2:
char;
{ файл должен начинаться буквами ВМ )
Size:
longlnt;
{ размер файла, байт }
Reserved:
longint;
{ резерв, не используется }
Offset:
longint;
{ смещение данных относительно начала файла }
b:
longint;
( не используется: ]
Widrh:
longint;
( ширина картинки )
Height:
longint;
{ высота картинки )
Plans:
word;
{ кол-во планов, должно содержать 1 }
bpp:
word;
{ кол-во битов на пиксел (1, 4, 8
или 24 )
end;
var
: file of bmpinfo; { для получения информации с картинке } bmpf: file of byte; { для чтения картинки )
res: integer;( код ошибки открытия файла }
info: bmpinfo;
х,у:integer; { координаты пиксела )
b: byte;{ байт, прочитанный из файла )
bh: byte;( сдвинутые на четыре разряда четыре
старшие бита прочитанного байта }
bl: byte;{ четыре младшие бита прочитанного байта }
nb: integer;{ кол-во байт (кратное четырем)
соответствующее строке )
пр: integer; { кол-во выведенных пикселов строки )
tpcolor: byte; { "прозрачный" цвет. Закрашенные этим цветом точки картинки на экран не выводятся )
i,j : integer;
245245£ Ц ; Приложение
245
245
I begin'
I assign(f,fname);
I{$!-}
Ireset(f);
I.($I+}
Ires:=IOResul t;
Iif res <>0then
Ibegin
IDraw:=-1;( не найден файл картинки }
Igoto bye;
Iend;
Iread(f, info); { читаем информацию о картинке }
I * close (f);{ и закрываем файл }
Iif info.bpp о 4 then
Ibegin
IDraw:=-2;{ картинка не 16-цветная }
Igoto bye;
Iend;
Ix:-xO;
Iy:-yO+info.height;•
Inb:= (info.width div 8) *4;-
|if (info.widch mod 8)<>0then nb:=nb+4;
Iassign (bmpf, fname);
. Ireset (bmpf) ;
Iseek(bmpf,info.offset);
|if transparentthen
1begin
Iread (bmpf, b) ;
Itpcolor:=b shr 4;
Уseek(bmpf,info.offset);
end |else tpcolor :■ 17; { в качестве прозрачного зададим
Iнесуществующий цвет }
for j:=l to rib do ( вывод строки } begin
{ if not EOF(bmpf) then } read(bmpfrb);
if np < info.width then
begin
bh:- b shr 4,
if bh <> tpcolor
then putpixel(x,y,color[bh]); inc(x);
inc(np);
srsrend'
sr
sr
if np < info.width then
begin
bl:- b and 15;
if bl <> tpcolor
then putpixel (x,y, color [Ы]);
inc (x);
inc (np);
end
end;
x:=xO;
dec (y) ;
end;
close(bmpf);
Draw :— info.height;
bye:
end;
Таблица кодировки символов
Символы, имеющие коды от 0 до 127:
0-
©
е
V
♦
16“ ►
17- ^1
18- 1
19- »
20- Ц
32-
33- !
34- "
35- #
36- 5
48 - 0
49- 1
50- 2
51- 3
52- 4
64- ©
65- А
66- В
67- С
68 D
80- Р
81- Q
82- R
83- S
84- Т
96- '
97- а
98- Ь
99- с
100- 8
11/- р
113- q
114- г
115- 5
116- t
5- ♦
21- §
37- %
53- 5
69- Е
85- U
101- е
13 7- и,
6- ♦
22- -
38- &
39- *
54- 6
70- F
86- V
102- f
118- v
7-
23- t
55- 7
71- G
87- W
103- о
119- w
8-
24-
40- (
56- 8
72- Н
88- X
104- h
120- х
9- о
25-
41- )
57- 9
73- I
89- Y
105- т
121- у
to
26- -
42- *
58- :
74- 3
90- Z
106- j
122- z
il- 6
27- -
43- +
59- ;
75- К
91- [
107- к
123- {
12- 2
28- l
44- ,
60- <
76- L
92- \
108- 1
124- |
13-
29- -
45- -
61’ =
77- М
93- ]
109- m
125- ]
14- JJ
30- А
46- .
€2- >
78- М
94- /■
110- л
126- -
15- о
31- у
47- /
63- ?
79- 0
95- J
113- о|
127- 0
Символы, имеющие коды от 128 до 255:
128- А
144- Р
160- а
176- В
192- 1
208 - ^
224- р
240- Ё
129- Б
145- С
161- 6
177- Ш
193- ^
209- т
225- с
241- ё
130- В
146- Т
162- в
178- В
194- т
210- чт
226- т
242- 6
131- г
147- У
163- г
179-
195- j-
211- 1
227- у
243- е
132- Д
148- Ф
164- д
180- J
196- -
212- t
228- ф
244- I
133- Е
149- X
165- е
181-
197- --
213- г
229- х
245- 1
134- Ж
153- Ц
166- ж
182- -fl
198- =
214- л-
2 30- ц
246- У
135- 3
151- Ч
167’ з
183- ц
199- ■
215- f
231- ч
247- у
136 И
152- Ш
168- и
184- ч
200-
216- 4
232- ш
248 *
137- й
153- Ц
169- й
185- {
201-
217- J
233- щ
249- *
138- К
154- Ъ
170- к
186 - К
202-
218- г
234- ъ
2 50- ■
139- Л
155- Ы
171- л
187- 41
203- у
219- |
235- ы
251- V
140- М
156- Ь
172- м
188- =«
204- В
220- -
236- ь
252- №
141- и
157- Э
173- н
189- J
205- -
221- Г
2 37- э
253- Ю
142- 0
158- Ю
174- о
190- ^
206- 4
222- |
238- ю
254- ■
143- П
159- Я
175- п
191- !
207- 1
223 ■
2 39- я
255-
Символы с кодами 7, 8, 10 и 13 являются служебными и на экране не отображаются. Каждому служебному символу соответствует определенное действие.
Код символа
07
Действие
Короткий звуковой сигнал
08
Перемещение курсора влево на одну позицию
10
Перемещение курсора на следующую строку без изменения его положения в колонке
13
Перемещение курсора в начало текущей строки
Представление информации в компьютере
Десятичные, двоичные и шестнадцатеричные числа
В повседневной жизни человек имеет дело с десятичными числами» В десятичной системе счисления для представления чисел используются цифры от 0 до 9. Значение числа определяется как сумма произведений цифр числа на их весовые коэффициенты, которые зависят от места цифр в числе. Весовой коэффициент самой правой цифры равен единице, цифры перед ней — десяти, затем ста и т. д. Например, число 2703 можно представить как 2x1000 + 7x100+0x10 + 3x1.
Вес разрядаВес разрядаНомер разрядаНомер разрядаЕсли места расположения цифр (разряды) в числе пронумеровать справа налево и самой правой позиции присвоить номер ноль, то можно заметить, что вес i-ro разряда равен i -ой степени десятки (рис. 1).
Вес разряда
Вес разряда
Номер разряда
Номер разряда
Рис. 1. Вес разрядов десятичного числа
Для внутреннего представления чисел в компьютере используется двоичная система счисления. Двоичные числа записываются при помощи двух цифр — нуля и единицы. Как и десятичная, двоичная система — позиционная. Весовой коэффициент разряда i-ro равен двум в i-ой степени (рис. 2).
Двоичные числа наиболее точно отражают состояние памяти, регистров процессора и внешних устройств. Вместе с тем, рабо-
тать с двоичными числами не совсем удобно, т. к. приходится записывать слишком много цифр. Поэтому была разработана шестнадцатеричная система счисления, позволяющая компактно записывать двоичные числа и обеспечивающая простой способ перевода двоичного числа в шестнадцатеричное и обратно.
1Номер разряда
Рис 2. Вес разрядов двоичного числа
( Примечание j
Следует отметить, что десятичные числа можно также рассматри вать как компактное представление двоичных чисел, однако процесс перевода двоичного числа в десятичное и обратно нельзя назвать простым.
В основе шестнадцатеричной системы счисления лежит тот факт, что, используя четыре двоичные цифры, можно записать шестнадцать чисел (максимальное значение четырехразрядного двоичного числа равно пятнадцати). Схема получения шестнадцатеричного числа из двоичного представлена на рис. 3.
Цифры двоичного числа делятся на группы по четыре каждой группе ставится в соответствие сначала десятичное число, являющееся эквивалентом четырехзначного двоичного, затем полученное десятичное число записывается шестнадцатеричной цифрой. Ниже приведены десятичные числа (от нуля до 15) и соответствующие им шестнадцатеричные цифры.
101110101 Двоичное ч <сло, разделен ное I . на группы по четыре бита
115■ ■■• Десятичные цифры
I I
в 5 Шестнадцатеричные цифры
\ У
В5Шестнадцатеричное число
Рис. 3. Схема получения шестнадцатеричного числа из двоичного
Десятичное число
Шестнадцатеричная цифра
Десятичное число
Шестнадцатеричная цифра
0
0
8
8
1
1
9
S
2
2
10
А
3
3
11
В
4
4
12
С
5
5
13
D
6
6
14
Е
7
7
15
F
8
8
В тексте программы перед первой цифрой шестнадцатеричного числа ставится значок $, например: $2а, see, $01.
Память компьютера
В памяти компьютера числа хранятся в виде битов. Каждый бит может принимать значение одной двоичной цифры Следовательно, значением бита может быть ноль или единица. Восемь
битов объединены в байт. Максимальное число, которое можно записать при помощи восьми двоичных цифр, — это 11111111, что соответствует десятичному числу 255, минимальное — ноль. Поэтому, значением байта может быть число от нуля до 255.
Переменные хранятся в памяти. Так как переменные различных типов могут принимать различные значения, то для их хранения нужен разный объем памяти. Память под переменные выделяется в байтах (целое число). Например, значением переменной типа char может быть любой из 256 символов. Поэтому для хранения переменной такого типа достаточно одного байта. Значе - нием переменной типа integer может быть число от —32 768 до 32 767 (65 535 значений). Для хранения переменной этого типа требуется два байта. Очевидно, что чем больше диапазон значений типа, тем больше байтов нужно для хранения переменной этого типа.
Тип переменной
Занимаемая память, байт
Диапазон значений
CHAR
1
Любой символ
STR]NG
256
Строка до 256 символов
STRING[N]
1 x П
Строка до п символов
BYTE
1
0-255
i
WORD
2
0-65 535
INTEGER
2
-32 768-32 767
LONGINT
4
-2 1 47 483 648-2 147 483 647
REAL
6
2.9Е-39—1.7е38
SINGLE
4
1.5Е-45-3 Де38
DOUBLE
8
5.0Е-324-1,7е308
EXTENDED
8
3.4Е-4932—1.1е4932
В программе для одного и того же значения можно использовать переменные разного типа (при этом они будут занимать разный объем памят и). Например, если в программе используется пере-
менная Day (число месяца), то для нее можно задать типы byte, integer или longint В первом случае будет занят один байт памяти, во втором — два, в третьем — четыре. Однако реально будет использоваться только один байт, а остальные — просто заняты. Поэтому следует подбирать наиболее подходящий тип для каждой переменной. Особое внимание нужно обращать на описание строковых переменных и массивов.
Выделяя память для строковых переменных, помните, что если не указана предельная длина строки, то переменной выделяется 256 байтов. При объявлении переменной, предназначенной, например, для хранения имени человека, следует писать name:strinq[30], а не name:string.
Каждому массиву программы выделяется память, объем которой определяется как типом элементов массива, так и их количеством. Например, для хранения двумерного массива вещественных чисел (например, 20x20) нужно более трех килобайт памяти (20x20x8 = 3200).
Хотя объем памяти компьютера кажется неограниченным, но если ее нерационально использовать, то в один прекрасный момент памяти может не хватить.
Список
ДОПОЛНИТЕЛЬНОЙ ЛИТЕРАТУРЫ
Вирт Н. Алгоритмы и структуры данных: Пер. с англ. — М.: Мир, 1989. — 360 с.: ил.
Зелковиц М Шоу А.. Гэннон Дх Принципы разработки программного обеспечения Пер. с англ. — М.: Мир, 1982. — 386 с.: ил.
Культин Н. Б Программирование в Turbo Pascal 7.0 и Delphi / Второе издание, переработанное и дополненное. — СПб.: БХВ — Санкт-Петербург, 1999. — 416 с : ил.
Культин Н. Б. Программирование на Object Pascal в Delphi 5. СПб БХВ — Санкт-Петербург, 1999 — 464 с.: ил.
Практическое руководство по программированию: Пер. с англ. Б. Мик, П. Хит, Н. Рашби и др.; под ред. Б. Мик. П Хит, Н Рашби. — М.: Радио и связь, 1986. — 168 с.: ил.
Фокс Дж. Программное обеспечение и его разработка: Пер. с англ. — М : Мир, 1985. — 368 с/ ил.
Энциклопедический словарь юного математика. Сост. А. П. Савин. — М. Педагогика, 1989.—352 с.: ил.
Язык компьютера: Пер. с англ. / Под ред. и с предисл. В. М. Курочкина. — М.: Мир, 1989. — 240 с.: ил.
Предметный указатель
ААлгоритм Евклида 44ББайт 251Бит 250ВВвод из файла 67Выводв файл 65, 69 иллюстрации 243 на принтер 69ГГрафик 61, 62, 64дДеловая графика 62, 63Диаграмма 62ААлгоритм Евклида 44ББайт 251Бит 250ВВвод из файла 67Выводв файл 65, 69 иллюстрации 243 на принтер 69ГГрафик 61, 62, 64дДеловая графика 62, 63Диаграмма 62И
А
Алгоритм Евклида 44
Б
Байт 251
Бит 250
В
Ввод из файла 67
Вывод
в файл 65, 69 иллюстрации 243 на принтер 69
Г
График 61, 62, 64
д
Деловая графика 62, 63
Диаграмма 62
А
Алгоритм Евклида 44
Б
Байт 251
Бит 250
В
Ввод из файла 67
Вывод
в файл 65, 69 иллюстрации 243 на принтер 69
Г
График 61, 62, 64
д
Деловая графика 62, 63
Диаграмма 62
Игра
"Азбука морзе' 52
"Угадай число” 42, 52
Интеграл 39
К
Код символа 44. 45
м
Магический квадрат 50
Массив
поиск минимального (максимального) элемента 47
поиск элемента 48, 49
слияние 49
сортировка 49
Мультипликация 62, 64
н
Наибольший общий делитель 44
п
Поиск
в массиве 48
в последовательности 42
в упорядоченном массиве 49
Преобразование
в с срочные 45
двоичное в десятичное 46
десятичное в двоичное 38, 39
десятичное в другое 46
десятичное
в шестнадцатеричное 46
шестнадцатеричное
в деся! ичное 46
Программа тестирования 39, 67
Простое число 42
Процедуры и функции
Abs 219
Append 234
Arc 224
Arctan 219
Assign 234
Ba. 225
Bar3D 225
Chr 223
Circle 225
Close 234
ClrEol 236
CIrScr 236
Concat 223
Copy 223
Cos 219
Delay 236
Delete 223
DetectGraph 226
Dispose 237
Ellipse 226
EOF 234
Eoin 237
Erasre 235
Exp 220
GotoXY 237 GraphResult 226 Halt 237InitGraph 227 Int 221 lOResult 235Length 224Line 227LineTo 227Ln 220Move Rei 228MoveTo 228 New 238 OutTexl 228 OutTextXY 228 ParamCount 238 ParamStr 238 PieShce 229 Pos 224Put Pixel 229 Random 221 Randomize 221 ReauKey 238 Rectangle 229 Reset 235 Rewrite 236 Round 222 Sector 230 SetColor 230SetFillStyle 231 Sei LineStyle 232 Sei TexStyle 233 Sin 220 Sqr 220 Sqrt 220 Str 222TextBackGround 239TextColoi 240Trunc 222Vai 222WhereX 240WhereY 241Window 241GotoXY 237 GraphResult 226 Halt 237InitGraph 227 Int 221 lOResult 235Length 224Line 227LineTo 227Ln 220Move Rei 228MoveTo 228 New 238 OutTexl 228 OutTextXY 228 ParamCount 238 ParamStr 238 PieShce 229 Pos 224Put Pixel 229 Random 221 Randomize 221 ReauKey 238 Rectangle 229 Reset 235 Rewrite 236 Round 222 Sector 230 SetColor 230SetFillStyle 231 Sei LineStyle 232 Sei TexStyle 233 Sin 220 Sqr 220 Sqrt 220 Str 222TextBackGround 239TextColoi 240Trunc 222Vai 222WhereX 240WhereY 241Window 241GetX 226
GotoXY 237 GraphResult 226 Halt 237
InitGraph 227 Int 221 lOResult 235
Length 224
Line 227
LineTo 227
Ln 220
Move Rei 228
MoveTo 228 New 238 OutTexl 228 OutTextXY 228 ParamCount 238 ParamStr 238 PieShce 229 Pos 224
Put Pixel 229 Random 221 Randomize 221 ReauKey 238 Rectangle 229 Reset 235 Rewrite 236 Round 222 Sector 230 SetColor 230
SetFillStyle 231 Sei LineStyle 232 Sei TexStyle 233 Sin 220 Sqr 220 Sqrt 220 Str 222
TextBackGround 239
TextColoi 240
Trunc 222
Vai 222
WhereX 240
WhereY 241
Window 241
GotoXY 237 GraphResult 226 Halt 237
InitGraph 227 Int 221 lOResult 235
Length 224
Line 227
LineTo 227
Ln 220
Move Rei 228
MoveTo 228 New 238 OutTexl 228 OutTextXY 228 ParamCount 238 ParamStr 238 PieShce 229 Pos 224
Put Pixel 229 Random 221 Randomize 221 ReauKey 238 Rectangle 229 Reset 235 Rewrite 236 Round 222 Sector 230 SetColor 230
SetFillStyle 231 Sei LineStyle 232 Sei TexStyle 233 Sin 220 Sqr 220 Sqrt 220 Str 222
TextBackGround 239
TextColoi 240
Trunc 222
Vai 222
WhereX 240
WhereY 241
Window 241
Система счисления > ч. H двоичная 248' ри ) d
десятинная. 248 шестнадцатеричная 249 ^1
Сбрюфоф^ г Ч . ^^^/^^^ массива 5L 49 .-^, 4v
методом "пузырька" 49 методом обмена 49
т я
Таймер 43
Предметнн&указз^
Ф. й
Файл
добавление 65 Q*- ?^;4^^1$2^ -Н 3,
Гросман 66„,--, к.
создание 65 ас
99^И■';^i^’^f,^,
Чйсйст'ЧЙ®3 =43 - ^Й^ч ^г
Чтение Мз файла 65
Ц| 'У' л - - -^S-IRHI^^a.'b •=
Щестнадцатерйчные числа'45, 250
А л ' !ЛЛ4?'Л с?п-" S^L^'i -dN
' '!■ «\L-v^ '
??? .^уи1^?-.^
- у Я
* . "'-. bf’^.fS^A
Н Культин
Turbo Pascal
в задачах и примерах
В книге собрано множество полезных и занимательных задач для начинающих программистов. Решив задачу самостоятельно, есть возможное! ь сравнить результат с приведенным в книге.
Помимо примеров, задач и решений содержатся справочные сведения по языку программирования Turbo Pascal.
Использование инструкций Тurbo Pascal
Работа с символами и строками
Сортировка и поиск в массиве
Работа с графикой
Вывод информации в файл и на принтер
ISBN 5-8206-0061-4ISBN 5-8206-0061-49785820 6006169785820 600616Использование рекурсии
ISBN 5-8206-0061-4
ISBN 5-8206-0061-4
9785820 600616
9785820 600616
^ Книга-почтой BHV
Адре,: 199397 Санкт-Петербург а/я 194
Тел (812)541-8551 Факс (812) 541-8461
E-mail: trade@bhv.spb.su, Internet: www.bhv.ru
1<Enter>1);
write('->’);
readln(dec);
write(’Десятичному числу 1,dec,’ соответствует двоичное ’); v:-128;{ вес старшего (восьмого) разряда )
for i: =1 to 8 do
{ Программа проверяет знание таблицы умножения } uses
Crt;
var
numbl ,numb2:integer; { Первое и второе число }
res:integer; ( Результат умножения первого числа на второе ) otv:integer; { Ответ испытуемого }
koi:integer; { Количество правильных ответов } i:integer;
begin
ClrScr; { очистить экран }
writein (' *** Проверка знания таблицы умножения ***■)•
writein(’ После примера введите ответ и нажмите <Enter>.1 j; writein;
kol:=0;{ правильных ответов )
Randomize; { инициализация генератора случайных чисел } for i:-] to 10 do {10 примеров } begxn
numbl: =Random (9) +1;
numb 2: =Random (9) +1;
res:=numbl * numb2;
write(' ',numbl,'x',numb2,’ = ’);
readin(orv); if otv=res
1: integer;{расстояние между квадратами}
i,j; integer;{счетчики циклов }
begin
grDr Ive г: =VGA;
grMode :=VGAHi;
grPath:=*e:\tp\bgi1;
InitGraph (grDriver,grMode,grPath);
ErrCode:=GraphResult;
www.bhv.ru www.bhv_kiev.uawww.bhv.ru www.bhv_kiev.ua
www.bhv.ru www.bhv_kiev.ua
www.bhv.ru www.bhv_kiev.ua
X 9d
в задачах и примерахв задачах и примерахTurbo Pascal
в задачах и примерах
в задачах и примерах
Примеры и решения в виде текстов программ с подробными комментариями
Справочник по Turbo Pascal
Никита Культин
Turbo Pascal
.в задачах и примерах
Тульский институтэкономики и информатикиБИБЛИОТЕКА
Санкт-Петербург«БХВ-Петербург»2006
УДК 681.3.06
Культин Н. Б.
Tuibo Pascal в задачах и примерах. — СПб.: БХВ-Петербург, 2006. — 256 с.: ил.
ISBN 5-8206-0061-4
Книга представляет собой задачник по программированию на языке Тu rbo Pasca 1. П ри веде 11 ы ка к тип овые задач и, т. с. ввод- вы вод, не пол ь- зованис циклов, работа с массивами, поиск и сортировка, так и задачи, которые, как правило, остаются за рамками традиционных курсов программирования: работа со строками и файлами, вывод на принтер, деловая графика, рекурсия. Для многих задач приведены решения — хорошо документированные тексты программ. Помимо задач и примеров книга содержит справочник по языку программирования Turbo Pascal (описание наиболее часто используемых процедур и функций) и может служить в качестве задачника для учеников 8—И классов, изучающих программирование в школе.
Дая начинающих программистов
УДК 681.3.06
Группа подготовки издания:
Главный редактор Зав. редакцией РедакторКомпьютерная верстка КорректорДизайн обложки Зав. производствомГлавный редактор Зав. редакцией РедакторКомпьютерная верстка КорректорДизайн обложки Зав. производствомЕкатерина Кондукова Наталья Торкова Татьяна Кручинина Ольги Сергиенко Наталия Периткова Ангелины Лужиной Николай ТверскихЕкатерина Кондукова Наталья Торкова Татьяна Кручинина Ольги Сергиенко Наталия Периткова Ангелины Лужиной Николай Тверских
Главный редактор Зав. редакцией Редактор
Компьютерная верстка Корректор
Дизайн обложки Зав. производством
Главный редактор Зав. редакцией Редактор
Компьютерная верстка Корректор
Дизайн обложки Зав. производством
Екатерина Кондукова Наталья Торкова Татьяна Кручинина Ольги Сергиенко Наталия Периткова Ангелины Лужиной Николай Тверских
Екатерина Кондукова Наталья Торкова Татьяна Кручинина Ольги Сергиенко Наталия Периткова Ангелины Лужиной Николай Тверских
Лицензия ИД No 02429 от 24.07.00. Подписано в печать 22.03.06.
Формат 60x90*66. Печать офсетная. Уел. печ. л. 16.
Доп. тираж 5000 экз. Заказ Ns 161 "БХВ-Пе-ербург1,194354 Санкт-Петербург, ул Есенина 5Б.
Санитарно-эпидемиологическое заключение на продукцию
Ns 77.99.02.953. Д.006421.11.04 от 11.11.2004 г. выдано Федеральной службойпо надзору в сфере защиты прав потребителей и благополучия человека
Отпечатано с готовых диапозитивовв ГУП “Типография ’’Наука''199034, Санкт-Петербург, 9 линия, 12
ISBN 5-8206-0061-4ISBN 5-8206-0061-4© Культин Н. Б., 2000
ISBN 5-8206-0061-4
ISBN 5-8206-0061-4
© Оформление, издательство "БХВ — Санкт-Петербург", 200С
Содержание
Предисловие. 7
лКак работать с книгой 8
1хОформление решений 8
Часть I. Задачи 9
Объявление переменных 9
Инструкция присваивания 10
Вывод ..13
Ввод15
Программы с линейной структурой 16
Выбор. 24
//..... 24
Case30
Циклы31
For.................................._ 31
Repeat 41
While ...43
Символы и строки 44
Массивы.. 47
Функции 53
Процедуры .' 55
Графика 56
Файлы 64
Рекурсия .....ь9
Часть II. Решения 73
Часть III. Справочник 209
Структура программы 209
Основные типы данных209
ю Целые числа 210
Действительные числа- 210
Строки....210
Массивы 211
Записи .211
Выбор212
Инструкция IF. 212
Инструкция CASE.. 212
Циклы213
Инструкция FOR 213
Инструкция REPEAТ........................................................ 214
Инструкция WHILE................................................................215
Безусловный переход215
Инструкция GoTo............................ ........................................... . 215
Объявление функции 215
Объявление процедуры 216
Встроенные функции и процедуры 216
Зарезервированные слова и директивы 218
Процедуры и функции 219
Математические функции.. 219
Abs219
Arctan.. 219
Cos 219
Exp220
Ln............................................................................................... 220
Sin 220
Sqr. 220
Sqrt220
Random. 221
Randomize221
Функции и процедуры преобразования 221
Inf221
Round... 222
Str 222
Trunc 222
Vai. 222
Функции и процедуры для работы состроками и символами 223
Chr 223
Concat223
Copy223
Delete223
Length 224
Pos224
Процедуры и функции графическогорежима224
Arc224
Bar 225
Bar3D- 225
Circle225
DetectGraph►226
Ellipse 226
GetX, GetY 226
GraphResuh 226
InitGraph 227
Line 227
LineTo 227
MoveTo 228
Move Re I 228
OutText 228
OutTextXY.... . 228
PieSlice 229
Put Pixel229
Rectangle 229
Sector 230
SetColor 230
SetFillStyle231
SetLineStyle 232
SetTexStyle 233
Процедуры и функции для работы с файлами 234
Append. 234
Assign234
Close234
EOF234
Erasre235
lOResult 235
Reset 235
Rewrite 236
Прочие функции 236
ClrEol236
ClrScr236
Delay236
Dispose 237
Eoin 237
GotoXY237
Halt 237
New.................................................... ...................................... 238
ParamCount ...238
ParamStr 238
Read Key 238
TextBackGround239
Text Color.240
WhereX.240
WhereY.241
Window241
Приложение243
Вывод иллюстраций 243
Таблица кодировки символов247
Представление информации вкомпьютере 248
Десятичные, двоичные и шестнадцатеричные числа .248
Память компьютера 250
Список дополнительной литературы253
Предметный указательм254
40
41
41
43
*43
>47
>48
248
250
253
254
леле
ле
ле