78
Введение Данный практикум призван оказать помощь преподавателям в подборе задач для проведения лабораторных работ, помочь учащимся колледжа в получении навыков разработки алгоритмов и программ. Автор старался дать минимум теоретических сведений об алгоритмизации и программировании на Паскале (этот материал дается на лекциях), а больше внимания уделить решению примеров. В качестве примеров выбирались наиболее типичные или интересные (с точки зрения автора). Решение каждого примера сопровождается краткими пояснениями и комментариями. Как правило, приводится несколько вариантов решения каждого примера. Некоторые задания по лабораторным работам содержат задания повышенной сложности (второй уровень) и дополнительные. В электронном варианте данный практикум постоянно пополняется новыми заданиями. Для удобства пользования данный практикум представлен в двух частях. Первая часть включает описания и задания по десяти лабораторным работам, которые студенты должны выполнить во втором семестре второго курса. Требования безопасности при работе на ПЭВМ При эксплуатации ПЭВМ запрещается: - подключать и отключать разъемы кабелей электропитания и блоков вентиляции при поданном напряжении электросети; - заменять съемные элементы под напряжением; - производить пайку в аппаратуре, находящейся под напряжением; - пользоваться электрическими паяльниками и другими электроинструментами с напряжением 36 В и выше с незазем-ленными корпусами; - оставлять без надзора включенные ПЭВМ; - закрывать двери на замок при проведении занятий; - самостоятельно устранять неисправности и неполадки в работе ПЭВМ. Обо всех нарушениях правил ТБ сообщать преподавателю или дежурному лаборанту. Требования безопасности при возникновении аварийных ситуаций При возникновении аварийной ситуации, грозящей здоровью работающих людей, производится немедленное отключение всех рабочих мест рубильником (автоматом) любым человеком, находящимся в аудитории. В случае поражения работающего электрическим током, он должен быть немедленно освобожден от токоведущих цепей. Если пострадавший находится в бессознательном состоянии, немедленно приступить к оказанию первой помощи и вызвать скорую помощь. 111 112

Laboratornyy Praktikum OAiP Ch 1

Embed Size (px)

Citation preview

Page 1: Laboratornyy Praktikum OAiP Ch 1

Введение

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

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

Требования безопасности при работе на ПЭВМ

При эксплуатации ПЭВМ запрещается:- подключать и отключать разъемы кабелей

электропитания и блоков вентиляции при поданном напряжении электросети;

- заменять съемные элементы под напряжением;- производить пайку в аппаратуре, находящейся под

напряжением;- пользоваться электрическими паяльниками и другими

электроинструментами с напряжением 36 В и выше с незазем-ленными корпусами;

- оставлять без надзора включенные ПЭВМ;- закрывать двери на замок при проведении занятий;- самостоятельно устранять неисправности и неполадки в

работе ПЭВМ.Обо всех нарушениях правил ТБ сообщать преподавателю

или дежурному лаборанту.

Требования безопасности при возникновении аварийных ситуаций

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

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

Телефон скорой помощи – 03.В случае возникновения пожара, начать немедленную

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

Телефон пожарной службы – 01.

Требования безопасности по окончании работ

При техническом обслуживании аппаратуры ПЭВМ обязательным является следующее:

- при проверке и обслуживании съемных блоков электропитания их корпуса должны заземляться;

- измерение напряжений в токоведущих частях с напряже-нием 36 В необходимо производить, пользуясь резиновыми ков-риками и изолированными щупами;

- при прозвонке электрических цепей необходимо предварительно эти цепи обесточить и проверить отсутствие напряжения с помощью вольтметра. Прозвонку схем ТЭЗов производить прибором с источником постоянного напряжения не более 1,5 В;

- металлические корпуса приборов следует заземлять.Рекомендации по выполнению лабораторных работ

111 112

Page 2: Laboratornyy Praktikum OAiP Ch 1

и оформлению отчета

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

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

В отчете по лабораторной работе должны содержаться следующие пункты:

- условие задания;- краткое описание алгоритма решения задачи, метода

решения;- схема программы и ее частей, выполненная в

соответствии со стандартами. Если задача достаточно большая, разрешается вместо схемы программы приводить схему работы системы или дать только словесное описание алгоритма (по усмотрению преподавателя);

- контрольные примеры для испытания программы в нормальных, экстремальных условиях и исключительных ситуациях;

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

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

Отдельные работы, по усмотрению преподавателя, учащийся может не выполнять или преподаватель может

упростить задачу из задания, или дать другую задачу.Отдельные, наиболее трудоемкие работы, могут

выполняться на двух-трех лабораторных занятиях.Отчеты по лабораторным работам можно оформлять в

тетради или на отдельных листах и следует хранить до конца срока изучения данного предмета.

ЛАБОРАТОРНАЯ РАБОТА 1Разветвляющиеся алгоритмы и программы

Цель работы: формирование первичных умений в разработке разветвляющихся программ.

Что нужно знать для выполнения работы

1. Символы, используемые в схемах программ, и правила их применения.

2. Структуру программы.3. Оператор присваивания, математические и логические

операции, их приоритет. 4. Операторы ввода-вывода read(ln), write(ln).5. Стандартные математические функции Паскаля.6. Условный оператор if … then…else.7. Оператор выбора case … of…else…end.

Примеры выполнения задания лабораторной работы

Пример 1. Даны два числа a и b. Получите число maxab, равное наибольшему из исходных. Если исходные числа равны, то maxab положить равным любому из них.

Решение. Для решения задачи нужно ввести значения переменных a и b, сравнить их значения и, в зависимости от результата сравнения, maxab положить равным а или b.

Обратите внимание на то, что вместе с результатом выводятся и исходные данные. Это позволит упростить тестирование и повысить наглядность вывода (рис. 1.1). Во втором варианте решения данной задачи, не сравнивая, присваиваем переменной-результату maxab первое

111 112

Page 3: Laboratornyy Praktikum OAiP Ch 1

«попавшееся» значение, а затем сравниваем это значение со вторым числом (рис. 1.2).

Рис. 1.1. Схема алгоритма программы (вариант 1)

Рис. 1.2. Схема алгоритма программы (вариант 2)Возможно и более «экзотическое» решение данной задачи,

в котором maxab находится не прибегая к сравнению исходных чисел [15]. Вместо этого хитроумно используется стандартная функция Паскаля «abs» вычисления модуля числа.

Текст программы

program lr1_1_1;{Даны два числа a и b. Получите число maxab, равное наибольшему из исходных.Если исходные числа равны, то maxab положить равным любому из них.

}uses crt;var a,b,maxab:real;begin clrscr; write(‘Введите два числа через пробел ’); readln(a,b); if a>=b then maxab:=a else maxab:=b; writeln(‘ a= ’,a:8:2,’ b= ‘,b:8:2,’ maxab= ‘,maxab:8:2); readkey;end.

Основная часть программы, соответствующая второй схеме, будет выглядеть так.

maxab:=a;if maxab<b then maxab:=b;

С точки зрения времени выполнения программы, первый

111 112

Да Нет

Начало

Конец

Ввод a, b

Вывод a, bmaxab

a b?

maxab:=a maxab:=b

Нет

Да

Начало

Вводa, b

maxab < b?

maxab:=b

Выводa, b,

maxab

Конец

maxab:=a

Page 4: Laboratornyy Praktikum OAiP Ch 1

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

Контрольные примеры

Контрольный пример 1.Исходные данные: a=1, b=2; результат maxab=2.

Контрольный пример 2.Исходные данные: a=3, b=1; результат maxab=3.

Контрольный пример 3.Исходные данные: a=1, b=1; результат maxab=1.

П р и м е ч а н и е. При записи результата мы не учитываем формат вывода его в программе.

Пример 2. Рассмотрим следующую задачу. Даны координаты точки М(х, у). Определите, принадлежит ли данная точка замкнутому множеству D (a > 0; b > 0) (рис. 1.3).

Рис. 1.3

Решение. Точка М(х, у) принадлежит замкнутому множеству D, если ее абсцисса не меньше 0 и не больше а, а ордината не меньше 0 и не больше b.

В данном варианте в каждом блоке «решения» проверяется простое условие (вычисляется булевское выражение), имеющее

вид «арифметическое выражение», «знак сравнения», «арифметическое выражение», которое может принимать одно из двух значений: «истина» (true) или «ложь» (false) (рис. 1.4).

Рис. 1.4. Схема алгоритма программы (вариант 1)

Если вместо нескольких простых выражений записать одно сложное, придем к другому варианту решения этой задачи (вариант 2) (рис. 1.5).

Учитывая законы булевой алгебры (законы де Моргана), сложное выражение во втором варианте можно записать: не (x < 0

111 112

b

a0

Y

X

D

Да

Да

Да

Нет

Нет

Нет

Нет

Начало

Вводa, b, х, у

yb?

y0?

x a?

x 0?

ВыводПринадле

жит

Конец

ВыводНе

принадлежит

Да

Page 5: Laboratornyy Praktikum OAiP Ch 1

или x > a или y < 0 или y > b)? Если данное выражение принимает значение «истина», то точка принадлежит области, иначе – не принадлежит.

Рис. 1.5. Схема алгоритма программы (вариант 2)

Текст программы (вариант 1)

program lr1_2_1;{Даны координаты точки М(х,у). Определите, принадлежит ли данная точка замкнутому множеству D. D – прямоугольник с координатами вершин (0;0), (a;0), (a;b), (0;b) (a>0; b>0). Исходные данные: a, b, x, y.Результат: сообщение на экране «Точка не принадлежит» или «Точка принадлежит»

}uses crt;var a,b,x,y:real;begin

clrscr; {очистка экрана}{Ввод исходных данных} write(‘Введите через пробел значения a,b,x,y’); readln(a,b,x,y);{Определение принадлежности точки множеству} if x>=0 then if x<=a then if y>=0 then if y<=b then writeln(‘Точка принадлежит’) else writeln(‘Точка не принадлежит’) else writeln(‘Точка не принадлежит’) else writeln(‘Точка не принадлежит’) else writeln(‘Точка не принадлежит’);readkey; {ожидание нажатия клавиши}end.

Текст программы (вариант 2)

program lr1_2_2;uses crt;var a,b,x,y:real;begin clrscr; {очистка экрана}{Ввод исходных данных} write(‘Введите через пробел значения a,b,x,y’); readln(a,b,x,y);{Определение принадлежности точки множеству} if (x>=0) and (x<=a) and (y>=0) and (y<=b) then writeln(‘Точка принадлежит’) else writeln(‘Точка не принадлежит’); readkey; {ожидание нажатия клавиши}

111 112

ДаНет

Начало

Вводa, b, х, у

x 0 и x a и y 0 и y

b?

ВыводПринадлеж

ит

ВыводНе

принадлежит

Конец

Page 6: Laboratornyy Praktikum OAiP Ch 1

end.Возможны и другие варианты реализации определения

принадлежности точки:{Определение принадлежности точки множеству} if (x<0) or (x>a) or (y<0) or (y>b) then writeln(‘Точка не принадлежит’) else writeln(‘Точка принадлежит’);или{Определение принадлежности точки множеству} if not (x<0) or (x>a) or (y<0) or (y>b) then writeln(‘Точка принадлежит’) else writeln(‘Точка не принадлежит’);

Контрольные примеры

Контрольный пример 1.Исходные данные: a=4; b=2; x=2; y=1. Результат: ‘Точка принадлежит’.Контрольный пример 2.Исходные данные: a=4; b=2; x=2; y=0. Результат: ‘Точка принадлежит’.Контрольный пример 3.Исходные данные: a=4; b=2; x=0; y=0. Результат: ‘Точка принадлежит’.Контрольный пример 4.Исходные данные: a= 4; b=2; x=-2; y=1. Результат: ‘Точка не принадлежит’.Контрольный пример 5.Исходные данные: a=4; b=2; x=2; y=3. Результат: ‘Точка не принадлежит’.

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

Паскаль (например, оператор цикла repeat…until).Для иллюстрации применения структуры «выбор» и,

следовательно, оператора case, решим следующую задачу.Пример 3. Дана оценка по десятибалльной системе.

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

10-балльная система 5-балльная система0 1

1 – 3 24 – 5 36 – 8 4

9 – 10 5Решение. Данную задачу можно решить и с помощью

структуры «ветвление» (оператора if…then…else), но удобней воспользоваться структурой «выбор» (рис. 1.6).

111 112

Иначе 9, 10

6..8

4, 5

1..3

0

Начало

Вводос10

ос10?

ВыводТакой

оценки нет

Выводос10, ос5

oc5:=1

oc5:=5

oc5:=2

oc5:=3

oc5:=4

Конец

Page 7: Laboratornyy Praktikum OAiP Ch 1

Рис. 1.6. Схема алгоритма программыТекст программы

program lr1_3_1;{Дана оценка по десятибалльной системе. Получить ее эквивалент по пятибалльной системе. Предполагается, что между системами имеется следующее соответствие:

10-балльная система 5-балльная система0 1

1 – 3 24 – 5 36 – 8 49 – 10 5

}uses crt;var oc10,oc5:byte;begin clrscr; write('Введите оценку по десятибалльной системе'); readln(oc10); case oc10 of 0 : oc5:=1; 1..3 : oc5:=2; 4,5 : oc5:=3; 6,7 : oc5:=4; 8..10: oc5:=5 else begin writeln(oc10,' -такой оценки нет.'); readkey; exit; {Выход из программы} end; end; writeln(‘Оценке’,oc10,' по 10-балльной системе

соответствует', oc5,' по 5-балльной'); readkey;end.

Задания

1. Треугольник задан координатами вершин. Составьте программу, которая вычисляет коэффициенты уравнения какой-либо прямой, делящей треугольник на два равновеликих треугольника.

2. Треугольник задан координатами вершин. Составьте программу, которая вычисляет площадь данного треугольника.

3. Два прямоугольника заданы координатами вершин. Составьте программу, которая определяет находится ли второй прямоугольник внутри первого.4. Две окружности заданы координатами центров и радиусами. Составьте программу, которая находит координаты точек пересечения данных окружностей.5. Окружность задана координатами центра и радиусом. Составьте программу, которая определяет координаты точек пересечения данной окружности с прямой ax + by = c.

6. Прямоугольник задан координатами двух противоположных своих вершин. Определите, принадлежит ли точка с заданными координатами области прямоугольника, если стороны прямоугольника параллельны осям координат.

7. Прямоугольник задан координатами своих вершин. Определите, принадлежит ли окружность с заданным радиусом и координатами центра области прямоугольника.

8. Даны длины сторон треугольника. Определите, является ли данный треугольник прямоугольным.9. Напишите программу, запрашивающую возраст пользователя. Если ему не менее 18 лет, сообщите, что он имеет право голосовать, в противном случае вычислите, через сколько лет ему будет предоставлено это право.

10. Напишите программу, которая спрашивала бы сокращенное имя, а печатала полное пяти ваших друзей. Ввод

111 112

Page 8: Laboratornyy Praktikum OAiP Ch 1

незнакомого имени должен провоцировать заявление типа: «Я С ВАМИ НЕЗНАКОМА». Ответ, содержащий сокращенное имя, помещается в символьную переменную, а затем сравнивается последовательно с сокращенными именами пяти знакомых. Если введенное имя совпадает с каким-либо из использованных в программе, то вывести соответствующее полное имя.

11. Составьте программу для определения подходящего возраста кандидатуры для вступления в брак, используя следующее соображение: возраст девушки равен половине возраста мужчины +7, возраст мужчины определяется соответственно как удвоенный возраст девушки –14. В начале выполнения программы на экране должен появиться вопрос: МУЖЧИНА или ЖЕНЩИНА? ВВЕДИТЕ М, если Вы мужчина, или Ж, если женщина, и свой возраст. В зависимости от ответа выводятся соответствующие рекомендации.

12. Заданы координаты двух точек. Определите, расположены ли они на одной окружности с центром в начале координат. Результат присвойте символьной переменной. Две точки находятся на одной окружности, если длины радиус-векторов, соединяющих эти точки с началом координат, равны (проверку на равенство осуществите с точностью до е = 1.0Е-3).

13. Введите номер месяца в году. Выведите на экран сообщение о времени года.

14. Введите номер дня недели. Выведите на экран название дня.

15. В киоске продается газета стоимостью 3 коп. и журнал стоимостью 20 коп. Составьте программу, которая спрашивает о желании покупателя (журнал или газета?), принимает деньги (сумма денег вводится с клавиатуры) и печатает причитающуюся сдачу. Покупателю нужно задать, по крайней мере, 2 вопроса: 1. «ЧТО ХОТИТЕ КУПИТЬ? ЖУРНАЛ ИЛИ ГАЗЕТУ?» После ввода ответа нужно показать стоимость соответствующего издания и задать вопрос: 2. «СКОЛЬКО ВЫ ПЛАТИТЕ?» Сумму денег покупателя введите с клавиатуры (в числовую переменную). Далее сравнивается эта сумма со стоимостью покупки и печатается соответствующее итоговое сообщение.

16. Даны радиус круга и сторона квадрата. Проверьте, пройдет ли квадрат в круг?

17. Введите три числа, найдите наименьшее отношение этих чисел.

18. Даны радиус круга и сторона квадрата. Проверьте, пройдет ли круг в квадрат?

19. Функция sign(x) задана аналитически следующим образом:

Введите значение х, выведите значение функции sign(x).20. На плоскости расположена окружность радиусом R с

центром в начале координат. Введите заданные координаты точки и определите, находится ли она на окружности. Результат присвойте символьной переменной. Точка находится на окружности, если длина радиус-вектора, соединяющего начало координат с заданной точкой, равна R (проверку на равенство осуществите с точностью до е = 1.0Е-3).

21. Напишите программу, печатающую корни квадратного уравнения ax2 + bx + c = 0. Если уравнение не имеет корней, то выведите соответствующее сообщение.

22. Даны координаты точки М(х, у). Определите, принадлежит ли данная точка замкнутому множеству D (рис. 1.7).

23. Даны координаты точки М(х, у). Определите, принадлежит ли данная точка замкнутому множеству D (рис. 1.8). ΔABC – равносторонний.

Рис. 1.7 Рис. 1.8

111 112

2

1

0

Y

X

D2

C

BA0

Y

X

D

Page 9: Laboratornyy Praktikum OAiP Ch 1

24. Даны координаты точки М(х, у). Определите, принадлежит ли данная точка замкнутому множеству D, заданному системой ограничений:

25. Даны координаты точки М(х, у). Определите, принадлежит ли данная точка замкнутому множеству D (рис. 1.9).

26. Даны координаты точки М(х, у). Определите, принадлежит ли данная точка замкнутому множеству D (рис. 1.10).

Рис. 1.9 Рис. 1.10

27. Даны координаты точки М(х, у). Определите, принадлежит ли данная точка замкнутому множеству D (рис. 1.11).

Рис. 1.11

28. Введите два положительных числа и покажите, что среднее арифметическое этих чисел не меньше их среднего геометрического.

29. Введите два положительных числа и покажите, что среднее геометрическое этих чисел не меньше их среднего гармонического.

30. Даны длины трех отрезков. Определите, можно ли из этих отрезков сложить треугольник.

31. Даны длины сторон треугольника. Определите, является ли данный треугольник равнобедренным.

32. Даны длины сторон треугольника. Определите, является ли данный треугольник равносторонним.

33. Даны длины сторон треугольника. Определите, является ли данный треугольник разносторонним.

34. Даны в градусах величины двух углов треугольника. Определите, является ли данный треугольник равнобедренным.

35. Найдите наибольшее значение из трех f(1), f(2) и f(3), где f(x) = sin(5x).

36. Даны в градусах величины двух углов треугольника. Определите, является ли данный треугольник остроугольным.

Задания второго уровня

1. В каждой больничной палате четыре койки. Введите количество палат, количество больных мужчин и количество больных женщин. Определите, можно ли разместить всех больных по палатам (естественно, в одну палату кладут больных одного пола).

2. В каждой больничной палате четыре койки. Введите количество палат, количество больных мужчин и количество больных женщин. Определите, сколько всего свободных мест. Сколько больных каждого пола можно еще положить в больницу?

3. Напишите программу, запрашивающую у тренера сборной колледжа по лыжам время в минутах и секундах (с

111 112

0

1

Y

X1

D 11

1

1Y

XD

1

1

1

10 D

Y

X

Page 10: Laboratornyy Praktikum OAiP Ch 1

точностью до сотых долей секунды) трех победителей 10-километ-ровой гонки. Если какие-то результаты различаются меньше, чем на секунду, напечатать:

ВОТ ТАК БОРЬБА ШЛА ЗА ___________ МЕДАЛЬ!

4. Введите значение х. Расположите в порядке убывания значения x·sin(x), ln .

5. Напишите программу, реализующую задачу из примера 3, не использующую условного оператора и оператора выбора. Другими словами, программа должна быть линейной.

6. Напишите программу нахождения наибольшего из трех заданных чисел a, b, c, не использующую условного оператора и оператора выбора. Другими словами, программа должна быть линейной.

7. Треугольник задан координатами вершин. Определите, принадлежит ли точка с заданными координатами области треугольника?

8. Треугольник задан координатами вершин. Определите количество общих точек данного треугольника с отрезком, заданным координатами концов.

9. Определите количество общих точек у двух отрезков, заданных координатами своих концов.

10. Две окружности заданы своими радиусами и координатами центра. Определите количество общих точек у этих окружностей.

11. Треугольник задан длинами сторон. Определите, пройдет ли данный треугольник в квадрат с заданной стороной.

12. Треугольник задан длинами сторон. Определите, пройдет ли данный треугольник, как бы его не поворачивали, в квадрат с заданной стороной.

13. Треугольник задан координатами вершин. Определите, принадлежит ли начало координат области треугольника.

14. Определите, сколько общих точек у прямой y = kx + b и окружности x2 + y2 = R2.

15. Два прямоугольника заданы длинами своих сторон.

Определите, можно ли уместить один из них внутри другого.16. Определите, пройдет ли кирпич, заданный своими

размерами, в прямоугольное отверстие заданных размеров.17. Прямоугольник задан координатами своих вершин.

Определите, принадлежит ли точка с заданными координатами области прямоугольника.

18. Напишите программу решения неравенства ax2+bx+c<0.

19. Определите количество общих точек у двух треугольников, заданных координатами своих вершин.

20. Два прямоугольника заданы координатами своих вершин. Найдите площадь фигуры, являющейся пересечением этих прямоугольников.

21. Определите, сколько общих точек у прямой y = kx + b и треугольника, заданного координатами своих вершин.

22. Определите площадь фигуры, заданной неравенством |x - a| + |y - b| ≤ c.

23. Время, которое показывают часы задано в часах, минутах и секундах. Определите, через сколько секунд часовая и минутная стрелки совместятся.

24. Время, которое показывают часы задано в часах, минутах и секундах. Определите, через сколько секунд часовая и минутная стрелки образуют прямой угол.

25. Время, которое показывают часы задано в часах, минутах и секундах. Определите, через сколько секунд часовая и минутная стрелки образуют развернутый угол.

26. Ведите дату своего рождения и текущую дату. Определите количество прожитых Вами лет.

27. Треугольник задан координатами своих вершин. Определите наибольший угол треугольника.

28. Прямые заданы уравнениями у1=а1х + b1 и у2=а2х + b2. Найти расстояние от начала координат до точки пересечения этих прямых.

29. Введите название логической операции (and, or, xor).

111 112

Page 11: Laboratornyy Praktikum OAiP Ch 1

Выведите таблицу истинности логического выражения a операция b.30. Прямые заданы уравнениями у1=а1х + b1 и у2=а2х +

b2. Найдите наименьший угол, образуемый данными прямыми.

31. Дана некоторая денежная сумма А, руб. Определите, сколькими способами можно представить данную сумму «пятерками» и/или «десятками».

32. Даны угловые коэффициенты трех лучей, выходящих из одной точки. Определите, является ли второй луч биссектрисой угла, образованного первым и третьим лучами.

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

ЛАБОРАТОРНАЯ РАБОТА 2Простые циклы с заданным числом повторений

Цель работы: формирование первичных умений в разработке простых циклических программ с заданным числом повторений.

Что нужно знать для выполнения работы

1. Структуру цикла, назначение и порядок следования его отдельных частей.

2. Структуры: цикл-пока и цикл-повторить.3. Операторы цикла while … do, repeat … until, for … do.

Примеры выполнения задания лабораторной работы

Пример 1. Составьте программу, находящую значение n! (n факториал) по формуле n!=1.2.3.....n.

Решение. Алгоритм решения данной задачи может быть одним из следующих (рис. 2.1 и 2.2).

Рис. 2.1. Схема алгоритма программы (вариант 1 «цикл пока»)

Рис. 2.2. Схема алгоритма программы (вариант 2 «цикл повторить»)

111 112

Да

Нет

Начало

Выводn, F

i n?

F:=1i:=1

Конец

F:=F*i

i:=i+1

Да

Нет

Начало

Выводn, F

i>n?

F:=1i:=0

Конец

i:=i+1

F:=F*i

Page 12: Laboratornyy Praktikum OAiP Ch 1

Приведенные схемы удобно изображать с использованием символов «начало цикла» и «конец цикла» (рис. 2.3 и 2.4).

Рис. 2.3. Схема алгоритма программы (вариант 3 «цикл пока»)

Рис. 2.4. Схема алгоритма программы (вариант 4 «цикл повторить»)

Для управления циклом с заданным числом повторений обычно используют оператор цикла For. Схема алгоритма в этом

111 112

F:=1i:=1

F:=F*ii:=i+1

Вывод

n,F

Начало

Цикл пока i<=n

Конец цикла i

Начало

F:=1i:=0

Начало

i:=i+1F:=F*i

Вывод

n,F

Начало

Начало цикла

повторить

Повторить, если i<n

Page 13: Laboratornyy Praktikum OAiP Ch 1

случае может быть такой, как показано на рис. 2.5.

Рис. 2.5. Схема алгоритма программы (вариант 5 «цикл-

для»)

Текст программы

Приведем три реализации данных алгоритмов с использованием различных операторов цикла.

program lr2_1_1;{Нахождение значенияF= n!}uses crt;var i,n:integer; F:longint;begin clrscr; writeln('Введите n '); readln(n); F:=1; i:=1; while i<=n do begin F :=F*i; inc(i); end; writeln(n,'!=',F:12); readkey;end.

program lr2_1_2;{Нахождение значенияF= n!}uses crt;var i,n:integer; F:longint;begin clrscr; writeln('Введите n ');

111 112

F:=1

Начало

F:=F*i

Выводn,F

Начало

Цикл для i от 1 до n

Конец циклаi

Page 14: Laboratornyy Praktikum OAiP Ch 1

readln(n); F:=1; i:=0; repeat inc(i); F :=F*i; until i>n; writeln(n,'!=',F:12); readkey;end.

program lr2_1_3;{Нахождение значенияF= n!}uses crt;var i,n:integer; F:longint;begin clrscr; writeln('Введите n '); readln(n); F:=1; for i:=1 to n do F :=F*i; writeln(n,'!=',F:12); readkey;end.

Пример 2. Найдите n-й член ряда Фибоначчи. Члены ряда Фибоначчи можно вычислить по формуле a1 = a2 = 1, ai = ai-1 + ai-2, для i > 2.

Решение. Приведем вариант решения данной задачи с использованием трех переменных для вычисления членов ряда (рис. 2.6).

Рис. 2.6. Схема алгоритма программы

111 112

Начало

Вводn

a:=1b:=1

Цикл дляi от 3 до n

c:=a+b

a:=bb:=c

i

A

AAA

Выводn,b

Начало

Page 15: Laboratornyy Praktikum OAiP Ch 1

Текст программы

program lr2_2_1;{Найти n-й член ряда Фибоначчи}uses crt;var i,n,a,b,c :word;begin clrscr; write('n= '); readln(n); a:=1;b:=1; for i:=3 to n do begin c:=a+b; a:=b; b:=c; end; writeln('F(n)= ',b:8); readkey;end.

Задания

Выделите повторяющиеся действия (цикл). Выберите управляющую переменную цикла. Составьте список переменных программы. Составьте схему и программу для решения задачи. В программе предусмотрите вывод заголовка. Выполните программу вручную, заполняя таблицу выполнения. Проверьте работу программы на ЭВМ.

1. Вычислите S= 2n, где n N.

2. Вычислить где m N.

3. Напечатайте таблицу стоимости порций сыра весом 50, 100, 150, ..., 1000 г (цена 1 кг 280 руб.)

4. Вычислите приближенно площадь фигуры, ограниченной функцией у = x2 и прямой у = 25, разбивая интервал изменения x на 100 частей и суммируя площади прямоугольников с основанием, равным 0,10 и высотой, определяемой значением функции в середине основания (высота прямоугольника в точке x равна 25 – x2).

5. Начав тренировки, спортсмен в первый день пробежал 10 км. Каждый следующий день он увеличивал дневную дистанцию на 10 % от дистанции предыдущего дня. Какой суммарный путь пробежит спортсмен за N дней?

6. Определите суммарный объем (в литрах) 12-ти вложенных друг в друга шаров со стенками 5 мм. Внутренний диаметр внутреннего шара равен 10 см. Считайте, что шары вкладываются друг в друга без зазоров.

7. Вычислите сумму

8. Пусть n – натуральное число и пусть n!! означает 1 · 3 · · ... · n для нечетного n и 2 · 4 · ... · n для четного n. Для заданного натурального n вычислите n!!

9. Вычислите сумму

10. Найдите n-й член ряда Фибоначчи, элементы которого вычисляются по формулам: a1 = a2 = 1; ai = ai-1 + ai-2, (i > 2).

П р и м е ч а н и е. Для нахождения членов ряда используйте только две переменные а и b.

11. Найдите сумму n-членов ряда Фибоначчи (задание 10), используя также только две переменные для нахождения членов ряда и суммы.

12. Выведите на экран таблицу значений: 1, 1 + h, 1 + 2h, … 1 + nh.

13. Проверьте формулу

111 112

Page 16: Laboratornyy Praktikum OAiP Ch 1

14. Проверьте формулу

15. Вычислите сумму

16. Вычислите число сочетаний из n по m

17. Вычислите число размещений из n по m

18. Выведите на экран таблицу значений функции y=ax для х, изменяющегося от a до b с шагом h.

19. Вычислите сумму

20. Вычислите сумму

21. Вычислите сумму

22. Вычислите произведение Р = 1 · 3 · 5 · 7 · … · (2n + 1) для заданного n.

23. Вычислите произведение Р = 2 · 4 · 6 · 8 · … · 2n для заданного n.

24. Вычислите сумму S = 1 · 3 + 3 · 5 + 5 · 7 + … + (2n – 1) (2n + 1) для заданного n.

25. Вычислите произведение S = (1 + 3) · (3 + 5) · … · ((2n – – 1) + (2n + 1)) для заданного n.

26. Выведите на экран элементы последовательности an = = an-1 + nd для n, изменяющегося от 1 до k, a0 = 0; k и d заданные натуральные числа.

27. Вычислите сумму А = 1 + (1 + 2) + (2 + 3) + (3 + 4) + …

+ ((n – 1) + n)28. Вычислите сумму первых n натуральных чисел.29. Составьте таблицу умножения для заданного числа N,

которая содержит результаты умножения 1 · N, 2 · N, ..., N · N.30. Напечатайте таблицу значений функции y = x3 при

изменении x в интервале от A до B с шагом H.31. Проверьте формулу

Задания второго уровня

1. Проверьте справедливость неравенства для заданного n.

2. Проверьте справедливость неравенства для заданного n.

3. Вычислите значение интеграла по общей

формуле трапеций с заданным числом разбиений.П р и м е ч а н и е. Общая формула трапеций имеет вид:

4. Вычислите значение интеграла по общей

формуле Симпсона с заданным числом разбиений.П р и м е ч а н и е. Общая формула Симпсона имеет вид:

5. Решите задачу Коши для обыкновенного дифференциального уравнения на отрезке [0; 1] при условии у(0) = 0 методом Эйлера, разбивая отрезок интегрирования на n частей.

П р и м е ч а н и е. Расчетная формула метода Эйлера имеет вид:yn+1 = yn + hnf(xn,yn).

111 112

Page 17: Laboratornyy Praktikum OAiP Ch 1

6. Решите задачу Коши для обыкновенного дифференциального уравнения на отрезке [0; 1] при условии у(0) = 0 усовершенствованным методом Эйлера, разбивая отрезок интегрирования на n частей.

7. Покажите, что при всех натуральных n число n3 + 2n кратно 3.

8. Вычислите сумму

9. Вычислите сумму

10. Вычислите сумму

11. Вычислите сумму

12. Вычислите произведение

13. Вычислите сумму

14. Проверьте справедливость неравенства для заданного k.

15. Покажите, что при всех натуральных n число n3 + 2n кратно 3.

16. Покажите, что при всех натуральных n число кратно 19.

17. Покажите, что при всех натуральных n число кратно 37.

18. Вычислите значение интеграла по общей

формуле левых прямоугольников с заданным числом разбиений.П р и м е ч а н и е. Формула левых прямоугольников имеет вид:

19. Вычислите значение интеграла по общей

формуле правых прямоугольников с заданным числом разбиений.

П р и м е ч а н и е. Формула правых прямоугольников имеет вид:

ЛАБОРАТОРНАЯ РАБОТА 3Простые циклы с неизвестным числом повторений

Цель работы: формирование первичных умений в разработке простых циклических программ с неизвестным числом повторений.

Что нужно знать для выполнения работы

1. Структуру цикла, назначение и порядок следования его отдельных частей.

2. Структуры: цикл пока и цикл повторить.3. Операторы цикла while … do, repeat … until.

Примеры выполнения задания лабораторной работы

Пример 1. Составьте программу нахождения наибольшего общего делителя двух чисел с помощью алгоритма Евклида.

Решение. В соответствии с алгоритмом Евклида (рис. 3.1)

111 112

Page 18: Laboratornyy Praktikum OAiP Ch 1

НОД(a, b) = НОД(max(a, b)-min(a, b), min(a, b)).

Рис. 3.1. Схема алгоритма программы

Текст программы

program lr3_1_1;{Алгоритм Евклида нахождения НОД(m,n)(на вычитание)}uses crt;var m,n,a,b:word;begin clrscr; write('Введите два числа'); readln(m,n); a:=m; b:=n; while a<>b do if a>b then

a:=a-b else b:=b-a; writeln('НОД(',m,',',n,')= ',a:4); readkey;end.Пример 2. Вычислите значение функции y = sin(x) с

точностью с помощью разложения функции в ряд Маклорена:

.

Решение. В соответствии с признаком Лейбница данный знакопеременный ряд сходится. На практике при вычислении значения суммы ряда обычно ограничиваются конечным числом членов. Если ряд знакопеременный, то ошибка при замене суммы сходящегося знакопеременного ряда суммой нескольких его членов меньше модуля первого из отброшенных членов. Таким образом, достаточно накапливать сумму до тех пор, пока модуль очередного члена не станет меньше требуемой точности.

Разделив n-й член ряда на (n – 1)-й, получим множитель, на который нужно умножить предыдущий член, чтобы получить

следующий: (рис. 3.2).

111 112

Нет

Да

Начало

Выводm, n, a

a:=mb:=n

Конец

a:= a – b b:= b – а

Вводm, n

a > b

Цикл покаa < > b

iНачало

y:= xan:= xn:= 0

Вводx, eps

Цикл пока|an| > eps

1

n:= n + 1

Выводx, eps, y, n

Конец

an:= an*x2/(2n (2n + 1))

y:= y + an

i

1

Page 19: Laboratornyy Praktikum OAiP Ch 1

Рис. 3.2. Схема алгоритма программыТекст программы

program lr3_2_1;{Вычислить значение функции y=sin(x) с точностью eps разложением ее в ряд Маклорена}

uses crt;var n :integer; eps,x,y,an :real;begin clrscr; write('Введите x и eps '); readln(x,eps); y:=x; an:=x; n:=0; while abs(an) >=eps do begin inc(n); an:=-an*sqr(x)/(2*n*(2*n+1)); y:=y+an; end; writeln('x= ',x:8:4,' eps= ',eps:8:4,' y= ',y:8:4,' n= ',n); readkey;end.

Пример 3. Вычислите значение функции с точностью с помощью итерационной формулы Ньютона:

y0=x;yi=0,5(yi + x/yi), i=1,2… Вычисления продолжать, пока |y2 – x| > ε. Подсчитайте

количество итераций.

Рис.3.3. Схема алгоритма программыТекст программы

program lr3_3_1;{Вычислите значение функции y=sqrt(x) с точностью eps с помощью формулы Ньютона }

uses crt;var n :integer; eps,x,y :real;begin clrscr; write('Введите x и eps '); readln(x,eps); y:=x; n:=0; while abs(sqr(y)-x) >eps do begin inc(n); y:=0.5*(y+x/y); end;

111 112

Начало

y:= xn:= 0

Вводx, eps

Цикл пока|y2- x| > eps

1

n:= n + 1

Выводx, eps, y, n

Конец

y:= 0,5(y + x/y)

i

1

Page 20: Laboratornyy Praktikum OAiP Ch 1

writeln('x= ',x:8:4,' eps= ',eps:8:4,' y= ',y:8:4,' n= ',n); readkey;end.

Численные методы решения (уточнения) алгебраических трансцендентных (неалгебраических) уравнений вида f(x) = 0

Существуют несколько методов решения таких уравнений, наиболее известные следующие: половинного деления, хорд, касательных (Ньютона), комбинированный метод хорд и касательных, метод итераций, обратного интерполирования и другие. Рассмотрим некоторые из них. Будем считать, что во всех случаях корень отделен на отрезке [a; b].

Метод половинного деленияБерем середину отрезка [a; b], на котором отделен корень,

за начальное приближение х0 и определяем, на какой из половинок находится корень. Если f(x0) = 0 или |f(x0)| < , то корень найден, иначе, если f(x0) 0 и произведение f(a)f(x0) < 0, то корень на отрезке [a; х0], иначе на отрезке [х0; b]. Далее уменьшаем отрезок [a; b] в два раза, полагая a = х0 или b = х0, в зависимости от того, на какой из двух половинок отделен корень, и снова находим середину отрезка [a; b]. Обычно вычисления продолжаются до тех пор, пока не будет выполнено одно из двух условий (иногда обоих одновременно) |f(x0)| < или |b – a| < , где – заданная абсолютная погрешность.

Метод хордПусть f(a)f(b) < 0. Проведем через точки M(a, f(a)) и N(b,

f(b)) прямую линию (хорду), уравнение которой записывается в следующем виде (уравнение прямой, проходящей через две заданные точки):

Найдем точку пересечения хорды с осью абсцисс:

(3.1)За первое приближение корня уравнения примем х1.

Второе приближение вычисляется по формуле (3.1) относительно того из отрезков [a; x1] и [x1; b], на концах которого функция f(x) принимает значения разных знаков. Аналогично вычисляются и следующие приближения.

Кроме того, предположим, что вторая производная на интервале (a; b) сохраняет знак. Тогда на (a; b) график функции y = f(x) выпуклый, если , и лежит выше любой своей хорды. В этом случае точка пересечения хорды находится между корнем уравнения f(x) = 0 и тем концом отрезка [a; b], в котором значение функции f(x) положительно. Если же

то график функции y = f(x) на интервале (a; b) вогнутый и лежит ниже любой своей хорды. В этом случае точка пересечения хорды находится между корнем уравнения f(x) = 0 и тем концом отрезка [a; b], в котором значение функции f(x) отрицательно. Следовательно, во всех случаях приближенное значение корня лежит между точным его значением и тем концом отрезка [a; b], в котором знаки f(x) и

противоположны.Поэтому, если известно (n – 1)-е приближение корня, то

его n-е приближение можно вычислить по формуле

для случая или по формуле

для случая На практике вычисление приближенных значений

продолжают до тех пор, пока два последовательных приближения xn и xn-1 не будут удовлетворять условию |xn – xn-1| < . Но из выполнения этого условия не следует, что |x* xn| < , где х* искомый корень уравнения.

Более надежным практическим критерием окончания

111 112

Page 21: Laboratornyy Praktikum OAiP Ch 1

счета является выполнение неравенства

Метод касательных (Ньютона)Пусть f(a)f(b)<0 и сохраняет знак на интервале (a; b).

Проведем касательную к графику функции y = f(x) в том конце отрезка [a; b], в котором знаки f(х) и совпадают. Уравнение касательной имеет вид:

если если

Найдем точку пересечения касательной с осью абсцисс. Полагая у = 0, находим

если

если Полученное таким образом х1 примем за приближенное

значение корня. Последующие приближения вычисляются по формуле:

Вычисления повторяют до тех пор, пока не выполнится одно из условий

или

Комбинированный методДанный метод основан на использовании двух

предыдущих методов (хорд и касательных) одновременно. С одного конца отрезка [a; b] приближаемся к корню методом хорд, с другого – методом касательных. Процесс повторяется, пока модуль разности между этими приближениями не станет меньше заданной погрешности.

Метод итерации (последовательных приближений)В соответствии с этим методом уравнение f(x) = 0

заменяется уравнением x = (x). Если (x) такая, что , то процесс итерации

сходится. В качестве начального приближения x1 тогда можно взять любое значение из [a; b]. Последующие приближения вычисляются по формуле:

xn = (xn-1), n = 2, 3, …Вычисления повторяют до тех пор, пока не выполнится

условие|xn – xn-1| < .

Задания

Разработайте алгоритм, программу и контрольные примеры.Испытайте программу на контрольных примерах.

1. Значение функции sin2(x) можно вычислить с помощью разложения ее в ряд Маклорена

Вычислите sin2(x) с точностью EPS, т.е. вычисление суммы ряда нужно продолжать до тех пор, пока абсолютная величина очередного члена ряда не станет меньше EPS. Определите количество членов ряда, которое для этого понадобилось.

2. Введите два натуральных числа m и n. Проверьте, являются ли данные числа взаимно-простыми.

3. Изменяя х от а с шагом h, определите, при каком значении х SIN(x) станет больше COS(x).

4. Найдите наименьшее общее кратное натуральных чисел k, m, n.

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

6. Найдите корни уравнения ех – 10х = 0 с точностью методом простой итерации.

7. Напишите программу умножения двух рациональных дробей. Если полученный результат является сократимой

111 112

Page 22: Laboratornyy Praktikum OAiP Ch 1

дробью, то сократите эту дробь.8. Найдите корень уравнения tg(1,5773х) – 2,3041х = 0 с

точностью методом простой итерации.

9. Найдите корень уравнения ln(7,622x) – 8,59х +10,5 = 0 с точностью методом простой итерации.

10. Найдите корни уравнения 9,33sin(6,977x) – 7,25х = 0 с точностью методом простой итерации.

11. Вычислите и выведите на экран значения функции

превосходящие для х, принимающего значения 1, 2,

… . Значение введите с клавиатуры. 12. Введите натуральное число n. Определите количество

цифр в этом числе. 13. Вычислите значения функции y = sin(ax) для x,

изменяющегося от 1 с шагом 1 до тех пор, пока данная функция возрастает. Значение а введите с клавиатуры.

14. Уточните корень уравнения ех – 10х = 0 на отрезке [a, b] методом половинного деления. Для того, чтобы на отрезке [a, b] был корень достаточно, чтобы f(а) и f(b) были разных знаков. В качестве первого приближения х можно взять середину отрезка [a, b], а затем в качестве нового отрезка, на котором необходимо искать корень, нужно взять тот из двух отрезков [a, x] и [x, a], на концах которого функция f(х) принимает значения разных знаков. Итерационный процесс продолжайте, пока длина отрезка и модуль f(х) не станут меньше заданной малой величины EPS.

15. Вычислите значение числа с заданной точностью,

используя формулу Выведите

количество слагаемых, которое понадобилось для вычислений. 16. Вычислите значение числа с заданной точностью,

используя формулу

17. Уточните корень уравнения ех – 10х = 0 на отрезке [a, b] методом хорд.

18. Уточните корень уравнения ех – 10х = 0 на отрезке [a, b] методом касательных.

19. Уточните корень уравнения ех – 10х = 0 на отрезке [a, b] комбинированным методом хорд и касательных.

20. Вычислите значение квадратного корня с точностью EPS с использованием итерационной формулы Ньютона:

Y0 = 1Yi = 1/2 (Yi-1 + X/Yi-1) (i = 1, 2, 3, ...).Вычисления производить пока |Yi – Yi-1| не станет меньше

EPS. Определите количество итераций, за которое достигается эта точность.

21. Найдите сумму членов ряда S = 1 + 1/2 + 1/4 + 1/8 + ... Сумму вычислять, пока очередной член ряда не станет

меньше ЕРS.

22. Вычислите значение кубического корня с точностью EPS с использованием итерационной формулы Ньютона:

Y0 = 1Yi = 1/3 (2Yi-1 + X/Y 2

i-1) (i = 1, 2, 3, ...).Вычисления производить пока |Yi – Yi-1| не станет меньше

EPS. Определите количество итераций, за которое достигается эта точность.

23. Алгоритм Евклида нахождения НОД(m, n) основан на следующих свойствах этой величины: пусть m и n – два натуральных числа и пусть m n. Тогда для чисел m, n и r, где r – остаток от деления m на n, выполняется равенство НОД(m, n) = НОД(n, r). Используя алгоритм Евклида, найдите наибольший общий делитель m и n.

24. Значение функции LN(1 + X) можно вычислить с помощью разложения ее в ряд Маклорена

LN(1 + X) = X – Х2/2 + Х3/3 – Х4/4 + ...Вычислите LN(1 + X) с точностью EPS, т.е., вычисление

суммы ряда нужно продолжать до тех пор, пока абсолютная величина очередного члена ряда не станет меньше EPS. Определите количество членов ряда, которое для этого

111 112

Page 23: Laboratornyy Praktikum OAiP Ch 1

понадобилось.25. Значение функции y(x)=(ex + e-x)/2 можно вычислить с

помощью разложения ее в ряд Маклорена

.

Вычислите y(x) с точностью EPS, т.е., вычисление суммы ряда нужно продолжать до тех пор, пока абсолютная величина очередного члена ряда не станет меньше EPS. Определите количество членов ряда, которое для этого понадобилось.

26. Значение функции y(x)=cos(x) можно вычислить с помощью разложения ее в ряд Маклорена

.

Вычислите y(x) с точностью EPS, т.е., вычисление суммы ряда нужно продолжать до тех пор, пока абсолютная величина очередного члена ряда не станет меньше EPS. Определите количество членов ряда, которое для этого понадобилось.

27. Значение функции y(x)=(ex - e-x)/2 можно вычислить с помощью разложения ее в ряд Маклорена

.

Вычислите y(x) с точностью EPS, т.е., вычисление суммы ряда нужно продолжать до тех пор, пока абсолютная величина очередного члена ряда не станет меньше EPS. Определите количество членов ряда, которое для этого понадобилось.

28. Значение функции y(x)=arctg(x) можно вычислить с помощью разложения ее в ряд Маклорена

.

Вычислите y(x) с точностью EPS, т.е., вычисление суммы ряда нужно продолжать до тех пор, пока абсолютная величина очередного члена ряда не станет меньше EPS. Определите количество членов ряда, которое для этого понадобилось.

29. Значение функции y(x)=2(coc2(x)-1) можно вычислить с помощью разложения ее в ряд Маклорена

.

Вычислите y(x) с точностью EPS, т.е., вычисление суммы ряда нужно продолжать до тех пор, пока абсолютная величина очередного члена ряда не станет меньше EPS. Определите количество членов ряда, которое для этого понадобилось.

30. Значение функции y(x)=sin(x)/x можно вычислить с помощью разложения ее в ряд Маклорена

.

Вычислите y(x) с точностью EPS, т.е., вычисление суммы ряда нужно продолжать до тех пор, пока абсолютная величина очередного члена ряда не станет меньше EPS. Определите количество членов ряда, которое для этого понадобилось.

31. Значение функции можно вычислить с помощью разложения ее в ряд Маклорена

.

Вычислите y(x) с точностью EPS, т.е., вычисление суммы ряда нужно продолжать до тех пор, пока абсолютная величина очередного члена ряда не станет меньше EPS. Определите количество членов ряда, которое для этого понадобилось.

Даны два натуральных числа m и n (1 < m < n). Найдите наименьшее k, при котором mk > n.

32. Генерируйте случайные числа из отрезка [1; 10] и находите их сумму пока модуль разности между последовательными двумя числами больше 1.

33. Найдите приближенно с точностью до 0,01 наибольшее

значение функции на отрезке [x1; x2]. Значения a,

b, c, d, e, x1, x2 введите с клавиатуры.34. Дано целое число m > 10. Получите наибольшее целое

k, при котором 4k < m.35. Дано натуральное число n. Получите наименьшее

111 112

Page 24: Laboratornyy Praktikum OAiP Ch 1

натуральное число вида m2, превосходящее n.

36. Вычислите значение кубического корня с точностью EPS с использованием итерационной формулы Ньютона:

Y0 = 1Yi = 1/n ((n-1)Yi-1 + X/Y n-1

i-1) (i = 1, 2, 3, ...).Вычисления производить пока |Yi – Yi-1| не станет меньше

EPS. Определите количество итераций, за которое достигается эта точность.

ЛАБОРАТОРНАЯ РАБОТА 4Обработка одномерных массивов

Цель работы: формирование первичных умений в разработке простых циклических программ с использованием массивов.

Что нужно знать для выполнения работы

1. Структуру цикла, назначение и порядок следования его отдельных частей.

2. Структуры: цикл-пока и цикл-повторить.3. Операторы цикла for …to (downto) … do. 4. Описание и использование массивов.

Примеры выполнения задания лабораторной работы

Пример 1. Составьте программу нахождения суммы элементов данного массива а, состоящего из n элементов.

Решение. Основная часть цикла – добавление очередного элемента к накапливаемой сумме. Для нахождения суммы всех

элементов достаточно повторить цикл, изменяя номер элемента массива от 1 до n с шагом 1 (рис. 4.1).

На данной схеме вывод исходных данных и вывод результата записаны в одном блоке, так как алгоритм вывода элементов массива аналогичен циклу ввода.

Рис. 4.1. Схема алгоритма программы

Текст программы

program lr4_1_1;{Сумма элементов массива.}uses crt;const maxn=100;{Максимальное количество элементов массива}var n,i:integer; s:real; a:array[1..maxn] of real;

111 112

Выводn, a, s

s:= s + ai

Конец

s:= 0

Цикл дляi = 1, n

i

1

Начало

Цикл дляi = 1, n

i

Вводn

Вводai

1

Page 25: Laboratornyy Praktikum OAiP Ch 1

begin clrscr; write('n= '); readln(n);{Ввод реального количества элементов массива} writeln('Введите элементы массива a '); for i:=1 to n do begin write('a[',i,']= '); readln(a[i]);end; s:=0;for i:=1 to n do s:=s+a[i];writeln('Исходный массив a, состоящий из',n:4,'

элементов');for i:=1 to n do write(a[i]:8:2); writeln; writeln('Сумма= ',s:8:2); readkey;end.

Задания

Составьте схему и программу для решения задачи обработки массива. Программу проверьте на ЭВМ. На экран выведите исходный массив и полученный результат обработки.

1. Вычислите А0 +А1x + А2x2 + А3x3 + ... + АNxN, используя схему Горнера. В соответствии со схемой Горнера данный многочлен преобразуется к виду:

(…((АN x + АN-1)x + АN-2)x + ... + А1)x + А0.2. Вычислите А1x + А2x2 + А3x3 + ... + АNxN, не используя

схему Горнера.3. Вычислите А1 + А3 + А5 + ... + А2N-1.4. Вычислите А1 – А2 + А3 – ... + (–1)N-1АN.5. Вычислите А1А2А3 ... АN.6. Вычислите А1 + 2А2 + 3А3 + ... + NАN.

7. Вычислите

8. Вычислите (|A1| –A1) + ... + (|AN| – AN).9. Цилиндр объемом единица имеет высоту h. Определите

радиус основания цилиндра для значений h, равных 0.5, 1, 1.5, ..., 5.10. «Переверните» последовательность А1, А2, А3, ...,АN, т.е.

поменяйте местами A1 с AN, A2 c AN-1 и т.д.11. Получите таблицу температур от 0 до 100 оС и их

эквивалентов по шкале Фаренгейта, используя для перевода формулу:

tFо = 1,8tСо + 32.12. Вычислите таблицу значений функции у = ax2 + bx + c

для значений x, изменяющихся от x0 до xn, с шагом h (x0 < xn).13. Значения С1, ..., СN являются емкостями N-конденсато-

ров. Определите емкости систем конденсаторов, которые получаются последовательным и параллельным соединением исходных конденсаторов.

14. Найдите периметр N-угольника, заданного координатами вершин на плоскости {(Xi; Yi)}, (i = 1, … < N).

15. Даны координаты {(xi; yi)}, (i = 1, ..., n) n заводов потребителей сырья и координаты места добычи сырья (хC; yC). Найдите расстояния от места добычи сырья до каждого завода, а также среднее арифметическое этих расстояний.

16. Дан массив A, состоящий из n элементов. Сформируйте «сглаженный» массив, заменив в исходном все элементы, кроме крайних, по формуле

При сглаживании используются лишь старые значения элементов массива.

17. Дан массив а, состоящий из n элементов. Вычислите a1, a1 + a2, a1 + a2 + a3, …, a1 + a2 + a3 + … an.

18. Дан массив а, состоящий из n элементов. Получите a1, -a2, a3, …, (-1)n-1 an.

111 112

Page 26: Laboratornyy Praktikum OAiP Ch 1

19. Дан массив а, состоящий из n элементов. Получите массив b, где bk = ak + k!.

20. Дан массив а, состоящий из n элементов. Получите массив b, где bk = 2ak + k.

21. Даны массивы а и b, состоящие из n элементов каждый. Получите массив с, где ck = ak + bk.

22. Даны массивы а и b, состоящие из n элементов каждый. Получите массив с, где ck = ak · bk.

23. Дан массив а, состоящий из n элементов. Найдите сумму элементов массива, стоящих на нечетных местах.

24. Дан массив а, состоящий из n элементов, и число х. Вычислите значение полинома P = xn + a1xn-1 + … + an-1x + an.

25. Дан массив а, состоящий из n элементов. Получите новый массив, поменяв элементы, стоящие на четных местах, с элементами, стоящими на нечетных местах, т.е. a1 c a2, a3 c a4, a5

c a6 и т.д.26. Даны массивы а и b, состоящие из n элементов

каждый. Получите новые массивы a и b, элементы которых вычисляются по правилу: ai = ai + bi, bi = ai – bi.

27. Даны массивы а и b, состоящие из n элементов каждый. Получите новые массивы a и b, элементы которых вычисляются по правилу: ai = bi, bi = ai.

28. Дан массив а, состоящий из n элементов. Найдите среднее арифметическое значение элементов массива, стоящих на четных местах.

29. Дан массив а, состоящий из n элементов. Найдите сумму a1 + 2a2 + 3a3 + … + nan.

30. Дан массив а, состоящий из n элементов. Найдите сумму a1 + 2!a2 + 3!a3 + … + n!an.

ЛАБОРАТОРНАЯ РАБОТА 5Циклы с внутренними ветвлениями

Цель работы: формирование умений и навыков в разработке циклических программ с внутренними ветвлениями.

Что нужно знать для выполнения работы

1. Структуру цикла, назначение и порядок следования его отдельных частей.

2. Операторы цикла и условные операторы.3. Описание и использование одномерных массивов.

Примеры выполнения задания лабораторной работы

Пример 1. Составьте программу нахождения наибольшего элемента данного массива а с указанием его номера.

Решение. Основная часть цикла – нахождение наибольшего из просмотренных элементов массива и очередного. Для нахождения наибольшего из всех элементов достаточно в блоке подготовки цикла положить наибольший элемент, равным а1, а затем повторить цикл, изменяя номер элемента массива от 2 до n с шагом 1 (рис. 5.1).

111 112

maxa:= ai

nommax:= i

Да

Нет

Выводn, a, maxa, nommax

Конец

maxa < ai?

i

Цикл дляi = 2, n

1Начало

maxa:= a1

nommax:= 1

Вводn

Вводai

Цикл дляi = 1, n

i

1

Page 27: Laboratornyy Praktikum OAiP Ch 1

Рис. 5.1. Схема алгоритма программы

Текст программы

program lr5_1_1; {Нахождение наибольшего элемента массива с указанием

его номера} uses crt; const maxn=100; var n,i,nommax:integer; maxa:real; a:array[1..maxn] of real;begin clrscr; write('Введите количество элементов массива a'); readln(n); writeln('Введите элементы массива a'); for i:=1 to n do begin write('a[',i,']= '); readln(a[i]); end; maxa:=a[1]; nommax:=1; for i:=2 to n do if maxa<a[i] then begin maxa:=a[i]; nommax:=i; end; writeln('Массив a'); for i:=1 to n do write(a[i]:8:2); writeln; writeln('Наибольший элемент a[',nommax,']=',maxa:8:2); readkey;

end.

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

Текст программы

program lr5_1_2; {Нахождение наибольшего элемента массива с указанием

его номера} uses crt; const maxn=100; var n,i,nommax:integer; maxa:real; a:array[1..maxn] of real;begin clrscr; write('Введите количество элементов массива a'); readln(n); writeln('Введите элементы массива a'); for i:=1 to n do begin write('a[',i,']= '); readln(a[i]); end; nommax:=1; for i:=2 to n do if a[nommax]<a[i] then nommax:=i; maxa:=a[nommax]; writeln('Массив a'); for i:=1 to n do write(a[i]:8:2); writeln; writeln('Наибольший элемент a[',nommax,']=',maxa:8:2);

111 112

Page 28: Laboratornyy Praktikum OAiP Ch 1

readkey;end.

Задания

Разработайте алгоритм решения задачи и программу, его реализующую. Программу испытайте на контрольных примерах.

1. Проверьте, является ли данная числовая последовательность а1, a2, ..., an возрастающей.

2. Информация о температуре воздуха за месяц задана в виде массива. Определите, сколько раз температура опускалась ниже 0 оC. Число дней конкретного месяца введите с клавиатуры.

3. Информация о среднесуточной температуре воздуха за месяц задана в виде массива. Определите, сколько дней температура была ниже среднесуточной.

4. Дан числовой массив А, состоящий из n элементов. Найдите среднее арифметическое положительных элементов этого массива.

5. Дан числовой массив А, состоящий из n элементов. Все положительные элементы этого массива уменьшите на 0,5.

6. Дан числовой массив А, состоящий из n натуральных чисел. Определите количество элементов массива, которые больше заданного числа.

7. Дан числовой массив А, состоящий из n натуральных чисел. Определите количество элементов массива, являющихся нечетными числами.

8. Дан числовой массив А, состоящий из n натуральных чисел. Определите количество элементов массива, являющихся кратными 7.

9. Дан числовой массив А, состоящий из n натуральных чисел. Определите количество элементов массива кратных 3, но не кратных 5.

10. Дан числовой массив А, состоящий из n натуральных чисел. Определите количество элементов массива,

удовлетворяющих условию Аi < (Ai-1 + Ai+1)/2.

11. Дан числовой массив А, состоящий из n натуральных чисел. Определите количество элементов массива, удовлетворяющих условию 2k < Ak < 3k.

12. Дан числовой массив А, состоящий из n натуральных чисел. Определите количество элементов массива, имеющих четные порядковые номера и являющихся нечетными числами.

13. Дан числовой массив А, состоящий из n натуральных чисел. Определите количество элементов массива, которые при делении на 7 дают остаток 1, 2 или 5.

14. Имеется n итоговых оценок студента. Определите, является ли студент отличником (все оценки не ниже 9).

15. Имеется n итоговых оценок студента. Определите, является ли студент неуспевающим (имеются оценки ниже 4).

16. Имеется n итоговых оценок студента. Определите количество шестерок, семерок, восьмерок, девяток и десяток.

17. Дана последовательность х1, х2, …, хn, упорядоченная в порядке возрастания, и вещественное у. Найдите такое k, что xk < y xk+1.

18. Имеется n итоговых оценок студента. Расположите эти оценки в следующем порядке: десятки, восьмерки, шестерки. Остальные оценки в произвольном порядке.

19. Дана последовательность х1, х2, …, хn. Определите количество таких троек, что xi-1 < xi < xi+1, (i = 2, n – 1).

20. Дана последовательность х1, х2, …, хn. Найдите номер элемента, который отличается от среднего арифметического значения элементов последовательности на минимальную величину.

21. Дана последовательность х1, х2, …, хn. Найдите наибольшую сумму подряд идущих элементов.

22. Дана последовательность х1, х2, …, хn. Определите количество элементов последовательности, больших среднего арифметического значения положительных элементов последовательности.

111 112

Page 29: Laboratornyy Praktikum OAiP Ch 1

23. Дана последовательность натуральных чисел х1, х2, …, хn. Измените данную последовательность так, чтобы в начале стояли все четные, а затем – нечетные элементы последовательности.

24. Дана последовательность целых чисел х1, х2, …, хn. Измените данную последовательность так, чтобы в начале стояли все нулевые элементы, затем – отрицательные, а затем – положительные элементы последовательности.

25. Даны две последовательности чисел а1, а2, …, аn и b1, b2, …, bn. Определите, какое число раз встречается ситуация, когда аi > bi и аi+1 < bi+1, (i = 1, n – 1).

26. Даны две последовательности чисел а1, а2, …, аn и b1, b2, …, bn. Найдите i, при котором аi + bi – наибольшая из всех таких пар.

27. Даны две последовательности чисел а1, а2, …, аn и b1, b2, …, bn. Найдите количество пар аi, bi, (i = 1, n) таких, что оба числа в паре четные.

28. Дана последовательность х1, х2, …, хn. Найдите наибольший по модулю элемент последовательности с указанием его номера.

29. Дана последовательность х1, х2, …, хn. Поменяйте местами самый большой элемент с самым маленьким.

30. Дана последовательность х1, х2, …, хn. Найдите самый большой по модулю отрицательный элемент.

Дополнительные задания

1. Дана последовательность х1, х2, …, хn и число у. Определите количество элементов последовательности, которые меньше у.

2. Проверьте, является ли данная числовая последовательность а1, a2, ..., an убывающей.

3. Проверьте, является ли данная числовая последовательность а1, a2, ..., an невозрастающей.

4. Проверьте, является ли данная числовая

последовательность а1, a2, ..., an неубывающей.5. Проверьте, является ли данная числовая

последовательность а1, a2, ..., an постоянной (все члены равны между собой).

6. Дана последовательность целых чисел a1, a2, ..., an. Найдите модуль наибольшего по модулю элемента последовательности.

7. Дана последовательность целых чисел a1, a2, ..., an. Найдите модуль наибольшего элемента последовательности.

8. Дана последовательность целых чисел a1, a2, ..., an. Найдите модуль наименьшего по модулю элемента.

9. Дана последовательность целых чисел a1, a2, ..., an. Найдите наименьший среди положительных элементов.

10. Дана последовательность целых чисел a1, a2, ..., an. Найдите наибольший среди отрицательных элементов.

11. Дана последовательность целых чисел a1, a2, ..., an. Найдите наибольший среди элементов, стоящих на четных местах.

12. Дана последовательность действительных чисел a1, a2, ..., an. Найдите сумму первых чисел, произведение которых меньше заданного числа b.

13. Дана последовательность действительных чисел a1, a2, ..., an. Получите из заданной последовательности другую, в которой сначала бы шли отрицательные члены исходной последовательности, а затем – неотрицательные.

14. Дана последовательность действительных чисел a1, a2, ..., an. Найдите сумму членов, удовлетворяющих условию |ak| > k.

15. Даны координаты xi и yi n точек на плоскости. Найдите количество точек, лежащих в первой четверти.

16. На плоскости заданы n точек своими координатами. Найдите наименьший радиус круга с центром в начале координат, которому принадлежат все n точек.

17. Многоугольник задан координатами своих вершин.

111 112

Page 30: Laboratornyy Praktikum OAiP Ch 1

Найдите длину самой короткой стороны.

Задачи второго уровня

1. Многоугольник задан координатами своих вершин. Определите, находится ли точка с заданными координатами на одной из сторон многоугольника.

2. На плоскости заданы n точек своими координатами. Определите количество точек, которые не попали в круг заданного радиуса с центром в начале координат.

3. Многоугольник задан координатами своих вершин. Определите, является ли данный многоугольник выпуклым.

4. Многоугольник задан координатами своих вершин. Определите, принадлежит ли данная точка области многоугольника.

5. Многоугольник задан координатами своих вершин. Найдите площадь этого многоугольника.

6. Даны координаты концов n отрезков на числовой прямой. Определите отрезок, входящий в пересечение наибольшего количества заданных отрезков.

7. n треугольников заданы длинами своих сторон. Найдите треугольник максимальной площади.

8. n треугольников заданы длинами своих сторон. Найдите треугольник, у которого самый маленький радиус вписанной окружности.

9. n треугольников заданы длинами своих сторон. Найдите треугольник, у которого самый большой радиус описанной окружности.

10. n треугольников заданы длинами своих сторон. Найдите треугольник, у которого самая большая медиана.

ЛАБОРАТОРНАЯ РАБОТА 6Подпрограммы (процедуры и функции)

Цель работы: формирование умений и навыков в

разработке процедур и функций пользователя.

Что нужно знать для выполнения работы

1. Описание процедур и функций пользователя, типы параметров, использование процедур и функций.Примеры выполнения задания лабораторной работы

Пример 1. Составьте программу нахождения числа сочетаний из n элементов по m по формуле

Решение. Для решения данной задачи составим процедуры Cnm и Fact (текст программы) (рис. 6.1).

На рис. 6.2 представлена схема алгоритма функции нахождения n!.

Рис. 6.1. Схема алгоритма головной программы

Рис. 6.2. Схема алгоритма функции нахождения n!

111 112

Начало

Конец

Вводn, m

Выводn, m,Cnm

Нахождение Cnm

Fact

Выход

p:= 1

p:= p * i

Цикл дляi:= 1, n

i

fact:= p

Page 31: Laboratornyy Praktikum OAiP Ch 1

Текст программы

program lr6_1_1;{Вычисление C из n по m =n!/(m!*(n-m)!)}uses crt;var m,n:integer;function fact(n:integer):longint;{Нахождение n!}var i:integer; p:longint;begin p:=1; for i:=1 to n do p:=p*i; fact:=p;end;begin clrscr; write('n и m = '); readln(n,m); writeln('n= ',n,' m= ',m,' Cmn= ',fact(n) div (fact(m)*fact(n-

m)):6); readkey;end.

Если нахождение n! оформить в виде подпрограммы-про-цедуры, то предыдущая программа могла бы быть следующей:

program lr6_1_2;{Вычисление C из n по m =n!/(m!*(n-m)!)}uses crt;var m,n:integer; fn,fm,fn_m,Cnm:longint;procedure fact(n:integer;var p:longint);

{Нахождение n!}var i:integer;begin p:=1; for i:=1 to n do p:=p*i;end;begin clrscr; write('n и m = '); readln(n,m); fact(n,fn);{Обращение к процедуре Fact для нахождения} fact(m,fm);{факториалов n,m,n-m} fact(nm,fn_m); Cnm:=fn div (fm*fn_m);{Нахождение числа сочетаний из

n по m} writeln('n= ',n,' m= ',m,' Cmn= ',Cnm:6); readkey;end.

Оформим вычисление искомой величины в виде функции Cmn, содержащей внутри себя описание функции вычисления факториала.

program lr6_1_3;{Вычисление C из n по m =n!/(m!*(n-m)!)}uses crt;var m,n:integer;function Cmn(m,n:integer):longint; function fact(n:integer):longint; var i:integer; p:longint; begin p:=1; for i:=1 to n do

111 112

Page 32: Laboratornyy Praktikum OAiP Ch 1

p:=p*i; fact:=p; end;begin Cmn:=fact(n) div (fact(m)*fact(n-m));end;begin clrscr; write('m и n = '); readln(m,n); writeln('m= ',m,' n= ',n,' Cmn= ',Cmn(m,n):6); readkey;end.

Надо заметить, что приведенные примеры не очень удачны с точки зрения эффективности алгоритмов. Понятно, что трижды вычислять заново факториалы чисел n, m, n-m совсем не обязательно.

Задания

Разработайте алгоритм и программу, реализующую этот алгоритм.

При выполнении данного задания необходимо использовать процедуры и функции с параметрами.

1. Два натуральных числа заданы последовательностями своих цифр. Получите последовательность цифр, представляющую разность данных чисел.

2. Дано натуральное число m. Укажите все тройки натуральных чисел x, y и z, удовлетворяющие следующему условию: m = x3 + y3 + z3.

3. Дано натуральное число P. Определите, какая цифра в этом числе встречается чаще других.

4. Определите количество номеров машин, содержащих три одинаковые цифры (номер машины четырехзначный).

5. Определите количество номеров машин, содержащих

две одинаковые цифры (номер машины четырехзначный).

6. Дана обыкновенная дробь Сократите данную дробь.

7. Напишите программу сложения двух обыкновенных

несократимых дробей и Результат представить в виде

несократимой дроби.8. Напишите программу вычитания двух обыкновенных

несократимых дробей и Результат представить в виде

несократимой дроби.9. Напишите программу умножения двух обыкновенных

несократимых дробей и Результат представить в виде

несократимой дроби.10. Напишите программу деления двух обыкновенных

несократимых дробей и Результат представить в виде

несократимой дроби.11. Напишите программу нахождения следующего за

данным совершенного числа. Совершенным называется число, сумма делителей

которого, не считая самого числа, равна этому числу. Первое совершенное число 6 (6 = 1 + 2 + 3).

12. Результатом деления натурального числа m на натуральное число n является либо конечная десятичная дробь, либо бесконечная периодическая дробь. Напишите программу нахождения этого результата. Если дробь бесконечная, то найти все цифры до первого периода и цифры периода.

13. Дано натуральное число Р. Напишите программу нахождения всех натуральных чисел, не превосходящих Р, которые можно представить в виде произведения двух простых чисел.

14. Дано натуральное число Р. Напишите программу перевода этого числа в двоичную систему счисления.

111 112

Page 33: Laboratornyy Praktikum OAiP Ch 1

15. Дано натуральное число P. Переведите его в двоичную систему счисления.

16. Дано натуральное число P. Найдите все «совершенные» числа, не превосходящие Р.

«Совершенными» называются натуральные числа, сумма делителей, не включая самого числа, которых равна самому числу.

17. Дано натуральное n-значное число P. Проверьте, является ли данное число палиндромом (перевертышем).

18. Дано натуральное n-значное число P. Верно ли, что данное число содержит три одинаковые цифры?

19. Дано натуральное n-значное число P. Верно ли, что данное число содержит две одинаковые цифры?

20. Дано натуральное число P. Проверьте, кратно ли P трем, используя признак делимости на 3.

21. Дано натуральное число P. Проверьте, кратно ли P одиннадцати, используя признак делимости на 11 (знакопеременная сумма его цифр делится на 11).

22. Дано натуральное число P. Разложите данное число на простые множители.

23. Дано натуральное число P. Найдите все простые числа, не превосходящие числа P.

24. Дано натуральное число P. Найдите все натуральные числа, не превосходящие Р, которые нельзя представить в виде суммы двух простых чисел.

25. Дано натуральное число P. Найдите все делители числа P.26. Дано натуральное число P. Найдите сумму цифр числа P.27. Дано натуральное число P. Выбросите из записи числа

P цифры 0, оставив прежним порядок остальных цифр.28. Дано натуральное число P. Проверьте, кратно ли число

P девяти, используя признак делимости на 9.29. Два натуральных числа заданы последовательностями

своих цифр. Получите последовательность цифр, представляющую сумму данных чисел.

30. Дано натуральное число n. Вычислите Sn = 1·2 + 2·3·4 + + … + n · (n + 1) · … · 2n.

Задачи второго уровня

1. Введите два натуральных числа m и n (m > n). Покажите на экране правило деления «уголком» числа m на число n.

2. Введите два натуральных числа m и n (m > n). Покажите на экране правило умножения «в столбик» числа m на число n.

3. Если последнюю цифру некоторого натурального числа n перенести и поставить перед первой цифрой этого числа, то получится число, в два раза больше, чем n. Найдите самое маленькое из таких чисел.

4. Найдите все решения числового ребуса.МУХА

+ МУХАМУХАСЛОН

5. Дано натуральное число n. Выясните, можно ли представить данное число в виде произведения трех последовательных натуральных чисел.

6. Постройте n-ю строку треугольника Паскаля.7. Дано натуральное число n. Найдите все меньшие n

числа Мерсена.Простое число называется числом Мерсена, если оно

может быть представлено в виде 2р – 1, где р – тоже простое число.

8. Определите количество «счастливых» талонов для проезда в городском транспорте.

«Счастливым» считается талон, у которого сумма первых трех цифр равна сумме трех других цифр.

9. Два натуральных числа заданы последовательностями своих цифр. Получите последовательность цифр, представляющую произведение данных чисел.

10. Два натуральных числа заданы последовательностями

111 112

Page 34: Laboratornyy Praktikum OAiP Ch 1

своих цифр. Получите последовательность цифр, представляющую частное данных чисел.

11. Найдите все натуральные числа, которые в k раз больше суммы своих цифр.

12. Данное натуральное число N замените суммой квадратов его цифр. Произведите K таких замен.

13. Данное натуральное число N переведите из десятичной системы счисления в двоичную.

14. Данную десятичную дробь переведите в двоичную систему счисления.

15. Данную двоичную дробь переведите в десятичную систему счисления.

ЛАБОРАТОРНАЯ РАБОТА 7Сложные циклы. Обработка массивов

Цель работы: формирование умений и навыков в разработке сложных циклических алгоритмов обработки массивов с использованием процедур и функций пользователя; использование текстовых файлов для ввода-вывода.

Что нужно знать для выполнения работы

1. Структуру вложенного цикла.2. Метод пошаговой детализации (последовательного

уточнения) разработки алгоритмов.3. Особенности использования массивов в качестве

параметров в процедурах и функциях.4. Объявление и использование текстовых файлов.

Примеры выполнения задания лабораторной работы

Пример 1. Составьте программу перемножения матриц Am×n и Bn×l. В результате должна получиться матрица Cm×l.

Решение. Для разработки алгоритма воспользуемся методом пошаговой детализации (рис. 7.1 – 7.5).

Рис. 7.1. Схема алгоритма головной программы (первый шаг детализации)

Рис. 7.2. Схема алгоритма процедуры ввода исходных данных (второй шаг детализации)

Выполним детализацию блока «Ввод матрицы А» (рис. 7.3).Осталось выполнить детализацию блока «Ввод i-й строки

матрицы А» (рис. 7.4).

111 112

Начало

Конец

ВводматрицА и В

ВыводА, В,

C

Нахождение C = А * В

Vvodmatr

Выход

Вводm, n

ВводAm×n

Открытие файла с исходными данными

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

данными

Ввод Аm×n

Выход

Цикл дляi:= 1, m

i

Ввод i-й строки

матрицы А

Page 35: Laboratornyy Praktikum OAiP Ch 1

Рис. 7.3. Схема алгоритма процедуры ввода исходных данных (третий шаг детализации)

Рис. 7.4. Схема алгоритма процедуры ввода исходных данных (четвертый шаг детализации)

Теперь нетрудно собрать детальную схему ввода матрицы (рис. 7.5).

Рис. 7.5. Схема алгоритма процедуры ввода исходных данных (результат детализации)

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

Разработаем алгоритм процедуры перемножения матриц. Первый шаг детализации мы уже выполнили – рис. 7.1.

Для того чтобы умножить матрицу А на матрицу В достаточно умножить каждую строку матрицы А на матрицу В (рис. 7.6).

Выполним детализацию блока «Умножить i-ю строку А на В, получая i-ю строку С» (рис. 7.7).

Рис. 7.6. Схема алгоритма процедуры

Рис. 7.7. Схема алгоритма процедуры

111 112

Ввод строки

Выход

Цикл дляj:= 1, n

j

Ввод Аij

Выход

Ввод Аij

i

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

данными

j

1Vvodmatr

Вводm, n

Открытие файла с исходными

данными

Цикл дляj:= 1, n

Цикл дляi:= 1, m

1

Multmatr

Выход

Цикл дляi:= 1, m

Умножить i-ю строку А на В,

получая i-ю строку С

i

Строку А на В

Выход

Цикл дляj:= 1, l

Умножить i-ю строку А на j-й

столбец В, получая Сij

j

Page 36: Laboratornyy Praktikum OAiP Ch 1

перемножения матриц (второй шаг детализации)

перемножения матриц (третий шаг детализации)

Выполним детализацию блока «Умножить i-ю строку А на j-й столбец В, получая Сij» (рис. 7.8).

Рис. 7.8. Схема алгоритма процедуры перемножения матриц (четвертый шаг детализации)

Собрав результаты детализации, получим детальную схему процедуры перемножения матриц (рис. 7.9).

Рис. 7.9. Схема алгоритма процедуры перемножения матриц (результат детализации)

Текст программы

program lr7_1_1;{Нахождение произведения матрицы Amxn на матрицу Bnxl, получая матрицу Cmxl}

uses crt;type matr =array[1..10,1..10] of real; stroka =string[30];var a,b,c:matr; {исходные матрицы и матрица результата} i,j,k,l,m,n:integer; flag:boolean;procedure vvodmatr(var a:matr;namefile:stroka;var m,n: in-

teger);{Ввод матрицы}var i,j:integer; fin:text;begin assign(fin,namefile); reset(fin); readln(fin,m,n); for i:=1 to m do begin for j:=1 to n do read(fin,a[i,j]); readln(fin); end; close(fin);

111 112

Cij

Выход

S:= 0

S:= S + Aik * Bkj

Цикл дляk:= 1, n

k

Cij:= S

Выход

k

Cij:= S

j

i

1Multmatr

Цикл дляi:=1, m

Цикл дляj:= 1, l

S:= 0

S:= S + Aik * Bkj

Цикл дляk:= 1, n

1

Page 37: Laboratornyy Praktikum OAiP Ch 1

end;

procedure vivodmatr(namefile:stroka;a:matr;m,n:integer;zag: stroka; var flag:boolean);

{Вывод матрицы}var i,j:integer; fout:text;begin assign(fout,namefile); if flag then rewrite(fout) else append(fout); writeln(fout,zag); for i:=1 to m do begin for j:=1 to n do write(fout,a[i,j]:8:2); writeln(fout); end; if namefile='con' then {если вывод на экран} readkey else close(fout);end;

procedure multmatr(a,b:matr;var c:matr;m,n,l:integer);{Нахождение произведения матрицы}var i,j,k:integer; s:real;begin for i:=1 to m do for j:=1 to l do begin s:=0; for k:=1 to n do s:=s+a[i,k]*b[k,j];

c[i,j]:=s; end;end;begin clrscr; vvodmatr(a,'matra.txt',m,n); vvodmatr(b,'matrb.txt',n,l); flag:=true; vivodmatr('matrc.txt',a,m,n,'Матрица A',flag); flag:=false; vivodmatr('matrc.txt',b,n,l,'Матрица B',flag); multmatr(a,b,c,m,n,l); flag:=false; vivodmatr('matrc.txt',c,m,l,'Матрица C=A*B',flag);end.

Задания

Разработайте алгоритм и программу, реализующую этот алгоритм. Основные функции программы оформите в виде процедур и функций.

Исходные данные вводите из текстового файла. Результаты работы программы также поместите в текстовый файл и выведите на экран.

1. Найдите произведение вектора на матрицу.2. Даны две матрицы одинаковой размерности. Найдите

сумму или разность этих матриц в зависимости от значения параметра flag.

3. К данной матрице А порядка n добавьте нулевую и n + 1-ю строки с элементами, равными 1.

4. К данной матрице А порядка n добавьте нулевой и n + 1-й столбцы с элементами, равными 0.

5. Определите количество строк заданной матрицы, которые упорядочены по возрастанию.

6. Сложите две треугольные матрицы порядка n, у которых только элементы над главной диагональю отличны от нуля.

7. В данной матрице определите количество столбцов, у

111 112

Page 38: Laboratornyy Praktikum OAiP Ch 1

которых элементы расставлены в порядке возрастания.8. Выполните «прямой ход» в решении системы линейных

алгебраических уравнений методом Гаусса.9. Выполните «обратный ход» в решении системы

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

10. Дана матрица Аm×n, содержащая оценки группы за первый семестр. Найдите количество «хорошистов» в группе (оценки не ниже шестерки, но не все выше восьмерки).

11. Дана квадратная матрица А порядка n. Найдите количество строк матрицы, сумма модулей элементов которых больше 1.

12. Дана квадратная матрица А порядка n. Найдите среднее арифметическое положительных элементов каждого столбца матрицы.

13. Дана квадратная матрица А порядка n. Найдите номер строки матрицы, в которой больше всего единичных элементов.

14. Дана квадратная матрица А порядка n. Проверьте, равны ли суммы элементов матрицы по строкам, столбцам, главной и побочной диагоналям между собой, т.е. является ли матрица магическим квадратом.

15. Дана квадратная матрица А порядка n. Определите норму заданной матрицы. Одна из норм матрицы равна наибольшей из сумм модулей элементов, стоящих в одной строке.

16. Дана квадратная матрица А порядка n. Постройте вектор, элементы которого являются наибольшими числами каждой строки матрицы.

17. Дана квадратная матрица А порядка n. Найдите сумму положительных элементов матрицы, стоящих под главной диагональю.

18. Дана квадратная матрица А порядка n. Транспонируйте данную матрицу.

19. Дана квадратная матрица А порядка n. Проверьте,

является ли данная матрица симметричной.20. Дана квадратная матрица А порядка n. Проверьте,

является ли матрица единичной.21. Дана матрица А, имеющая 30 строк и 10 столбцов,

содержащая оценки группы за первый семестр. Напечатайте номера отличников (оценки не ниже 8).

22. Дана матрица А, имеющая 30 строк и 10 столбцов, содержащая оценки группы за первый семестр. Определите средний балл каждого студента.

23. Дана матрица А, имеющая 30 строк и 10 столбцов, содержащая оценки группы за первый семестр. Найдите количество единиц, двоек и троек у каждого студента.

24. Дана матрица А, имеющая 30 строк и 10 столбцов, содержащая оценки группы за первый семестр. Определите средний балл студентов группы по каждому предмету.

25. Дана матрица А, имеющая 30 строк и 10 столбцов, содержащая оценки группы за первый семестр. Определите количество неуспевающих студентов (имеются оценки 0, 1, 2 или 3).

26. Если все элементы какой-либо строки данной матрицы равны между собой, то все элементы такой строки замените нулями.

27. Дана матрица А, имеющая 30 строк и 10 столбцов, содержащая оценки группы за первый семестр. Напечатайте номера предметов, по которым имеются нулевые оценки.

28. Дана матрица А порядка n. Определите количество строк матрицы, элементы которых представляют перестановки чисел от 1 до n.

29. Найдите наибольшую сумму модулей элементов строк заданной матрицы.

30. Найдите произведение матрицы на вектор.

ЛАБОРАТОРНАЯ РАБОТА 8Сложные циклы. Обработка массивов.

111 112

Page 39: Laboratornyy Praktikum OAiP Ch 1

Создание и использование Unit-ов

Цель работы: формирование умений и навыков в разработке сложных циклических алгоритмов обработки массивов с использованием процедур и функций пользователя, находящихся в отдельном модуле; использование текстовых файлов для ввода-вывода.

Что нужно знать для выполнения работы

1. Структуру вложенного цикла.2. Метод пошаговой детализации (последовательного

уточнения) разработки алгоритмов.3. Особенности использования массивов в качестве

параметров в процедурах и функциях.4. Объявление и использование текстовых файлов.5. Структуру Unit-а.

Примеры выполнения задания лабораторной работы

Пример 1. Составьте программу перемножения матриц Am×n и Bn×l. В результате должна получиться матрица Cm×l. Процедуры ввода матрицы, вывода матрицы, перемножения матриц поместите в модуль Matr. В головной программе введите имена входного текстового файла, в котором находятся исходные матрицы, и выходного файла, в который будут выведены исходные матрицы и матрица произведения.

Текст программы

program lr8_1_1;{Нахождение произведения матрицы Amxn на матрицу Bnxl, получая матрицу Cmxl. Использование Unit-a}

uses crt,matr;type matr =array[1..10,1..10] of real; stroka =string[30];var

a,b,c:matr; {исходные матрицы и матрица результата} l,m,n:integer; namefilein,namefileout:stroka;begin clrscr; write('Введите имя входного файла'); readln(namefilein); write('Введите имя выходного файла'); readln(namefileout); vvodmatr(a,namefilein,m,n,true,false); vvodmatr(b,namefilein,n,l,false,true); vivodmatr(namefileout,a,m,n,'Матрица A',true); vivodmatr(namefileout,b,n,l,'Матрица B',false); multmatr(a,b,c,m,n,l); vivodmatr(namefileout,c,m,l,'Матрица C=A*B',false);end.

Модуль Matr.pas имеет следующий вид.

unit matr;{Процедуры ввода, вывода матриц, нахождения произведения матрицы Amxn на матрицу Bnxl, получая матрицу Cmxl}

interfaceuses crt;type matr =array[1..10,1..10] of real; stroka =string[30];

{Ввод матрицы}procedure vvodmatr(var a:matr;namefile:stroka;var m,n: in-

teger; flag1,flag2:boolean);{Вывод матрицы}procedure vivodmatr(namefile:stroka;a:matr;m,n:integer;zag:

stroka; flag:boolean);{Нахождение произведения матрицы}procedure multmatr(a,b:matr;var c:matr;m,n,l:integer);

111 112

Page 40: Laboratornyy Praktikum OAiP Ch 1

implementationprocedure vvodmatr(var a:matr;namefile:stroka;var m,n: in-

teger; flag1,flag2:boolean);{Ввод матрицы}var i,j:integer; fin:text;begin if namefile='con' then {Ввод с клавиатуры} begin Clrscr; write('Введите размерность матрицы'); end else {Ввод из файла} if flag1 then {Открывать файл?} begin assign(fin,namefile); reset(fin); end; readln(fin,m,n); if namefile='con' then writeln('Введите матрицу построчно'); for i:=1 to m do for j:=1 to n do read(fin,a[i,j]); if (namefile<>'con') and flag2 then {Закрывать файл?} close(fin);end;

procedure vivodmatr(namefile:stroka;a:matr;m,n:integer;zag: stroka; flag:boolean);

{Вывод матрицы}var i,j:integer; fout:text;begin assign(fout,namefile); if flag then begin

if namefile ='con' then clrscr; rewrite(fout); end else append(fout); writeln(fout,zag); for i:=1 to m do begin for j:=1 to n do write(fout,a[i,j]:8:2); writeln(fout); end; if namefile='con' then {если вывод на экран} readkey else close(fout);end;

procedure multmatr(a,b:matr;var c:matr;m,n,l:integer);{Нахождение произведения матрицы}var i,j,k:integer; s:real;begin for i:=1 to m do for j:=1 to l do begin s:=0; for k:=1 to n do s:=s+a[i,k]*b[k,j]; c[i,j]:=s; end;end;end.

Задания

Разработайте алгоритм и программу, реализующую этот

111 112

Page 41: Laboratornyy Praktikum OAiP Ch 1

алгоритм. Исходные данные вводите из текстового файла.

Результаты работы программы также поместите в текстовый файл.

Функции программы, оформленные в виде процедур и функций, поместите в отдельный модуль.

1. Дана матрица A порядка n. Найдите наибольший среди отрицательных элементов матрицы.

2. Дана матрица A порядка n. Определите количество столбцов матрицы, в которых имеются нулевые элементы.

3. Дана последовательность чисел a1, a2, ..., an. Найдите наибольшую сумму, образованную двумя, идущими подряд, элементами.

4. Дана функция Найдите наибольшее

значение данной функции на промежутке [a; b].5. Дана последовательность чисел a1, a2, ..., an. Каждый

член этой последовательности, кроме крайних, замените суммой соседних с ним членов.

6. Дана матрица A порядка n. Расставьте элементы каждой строки в порядке возрастания.

7. Дана матрица A порядка n. Расставьте строки матрицы в порядке возрастания количества нулевых элементов.

8. Дана матрица A порядка n. Удалите строки, содержащие нулевые элементы.

9. Дана матрица A порядка n. Поменяйте местами наибольший и наименьший элементы матрицы.

10. Дана матрица A порядка n. Расставьте элементы строк с четными номерами матрицы в порядке убывания.

11. Дана матрица A порядка n. Найдите два наибольших элемента матрицы с указанием номеров строк и столбцов, в которых они находятся.

12. Дана матрица A порядка n. Поменяйте местами строки: первую с последней, вторую с предпоследней и т.д.

13. Дана матрица A порядка n. Отсортируйте строки

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

14. Дана квадратная матрица А порядка n. Найдите седловую точку матрицы, т.е. элемент, который является наименьшим в своей строке и наибольшим в своем столбце.

15. Дана квадратная матрица А порядка n. Найдите суммы элементов тех строк матрицы, на главной диагонали которой стоят отрицательные элементы.

16. Даны два упорядоченных по возрастанию массива целых чисел: А, состоящего из n элементов, и В, состоящего из m элементов. Выполните слияние этих двух массивов в один упорядоченный массив C.

17. Даны координаты xi и yi n точек на плоскости. Определите количество точек, лежащих в первой четверти.

18. Даны две последовательности чисел a1, a2, ..., an и b1, b2, ..., bn. Сформируйте новые последовательности, элементы которых вычисляются по следующему правилу:

ai = max(ai, bi), bi = min(ai, bi), i = 1, 2, ..., n. 19. Даны две последовательности чисел a1, a2,..., an и b1,

b2, ..., bn. Сформируйте новые последовательности, элементы которых вычисляются по следующему правилу:

ai = ai + bi, bi = ai – bi, i = 1, 2, ..., n. 20. Дана последовательность чисел a1, a2, ..., an.

Проверьте, верно ли, что каждый член этой последовательности больше его номера.

21. Дана последовательность чисел a1, a2, ..., an. Проверьте, является ли данная последовательность арифметической прогрессией.

22. Дан массив А, состоящий из n натуральных чисел. Упорядочите элементы массива методом простого выбора.

23. Дан массив А, состоящий из n натуральных чисел. Упорядочите элементы массива методом простых вставок.

24. Дан массив А, состоящий из n натуральных чисел. Найдите наибольший общий делитель элементов массива.

25. Дан массив А, состоящий из n натуральных чисел.

111 112

Page 42: Laboratornyy Praktikum OAiP Ch 1

Найдите наименьшее общее кратное элементов массива.26. Дан массив А, состоящий из n натуральных чисел.

Определите количество элементов, являющихся простыми числами.

27. Дан массив А, состоящий из n натуральных чисел. Выберите элементы, встречающиеся более одного раза.

28. Дан массив А, состоящий из n натуральных чисел. Определите максимальное число идущих подряд элементов, равных 1.

29. Дана последовательность n целых чисел a1, a2, ..., an. Найдите длину самой длинной возрастающей последовательности подряд идущих элементов.

30. Дана матрица A порядка n. Найдите строку матрицы, в которой больше всего нулевых элементов.

31. Дана действительная квадратная матрица порядка n. Постройте одномерный массив, k-й элемент которого равен 0, если все элементы k-й строки матрицы равны между собой и 1 в противном случае.

Задачи второго уровня

1. Дан массив А, состоящий из n натуральных чисел. Найдите элемент массива, сумма цифр которого наибольшая.

2. Дана действительная квадратная матрица порядка n. Найдите сумму элементов, расположенных в заштрихованной части матрицы (рис. 8.1).

3. Дана действительная квадратная матрица порядка n. Найдите сумму элементов, расположенных в заштрихованной части матрицы (рис. 8.2).

4. Дана действительная квадратная матрица порядка n. Найдите сумму элементов, расположенных в заштрихованной части матрицы (рис. 8.3).

Рис. 8.1 Рис. 8.2 Рис. 8.3

5. Дана действительная квадратная матрица порядка n. Найдите сумму элементов, расположенных в заштрихованной части матрицы (рис. 8.4).

6. Дана действительная квадратная матрица порядка n. Найдите сумму элементов, расположенных в заштрихованной части матрицы (рис. 8.5).

7. Дана действительная квадратная матрица порядка n. Найдите сумму элементов, расположенных в заштрихованной части матрицы (рис. 8.6).

Рис. 8.4 Рис. 8.5 Рис. 8.6 8-11. Дана действительная квадратная матрица порядка

2n (рис. 8.7). Цифрами обозначены подматрицы порядка n. 8. Получите новую матрицу (рис. 8.8). 9. Получите новую матрицу (рис. 8.9).10. Получите новую матрицу (рис. 8.10).11. Получите новую матрицу (рис. 8.11).

Рис. 8.7 Рис. 8.8 Рис. 8.9 Рис. 8.10 Рис. 8.11

12. Даны две последовательности a1, a2, ..., an и b1, b2, ..., bn

целых чисел. Среди членов каждой последовательности нет повторяющихся чисел. Постройте пересечение

111 112

1 2

43

3 4

12

1 4

32

4 3

21

1 2

34

Page 43: Laboratornyy Praktikum OAiP Ch 1

последовательностей (т.е. получите в каком-нибудь порядке все числа, принадлежащие обеим последовательностям одновременно).

13. Даны две последовательности a1, a2, ..., an и b1, b2, ..., bn

целых чисел. Среди членов каждой последовательности нет повторяющихся чисел. Постройте объединение данных последовательностей (равные члены разных последовательностей должны входить только один раз).

14. Даны две последовательности a1, a2, ..., an и b1, b2, ..., bn

целых чисел. Среди членов каждой последовательности нет повторяющихся чисел. Получите все члены последовательности b1, b2, ..., bn, которые не входят в последовательность a1, a2, ..., an.

15. Постройте n строк треугольника Паскаля (рис. 8.12).

11 1

1 2 11 3 3 1

1 4 6 4 1…

Рис. 8.1216. Постройте матрицу порядка n, записав в нее числа от 1

до n2 согласно схеме (рис. 8.13).

Рис. 8.13

ЛАБОРАТОРНАЯ РАБОТА 9Множества, строки

Цель работы: формирование умений и навыков в разработке сложных циклических алгоритмов обработки строк с

использованием стандартных процедур и функций над строками; изучение типа данных «множество» и операций над данными этого типа.

Что нужно знать для выполнения работы

1. Стандартные процедуры и функции над строками.2. Операции над множествами.3. Особенности использования строк в качестве

параметров в процедурах и функциях.

Примеры выполнения задания лабораторной работы

Пример 1. Составьте программу, находящую в данной строке символов длину самой длинной цепочки идущих подряд символов a.

Варианты решения

Вариант 1

program lr9_1_1;{Самая длинная цепочка а}uses crt;var st:string; td,md,i:integer;begin clrscr; write('Введите строку'); readln(st); i:=1; md:=0; while i<=length(st) do begin if st[i]='a' then begin td:=0;

111 112

1 2 3 … n2n 2n–1 2n–2 … n+12n+1 … 3n …n2 – n + 1 … n2

Page 44: Laboratornyy Praktikum OAiP Ch 1

while (i<=length(st)) and (st[i]='a') do begin inc(td); inc(i); end; if td>md then md:=td; end else inc(i); end; writeln('md= ',md); readkey;end.

Вариант 2

program lr9_1_2;{Самая длинная цепочка а}uses crt;var st:string; td,md,i:integer;begin clrscr; write('Введите строку '); readln(st); md:=0; td:=0; st:=st+' '; for i:=1 to length(st) do begin if st[i]='a' then inc(td) else begin if td>md then md:=td;

td:=0; end; end; writeln('md= ',md); readkey;end.

Вариант 3

program lr9_1_3;{Самая длинная цепочка а} uses crt;var st:string; td,md:integer;begin clrscr; write('Введите строку'); readln(st);md:=0; td:=0;

delete(st,1,pos('a',st)-1); while pos('a',st)<>0 do if pos('a',st)=1 then begin delete(st,1,1); inc(td); end else begin if td>md then md:=td; td:=0; delete(st,1,pos('a',st)-1); end; if td>md then md:=td;

111 112

Page 45: Laboratornyy Praktikum OAiP Ch 1

writeln('md= ',md); readkey;end.

Вариант 4

program lr9_1_4;{Самая длинная цепочка а}uses crt;var st:string; md,i:integer; mn:set of byte;begin clrscr; write('Введите строку'); readln(st); mn:=[]; md:=0; for i:=1 to length(st) do if st[i]='a' then

begin inc(md); mn:=mn+[md]; end else md:=0;{Вывод результата} if mn<>[] then begin for i:= length(st) downto 1 do if i in mn then begin writeln('md= ',i); break; {Выход из цикла} end; end

else writeln('md=0'); readkey;end.

Вариант 5

program lr9_1_5;{Самая длинная цепочка а} uses crt;var st,ts:string; md:integer;begin clrscr; write('Введите строку'); readln(st); ts:='a'; while pos(ts,st)<>0 do ts:=ts+'a'; md:=length(ts)-1; writeln('md= ',md); readkey;end.

Разберите приведенные варианты, выполните программы по шагам (клавиша F8), следя за изменением значений переменных (Ctrl/F7).

Пример 2. Найдите все простые числа, не превосходящие данного натурального числа P. Для решения задачи воспользуйтесь известным алгоритмом «решето Эратосфена».

Решение. Суть данного алгоритма в следующем: берем первое простое число «2» и вычеркиваем из множества чисел 2..Р все числа, кратные двум. Затем находим следующее простое число – это «3» и вычеркиваем все числа, кратные трем и т.д., пока исходное множество 2..Р не станет пустым.

111 112

Page 46: Laboratornyy Praktikum OAiP Ch 1

Текст программы

Program lr9_2_1;{Решето Эратосфена}uses crt;const n=20;Var mn1,mn2:set of 2..n; x,y:integer;Begin mn1:=[2..n]; mn2:=[]; x:=2; repeat while not (x in mn1) do x:=succ(x); {нахождение следующего за x (можно inc(x))} mn2:=mn2+[x]; {в множестве mn2 результат} y:=x; while y<=n do begin mn1:=mn1-[y]; {вычеркивание элементов} y:=y+x; end until mn1=[]; for x:=2 to n do {вывод результата} if x in mn2 then write(x:5); readkey;end.

Задания

Разработайте программу решения задачи с использованием процедур и функций над строками и операций над множествами.

1. Для каждого слова заданного предложения укажите

долю согласных. Определите слово, в котором доля согласных максимальна.

2. Найдите самое длинное симметричное слово заданного предложения и укажите номер позиции, с которого оно начинается.

3. Дана строка, представляющая собой запись числа в десятеричной системе счисления. Преобразуйте ее в строку, представляющую собой запись числа в восьмеричной системе счисления.

4. Дана строка, представляющая собой запись числа в восьмеричной системе счисления. Преобразуйте ее в строку, представляющую собой запись числа в двоичной системе счисления.

5. Дана строка символов, состоящая из произвольных десятичных чисел, разделенных пробелами. Выведите на экран числа этой строки в порядке возрастания их значений.

6. Дана строка, состоящая из групп нулей и единиц, разделенных пробелами. Найдите и выведите на экран самую короткую группу.

7. Дана строка, состоящая из групп нулей и единиц. Каждая группа отделяется от другой одним или несколькими пробелами. Подсчитайте количество символов в самой длинной группе.

8. Дана строка, состоящая из групп нулей и единиц. Каждая группа отделяется от другой одним или несколькими пробелами. Найдите и выведите на экран группы с четным количеством символов.

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

10. Дана строка символов, состоящая из произвольных десятичных чисел, разделенных пробелами. Выведите четные числа этой строки.

11. Дана строка, представляющая собой запись числа в

111 112

Page 47: Laboratornyy Praktikum OAiP Ch 1

двоичной системе счисления. Преобразуйте ее в строку, представляющую собой запись числа в шестнадцатеричной системе счисления.

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

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

14. Дана строка символов, состоящая из произвольного текста, слова разделены пробелами. Выведите на экран порядковый номер слова максимальной длины и номер позиции строки с которой оно начинается.

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

16. Найдите самое длинное симметричное слово заданного предложения и укажите номер позиции, с которого оно начинается.

17. Напишите программу, вычеркивающую из данного слова все буквы «а» (так, чтобы, например, из слова «заноза» получилось «зноз»).

18. Напишите программу, проверяющую, является ли частью данного слова слово «сок».

19. Напишите программу, подсчитывающую, сколько раз в данном слове встречается сочетание «со».

20. Напишите программу, заменяющую в тексте все прописные латинские буквы на строчные.

21. Напишите программу, заменяющую в тексте все строчные латинские буквы на прописные.

22. Дана строка символов, состоящая из произвольного текста на английском языке, слова отделены пробелами. После каждого гласного символа вставьте символ «*».

23. Выведите все строчные гласные латинские буквы, встречающиеся в данной строке ровно один раз.

24. В заданном тесте найдите количество четырехбуквенных слов и каждое четное из них замените на сочетание «SsSs». Слова отделены друг от друга пробелом.

25. Отредактируйте предложение, удаляя из него лишние пробелы, оставляя по одному пробелу между словами.

26. В заданном предложении укажите слово, в котором доля гласных «А» максимальна.

27. Проверьте, имеется ли в заданном тексте баланс открывающих и закрывающих скобок, имея в виду, что балансом, например, будет комбинация (…), в то время как комбинация )..(..)..( балансом не является.

28. Выведите на экран все символы кодовой таблицы ПЭВМ.29. Введите слово и все буквы «О» заменить в нем на «А».30. Напечатайте в столбик числовые коды букв введенного

слова.31. Напишите программу подсчета количества гласных в

тексте на английском языке.32. Напишите программу обращения слова.33. Напишите программу замены в тексте всех букв «а» на

«о» и наоборот.34. Напишите программу, удваивающую каждый символ в

заданном тексте.35. Напишите программу, выясняющую, является ли

данное слово палиндромом («перевертышем»).

36. Для каждого слова заданного предложения укажите долю согласных. Определите слово, в котором доля согласных максимальна.

37. Найдите самое длинное симметричное слово

111 112

Page 48: Laboratornyy Praktikum OAiP Ch 1

заданного предложения и укажите номер позиции, с которого оно начинается.

38. Отредактируйте заданное предложение, заменяя многоточия точкой, а вместо точки ставьте восклицательный знак.

39. В заданном предложении найдите самое короткое и самое длинное слова и укажите позиции, с которых они начинаются (слова в предложении разделены пробелом).

40. Из заданного текста предложения выберите и выведите на экран только те символы, которые встречаются в нем только один раз (в том порядке, в котором они встречаются в тексте).

41. В заданном тексте замените последовательность символов X(i) на X[i] и вычислите число произведенных замен.

42. В заданном тексте предложения замените строчные буквы на прописные и вычислите количество произведенных замен.

43. Задан текст, состоящий из произвольной последовательности буквенных символов. Расположите их в алфавитном порядке, при этом повторяющиеся символы должны быть удалены.

44. Задана строка символов, состоящая из букв, цифр, точек, символов «+» и «-». Выделите подстроку, состоящую из цифр, соответствующую целому числу (т.е. начинается со знака «+» или «-» и внутри подстроки нет букв и точки).

45. В заданном тексте предложения расставьте слова по алфавиту в соответствии с его первой буквой.

46. Задан текст, состоящий из произвольной последовательности буквенных символов. Расположите их в алфавитном порядке, при этом повторяющиеся символы должны быть удалены.

Задачи второго уровня

1. В заданном предложении поменяйте порядок следования слов на обратный.

2. Введите текст, содержащий от 1 до 4 цифровых символов, отображающих целые числа от 1 до 2000. На экран выведите введенные числа и их представление в римской системе счисления.

3. В заданном предложении, составленном из нескольких слов, поменяйте местами слова, стоящие на четных местах, со словами, стоящими на нечетных местах.

4. В заданном тексте в каждом нечетном слове поменяйте местами первые два буквенных символа и замените их на заглавные.

5. В заданном тексте в каждом четном слове замените все строчные буквенные символы на прописные, а каждое нечетное слово заключите в круглые скобки.

6. Для встречающихся в заданном тексте пар рядом расположенных букв укажите, сколько раз встречается каждое из таких двухбуквенных сочетаний.

7. Данный текст на русском языке «перекодируйте» в соответствии с таблицей перекодировки, заданной двумя строками st1 и st2. Например, пусть дан текст «Данный текст на русском языке» и таблица перекодировки: st1 = ’аейкнут’, st2 = ’горелка’. Тогда в результате перекодировки должен получиться текст: «Дгнныр аоест нг ркссеом языео».

8. Определите номер позиции k-го вхождения строки st1 в строку st2. Если такого нет, возвратите 0.

9. Определите номер позиции последнего вхождения строки st1 в строку st2. Если такого нет, возвратите 0.

10. Даны две строки st1 и st2. Разработайте процедуру, которая по значению первого параметра выполняет следующие операции над данными строками: находит символы, встречающиеся в обеих строках, находит символы, встречающиеся только в первой строке, только во второй строке.

ЛАБОРАТОРНАЯ РАБОТА 10Методы внутренней сортировки

111 112

Page 49: Laboratornyy Praktikum OAiP Ch 1

Цель работы: формирование умений и навыков в разработке сложных циклических алгоритмов обработки массивов; изучение методов внутренней сортировки; реализация отдельных алгоритмов сортировки.

Что нужно знать для выполнения работы

1. Метод пошаговой детализации разработки алгоритмов.2. Идеи, находящиеся в основе методов сортировки

массивов.3. Особенности использования массивов в качестве

параметров в процедурах и функциях.

Основные идеи алгоритма внутренней сортировки

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

Метод сортировки обменомРассмотрим один из методов сортировки – метод

«пузырька» – один из вариантов обменной сортировки.Данный алгоритм основан на принципе сравнения и

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

Таблица 10.1Пример сортировки методом «пузырька»

Исх

одны

й Номер просмотра

От

сорт

ир1 2 3 4 5 6 745 99 99 99 99 99 99 99

масс

ив

ован

ный

масс

ив

81 45 81 81 81 81 81 8113 81 45 76 76 76 76 7604 13 76 45 50 50 50 5076 04 13 50 45 45 45 4550 76 04 13 37 37 37 3728 50 50 04 13 28 28 2822 28 37 37 04 13 22 2299 22 28 28 28 04 13 1337 37 22 22 22 22 04 04

Итак, мы видим, что после первого просмотра наибольший по величине элемент занял свое место в конце массива; после второго – второй по величине элемент занял свое место и т.д.

Начнем разработку алгоритма на алгоритмическом языке (псевдокоде) и покажем использование метода пошаговой детализации. Заголовок и первый шаг могут быть следующими:

алг Сортировка обменами (цел N, цел таб A[1:N]) арг N,A рез A нач Упорядочить элементы линейной таблицы по

возрастанию кон

В дальнейшем мы не будем записывать заголовок, так как он остается без изменений. Очевидно, что для получения отсортированного массива достаточно выполнить (N-1)-й просмотр: после того как (N-1)-е элементы займут свои места, N-му ничего не останется как занять последнее свободное место.

Таким образом, можно сказать, что для выполнения сортировки необходимо организовать цикл на (N-1)-е повторение (второй шаг):

нач цел i для i от 1 до N-1 нц поставить i-й элемент таблицы на свое место

111 112

Page 50: Laboratornyy Praktikum OAiP Ch 1

кцкон

Что необходимо сделать, чтобы поставить i-й элемент на свое место, т.е., в чем суть i-го просмотра? Необходимо сравнивать соседние элементы и, если предыдущий больше последующего, поменять их местами.

Максимальное число сравнений на каждом просмотре N-1. Получаем третий шаг детализации:

нач цел i,j для i от 1 до N-1 нц для j от 1 до N-1 нц если A[j]>A[j+1] то обмен A[j] и A[j+1] всё кц кцкон

Осталось уточнить процедуру «обмен A[j] и A[j+1]» (четвертый шаг):

нач цел i,j,T для i от 1 до N-1 нц для j от 1 до N-1 нц если A[j]>A[j+1] то T:=A[j] A[j]:=A[j+1] A[j+1]:=T всё

кц кцкон

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

нач цел i,j,T для i от 1 до N-1 нц для j от 1 до N-i нц если A[j]>A[j+1] то T:=A[j] A[j]:=A[j+1] A[j+1]:=T все кц кцкон

Из табл. 10.1 видно, что после очередного просмотра свои места могут занять сразу несколько элементов, а не один. Таким образом, количество сравнений на очередном просмотре может уменьшиться не на единицу по сравнению с предыдущим просмотром, а на большую величину. Необходимо заметить номер элемента A[j], который участвовал в обмене последним при очередном просмотре. Для чего введем промежуточную величину L. На следующем просмотре будем сравнивать элементы с индексами, меньшими чем L, (второе уточнение):

нач цел i,j,T,L,K K:=N-1

111 112

Page 51: Laboratornyy Praktikum OAiP Ch 1

для i от 1 до N-1 нц для j от 1 до K нц если A[j]>A[j+1] то T:=A[j] A[j]:=A[j+1] A[j+1]:=T L:=j всё кц K:=L-1 кцкон

Из табл. 10.1 видно также, что необязательно выполнять (N-1)-й просмотр, что последовательность может оказаться отсортированной раньше (возможно в самом начале она уже была упорядочена!).

Введем переключатель P, который в начале каждого просмотра будем выключать, а при обмене элементов включать.

Тогда сортировка будет закончена, если на очередном просмотре не будет ни одного обмена, т.е. переключатель останется выключенным (третье уточнение):

нач цел i,j,T,L,K лог P K:=N-1 P:=истина пока P нц P:=ложь для j от 1 до K нц если A[j]>A[j+1] то T:=A[j]

A[j]:=A[j+1] A[j+1]:=T L:=j P:=истина всё кц K:=L-1 кцкон

Последний алгоритм можно улучшать и дальше. Например: организовать попеременный просмотр массива с разных концов (шейкер-сортировка); сравнивать сначала не соседние элементы, а с определенным шагом (метод Бэтчера); разделить исходный массив на подмассивы (метод Хоара) и др.

Метод простого выбораДанный метод основан на выборе самого маленького

элемента последовательности и обмене его с первым элементом последовательности. Затем находится второй по величине элемент и меняется местами со вторым и т.д. После (n-1)-го просмотра все элементы займут свои места. Одним из улучшений данного метода является метод пирамидальной сортировки.

Метод простых вставокСогласно методу простых вставок элементы

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

111 112

Page 52: Laboratornyy Praktikum OAiP Ch 1

Метод двухпутевых вставокСчитается, что слева и справа от первого элемента имеется

n-1 свободное место, и вставляемые элементы сравниваются либо с последним вставленным элементом справа или слева. Этот выбор зависит от того, были ли сдвиги элементов на предыдущем шаге, если были, то направление вставки меняется на противоположное.

Метод бинарных вставокВ методе простых вставок для поиска места вставки

выполняются последовательные сравнения вставляемого элемента с предыдущими элементами. Метод бинарных вставок основан на дихотомии, т.е. на бинарном методе поиска места. Например, если 63 элемента уже упорядочены и необходимо найти место 64-го, то 64-й сравнивается с 32-м, затем, в зависимости от результата сравнения, либо с 16-м, либо с 48-м. Таким образом, для нахождения места 64-го элемента достаточно выполнить всего шесть сравнений, а для нахождения места вставки, скажем, 1000-го – десять сравнений.

Метод подсчетаЗаготавливаем n счетчиков и обнуляем их (можно

заполнить единицами). Далее, сравниваем первый элемент с остальными и, в зависимости от того какой элемент больший, счетчик этого элемента увеличиваем на единицу. Затем второй элемент сравниваем с остальными, начиная с третьего и т.д. В результате, после сравнения (n-1)-го c n-м элементом, счетчики будут содержать номера элементов в отсортированной последовательности без единицы, если счетчики вначале обнулялись, и номера с единицей, если им были присвоены единицы. После этого достаточно одного цикла для получения нового упорядоченного массива из старого.

Метод слиянияРазличают две модификации данного метода: простое

двухпутевое слияние и естественное двухпутевое слияние. Идея метода основана на том, что если имеются два упорядоченных

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

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

Естественное двухпутевое слияние отличается от простого только первым шагом первоначальным разбиением на цепочки, которое выполняется естественным способом. Например, если исходная последовательность

37 24 99 08 22 19 28 82,то начальное разбиение на цепочки будет следующим:

37 | 24 99 | 08 || 22 || 19 | 28 | 82

Как видим, количество цепочек может быть значительно меньше n, что позволит несколько ускорить сортировку. То, что количество элементов в сливаемых цепочках различно, никакой роли при организации слияния не играет. В данном случае незначительно усложняется алгоритм из-за того, что один «средний» элемент может попасть в две цепочки (в нашем случае число 13).

Сортировка распределениемРассмотрим частный случай сортировки распределением –

поразрядную сортировку. Допустим, исходный массив состоит из двухразрядных десятичных чисел

37 24 99 08 22 19 28 82 50 64 11 71 95 76 04 13 81 45 53 17Заготавливаем 10 карманов по n элементов каждый и

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

Карманы: 0 1 2 3 4 5 6 7 8 9 50 11 22 13 24 95 76 37 08 99 71 82 53 64 45 17 28 19 81 04

111 112

Page 53: Laboratornyy Praktikum OAiP Ch 1

Берем последовательно элементы из карманов и получаем последовательность, упорядоченную по первому разряду,

50 11 71 81 22 82 13 53 24 64 04 95 45 76 37 17 08 28 99 19.Эту последовательность снова упорядочиваем аналогично

предыдущей последовательности, но по второму разряду.Карманы: 0 1 2 3 4 5 6 7 8 9 04 11 22 37 45 50 64 71 81 95 08 13 24 53 76 82 99 17 28 19Получим упорядоченную последовательность:04 08 11 13 17 19 22 24 28 37 45 50 53 64 71 76 81 82 95 99.Если элементы исходной последовательности содержат

больше десятичных разрядов, то понадобится просто больше шагов распределения.

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

Задания

Разработайте алгоритм методом пошаговой детализации и программу, реализующую этот алгоритм.

1. Найдите элементы каждой строки матрицы, которые повторяются наибольшее число раз в своей строке.

2. Проверьте, являются ли элементы строк данной матрицы перестановками одинаковых элементов.

3. Упорядочите строки данной матрицы в порядке возрастания количества одинаковых элементов в каждой строке.

4. Дана квадратная матрица порядка n. Переставьте строки матрицы так, чтобы в результате получилась матрица, у которой

строки упорядочены в порядке возрастания диагональных элементов.

5. Массив записей содержит фамилии участников соревнования и количество набранных баллов. Расположите записи в порядке убывания количества баллов. Если некоторые участники набрали одинаковое количество баллов, то их фамилии выведите в алфавитном порядке.

6. Массив записей содержит фамилии участников соревнования по прыжкам в длину и результаты трех попыток. Расположите записи в порядке занятых спортсменами мест.

7. Массив записей содержит фамилии участников соревнования и количество набранных баллов. Выведите фамилии участников, показавших три лучших результата. Таких участников может быть больше трех (некоторые участники показали одинаковые результаты).

8. Имеется массив слов. Выведите все анаграммы введенного слова, которые имеются в массиве.

9. Найдите самую длинную восходящую подпоследовательность в данной последовательности. Например, в последовательности 3, 6, 2, 7, 4, 8 такой подпоследовательностью будет 3, 6, 7, 8.

10. Расставьте строки данной матрицы в порядке возрастания элементов первого столбца.

11. Расставьте строки данной матрицы в порядке возрастания наибольших элементов в строках.

12. Дан двухмерный массив. Расположите его элементы в порядке возрастания.

13. Дан трехмерный массив. Расположите его элементы в порядке возрастания.

14. Имеется массив кодов групп товаров. Код группы товара – это последовательность четырех цифр. Упорядочите данный массив, не используя операций сравнения.

15. Выведите в порядке возрастания кодов все строчные буквы латинского алфавита, имеющиеся в текстовом файле.

111 112

Page 54: Laboratornyy Praktikum OAiP Ch 1

16. Напишите одноцикловую программу сортировки массива.

17. Имеется массив записей, содержащий координаты точек на плоскости. Упорядочите данный массив по первой координате. Если абсциссы некоторых точек равны, то упорядочите их по ординатам.

18. Расположите в порядке возрастания элементы строк данной матрицы, после чего расположите строки по возрастанию первых элементов полученных строк.

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

20. Имеются три упорядоченных в порядке возрастания массива. Выполните слияние их в один упорядоченный массив.

21. Реализуйте сортировку двухпутевыми вставками.22. Реализуйте сортировку подсчетом.23. Реализуйте сортировку простым обменом.24. Реализуйте сортировку простыми вставками.25. Реализуйте шейкер-сортировку.26. Реализуйте сортировку бинарными вставками. 27. Реализуйте сортировку простым выбором.28. Реализуйте сортировку простым слиянием.29. Реализуйте сортировку естественным слиянием.30. Реализуйте поразрядную сортировку.31. Имеется массив натуральных чисел. Получите массив

записей, содержащих различные числа исходного массива и их частоту в исходном массиве.

32. Расставьте данный массив натуральных чисел по количеству их делителей.

Литература

1. Аболрус С. Программирование на Pascal / С. Аболрус. – СПб.: Символ-Плюс, 2003. – 328 с.: ил.

2. Абрамов С.А. Задачи по программированию / С.А. Абрамов, Г.Г. Гнездилова, Е.Н. Капустина, М.И. Селюн. – М.: Наука, 1988. – 224 с.

3. Ахо А. Построение и анализ вычислительных алгоритмов / А. Ахо, Дж. Хопкрофт, Дж. Ульман. – М.: Мир, 1979.

4. Бондарев В.М. Основы программирования / В.М. Бондарев, В.И. Рублинецкий, Е.Г. Качко. – Харьков: Фолио; Ростов н/Д: Феникс, 1997. –368 с.

5. Бородич Ю.С. Паскаль для персональных компьютеров: Справ. пособие / Ю.С. Бородич, А.Н. Вальвачев, А.И. Кузьмич. – Мн.: Выш. шк.: БФ ГИТМП «Ника», 1991. – 365 с.: ил.

6. Бородич Ю.С. Разработка программных систем на языке Паскаль: Справ. пособие / Ю.С. Бородич. – Мн.: Выш. шк., 1992. – 143 с.: ил.

7. Вальвачев А.Н. Программирование на языке Паскаль для персональных ЭВМ ЕС / А.Н. Вальвачев, В.С. Крисевич. – Мн.: Выш. шк., 1989. – 223 с.

8. Вальвачев А.Н. Графическое программирование на языке Паскаль: Справ. пособие / А.Н. Вальвачев. – Мн.: Выш. шк., 1992. – 143 с.: ил.

9. Вирт Н. Алгоритмы и структуры данных / Н. Вирт. – М.: Мир, 1989.

10. Епанешников А. Программирование в среде Turbo Pascal 7.0 / А. Епанешников, В. Епанешников. – М.: «Диалог-МИФИ», 2002. – 367 с.

11. Кассера Винфрид. Turbo Pascal 7.0 / Винфрид Кассера, Фолькер Кассера. – Киев: Изд-во «Диа-Софт», 2003. – 448 с.

12. Касьянов В.Н. Сборник заданий по практикуму на ЭВМ: Учеб. пособие для вузов / В.Н. Касьянов, В.К. Сабельфельд. – М.: Наука, 1986. – 272 с.

13. Климов Ю.С. Программирование в среде Turbo Pascal 6.0: Справ. пособие / Ю.С. Климов, А.И. Касаткин, С.М. Мороз. – Мн.: Выш. шк., 1992. – 158 с.: ил.

14. Климова Л.М. Pascal 7.0. Практическое программирование: Решение типовых задач / Л.М. Климова. – М.: КУДИЦ-ОБРАЗ,

111 112

Page 55: Laboratornyy Praktikum OAiP Ch 1

2000. – 528 с.15. Кнут Д. Искусство программирования для ЭВМ: В 3 т. Т. 3 /

Д. Кнут. – М.: Мир, 1978. – 844 с.16. Котов В.М. Методы алгоритмизации / В.М. Котов, И.А.

Волков, А.И. Харитонович. – Мн.: Нар. асвета, 1996. – 127 с.: ил.

17. Культин Н.Б. Программирование в Turbo Pascal 7.0 и Delphi / Н.Б. Культин. – СПб.: БХВ – Петербург, 2003. – 416 с.: ил.

18. Липский В. Комбинаторика для программистов / В. Липский. – М.: Мир, 1988. – 213 c.: ил.

19. Мануйлов В.Г. Разработка программного обеспечения на Паскале / В.Г. Мануйлов. – М.: «Приор», 1996. – 238 с.

20. Марченко А.И. Программирование в среде Турбо Паскаль 7.0 / А.И. Марченко, Л.А. Марченко. – Киев: ВЕК+, 2003. – 464 с.: ил.

21. Меженный О.А. Turbo Pascal: учитесь программировать / О.А. Меженный. – М.: Издательский дом «Вильямс», 2002. – 367 с.

22. Мейер Б. Методы программирования: В 2 т. Т. 1 / Б. Мейер, К. Бодуэн. – М.: Мир, 1982. – 356 с.

23. Мейер Б. Методы программирования: В 2 т. Т. 2 / Б. Мейер, К. Бодуэн. – М.: Мир, 1982. – 368 с.

24. Мизрохи С.В. TURBO PASCAL и объектно-ориентирован-ное программирование / С.В. Мизрохи. – М.: Финансы и статистика, 1992. – 192 с.: ил.

25. Немнюгин С.А. Turbo Pascal. Практикум / С.А. Немнюгин. – СПб.: Питер, 2003. – 268 с.: ил.

26. Немнюгин С.А. Turbo Pascal. Программирование на языке высокого уровня: Учеб. для вузов / С.А. Немнюгин. – СПб.: Питер, 2003. – 544 с.: ил.

27. Немнюгин С. Изучаем Turbo Pascal / С. Немнюгин, Л. Перколаб. – СПб.: Питер, 2004. – 313 с.: ил.

28. Офицеров Д.В. Программирование на персональных ЭВМ. Практикум: Учеб. пособие / Д.В. Офицеров. – Мн.: Выш. шк., 1993. – 256 с.

29. Павловская Т.А. Паскаль. Программирование на языке высокого уровня: Учеб. для вузов / Т.А. Павловская. – СПб.: Питер, 2003. – 393 с.: ил.

30. Пильщиков В.Н. Сборник упражнений по языку Паскаль / В.Н. Пильщиков. – М.: Наука, 1989. – 160 с.

31. Рапаков Г.Г. Turbo Pascal для студентов и школьников / Г.Г. Рапаков, С.Ю. Ржеуцкая. – СПб.: БХВ – Петербург, 2003. – 352 с.: ил.

32. Рейнгольд Э. Комбинаторные алгоритмы. Теория и практика / Э. Рейнгольд, Ю. Нивергельт, Н. Део. – М.: Мир, 1980. – 476 с.

33. Турбо Паскаль 7.0. Самоучитель. – СПб.: Питер, Киев: Издат. группа BHV, 2002. – 416 с.: ил.

34. Свами М. Графы, сети и алгоритмы / М. Свами, К. Тхуласираман. – М.: Мир, 1984. – 455 с.: ил.

35. Фаронов В.В. Турбо Паскаль 7.0. Начальный курс: Учеб. пособие / В.В. Фаронов. – М.: «Нолидж», 1997. – 616 с.: ил.

36. Фаронов В.В. Turbo Pascal / В.В. Фаронов. – СПб.: БХВ – Петербург, 2003. – 1056 с.: ил.

37. Хьюз Дж. Структурный подход к программированию / Дж. Хьюз, Дж. Мичтом. – М.: Мир, 1980. – 278 с.

38. Чип С. Turbo Pascal 6.0 Professional. ООП: Теория и практика / С. Чип. – Мн.: SCI, 1992. – 138 с.: ил.

39. TURBO PASCAL 6.0: Руководство пользователя. – Мн.: «Радзiма», 1992. – 256 с.

40. Филлипс Д. Методы анализа сетей / Д. Филипс, А. Гарсиа-Диас. – М.: Мир, 1984. – 496 с.: ил.

Содержание

Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

Требования безопасности при работе на ПЭВМ . . . . . . . . . . . 3Требования безопасности при возникновении аварийныхситуаций . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4Требования безопасности по окончании работ . . . . . . . . . . . . 4

Рекомендации по выполнению лабораторных работ и оформлению отчета . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

111 112

Page 56: Laboratornyy Praktikum OAiP Ch 1

ЛАБОРАТОРНАЯ РАБОТА 1Разветвляющиеся алгоритмы и программы . . . . . . . . . . . . . 6

ЛАБОРАТОРНАЯ РАБОТА 2Простые циклы с заданным числом повторений . . . . . . . . . 21

ЛАБОРАТОРНАЯ РАБОТА 3Простые циклы с неизвестным числом повторений . . . . . . 30

ЛАБОРАТОРНАЯ РАБОТА 4Обработка одномерных массивов . . . . . . . . . . . . . . . . . . . . . . 40

ЛАБОРАТОРНАЯ РАБОТА 5Циклы с внутренними ветвлениями . . . . . . . . . . . . . . . . . . . 44

ЛАБОРАТОРНАЯ РАБОТА 6Подпрограммы (процедуры и функции) . . . . . . . . . . . . . . . . 51

ЛАБОРАТОРНАЯ РАБОТА 7Сложные циклы. Обработка массивов . . . . . . . . . . . . . . . . . 58

ЛАБОРАТОРНАЯ РАБОТА 8Сложные циклы. Обработка массивов. Создание и использование Unit-ов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

ЛАБОРАТОРНАЯ РАБОТА 9Множества, строки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

ЛАБОРАТОРНАЯ РАБОТА 10Методы внутренней сортировки . . . . . . . . . . . . . . . . . . . . . . . 85

Литература . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

111 112