ОП.05 ОСНОВЫ ПРОГРАММИРОВАНИЯ
ЧАСТЬ I
Специальности 09.02.03 Программирование в компьютерных системах
2017
Рекомендации адресованы студентам, обучающимся по специальности 09.02.03 Программирование в компьютерных системах, содержит материалы, которые способствуют обобщению, систематизации, углублению, закреплению полученных теоретических знаний по конкретным темам общепрофессиональной дисциплины; формированию умений применять полученные знания на практике, реализации единства интеллектуальной и практической деятельности; развитию интеллектуальных умений у будущих специалистов: аналитических, проектировочных, конструктивных и др.; выработке при решении поставленных задач таких профессионально значимых качеств, как самостоятельность, ответственность, точность, творческая инициатива.
Методические рекомендации к практическим занятиям по дисциплине Основы программирования.
Автор-составитель: Захарова Александра Вячеславовна - преподаватель первой квалификационной категории.
Рассмотрено и одобрено на заседании предметно-цикловой комиссии, протокол №____ от «_____» _______________ 20______ г. Председатель ПЦК: Захарова А.В.
Рецензент: _________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
СОДЕРЖАНИЕ
Пояснительная записка. 2
Требования к отчетности. 2
Практическая работа №1. Составление программ линейной структуры.. 2
Практическая работа №2. Составление программ с использование операторов условного и безусловного переходов. 2
Практическая работа №3. Составление программ с использование операторов цикла. 2
Практическая работа №4. Составление программ с усложненной структурой. 2
Практическая работа №5. Организация процедур и функций. 2
Практическая работа №6. Составление программ с использованием процедур и функций. 2
Практическая работа №7. Составление программ для объявления массивов. 2
Практическая работа №8. Составление программ для работы с элементами массива. 2
Практическая работа №9 Процедуры и функции для работы со строками и множествами . 2
Практическая работа №10 – 11 Декларация записи. Работа с записями. Обращение к элементу. 2
Практическая работа №12 Составление программ для работы с записями. 2
Практическая работа №13 Графические процедуры и функции. 2
Практическая работа №14 Составление программ с использованием модуля Graph . 2
Практическая работа №15 Графические примитивы.. 2
Практическая работа №16 Создание статических графических объектов. 2
Практическая работа №17 Создание динамических графических объектов. 2
Советы по технологии написания быстро отлаживаемых программ.. 2
Список использованных источников. 2
ПРИЛОЖЕНИЕ А ТИТУЛЬНЫЙ ЛИСТ ОТЧЕТА.. 2
ПРИЛОЖЕНИЕ Б. ТИПЫ ДАННЫХ В ПАСКАЛЕ.. 2
ПРИЛОЖЕНИЕ В. СТАНДАРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ В ПАСКАЛЕ.. 2
Пояснительная записка
Основная цель, которая ставится студенту при выполнении задания - практическое освоение всех этапов разработки надежной программы для решения задачи на ПЭВМ, начиная от анализа условия задачи и заканчивая сдачей отчета по написанной программе. Каждое лабораторное занятие состоит из двух или трех задач.
Дисциплина «Основы программирования» предоставляет возможность реализации соответствующих преемственных связей, поскольку составление программы предполагает глубокое владение основными теоретическими понятиями программирования к числу которых можно отнести: базовые управляющие структуры, типы данных и возможность реализации одних из них на базе других, методы и технологии программирования, типовые алгоритмы обработки данных, рекурсия, передача параметров, принципы организации и функционирования различных систем программирования и др.
Структура учебной работы студентов в рамках данного курса предусматривает практические занятия в компьютерном классе, в ходе которых под руководством преподавателя осуществляется разработка и реализация на компьютере конкретных программ в соответствии с предложенной тематикой. При этом в ходе самостоятельной индивидуальной работы студент должен осуществить полный цикл разработки программ, включая подготовку отчета по каждой из практических работ.
Выполненные работы сохраняются студентами на сетевом диске в отдельной папке «Основы программирования», где каждая из задач пронумерованы «Номер работы - Порядковый номер задачи», например: «1-1», «3-2». Отчет по выполненной работе сдается в электронном или печатном виде преподавателю.
Критерии оценивания:
· Выполнены все требования по отчетности.
· Качественно составлены программы: учтены требования к программам по конкретным темам, рационально использованы типы данных, использованы подпрограммы, оптимальна скорость выполнения программы, размер использованной памяти, эргономичный интерфейс.
· Отчетность сдана в сроки прохождения «Основ программирования».
Требования к отчетности
К каждой практической работе оформляется отчет, выполненный на листах формата А4, шрифт 14, межстрочный интервал 1,5. Листы должны быть пронумерованы в правом нижнем углу.
В общем случае содержание отчета о выполненной работе должно содержать:
· Титульный лист
· Содержание
· Введение
· Теоретическая часть
· Основная часть
· Заключение
Структурные части отчета должны начинаться с нового листа. Заголовки пишутся прописными буквами. Допускается выделение жирным шрифтом.
Титульный лист. (Приложение 1) Перенос слов на титульном листе не допускается. Точки в конце фраз не ставятся. Титульный лист включают в общую нумерацию, но номер на нем не ставят.
Содержание включает наименования всех разделов, подразделов, пунктов, структурных частей с указанием номера страницы начала каждой из перечисленных составных работы.
Введение. Краткая формулировка цели и задач практикума по «Основам программирования на языке программирования Turbo Pascal».
Теоретическая часть. Краткое описание теоретических основ: структура программы, типы данных, операторы, используемые для выполнения практических работ.
Основная часть. Состоит из краткого описания этапов решения задач практических работ. Каждая из которых начинается с нового листа и описывается следующим образом:
· Номер работы. Название
· Выполнение задания
o Условия задачи
o Исходные данные
o Программирование алгоритма (с комментариями)
o Тестирование программы (скрин с выполненной программой)
Заключение. Выводы о выполненной работе.
Алфавит языка Паскаль
В алфавит языка входят:
1. Буквы латинского алфавита от a до z и от A до Z, а также знак подчеркивания "_", который приравнивается к буквам. (В ТР нет различия между прописными и строчными буквами алфавита, кроме случаев, когда они входят в символьные и строковые выражения).
2. Арабские цифры от 0 до 9.
3. Специальные символы, их 23:
+ - * / = . , : ; ' < > ( ) { } [ ] $ @ # ^ и пробел.
Символы из языка используются для построения базовых элементов -лексем. В ТР определены следующие классы лексем:
1) Служебные (ключевые или зарезервированные) слова: Begin, End, Var,
Type, Label, Const, If, Then, Else, For, Do, While, Repeat и другие.
Служебные слова нельзя использовать не по назначению. Они не могут
использоваться в качестве идентификаторов.
2) Имена (или идентификаторы) вводятся программистом для обозначения (в программе) переменных, констант, типов, меток, процедур, функций объектов, моделей, полей в записях и т.п. Они формируются только из букв и цифр, причем первой должна быть буква. Длина имени может быть произвольной, но компилятор воспринимает только первые 63 символа. Идентификаторы вводятся в программу посредством описаний.
3) Изображения - группа лексем, обозначающих числа, символьные строки и некоторые другие значения.
4) Знаки операций, которые формируются из одного или нескольких специальных символов или служебных слов:
а) арифметические операции: + (сложение), - (вычитание), * (умножение), / (деление вещественных чисел), mod (деление целых чисел), div (остаток от деления двух целых чисел);
б) операции отношения: < - (меньше), > - (больше), <= - (не больше), >= - (не меньше), = - (равно), <> - (не равно);
в) логические операции: and - логическое И, or - логическое ИЛИ, not - логическое НЕ, xor - исключительное ИЛИ;
г) операции над множествами: * - пересечение множеств, + - объединение множеств, - - вычитание множеств, IN - принадлежность множеству.
5) Разделители, которые формируются из специальных символов.
6) Комментарии - произвольная последовательность символов, в том числе и русских букв, заключенных в фигурные скобки {…} или (* … *), предназначенная для пояснений в программе. Комментарии могут находиться между любыми двумя лексемами программы.
7) Пробел, не имеющий графического изображения, используется для отделения лексем друг от друга.
Данные в языке Паскаль
В языке Паскаль любая переменная характеризуется своим типом.
Под типом, в данном случае, понимается множество значений, которые может принимать переменная, а также множество операций, допустимых над данной переменной. Тип определяет формат внутреннего представления данных в памяти компьютера.
Тип переменной определяется при ее описании, и он не может быть изменен в процессе выполнения программы. Переменная может участвовать только в операциях, допустимых ее типом.
Паскаль имеет развитую систему типов. Классификация типов данных,
приведенная на рисунке 1.
Рисунок 1 – Классификация типов данных
В приложении 2 приведены имена (или названия) вещественных и целых типов данных, а также длина их внутреннего представления в байтах и диапазоны возможных значений каждого из типов.
Арифметические выражения
Арифметические выражения строятся из арифметических констант, переменных, функций и операций над ними.
Все данные, входящие в арифметические выражения, должны быть одного типа, хотя иногда допускается использовать в одном выражении данные целого и вещественного типов.
При построении арифметических выражений следует учитывать следующие правила:
1. Выражение записывается в строчку. Например, выражение:
на Паскале будет записываться следующим образом:
(2*a*x+3*b*y-4*x)/(2.5*(a+b+c))
2. Скобки в арифметических выражениях только круглые. Число открывающихся скобок должно равняться числу закрывающихся скобок.
3. Нельзя записывать два знака операций подряд, без скобок, например в выражении:
следует записать: (3*a+b)/(-x).
4. Порядок выполнения арифметических операций слева направо в соответствии со старшинством операций:
1) значения функций; 2) *, /, div, mod; 3) +, -.
Список существующих стандартных процедур и функций приведен в приложении В.
Оператор присваивания
Оператор присваивания имеет вид:
Переменная:= Значение;
Слева в операторе присваивания всегда стоит имя переменной, а справа - то, что представляет собой её значение (это может быть конкретное значение, арифметическое или логическое выражение, вызов функции, либо другая переменная). После выполнения операции присваивания переменная слева получает новое значение. Программист должен следить за совместимостью типов данных, участвующих в операции присваивания.
Например:
А:=0.5; - переменной А будет присвоено конкретное значение, равное 0,5.
Х:= 2*А+1; - переменной Х, после вычисления правой части, будет присвоено найденное значение.
Составной оператор
Составной оператор - это объединение нескольких операторов в одну группу или блок. Форма записи данного оператора:
Begin
Оператор 1;
Оператор 2;
. . .
Оператор n;
End;
Составной оператор представляется как единый оператор и его можно вставлять в любое место программы, где допускается один оператор. Любой из операторов, входящих в составной оператор, в свою очередь, может быть составным. После ключевого слова Begin точка с запятой не ставится.
Задание №3
Написать программу вычисления стоимости покупки, состоящей из нескольких тетрадей и такого же количества обложек к ним. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные полужирным шрифтом, приведены в таблице вариантов ниже).
Вычисление стоимости покупки.
Введите исходные данные:
Цена тетради (руб.) —> 2.75
Цена обложки (руб.) —> 0.5
Количество комплектов (шт.) —> 7
Стоимость покупки: 22.75 руб.
№ Варианта | Цена тетради, руб | Цена обложки, руб | Кол-во комплектов, шт |
1 | 10 | 2,5 | Вводиться с клавиатуры |
2 | 13 | Вводиться с клавиатуры | 15 |
3 | 6 | 1,5 | Вводиться с клавиатуры |
4 | Вводиться с клавиатуры | 2,10 | 10 |
5 | 7,4 | 2,15 | Вводиться с клавиатуры |
6 | 3 | Вводиться с клавиатуры | 70 |
7 | 15 | 37 | Вводиться с клавиатуры |
8 | 29 | Вводиться с клавиатуры | 6 |
9 | 45 | 2,7 | Вводиться с клавиатуры |
10 | 170 | 5,1 | Вводиться с клавиатуры |
11 | Вводиться с клавиатуры | 41 | Вводиться с клавиатуры |
12 | 21 | 2,9 | 45 |
13 | 29 | Вводиться с клавиатуры | Вводиться с клавиатуры |
14 | 56 | 16 | Вводиться с клавиатуры |
15 | 19 | Вводиться с клавиатуры | 10 |
16 | 35 | 25 | 25 |
17 | Вводиться с клавиатуры | Вводиться с клавиатуры | Вводиться с клавиатуры |
18 | 43 | 5 | 30 |
19 | Вводиться с клавиатуры | 3,5 | Вводиться с клавиатуры |
20 | 8 | 31 | Вводиться с клавиатуры |
Дополнительные задачи
Дополнительная задача №1
Написать программу вычисления стоимости поездки на автомобиле на дачу(туда и обратно). Исходными данными являются: расстояние до дачи (в километрах); количество бензина, которое потребляет автомобиль на 100 км пробега; цена одного литра бензина. Ниже представлен рекомендуемый вид экрана во время работы программы .
Вычисление стоимости поездки на дачу и обратно.
Расстояние до дачи (км) —> 67
Расход бензина (литров на 100 км пробега) —> 8.5
Цена литра бензина (тг.) —> 40тг.
Поездка на дачу и обратно обойдется в 227,8 тг.
№ варианта | Расстояние до дачи | Расход бензина | Цена литра бензина |
1 | Вводиться с клавиатуры | 7,3 | 29,7 |
2 | 120 | Вводиться с клавиатуры | 32 |
3 | 54 | 8,2 | Вводиться с клавиатуры |
4 | Вводиться с клавиатуры | Вводиться с клавиатуры | 30,6 |
5 | 27 | Вводиться с клавиатуры | Вводиться с клавиатуры |
6 | Вводиться с клавиатуры | 10,5 | Вводиться с клавиатуры |
7 | Вводиться с клавиатуры | Вводиться с клавиатуры | Вводиться с клавиатуры |
8 | Вводиться с клавиатуры | 12 | 28,4 |
9 | 98 | Вводиться с клавиатуры | 35,2 |
10 | 56 | 4,9 | Вводиться с клавиатуры |
11 | Вводиться с клавиатуры | Вводиться с клавиатуры | 27,40 |
12 | 30 | Вводиться с клавиатуры | Вводиться с клавиатуры |
13 | Вводиться с клавиатуры | 6,8 | Вводиться с клавиатуры |
14 | Вводиться с клавиатуры | Вводиться с клавиатуры | Вводиться с клавиатуры |
15 | 48 | 5,2 | Вводиться с клавиатуры |
16 | 63 | Вводиться с клавиатуры | 35,4 |
17 | Вводиться с клавиатуры | 8,3 | 31,7 |
18 | 47 | Вводиться с клавиатуры | 28,5 |
19 | 36 | 4,8 | Вводиться с клавиатуры |
20 | Вводиться с клавиатуры | Вводиться с клавиатуры | 30,8 |
Дополнительная задача №2
Написать программу вычисления величины дохода по вкладу. Процентная ставка (в процентах годовых) и время хранения (в днях) задаются во время работы программы. Ниже представлен рекомендуемый вид экрана во время работы программы.
Вычисление дохода по вкладу.
Введите исходные данные:
Величина вклада (тг.) -> 2500
Срок вклада (дней) —>30
Процентная ставка (годовых) —> 20
________________________________
Доход: 41.10 тг.
Сумма по окончании срока вклада: 2541.10тг.
Написать программу пересчета величины временного интервала, заданного в минутах, в величину, выраженную в часах и минутах. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом).
Введите величину временного интервала (в минутах) и нажмите <Enter> ->150
150 минут — это 2 ч. 30 мин.
Контрольные вопросы:
1. Из каких разделов состоит программа, написанная на языке программирования Паскаль
2. Какие разделы в программе обязательны?
3. Что такое идентификатор?
4. Какие ограничения накладываются на идентификатор?
5. Как оформляется программа на языке программирования Паскаль?
6. Назовите известные Вам арифметические операции и функции?
7. Как объявляются целые и вещественные переменные?
8. Как определить значение переменной?
9. Опишите операторы ввода информации.
10. Опишите оператор вывода информации.
11. Опишите оператор присваивания и правила его использования.
Оператор выбора
Для разветвления в программе более чем в 2-х направлениях, можно использовать оператор выбора:
Case <Выражение - ключ выбора> OF <Список выбора> End
Или
Case <Выражение - ключ выбора> OF <Список выбора>
Else <Операторы> End
Ключ выбора - выражение любого порядкового типа;
<Список выбора> - одна или более конструкций вида:
<Константа выбора> : <Оператор>;
<Константа выбора> - выражение того же типа, что и ключ выбора;
Оператор выбора работает следующим образом: вычисляется значение выражения <ключ выбора>, а затем в последовательности операторов <список выбора> отыскивается такой, которому предшествует константа, равная вычисленному значению. Найденный оператор выполняется, после чего оператор выбора завершает работу. Если в списке выбора нет такой константы, то управление передается оператору, стоящему за ключевым словом Else. Часть Else может отсутствовать и в этом случае оператор выбора завершает свою работу.
Типовой пример:
Составить программу для вычисления значений функции F для заданных значений переменной x и постоянных a, b.
F = a tgx +Ö |x-2| , при x < 2; (1)
F = (a2 - b2) Cos p , при x = 2; (2)
F = (x-2)3 Sin px/2 , при x > 2. (3)
Примечание: При составлении программы не забывайте анализировать знаменатель (он не должен равняться нулю), учитывайте область определения математических функций, значения подкоренных выражений и типы данных, участвующих в выражениях.
В рассматриваемом примере значение подкоренного выражения всегда больше 0, арифметические функции Sinх и Cosх определены для любых значений х.
При вычислении значений функции tgx необходимо использовать выражение tgx = sinx /cosx. В связи с этим нужно анализировать значение, которое может принимать знаменатель: cosx не должен равняться 0. Все данные вещественного типа.
Текст программы с использованием структуры if ... then ...
{ Выполнили: студенты гр. ... Фамилии …}
{ Пример программы с разветвляющейся структурой}
{ Раздел описаний данных}
Const a=2.0; b=3.0;
Var x,F: real;
{ Раздел операторов}
Begin
Writeln(' Введите x'); {Запрос на ввод x}
Readln(x); {Ввод значения x}
if x>2 then F:= (x-2)*(х-2)*(х-2)* Sin(Pi *х/2);
if x=2 then F:= (a*a-b*b)* Cos (Pi);
if x<2 then if Cos (x) <> 0 then
F:= a*Sin(x)/Cos(x)+Sqrt (Abs(x-2))
else begin Writeln(' Знаменатель равен 0');
exit { Выход из программы } end;
{Вывод результатов}
Writeln(' При x = ',x:6:2,' F = ',F:8:3); readln; End.
Текст программы с использованием структуры if ... then ... else ...;
{Студенты гр. ..... Фамилии …}
{ Пример программы с разветвляющейся структурой}
{ Раздел описаний данных}
Const a=2.0; b=3.0;
Var x,F: real;
{ Раздел операторов}
Begin
Writeln(' Введите x'); {Запрос на ввод x}
Readln(x); {Ввод значения x}
if 0 x>2 then F:= (x-2)*(х-2)*(х-2)* Sin(Pi/2*x)
else if x=2 then F:= (a*a-b*b)* Cos (Pi)
else if Cos(x) <> 0 then
F:= a* Sin(x)/Cos(x)+ Sqrt(Abs(x-2))
else begin Writeln(' Знаменатель равен 0');
exit { Выход из программы } end;
{Вывод результатов}
Writeln(' При x= ',x:6:2,' F= ',F:8:3); readln;
End.
Текст программы с использованием структуры case of
Вывести на экран сообщение (Нуль, Один и т. д.) в зависимости от того какое мы введем число.
{Студенты гр. ..... Фамилии …}
{ Раздел описаний данных}
var NUM :integer;
{ Раздел операторов
begin
writeln(‘Введите число от 0 до 4:’);
readln (NUM);
case NUM of {оператор выбора}
0:writeln (‘Нуль’);
1:writeln (‘Один’);
2:writeln (‘Два’);
3:writeln (‘Три’);
4:writeln (‘Четыре’);
end;
readln
end.
Варианты самостоятельных заданий
Задание №1
1. Дано целое число. Если оно является положительным, то прибавить к нему 1; в противном случае не изменять его. Вывести полученное число.
2. Дано целое число. Если оно является положительным, то прибавить к нему 1; если отрицательным, то вычесть из него 2; если нулевым, то заменить его на 10. Вывести полученное число.
3. Даны три целых числа. Найти количество положительных чисел в исходном наборе.
4. Даны три целых числа. Найти количество положительных и количество отрицательных чисел в исходном наборе.
5. Даны два числа. Вывести большее из них.
6. Даны два числа. Вывести порядковый номер меньшего из них.
7. Даны два числа. Вывести вначале большее, а затем меньшее из них.
8. Даны две переменные вещественного типа: A, B. Перераспределить значения данных переменных так, чтобы в A оказалось меньшее из значений, а в B — большее. Вывести новые значения переменных A и B.
9. Даны две переменные целого типа: A и B. Если их значения не равны, то присвоить каждой переменной сумму этих значений, а если равны, то присвоить переменным нулевые значения. Вывести новые значения переменных A и B.
10. Даны две переменные целого типа: A и B. Если их значения не равны, то присвоить каждой переменной большее из этих значений, а если равны, то присвоить переменным нулевые значения. Вывести новые значения переменных A и B.
11. Даны три числа. Найти наименьшее из них.
12. Даны три числа. Найти среднее из них (то есть число, расположенное между наименьшим и наибольшим).
13. Даны три числа. Вывести вначале наименьшее, а затем наибольшее из данных чисел.
14. Даны три числа. Найти сумму двух наибольших из них.
15. Даны три переменные вещественного типа: A, B, C. Если их значения упорядочены по возрастанию, то удвоить их; в противном случае заме- нить значение каждой переменной на противоположное. Вывести новые значения переменных A, B, C.
16. Даны три переменные вещественного типа: A, B, C. Если их значения упорядочены по возрастанию или убыванию, то удвоить их; в против- ном случае заменить значение каждой переменной на противоположное. Вывести новые значения переменных A, B, C.
17. Даны три целых числа, одно из которых отлично от двух других, равных между собой. Определить порядковый номер числа, отличного от остальных.
18. Даны четыре целых числа, одно из которых отлично от трех других, равных между собой. Определить порядковый номер числа, отличного от остальных.
19. На числовой оси расположены три точки: A, B, C. Определить, какая из двух последних точек (B или C) расположена ближе к A, и вывести эту точку и ее расстояние от точки A.
20. Даны целочисленные координаты точки на плоскости. Если точка совпадает с началом координат, то вывести 0. Если точка не совпадает с началом координат, но лежит на оси OX или OY, то вывести соответственно 1 или 2. Если точка не лежит на координатных осях, то вывести 3.
Задание №2
Ввести координаты точки А с клавиатуры и определить в какую из областей она попадает.
1 | 2 | 3 |
4 | 5 | 6 |
7 | 8 | 9 |
10 | 11 | 12 |
13 | 14 | 15 |
16 | 17 | 18 |
19 | 20 | Дополнительная задача |
Задание №3
1. Написать программу, которая по номеру дня недели (целому числу от 1 до 7) выдает в качестве результата количество занятий в вашей группе в этот день.
2. Написать программу, которая по номеру месяца выдает название следующего за ним месяца (при т = 1 получаем февраль, 4 — май и т.д.).
3. Написать программу, которая бы по введенному номеру времени года (1 — зима, 2 — весна, 3 — лето, 4 — осень) выдавала соответствующие этому времени года месяцы, количество дней в каждом из месяцев.
4. Написать программу, позволяющую по последней цифре числа определить последнюю цифру его квадрата.
5. Написать программу, которая по номеру месяца выдает название следующего за ним месяца (при т = 1 получаем февраль, 4 — май и т.д.).
6. Написать программу, которая бы по введенному номерувремени года (1 — зима, 2 — весна, 3 — лето, 4 — осень) выдавала соответствующие этому времени года месяцы, количество дней в каждом из месяцев.
7. Составить программу, которая по заданным году и номеру месяца m определяет количество дней в этом месяце.
8. Написать программу, которая бы по введенному номеру времени года (1 — зима, 2 — весна, 3 — лето, 4 — осень) выдавала соответствующие этому времени года месяцы, количество дней в каждом из месяцев.
9. Для каждой введенной цифры (0 — 9) вывести соответствующее ей название на английском языке (0 — zero, 1 — оnе,2 — two, ... ).
10. Написать программу, которая по номеру месяца выдает на
звание следующего за ним месяца (при т = 1 получаем февраль, 4 — май и т.д.).
11. Написать программу, которая бы по введенному номеру
времени года (1 — зима, 2 — весна, 3 — лето, 4 — осень) выдавала соответствующие этому времени года месяцы, количество дней
в каждом из месяцев.
12. Составить программу, которая по данному числу (1 — 12) вы
водит название соответствующего ему месяца.
13. Написать программу, которая по номеру месяца выдает на
звание следующего за ним месяца (при т = 1 получаем февраль, 4 — май и т.д.).
14. Составить программу, позволяющую получить словесное описание школьных отметок (1 — «плохо», 2 — «неудовлетворительно», 3 — «удовлетворительно», 4 — «хорошо», 5 — «отлично»).
15. Написать программу, которая по номеру месяца выдает название следующего за ним месяца (при т = 1 получаем февраль, 4 — май и т.д.).
16. Пусть элементами круга являются радиус (первый элемент), диаметр (второй элемент) и длина окружности (третий элемент). Составить программу, которая по номеру элемента запрашивала бы его соответствующее значение и вычисляла бы площадь круга.
17. В старояпонском календаре был принят 12-летний цикл. Годы внутри цикла носили названия животных: крысы, коровы, тигра, зайца, дракона, змеи, лошади, овцы, обезьяны, курицы, собаки и свиньи. Написать программу, которая вводит номер некоторого года и печатает его название по старояпонскому календарю. (Справка: 1996 г. — год Крысы — начало очередного цикла.)
18. Написать программу, которая по вводимому числу от 1 до 11 (номеру класса) выдает соответствующее сообщение «Привет, k-классник». Например, если k = 1, «Привет, первоклассник»; если k =4, «Привет, четвероклассник».
19. Имеется пронумерованный список деталей: 1) шуруп, 2) гайка, 3) винт, 4) гвоздь, 5) болт. Составить программу, которая по номеру детали выводит на экран ее название.
20. Написать программу, классифицирующую треугольники (остроугольные, прямоугольные, тупоугольные), если даны углы
21. В зависимости от введённого символа L, S, V программа должна вычислять длину окружности; площадь круга; объём цилиндра.
22. По введенному числу от 0 до 15 вывести название цвета, соответствующего этому коду.
23. Арифметические действия над числами пронумерованы следующим образом: 1 — сложение, 2 — вычитание, 3 — умножение, 4 — деление. Дан номер действия N (целое число в диапазоне 1–4) и вещественные числа A и B (В не равно 0). Выполнить над числами указанное действие и вывести результат.
24. Единицы длины пронумерованы следующим образом: 1 — дециметр, 2 — километр, 3 — метр, 4 — миллиметр, 5 — сантиметр. Дан номер единицы длины (целое число в диапазоне 1–5) и длина отрезка в этих единицах (вещественное число). Найти длину отрезка в метрах.
25. Единицы массы пронумерованы следующим образом: 1 — килограмм, 2 — миллиграмм, 3 — грамм, 4 — тонна, 5 — центнер. Дан номер едини- цы массы (целое число в диапазоне 1–5) и масса тела в этих единицах (вещественное число). Найти массу тела в килограммах.
Контрольные вопросы:
1. Что такое оператор условного перехода?
2. Для чего предназначен условный оператор?
3. Каковы две формы записи условного оператора?
4. Как в общем виде записывается оператор условного перехода?
5. Как и когда применяется составной оператор?
6. Как в общем виде записывается оператор безусловного перехода?
7. Что такое оператор безусловного перехода?
8. Для чего предназначен оператор выбора?
9. Могут ли выполнится несколько ветвей оператора «выбор» за один раз?
10. Сколько операторов можно написать после возможного значения переменной?
11. Может ли сразу несколько констант фигурировать в качестве возможного значения переменной?
Оператор цикла с параметром
Оператор цикла с параметром имеет вид:
For <параметр_цикла> := <нач.знач.> To < конеч.знач.> Do <оператор>;
где <параметр_цикла> - переменная любого порядкового типа;
<нач.знач.> - начальное значение - выражение того же типа;
<конеч.знач.> - конечное значение - выражение того же типа;
На месте одного оператора может располагаться группа операторов, заключённых в операторные скобки (Begin ... end).
Для более гибкого управления операторами циклов For, While, Repeat в ТР введены две процедуры:
BREAK - реализует немедленный выход из цикла; действие процедуры заключается в передаче управления оператору, стоящему сразу за после последнего оператора цикла.
CONTINUE - обеспечивает досрочное завершение очередного прохода цикла, что эквивалентно передаче управления в самый конец циклического оператора.
Типовой пример
Составить схему алгоритма и программу для вычисления значений функции Y для значений переменной х, изменяющейся в интервале от a до b с заданным шагом h.
Решение
Так как в языке Pascal нет стандартной функции извлечения корня любой степени кроме квадратного, для вычисления функции Y воспользуемся переходом к функциям Exp и Ln.
При программировании необходимо учесть, что выражение, стоящее под знаком Ln, может быть только положительным: (6x2-x3) > 0.
Исходными данными в этой задаче являются значения a,b и h.
Начальное значение х принимаем равным а (х:=а). Каждое следующее значение х вычисляется по формуле х:=х+h. Вычисления функции Y для новых значений х заканчиваются, когда значение х становится больше, чем заданное значение b.
Схема алгоритма и программа вычислений зависит от того, какой оператор цикла используется в программе. Рассмотрим три различных варианта решения поставленной задачи.
{Программирование циклов с использованием оператора WHILE}
{Студенты гр. ..... Фамилии …}
Uses crt; {Подключение стандартного модуля TP}
Var x,y,H,A,B: real;
BEGIN Clrscr; { Очистка экрана}
Writeln(' Введите A B H'); read(A,B,H);
x:=A;
While x<=B Do
Begin
if (6*x*x-x*x*x)<=0 then
Writeln('При x= ',x:5:3,' под знаком логарифма недопустимое значение')
Else begin
y:= Exp (1.0/3.0* Ln(Abs(6*x*x-x*x*x)));
Writeln('x=',x:8:3,' y=',y:8:3);
end; {Конец else}
x:=x+H;
Еnd; {Конец while} Readkey; { Ожидание нажатия любой клавиши}
END.
{Программирование циклов с использованием конструкции REPEAT…UNTIL}
{Студенты гр. ... Фамилии ...}
Uses crt; {Подключение стандартного модуля TP}
Var x,y,A,B,H: real;
BEGIN Clrscr; { Очистка экрана}
Writeln(' Введите A B H'); readln(A,B,H);
x:=A;
Repeat
if (6*x*x-x*x*x)=<0 then
Writeln('При x= ',x:5:3, ' под знаком логарифма недопустимое значение')
Else begin
y:= Exp(1.0/3.0* Ln(Abs(6*x*x-x*x*x)));
Writeln(' x= ',x:8:3,' y= ',y:8:3);
end;
x:=x+H;
Until x>B; Readkey;{Ожидание нажатия любой клавиши}
END.
{Программирование циклов с использованием оператора FOR}
{Студенты гр. ....}
Uses crt;
Var x,y,A,B,H:real;
n,i: integer;
BEGIN Clrscr;
Writeln(' Введите A B H'); read(A,B,H);
n:= Round((B-A)/H)+1;
x:=A;
For i:=1 To n Do
begin
if (6*x*x-x*x*x)<=0 then
Writeln('При x= ',x:5:3,' под знаком логарифма недопустимое значение')
else
begin
y:= Exp(1.0/3.0*Ln(Abs(6*x*x-x*x*x)));
Writeln(' x= ',x:8:3,' y= ',y:8:3);
end;
x:=x+H;
end; { Конец For}
END.
Варианты самостоятельных заданий
Задание №1
Вычислить значение выражения при n равном от 1 до 10.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Задание №2
Составить программу для вычисления значений функции F (х) на отрезке [а, Ь] с шагом h. Результат представить в виде таблицы, первый столбец которой — значения аргумента, второй — соответствующие значения функции.
1. F(x)=
2. F(x)=x-sin x
3. F(x)=2cosx-1
4. F(x)=tgx
5. F(x)=ctg x+1
6. F(x)=sinx-cosx
7. F(x)=x sinx
8. F(x)=x-sin x
9. F(x)=
10. F(x)=cosx+2х
11. F(x)=2х2+10х
12. F(x)=ctg x+1
13. F(x)=sinx-cosx
14. F(x)=x2 +sinx
15. F(x)=5x-sin x
16. F(x)=
17. F(x)=2ctgx-1
18. F(x)=2x2+4x+3
19. F(x)= x+1
20. F(x)=x2-2
Задание № 3
1. Последовательно вводится N целых чисел. Найдите сумму всех введенных положительных чисел.
2. Выведите на экран список квадратов чисел от 1 до 20 (1, 4, 9, 16, …).
3. Выведите на экран в три столбца список чисел от 1 до N, их квадратов и кубов. Число N вводите с клавиатуры. Например, для N=5 на экране должно быть:
1 | 1 | 1 |
2 | 4 | 8 |
3 | 9 | 27 |
4 | 16 | 64 |
5 | 25 | 125 |
4. Напишите программу вычисления выражения (3-х)(6-х)(9-х)…(21-х), где х-действительное число.
5. Определите среднюю зарплату сотрудника фирмы за год, если известна его зарплата за каждый месяц.
6. Последовательно вводится N целых чисел. Найдите минимальное и и максимальное из введенных чисел.
7. Последовательно вводится N целых чисел. Найдите сумму всех введенных положительных чисел.
8. Выведите на экран список квадратов чисел от 1 до 20 (1, 4, 9, 16, …).
9. Вычислите сумму S и произведение P всех целых чисел от N1 до N2. Пример: для N1=3, N2=7 получим S=25, P=2520.
10. Напишите программу вычисления выражения (3-х)(6-х)(9-х)…(21-х), где х-действительное число.
11. Определите среднюю зарплату сотрудника фирмы за год, если известна его зарплата за каждый месяц.
12. Последовательно вводится N целых чисел. Найдите минимальное и и максимальное из введенных чисел.
13. Последовательно вводится N целых чисел. Найдите сумму всех введенных положительных чисел.
14. Последовательно вводится N целых чисел. Найдите сумму всех введенных положительных чисел.
15. Дана последовательность чисел, состоящих только из цифр 0 и 5, в порядке возрастания: 0 5 50 55 500 505 5000 5005 5050 и так далее. Найти k-ое по порядку в этой последовательности число.
16. Для каждого натурального числа в промежутке от m до n вывести все делители, кроме единицы и самого числа. m и n вводятся с клавиатуры
17. Написать программу, в которой вводятся два операнда Х и Y и знак операции (+, –, /, *). Вычислить результат Z в зависимости от знака. Предусмотреть реакции на возможный неверный знак операции, а также на ввод Y=0 при делении. Организовать возможность многократных вычислений без перезагрузки программа (т.е. построить цикл). В качестве символа прекращения вычислений принять ‘0’
18. Написать программу, подсчитывающую количество четных и нечетных цифр в числе.
19. Вводится число. Преобразовать его в другое число, цифры которого будут следовать в обратном порядке по сравнению с введенным числом.
20. Ввести число. Если количество его разрядов меньше пяти, то вывести его на экран, дописав нули перед числом так, чтобы в итоге получилось пять знаков. Если количество разрядов больше пяти, то вывести только первые пять разрядов. Если число пятизначное, то вывести его как есть.
Контрольные вопросы:
1. Какой вычислительный процесс называется циклическим?
2. Сколько раз выполняется цикл с предусловием?
3. Объясните порядок выполнения цикла с предусловием
4. Что представляет собой тело цикла оператора цикла с постусловием?
5. Как осуществляется выход из цикла с постусловием?
6. Объясните порядок выполнения цикла с постусловием
7. Сколько раз выполняется цикл с параметром?
8. Сколько существуют вариантов цикла с параметром?
9. Объясните порядок выполнения цикла с параметром
10. Объясните назначение и применение процедур Break и Continue
Задание №1
Во всех заданиях данной группы предполагается, что исходный набор содержит ненулевое число элементов (в частности, число N всегда больше нуля). В заданиях на обработку нескольких наборов чисел количество наборов K также всегда является ненулевым.
1. Даны десять вещественных чисел. Найти их сумму.
2. Даны десять вещественных чисел. Найти их произведение.
3. Даны десять вещественных чисел. Найти их среднее арифметическое.
4. Дано целое число N и набор из N вещественных чисел. Вывести сумму и произведение чисел из данного набора.
5. Дано целое число N и набор из N положительных вещественных чисел. Вывести в том же порядке целые части всех чисел из данного набора (как вещественные числа с нулевой дробной частью), а также сумму всех целых частей.
6. Дано целое число N и набор из N положительных вещественных чисел. Вывести в том же порядке дробные части всех чисел из данно- го набора (как вещественные числа с нулевой целой частью), а также произведение всех дробных частей.
7. Дано целое число N и набор из N вещественных чисел. Вывести в том же порядке округленные значения всех чисел из данного набора (как целые числа), а также сумму всех округленных значений.
8. Дано целое число N и набор из N целых чисел. Вывести в том же порядке все четные числа из данного набора и количество K таких чисел.
9. Дано целое число N и набор из N целых чисел. Вывести в том же порядке номера всех нечетных чисел из данного набора и количество K таких чисел.
10. Дано целое число N и набор из N целых чисел. Если в наборе имеются положительные числа, то вывести TRUE; в противном случае вывести FALSE.
11. Даны целые числа K, N и набор из N целых чисел. Если в наборе имеются числа, меньшие K, то вывести TRUE; в противном случае вывести FALSE.
12. Дан набор ненулевых целых чисел; признак его завершения — число 0. Вывести количество чисел в наборе.
13. Дан набор ненулевых целых чисел; признак его завершения — число 0. Вывести сумму всех положительных четных чисел из данного набо- ра. Если требуемые числа в наборе отсутствуют, то вывести 0.
14. Дано целое число K и набор ненулевых целых чисел; признак его завершения — число 0. Вывести количество чисел в наборе, меньших K. Последовательности 29
15. Дано целое число K и набор ненулевых целых чисел; признак его завершения — число 0. Вывести номер первого числа в наборе, больше- го K. Если таких чисел нет, то вывести 0.
16. Дано целое число K и набор ненулевых целых чисел; признак его завершения — число 0. Вывести номер последнего числа в наборе, большего K. Если таких чисел нет, то вывести 0.
17. Дано вещественное число B, целое число N и набор из N ве- щественных чисел, упорядоченных по возрастанию. Вывести элементы набора вместе с числом B, сохраняя упорядоченность выводимых чисел.
18. Дано целое число N и набор из N целых чисел, упорядоченный по возрастанию. Данный набор может содержать одинаковые элементы. Вывести в том же порядке все различные элементы данного набора.
19. Дано целое число N (> 1) и набор из N целых чисел. Вывести те элементы в наборе, которые меньше своего левого соседа, и количество K таких элементов.
20. Дано целое число N (> 1) и набор из N целых чисел. Вывести те элементы в наборе, которые меньше своего правого соседа, и количество K таких элементов.
Задание №2
1. Даны целые числа K, N и набор из N вещественных чисел: A1, A2, . . ., AN . Вывести K-e степени чисел из данного набора: (A1) K, (A2) K, . . ., (AN ) K.
2. Дано целое число N и набор из N вещественных чисел: A1, A2, . . ., AN . Вывести следующие числа: A1, (A2) 2 , . . ., (AN−1) N−1 , (AN ) N .
3. Дано целое число N и набор из N вещественных чисел: A1, A2, . . ., AN . Вывести следующие числа: (A1) N , (A2) N−1 , . . ., (AN−1) 2 , AN .
4. Даны целые числа K, N, а также K наборов целых чисел по N элементов в каждом наборе. Вывести общую сумму всех элементов, входящих в данные наборы.
5. Даны целые числа K, N, а также K наборов целых чисел по N элементов в каждом наборе. Для каждого набора вывести сумму его элементов.
6. Даны целые числа K, N, а также K наборов целых чисел по N элементов в каждом наборе. Найти количество наборов, содержащих число 2. Если таких наборов нет, то вывести 0.
7. Даны целые числа K, N, а также K наборов целых чисел по N элементов в каждом наборе. Для каждого набора вывести номер его первого элемента, равного 2, или число 0, если в данном наборе нет двоек.
8. Даны целые числа K, N, а также K наборов целых чисел по N элементов в каждом наборе. Для каждого набора вывести номер его последнего элемента, равного 2, или число 0, если в данном наборе нет двоек.
9. Даны целые числа K, N, а также K наборов целых чисел по N элементов в каждом наборе. Для каждого набора выполнить следующее действие: если в наборе содержится число 2, то вывести сумму его элементов; если в наборе нет двоек, то вывести 0.
10. Дано целое число K, а также K наборов ненулевых целых чисел. Признаком завершения каждого набора является число 0. Для каждого набора вывести количество его элементов. Вывести также общее количество элементов во всех наборах.
11. Дано целое число K, а также K наборов ненулевых целых чисел. Каждый набор содержит не менее двух элементов, признаком его завершения является число 0. Найти количество наборов, элементы которых возрастают.
12. Дано целое число K, а также K наборов ненулевых целых чисел. Каждый набор содержит не менее двух элементов, признаком его завершения является число 0. Найти количество наборов, элементы которых возрастают или убывают.
13. Дано целое число K, а также K наборов ненулевых целых чисел. Каждый набор содержит не менее двух элементов, признаком его завершения является число 0. Для каждого набора выполнить следующее действие: если элементы набора возрастают, то вывести 1; если элементы набора убывают, то вывести −1; если элементы набора не возрастают и не убывают, то вывести 0.
14. Дано целое число K, а также K наборов ненулевых целых чисел. Каждый набор содержит не менее трех элементов, признаком его завершения является число 0. Найти количество пилообразных наборов (Набор называется пилообразным, если каждый его внутренний элемент либо больше, либо меньше обоих своих соседей (то есть является «зубцом»).
15. Дано целое число K, а также K наборов ненулевых целых чисел. Каждый набор содержит не менее трех элементов, признаком его завершения является число 0. Для каждого набора выполнить следующее действие: если набор является пилообразным (Набор называется пилообразным, если каждый его внутренний элемент либо больше, либо меньше обоих своих соседей (то есть является «зубцом»), то вывести количество его элементов; в противном случае вывести номер первого элемента, который не является зубцом.
16. Даны натуральные числа n и k. Составить программу вычисления выражения 1k + 2k +...+ nk.
17. Даны натуральные числа n и k. Составить программу вычисления выражения 11 + 22 +...+ nn.
18. Дано натуральное число n. Можно его представить в виде суммы трёх квадратов натуральных чисел? Если можно, то:
a. указать тройку x, y, z, таких натуральных чисел, что x2 + y2 + z2 = n;
b. указать все тройки x, y, z таких натуральных чисел, что x2 + y2 + z2 = n.
19. Найти натуральное число от 1 до 10000 с максимальной суммой делителей.
20. Даны натуральные числа a, b (a<b). Получить все простые числа p, удовлетворяющие неравенствам: a<=p<=b.
Контрольные вопросы:
1. Какой вычислительный процесс называется циклическим?
2. Чем отличается цикл с предусловием от цикла с параметром?
3. Что такое тело цикла?
4. Опишите схему цикла с параметром?
5. Как осуществляется выход из цикла с предусловием?
6. Какой тип данных может иметь параметр в цикле с параметром?
Задание №1
1. Описать процедуру PowerA3(A, B), вычисляющую третью степень числа A и возвращающую ее в переменной B (A — входной, B — выходной параметр; оба параметра являются вещественными). С помощью этой процедуры найти третьи степени пяти данных чисел.
2. Описать процедуру PowerA234(A, B, C, D), вычисляющую вторую, третью и четвертую степень числа A и возвращающую эти степени соответственно в переменных B, C и D (A — входной, B, C, D — выходные параметры; все параметры являются вещественными). С помощью этой процедуры найти вторую, третью и четвертую степень пяти данных чисел.
3. Описать процедуру Mean(X, Y, AMean, GMean), вычисляющую среднее арифметическое AMean = (X+Y)/2 и среднее геометрическое GMean = √ X·Y двух положительных чисел X и Y (X и Y — входные, AMean и GMean — выходные параметры вещественного типа). С помощью этой процедуры найти среднее арифметическое и среднее геометрическое для пар (A, B), (A, C), (A, D), если даны A, B, C, D.
4. Описать процедуру TrianglePS(a, P, S), вычисляющую по стороне a равностороннего треугольника его периметр P = 3·a и площадь S = a 2 · √ 3/4 (a — входной, P и S — выходные параметры; все параметры являются вещественными). С помощью этой процедуры найти периметры и площади трех равносторонних треугольников с данными сторонами.
5. Описать процедуру RectPS(x1, y1, x2, y2, P, S), вычисляющую периметр P и площадь S прямоугольника со сторонами, параллельными осям координат, по координатам (x1, y1), (x2, y2) его противоположных вершин (x1, y1, x2, y2 — входные, P и S — выходные параметры вещественного ти- па). С помощью этой процедуры найти периметры и площади трех прямоугольников с данными противоположными вершинами.
6. Описать процедуру DigitCountSum(K, C, S), находящую количество C цифр целого положительного числа K, а также их сумму S (K — входной, C и S — выходные параметры целого типа). С помощью этой процедуры найти количество и сумму цифр для каждого из пяти данных целых чисел.
7. Описать процедуру InvertDigits(K), меняющую порядок следования цифр целого положительного числа K на обратный (K — параметр целого типа, являющийся одновременно входным и выходным). С помощью этой процедуры поменять порядок следования цифр на обратный для каждого из пяти данных целых чисел.
8. Описать процедуру AddRightDigit(D, K), добавляющую к целому положительному числу K справа цифру D (D — входной параметр целого типа, лежащий в диапазоне 0–9, K — параметр целого типа, являющийся одновременно входным и выходным). С помощью этой процедуры последовательно добавить к данному числу K справа данные цифры D1 и D2, выводя результат каждого добавления.
9. Описать процедуру AddLeftDigit(D, K), добавляющую к целому положительному числу K слева цифру D (D — входной параметр целого типа, лежащий в диапазоне 1–9, K — параметр целого типа, являющийся одновременно входным и выходным). С помощью этой процедуры последовательно добавить к данному числу K слева данные цифры D1 и D2, выводя результат каждого добавления.
10. Описать процедуру Swap(X, Y), меняющую содержимое перемен- ных X и Y (X и Y — вещественные параметры, являющиеся одновременно входными и выходными). С ее помощью для данных переменных A, B, C, D последовательно поменять содержимое следующих пар: A и B, C и D, B и C и вывести новые значения A, B, C, D.
11. Описать процедуру Minmax(X, Y), записывающую в переменную X минимальное из значений X и Y, а в переменную Y — максимальное из этих значений (X и Y — вещественные параметры, являющиеся одновременно входными и выходными). Используя четыре вызова этой процедуры, найти минимальное и максимальное из данных чисел A, B, C, D.
12. Описать процедуру SortInc3(A, B, C), меняющую содержимое переменных A, B, C таким образом, чтобы их значения оказались упорядоченными по возрастанию (A, B, C — вещественные параметры, являющиеся одновременно входными и выходными). С помощью этой процедуры упорядочить по возрастанию два данных набора из трех чисел: (A1, B1, C1) и (A2, B2, C2).
13. Описать процедуру SortDec3(A, B, C), меняющую содержимое переменных A, B, C таким образом, чтобы их значения оказались упорядоченными по убыванию (A, B, C — вещественные параметры, являющиеся одновременно входными и выходными). С помощью этой процедуры упорядочить по убыванию два данных набора из трех чисел: (A1, B1, C1) и (A2, B2, C2).
14. Описать процедуру ShiftRight3(A, B, C), выполняющую правый цик- лический сдвиг: значение A переходит в B, значение B — в C, значение C — в A (A, B, C — вещественные параметры, являющиеся одновременно входными и выходными). С помощью этой процедуры выполнить правый циклический сдвиг для двух данных наборов из трех чисел: (A1, B1, C1) и (A2, B2, C2).
15. Описать процедуру ShiftLeft3(A, B, C), выполняющую левый цикли- ческий сдвиг: значение A переходит в C, значение C — в B, значение B — в A (A, B, C — вещественные параметры, являющиеся одновременно входными и выходными). С помощью этой процедуры выполнить левый циклический сдвиг для двух данных наборов из трех чисел: (A1, B1, C1) и (A2, B2, C2).
16. Описать процедуру AddRight(D, K), добавляющую к целому положительному числу K справа цифру D (D — входной параметр целого типа, лежащий в диапазоне 0–9, K — параметр целого типа, являющийся одновременно входным и выходным). С помощью этой процедуры последовательно добавить к данному числу K справа данные цифры D1, выводя результат каждого добавления.
17. Описать процедуру AddLeft (D, K), добавляющую к целому положительному числу K слева цифру D (D — входной параметр целого типа, лежащий в диапазоне 1–9, K — параметр целого типа, являющийся одновременно входным и выходным). С помощью этой процедуры последовательно добавить к данному числу K слева данные цифры D1, выводя результат каждого добавления.
18. Описать процедуру Swap(X, Y), меняющую содержимое переменных X и Y (X и Y — вещественные параметры, являющиеся одновременно входными и выходными). С ее помощью для данных переменных A, B, C, D последовательно поменять содержимое следующих пар: A и D, C и B, B и C и вывести новые значения A, B, C, D.
19. Описать процедуру Minmax(X, Y), записывающую в переменную X минимальное из значений X и Y, а в переменную Y — максимальное из этих значений (X и Y — вещественные параметры, являющиеся одновременно входными и выходными). Используя четыре вызова этой процедуры, найти минимальное и максимальное из данных чисел A, B, C, D.
20. Описать процедуру SortInc3(A, B, C), меняющую содержимое переменных A, B, C таким образом, чтобы их значения оказались упорядоченными по убыванию (A, B, C — вещественные параметры, являющиеся одновременно входными и выходными). С помощью этой процедуры упорядочить по убыванию два данных набора из трех чисел: (A1, B1, C1) и (A2, B2, C2).
Задание №2
1. Описать функцию Sign(X) целого типа, возвращающую для вещественного числа X следующие значения: −1, если X < 0; 0, если X = 0; 1, если X > 0. С помощью этой функции найти значение выражения Sign(A) + Sign(B) для данных вещественных чисел A и B.
2. Описать функцию RootsCount(A, B, C) целого типа, определяющую количество корней квадратного уравнения A·x 2 + B·x + C = 0 (A, B, C — вещественные параметры, A 6= 0). С ее помощью найти количество корней для каждого из трех квадратных уравнений с данными коэффициентами. Количество корней определять по значению дискриминанта: D = B 2 − 4·A·C.
3. Описать функцию CircleS(R) вещественного типа, находящую площадь круга радиуса R (R — вещественное). С помощью этой функции найти площади трех кругов с данными радиусами. Площадь круга ради- уса R вычисляется по формуле S = π·R 2 . В качестве значения π использовать 3.14.
4. Описать функцию RingS(R1, R2) вещественного типа, находящую площадь кольца, заключенного между двумя окружностями с общим центром и радиусами R1 и R2 (R1 и R2 — вещественные, R1 > R2). С ее помощью найти площади трех колец, для которых даны внешние и внутренние радиусы. Воспользоваться формулой площади круга радиуса R: S = π·R 2 . В качестве значения π использовать 3.14.
5. Описать функцию TriangleP(a, h), находящую периметр равнобедренного треугольника по его основанию a и высоте h, проведенной к основанию (a и h — вещественные). С помощью этой функции найти периметры трех треугольников, для которых даны основания и высоты. Для нахождения боковой стороны b треугольника использовать теорему Пифагора: b 2 = (a/2)2 + h 2
6. Описать функцию SumRange(A, B) целого типа, находящую сумму всех целых чисел от A до B включительно (A и B — целые). Если A > B, то функция возвращает 0. С помощью этой функции найти суммы чисел от A до B и от B до C, если даны числа A, B, C.
7. Описать функцию Calc(A, B, Op) вещественного типа, выполняющую над ненулевыми вещественными числами A и B одну из арифметических операций и возвращающую ее результат. Вид операции определяется целым параметром Op: 1 — вычитание, 2 — умножение, 3 — деление, остальные значения — сложение. С помощью Calc выполнить для данных A и B операции, определяемые данными целыми N1, N2, N3
8. Описать функцию Quarter(x, y) целого типа, определяющую номер координатной четверти, в которой находится точка с ненулевыми вещественными координатами (x, y). С помощью этой функции найти номера координатных четвертей для трех точек с данными ненулевыми координатами.
9. Описать функцию Even(K) логического типа, возвращающую TRUE, если целый параметр K является четным, и FALSE в противном случае. С ее помощью найти количество четных чисел в наборе из 10 целых чисел.
10. Описать функцию IsSquare(K) логического типа, возвращающую TRUE, если целый параметр K (> 0) является квадратом некоторого целого числа, и FALSE в противном случае. С ее помощью найти количество квадратов в наборе из 10 целых положительных чисел
11. Описать функцию IsPower5(K) логического типа, возвращающую TRUE, если целый параметр K (> 0) является степенью числа 5, и FALSE в противном случае. С ее помощью найти количество степеней числа 5 в наборе из 10 целых положительных чисел.
12. Описать функцию IsPowerN(K, N) логического типа, возвращающую TRUE, если целый параметр K (> 0) является степенью числа N (> 1), и FALSE в противном случае. Дано число N (> 1) и набор из 10 целых положительных чисел. С помощью функции IsPowerN найти количество степеней числа N в данном наборе.
13. Описать функцию IsPrime(N) логического типа, возвращающую TRUE, если целый параметр N (> 1) является простым числом, и FALSE в противном случае (число, большее 1, называется простым, если оно не имеет положительных делителей, кроме 1 и самого себя). Дан набор из 10 целых чисел, больших 1. С помощью функции IsPrime найти количество простых чисел в данном наборе.
14. Описать функцию DigitCount(K) целого типа, находящую количество цифр целого положительного числа K. Используя эту функцию, найти количество цифр для каждого из пяти данных целых положительных чисел.
15. Описать функцию DigitN(K, N) целого типа, возвращающую N-ю цифру целого положительного числа K (цифры в числе нумеруются справа налево). Если количество цифр в числе K меньше N, то функция возвращает −1. Для каждого из пяти данных целых положительных чисел K1, K2, . . ., K5 вызвать функцию DigitN с параметром N, изменяющимся от 1 до 5.
16. Описать функцию IsPalindrom(K), возвращающую TRUE, если целый параметр K (> 0) является палиндромом (то есть его запись читается одинаково слева направо и справа налево), и FALSE в противном случае. С ее помощью найти количество палиндромов в наборе из 10 целых положительных чисел.
17. Описать функцию DegToRad(D) вещественного типа, находящую величину угла в радианах, если дана его величина D в градусах (D — вещественное число, 0 < D < 360). Воспользоваться следующим соотношением: 180◦ = π радианов. В качестве значения π использовать 3.14. С помощью функции DegToRad перевести из градусов в радианы пять данных углов.
18. Описать функцию RadToDeg(R) вещественного типа, находящую ве- личину угла в градусах, если дана его величина R в радианах (R — вещественное число, 0 < R < 2·π). Воспользоваться следующим соотношением: 180◦ = π радианов. В качестве значения π использовать 3.14. С помощью функции RadToDeg перевести из радианов в градусы пять данных углов.
19. Описать функцию Fact(N) вещественного типа, вычисляющую значение факториала N! = 1·2·. . .·N (N > 0 — параметр целого типа; вещественное возвращаемое значение используется для того, чтобы избежать целочисленного переполнения при больших значениях N). С помощью этой функции найти факториалы пяти данных целых чисел.
20. Описать функцию Fact2(N) вещественного типа, вычисляющую двойной факториал: N!! = 1·3·5·. . .·N, если N — нечетное; N!! = 2·4·6·. . .·N, если N — четное (N > 0 — параметр целого типа; вещественное возвращаемое значение используется для того, чтобы избежать целочисленного переполнения при больших значениях N). С помощью этой функции найти двойные факториалы пяти данных целых чисел.
Контрольные вопросы:
1. Что называется подпрограммой?
2. Что такое локальные или глобальные переменные?
3. Назовите основные отличия в описании процедур и функций
4. Как осуществляется вызов процедуры без параметров?
5. Каким образом происходит вызов функции в подпрограмме?
6. Что лучше процедура или функция?
Задание №1
1. Описать функцию Power1(A, B) вещественного типа, находящую величину A B по формуле A B = exp(B·ln(A)) (параметры A и B — вещественные). В случае нулевого или отрицательного параметра A функция возвращает 0. С помощью этой функции найти степени A P , B P , C P , если даны числа P, A, B, C.
2. Описать функцию Power2(A, N) вещественного типа, находящую величину A N (A — вещественный, N — целый параметр) по следующим формулам: A 0 = 1; A N = A·A·. . .·A (N сомножителей), если N > 0; A N = 1/(A·A·. . .·A) (|N| сомножителей), если N < 0. С помощью этой функции найти A K, A L , A M, если даны числа A, K, L, M.
3. Используя функции Power1 и Power2, описать функцию Power3(A, B) вещественного типа с вещественными параметрами, находящую A B следующим образом: если B имеет нулевую дробную часть, то вызывается функция Power2(A, Round(B)); в против- ном случае вызывается функция Power1(A, B). С помощью этой функции найти A P , B P , C P , если даны числа P, A, B, C.
4. Описать функцию Exp1(x, ε) вещественного типа (параметры x, ε — вещественные, ε > 0), находящую приближенное значение функции exp(x): exp(x) = 1 + x + x 2 /(2!) + x 3 /(3!) + . . . + x n /(n!) + . . . (n! = 1·2·. . .·n). В сумме учитывать все слагаемые, большие ε. С помощью Exp1 найти приближенное значение экспоненты для данного x при шести данных ε.
5. Описать функцию Sin1(x, ε) вещественного типа (параметры x, ε — вещественные, ε > 0), находящую приближенное значение функции sin(x): sin(x) = x − x 3 /(3!) + x 5 /(5!) − . . . + (−1)n ·x 2·n+1/((2·n+1)!) + . . . . В сумме учитывать все слагаемые, модуль которых больше ε. С помощью Sin1 найти приближенное значение синуса для данного x при шести данных ε.
6. Описать функцию Cos1(x, ε) вещественного типа (параметры x, ε — вещественные, ε > 0), находящую приближенное значение функции cos(x): cos(x) = 1 − x 2 /(2!) + x 4 /(4!) − . . . + (−1)n ·x 2·n /((2·n)!) + . . . . В сумме учитывать все слагаемые, модуль которых больше ε. С помощью Cos1 найти приближенное значение косинуса для данного x при шести данных ε.
7. Описать функцию Ln1(x, ε) вещественного типа (параметры x, ε — вещественные, |x| < 1, ε > 0), находящую приближенное значение функции ln(1 + x): ln(1 + x) = x − x 2 /2 + x 3 /3 − . . . + (−1)n ·x n+1/(n+1) + . . . . В сумме учитывать все слагаемые, модуль которых больше ε. С помощью Ln1 найти приближенное значение ln(1 + x) для данного x при шести данных ε.
8. Описать функцию Arctg1(x, ε) вещественного типа (параметры x, ε — вещественные, |x| < 1, ε > 0), находящую приближенное значение функции arctg(x): arctg(x) = x − x 3 /3 + x 5 /5 − . . . + (−1)n ·x 2·n+1/(2·n+1) + . . . . В сумме учитывать все слагаемые, модуль которых больше ε. С помощью Arctg1 найти приближенное значение arctg(x) для данного x при шести данных ε.
9. Описать функцию Power4(x, a, ε) вещественного типа (параметры x, a, ε — вещественные, |x| < 1; a, ε > 0), находящую приближенное значение функции (1 + x) a : (1 + x) a = 1 + a·x + a·(a−1)·x 2 /(2!) + . . . + a·(a−1)·. . .·(a−n+1)·x n /(n!) + . . . . В сумме учитывать все слагаемые, модуль которых больше ε. С помощью Power4 найти приближенное значение (1 + x) a для данных x и a при шести данных ε.
10. Описать функцию NOD2(A, B) целого типа, находящую наибольший общий делитель (НОД) двух целых положительных чисел A и B, используя алгоритм Евклида: НОД(A, B) = НОД(B, A mod B), если B 6= 0; НОД(A, 0) = A. С помощью этой функции найти наибольшие общие делители пар (A, B), Процедуры и функции 39 (A, C), (A, D), если даны числа A, B, C, D
11. Используя функцию NOD2 из задания Proc46, описать процедуру Frac1(a, b, p, q), преобразующую дробь a/b к несократимому виду p/q (все параметры процедуры — целого типа, a и b — входные, p и q — выходные). Знак результирующей дроби p/q приписывается числителю (т. е. q > 0). С помощью Frac1 найти несократимые дроби, равные a/b + c/d, a/b + e/f, a/b + g/h (числа a, b, c, d, e, f, g, h даны). Proc48. Учитывая, что наименьшее общее кратное двух целых положительных чисел A и B равно A·(B/НОД(A, B)), где НОД(A, B) — наибольший общий делитель A и B, и используя функцию NOD2, описать функцию NOK2(A, B) целого типа, находящую наименьшее общее кратное чисел A и B. С помощью NOK2 найти наименьшие общие кратные пар (A, B), (A,C), (A, D), если даны числа A, B, C, D
12. Учитывая соотношение НОД(A, B, C) = НОД(НОД(A, B), C) и используя функцию NOD2, описать функцию NOD3(A, B, C) целого типа, находящую наибольший общий делитель трех целых положительных чисел A, B, C. С помощью этой функции найти наибольшие общие делители троек (A, B, C), (A, C, D) и (B,C, D), если даны числа A, B, C, D.
13. Описать процедуру TimeToHMS(T, H, M, S), определяющую по времени T (в секундах) содержащееся в нем количество часов H, минут M и секунд S (T — входной, H, M и S — выходные параметры целого типа). Используя эту процедуру, найти количество часов, минут и секунд для пяти данных отрезков времени T1, T2, . . ., T5.
14. Описать процедуру IncTime(H, M, S, T), которая увеличивает на T секунд время, заданное в часах H, минутах M и секундах S (H, M и S — входные и выходные параметры, T — входной параметр; все параметры — целые положительные). Дано время (в часах H, минутах M, секундах S) и целое число T. Используя процедуру IncTime, увеличить данное время на T секунд и вывести новые значения H, M, S.
15. Описать функцию IsLeapYear(Y) логического типа, которая возвращает TRUE, если год Y (целое положительное число) является високосным, и FALSE в противном случае. Вывести значение функции IsLeapYear для пяти данных значений параметра Y. Високосным считается год, делящийся на 4, за исключением тех годов, которые делятся на 100 и не делятся на 400.
16. Используя функцию IsLeapYear, описать функцию MonthDays(M, Y) целого типа, которая возвращает количество дней для M-го месяца года Y (1 ≤ M ≤ 12, Y > 0 — целые числа). Вывести значение функции MonthDays для данного года Y и месяцев M1, M2, M3. Proc54. Используя функцию MonthDays, описать процедуру PrevDate(D, M, Y), которая по информации о правильной дате, включающей день D, номер месяца M и год Y, определяет предыдущую дату (параметры целого типа D, M, Y являются одновременно входными и выходными). Применить процедуру PrevDate к трем исходным датам и вывести полученные значения предыдущих дат.
17. Используя функцию MonthDays, описать процедуру NextDate(D, M, Y), которая по информации о правильной дате, включающей день D, номер месяца M и год Y, определяет следующую дату (параметры целого типа D, M, Y являются одновременно входными и выходными). Применить процедуру NextDate к трем исходным датам и вывести полученные значения следующих дат.
18. Описать функцию Leng(xA, yA, xB, yB) вещественного типа, находящую длину отрезка AB на плоскости по координатам его концов: |AB| = q (xA − xB) 2 + (yA − yB) 2 (xA, yA, xB, yB — вещественные параметры). С помощью этой функции найти длины отрезков AB, AC, AD, если даны координаты точек A, B, C, D.
19. Используя функцию Leng, описать функцию Perim(xA, yA, xB, yB, xC, yC) вещественного типа, находящую периметр треугольника ABC по координатам его вершин (xA, yA, xB, yB, xC, yC — вещественные параметры). С помощью этой функции найти периметры треугольников ABC, ABD, ACD, если даны координаты точек A, B, C, D.
20. Используя функции Leng и Perim, описать функцию Area(xA, yA, xB, yB, xC, yC) вещественного типа, находящую площадь треугольника ABC по формуле SABC = √ p·(p−|AB|)·(p−|AC|)·(p−|BC|), где p — полупериметр. С помощью этой функции найти площади треугольников ABC, ABD, ACD, если даны координаты точек A, B, C, D.
Задание №2
Для решения заданий из данной группы следует использовать «однопроходные» алгоритмы, позволяющие получить требуемый результат после однократного просмотра набора исходных данных. Однопроходные алгоритмы обладают важным преимуществом: для них не требуется хранить в памяти одновременно весь набор данных, поэтому при программной реализации этих алгоритмов можно не использовать массивы. Во всех заданиях данной группы предполагается, что исходный набор содержит ненулевое количество элементов (в частности, число N всегда больше нуля).
1. Дано целое число N и набор из N чисел. Найти минимальный и максимальный из элементов данного набора и вывести их в указанном порядке.
2. Дано целое число N и набор из N прямоугольников, заданных своими сторонами — парами чисел (a, b). Найти минимальную площадь прямоугольника из данного набора.
3. Дано целое число N и набор из N прямоугольников, заданных своими сторонами — парами чисел (a, b). Найти максимальный периметр прямоугольника из данного набора.
4. Дано целое число N и набор из N чисел. Найти номер минимального элемента из данного набора.
5. Дано целое число N и набор из N пар чисел (m, v) — данные о массе m и объеме v деталей, изготовленных из различных материалов. Вывести номер детали, изготовленной из материала максимальной плотности, а также величину этой максимальной плотности. Плотность P вычисляется по формуле P = m/v.
6. Дано целое число N и набор из N целых чисел. Найти номера первого минимального и последнего максимального элемента из данного набора и вывести их в указанном порядке.
7. Дано целое число N и набор из N целых чисел. Найти номера первого максимального и последнего минимального элемента из данного набора и вывести их в указанном порядке.
8. Дано целое число N и набор из N целых чисел. Найти номера первого и последнего минимального элемента из данного набора и вывести их в указанном порядке.
9. Дано целое число N и набор из N целых чисел. Найти номера первого и последнего максимального элемента из данного набора и вывести их в указанном порядке.
10. Дано целое число N и набор из N целых чисел. Найти номер первого экстремального (то есть минимального или максимального) элемента из данного набора.
11. Дано целое число N и набор из N целых чисел. Найти номер последнего экстремального (то есть минимального или максимального) элемента из данного набора.
12. Дано целое число N и набор из N чисел. Найти минимальное положительное число из данного набора. Если положительные числа в наборе отсутствуют, то вывести 0.
13. Дано целое число N и набор из N целых чисел. Найти номер первого максимального нечетного числа из данного набора. Если нечетные числа в наборе отсутствуют, то вывести 0.
14. Дано число B (> 0) и набор из десяти чисел. Вывести минимальный из тех элементов набора, которые больше B, а также его номер. Если чисел, больших B, в наборе нет, то дважды вывести 0.
15. Даны числа B, C (0 < B < C) и набор из десяти чисел. Вывести максимальный из элементов набора, содержащихся в интервале (B,C), и его номер. Если требуемые числа в наборе отсутствуют, то дважды вывести 0
16. Дано целое число N и набор из N целых чисел. Найти количество элементов, расположенных перед первым минимальным элементом.
17. Дано целое число N и набор из N целых чисел. Найти количество элементов, расположенных после последнего максимального элемента.
18. Дано целое число N и набор из N целых чисел. Найти количество элементов, содержащихся между первым и последним максимальным эле- ментом. Если в наборе имеется единственный максимальный элемент, то вывести 0.
19. Дано целое число N и набор из N целых чисел. Найти количество минимальных элементов из данного набора.
20. Дано целое число N и набор из N целых чисел. Найти общее количество экстремальных (то есть минимальных и максимальных) элементов из данного набора.
Контрольные вопросы:
1. В каких случаях целесообразно применять процедуры без параметров?
2. Какие преимущества предоставляют подпрограммы с параметрами?
3. В чем заключается разница между формальными и фактическими параметрами?
4. Каковы правила передачи параметров – значений?
5. Каковы правила передачи параметров – переменных?
6. Можно ли применять в одной подпрограмме несколько параметров – переменных различных типов?
Задание №1
1. Дан массив A ненулевых целых чисел размера 10. Вывести значение первого из тех его элементов AK, которые удовлетворяют неравенству AK < A10. Если таких элементов нет, то вывести 0.
2. Дан целочисленный массив A размера 10. Вывести порядковый номер последнего из тех его элементов AK, которые удовлетворяют двойному неравенству A1 < AK < A10. Если таких элементов нет, то вывести 0.
3. Дан массив размера N и целые числа K и L (1 ≤ K ≤ L ≤ N). Найти сумму элементов массива с номерами от K до L включительно
4. Дан массив размера N и целые числа K и L (1 ≤ K ≤ L ≤ N). Найти среднее арифметическое элементов массива с номерами от K до L включительно.
5. Дан массив размера N и целые числа K и L (1 < K ≤ L ≤ N). Найти сумму всех элементов массива, кроме элементов с номерами от K до L включительно.
6. Дан массив размера N и целые числа K и L (1 < K ≤ L ≤ N). Найти среднее арифметическое всех элементов массива, кроме элементов с номерами от K до L включительно.
7. Дан целочисленный массив размера N, не содержащий одинаковых чисел. Проверить, образуют ли его элементы арифметическую прогрессию. Если образуют, то вывести разность прогрессии, если нет — вывести 0. Array25. Дан массив ненулевых целых чисел размера N. Проверить, образуют ли его элементы геометрическую прогрессию. Если образуют, то вывести знаменатель прогрессии, если нет — вывести 0.
8. Дан целочисленный массив размера N. Проверить, чередуются ли в нем четные и нечетные числа. Если чередуются, то вывести 0, если нет, то вывести порядковый номер первого элемента, нарушающего закономерность.
9. Дан массив ненулевых целых чисел размера N. Проверить, чередуются ли в нем положительные и отрицательные числа. Если чередуются, то вывести 0, если нет, то вывести порядковый номер первого элемента, нарушающего закономерность.
10. Дан массив A размера N. Найти минимальный элемент из его эле- ментов с четными номерами: A2, A4, A6, . . . .
11. Дан массив A размера N. Найти максимальный элемент из его эле- ментов с нечетными номерами: A1, A3, A5, . . . .
12. Дан массив размера N. Найти номера тех элементов массива, которые больше своего правого соседа, и количество таких элементов. Найденные номера выводить в порядке их возрастания.
13. Дан массив размера N. Найти номера тех элементов массива, которые больше своего левого соседа, и количество таких элементов. Найденные номера выводить в порядке их убывания.
14. Дан массив размера N. Найти номер его первого локального минимума (локальный минимум — это элемент, который меньше любого из своих соседей).
15. Дан массив размера N. Найти номер его последнего локального максимума (локальный максимум — это элемент, который больше любого из своих соседей).
16. Дан массив размера N. Найти максимальный из его локальных минимумов (определение локального минимума дано в задании выше).
17. Дан массив размера N. Найти минимальный из его локальных максимумов (определение локального максимума дано в задании выше).
18. Дан массив размера N. Найти максимальный из его элементов, не являющихся ни локальным минимумом, ни локальным максимумом (определения локального минимума и локального максимума даны в заданиях выше). Если таких элементов в массиве нет, то вывести 0.
19. Дан массив размера N. Найти количество участков, на которых его элементы монотонно возрастают.
20. Дан массив размера N. Найти количество участков, на которых его элементы монотонно убывают.
Задание №2
1. Дана матрица размера M × N и целое число K (1 ≤ K ≤ M). Найти сумму и произведение элементов K-й строки данной матрицы.
2. Дана матрица размера M × N и целое число K (1 ≤ K ≤ N). Найти сумму и произведение элементов K-го столбца данной матрицы.
3. Дана матрица размера M × N. Для каждой строки матрицы найти сумму ее элементов.
4. Дана матрица размера M × N. Для каждого столбца матрицы найти произведение его элементов.
5. Дана матрица размера M × N. Для каждой строки матрицы с нечетным номером (1, 3, . . .) найти среднее арифметическое ее элементов. Условный оператор не использовать.
6. Дана матрица размера M × N. Для каждого столбца матрицы с четным номером (2, 4, . . .) найти сумму его элементов. Условный оператор не использовать.
7. Дана матрица размера M × N. В каждой строке матрицы найти минимальный элемент.
8. Дана матрица размера M × N. В каждом столбце матрицы найти максимальный элемент.
9. Дана матрица размера M × N. Найти номер ее строки с наибольшей суммой элементов и вывести данный номер, а также значение наибольшей суммы.
10. Дана матрица размера M × N. Найти номер ее столбца с наименьшим произведением элементов и вывести данный номер, а также значение наименьшего произведения.
11. Дана матрица размера M × N. Найти максимальный среди минимальных элементов ее строк.
12. Дана матрица размера M × N. Найти минимальный среди максимальных элементов ее столбцов.
13. Дана матрица размера M × N. В каждой ее строке найти количество элементов, меньших среднего арифметического всех элементов этой строки.
14. Дана матрица размера M × N. В каждом ее столбце найти количество элементов, больших среднего арифметического всех элементов этого столбца.
15. Дана матрица размера M × N. Найти номера строки и столбца для элемента матрицы, наиболее близкого к среднему значению всех ее элементов.
16. Дана целочисленная матрица размера M × N. Найти номер первой из ее строк, содержащих равное количество положительных и отрицательных элементов (нулевые элементы матрицы не учитываются). Если таких строк нет, то вывести 0.
17. Дана целочисленная матрица размера M × N. Найти номер последнего из ее столбцов, содержащих равное количество положительных и отрицательных элементов (нулевые элементы матрицы не учитываются). Если таких столбцов нет, то вывести 0.
18. Дана целочисленная матрица размера M × N. Найти номер последней из ее строк, содержащих только четные числа. Если таких строк нет, то вывести 0.
19. Дана целочисленная матрица размера M × N. Найти номер первого из ее столбцов, содержащих только нечетные числа. Если таких столбцов нет, то вывести 0.
20. Дана целочисленная матрица размера M × N, элементы которой могут принимать значения от 0 до 100. Различные строки матрицы назовем похожими, если совпадают множества чисел, встречающихся в этих строках. Найти количество строк, похожих на первую строку данной матрицы.
Задание №3
1. Даны массивы A и B одинакового размера N. Поменять местами их содержимое и вывести вначале элементы преобразованного массива A, а затем — элементы преобразованного массива B.
2. Дан массив A размера N. Сформировать новый массив B того же размера, элементы которого определяются следующим образом: BK = 2·AK, если AK < 5, AK/2 в противном случае.
3. Даны два массива A и B одинакового размера N. Сформировать новый массив C того же размера, каждый элемент которого равен максимальному из элементов массивов A и B с тем же индексом.
4. Дан целочисленный массив A размера N. Переписать в новый целочисленный массив B все четные числа из исходного массива (в том же порядке) и вывести размер полученного массива B и его содержимое.
5. Дан целочисленный массив A размера N (≤ 15). Переписать в новый целочисленный массив B все элементы с нечетными порядковыми номерами (1, 3, . . .) и вывести размер полученного массива B и его содержимое. Условный оператор не использовать.
6. Дан целочисленный массив A размера N (≤ 15). Переписать в новый целочисленный массив B все элементы с порядковыми номерами, кратными трем (3, 6, . . .), и вывести размер полученного массива B и его содержимое. Условный оператор не использовать.
7. Дан целочисленный массив A размера N. Переписать в новый целочисленный массив B того же размера вначале все элементы исходного массива с четными номерами, а затем — с нечетными: A2, A4, A6, . . ., A1, A3, A5, . . . . Условный оператор не использовать.
8. Дан массив A размера N. Сформировать новый массив B того же размера по следующему правилу: элемент BK равен сумме элементов массива A с номерами от 1 до K.
9. Дан массив A размера N. Сформировать новый массив B того же размера по следующему правилу: элемент BK равен среднему арифметическому элементов массива A с номерами от 1 до K.
10. Дан массив A размера N и целое число K (1 ≤ K ≤ N). Преобразовать массив, увеличив каждый его элемент на исходное значение элемента AK.
11. Дан целочисленный массив размера N. Увеличить все четные числа, содержащиеся в массиве, на исходное значение первого четного числа. Если четные числа в массиве отсутствуют, то оставить массив без изменений. Array67. Дан целочисленный массив размера N. Увеличить все нечетные чис- ла, содержащиеся в массиве, на исходное значение последнего нечетного числа. Если нечетные числа в массиве отсутствуют, то оставить массив без изменений.
12. Дан массив размера N. Поменять местами его минимальный и максимальный элементы
13. Дан массив размера N (N — четное число). Поменять местами его первый элемент со вторым, третий — с четвертым и т. д.
14. Дан массив размера N (N — четное число). Поменять местами первую и вторую половины массива.
15. Дан массив размера N. Поменять порядок его элементов на обратный.
16. Дан массив A размера N и целые числа K и L (1 ≤ K < L ≤ N). Переставить в обратном порядке элементы массива, расположенные между элементами AK и AL, включая эти элементы
17. Дан массив A размера N и целые числа K и L (1 ≤ K < L ≤ N). Переставить в обратном порядке элементы массива, расположенные между элементами AK и AL, не включая эти элементы.
18. Дан массив размера N и целое число K (1 ≤ K ≤ N). Удалить из массива элемент с порядковым номером K.
19. Дан массив размера N и целые числа K и L (1 ≤ K < L ≤ N). Удалить из массива элементы с номерами от K до L включительно и вывести размер полученного массива и его содержимое.
20. Дан целочисленный массив размера N. Удалить из массива все нечетные числа и вывести размер полученного массива и его содержимое.
Контрольные вопросы:
1. Какие типы данных вы знаете?
2. Перечислите и приведите примеры простых типов данных?
3. Перечислите сложные типы данных
4. Что такое массивы?
5. Что называют элементом массива?
6. Что называют индексом элемента массива?
7. Сколько элементов может содержать массив?
8. Сколько индексов может быть у одного элемента массива?
Задание №1
1. Дана матрица размера M × N и целые числа K1 и K2 (1 ≤ K1 < K2 ≤ M). Поменять местами строки матрицы с номерами K1 и K2
2. Дана матрица размера M × N и целые числа K1 и K2 (1 ≤ K1 < K2 ≤ N). Поменять местами столбцы матрицы с номерами K1 и K2
3. Дана матрица размера M × N. Преобразовать матрицу, поменяв местами минимальный и максимальный элемент в каждой строке.
4. Дана матрица размера M × N. Преобразовать матрицу, поменяв местами минимальный и максимальный элемент в каждом столбце.
5. Дана матрица размера M × N. Поменять местами строки, содержащие минимальный и максимальный элементы матрицы.
6. Дана матрица размера M × N. Поменять местами столбцы, содержащие минимальный и максимальный элементы матрицы.
7. Дана матрица размера M × N. Поменять местами столбец с номером 1 и последний из столбцов, содержащих только положительные элементы. Если требуемых столбцов нет, то вывести матрицу без изменений.
8. Дана матрица размера M × N. Поменять местами столбец с номером N и первый из столбцов, содержащих только отрицательные элементы. Если требуемых столбцов нет, то вывести матрицу без изменений.
9. Дана матрица размера M × N (M — четное число). Поменять местами верхнюю и нижнюю половины матрицы.
10. Дана матрица размера M × N (N — четное число). Поменять местами левую и правую половины матрицы.
11. Дана матрица размера M × N (M и N — четные числа). Поменять местами левую верхнюю и правую нижнюю четверти матрицы
12. Дана матрица размера M × N (M и N — четные числа). Поменять местами левую нижнюю и правую верхнюю четверти матрицы.
13. Дана матрица размера M × N. Зеркально отразить ее элементы относительно горизонтальной оси симметрии матрицы (при этом поменяются местами строки с номерами 1 и M, 2 и M − 1 и т. д.).
14. Дана матрица размера M × N. Зеркально отразить ее элементы относительно вертикальной оси симметрии матрицы (при этом поменяются местами столбцы с номерами 1 и N, 2 и N − 1 и т. д.).
15. Дана матрица размера M × N и целое число K (1 ≤ K ≤ M). Удалить строку матрицы с номером K.
16. Дана матрица размера M × N и целое число K (1 ≤ K ≤ N). Удалить столбец матрицы с номером K.
17. Дана матрица размера M × N. Удалить строку, содержащую минимальный элемент матрицы.
18. Дана матрица размера M × N. Удалить столбец, содержащий максимальный элемент матрицы.
19. Дана матрица размера M × N. Удалить ее первый столбец, содержащий только положительные элементы. Если требуемых столбцов нет, то вывести матрицу без изменений.
20. Дана матрица размера M × N. Удалить ее последний столбец, содержащий только отрицательные элементы. Если требуемых столбцов нет, то вывести матрицу без изменений.
Задание №2
1. Дана матрица размера M × N. Перед первым столбцом, содержащим только положительные элементы, вставить столбец из единиц. Если требуемых столбцов нет, то вывести матрицу без изменений
2. Дана матрица размера M × N. После последнего столбца, содержащего только отрицательные элементы, вставить столбец из нулей. Если требуемых столбцов нет, то вывести матрицу без изменений.
3. Дана матрица размера M × N. Элемент матрицы называется ее локальным минимумом, если он меньше всех окружающих его элементов. Заменить все локальные минимумы данной матрицы на нули. При решении допускается использовать вспомогательную матрицу.
4. Дана матрица размера M × N. Элемент матрицы называется ее локальным максимумом, если он больше всех окружающих его элементов. Поменять знак всех локальных максимумов данной матрицы на противоположный. При решении допускается использовать вспомогательную матрицу.
5. Дана матрица размера M × N. Упорядочить ее строки так, чтобы их первые элементы образовывали возрастающую последовательность.
6. Дана матрица размера M × N. Упорядочить ее столбцы так, чтобы их последние элементы образовывали убывающую последовательность.
7. Дана матрица размера M × N. Упорядочить ее строки так, чтобы их минимальные элементы образовывали убывающую последовательность.
8. Дана матрица размера M × N. Упорядочить ее столбцы так, чтобы их максимальные элементы образовывали возрастающую последовательность Диагонали квадратной матрицы
9. Дана квадратная матрица A порядка M. Найти сумму элементов ее главной диагонали, то есть диагонали, содержащей следующие элементы: A1,1, A2,2, A3,3, . . ., AM,M.
10. Дана квадратная матрица A порядка M. Найти среднее арифметическое элементов ее побочной диагонали, то есть диагонали, содержащей следующие элементы: A1,M, A2,M−1, A3,M−2, . . ., AM,1
11. Дана квадратная матрица A порядка M. Найти сумму элементов каждой ее диагонали, параллельной главной (начиная с одноэлементной диагонали A1,M).
12. Дана квадратная матрица A порядка M. Найти сумму элементов каждой ее диагонали, параллельной побочной (начиная с одноэлементной диагонали A1,1).
13. Дана квадратная матрица A порядка M. Найти среднее арифметическое элементов каждой ее диагонали, параллельной главной (начиная с одноэлементной диагонали A1,M).
14. Дана квадратная матрица A порядка M. Найти среднее арифметическое элементов каждой ее диагонали, параллельной побочной (начиная с одноэлементной диагонали A1,1).
15. . Дана квадратная матрица A порядка M. Найти минимальный элемент для каждой ее диагонали, параллельной главной (начиная с одноэлементной диагонали A1,M).
16. Дана квадратная матрица A порядка M. Найти максимальный элемент для каждой ее диагонали, параллельной побочной (начиная с одноэлементной диагонали A1,1).
17. Дана квадратная матрица порядка M. Обнулить элементы матрицы, лежащие ниже главной диагонали. Условный оператор не использовать.
18. Дана квадратная матрица порядка M. Обнулить элементы матрицы, лежащие выше побочной диагонали. Условный оператор не использовать
19. Дана квадратная матрица порядка M. Обнулить элементы матрицы, лежащие на побочной диагонали и ниже нее. Условный оператор не использовать.
20. Дана квадратная матрица порядка M. Обнулить элементы матрицы, лежащие на главной диагонали и выше нее. Условный оператор не использовать.
Контрольные вопросы:
1. Элементы какого типа может содержать массив?
2. Какие типы данных допустимы для индексов элементов массива?
3. Опишите порядок действий при вычислении суммы элементов массива
4. Опишите порядок действий при определении максимального элемента в массиве.
Задание №1
1. Дан символ C. Вывести его код (то есть номер в кодовой таблице).
2. Дано целое число N (32 ≤ N ≤ 126). Вывести символ с кодом, равным N.
3. Дан символ C. Вывести два символа, первый из которых предшествует символу C в кодовой таблице, а второй следует за символом C.
4. Дано целое число N (1 ≤ N ≤ 26). Вывести N первых прописных (то есть заглавных) букв латинского алфавита.
5. Дано целое число N (1 ≤ N ≤ 26). Вывести N последних строчных (то есть маленьких) букв латинского алфавита в обратном порядке (начиная с буквы «z»).
6. Дан символ C, изображающий цифру или букву (латинскую или русскую). Если C изображает цифру, то вывести строку «digit», если латинскую букву — вывести строку «lat», если русскую — вывести строку «rus».
7. Дана непустая строка. Вывести коды ее первого и последнего символа.
8. Дано целое число N (> 0) и символ C. Вывести строку длины N, которая состоит из символов C.
9. Дано четное число N (> 0) и символы C1 и C2. Вывести строку длины N, которая состоит из чередующихся символов C1 и C2, начиная с C1.
10. Дана строка. Вывести строку, содержащую те же символы, но расположенные в обратном порядке.
11. Дана непустая строка S. Вывести строку, содержащую символы строки S, между которыми вставлено по одному пробелу.
12. Дана непустая строка S и целое число N (> 0). Вывести строку, содержащую символы строки S, между которыми вставлено по N символов «*» (звездочка).
13. Дана строка. Подсчитать количество содержащихся в ней цифр.
14. Дана строка. Подсчитать количество содержащихся в ней прописных латинских букв.
15. Дана строка. Подсчитать общее количество содержащихся в ней строчных латинских и русских букв.
16. Дана строка. Преобразовать в ней все прописные латинские буквы в строчные.
17. Дана строка. Преобразовать в ней все строчные буквы (как латинские, так и русские) в прописные.
18. Дана строка. Преобразовать в ней все строчные буквы (как латинские, так и русские) в прописные, а прописные — в строчные.
19. Дана строка. Если она представляет собой запись целого числа, то вывести 1, если вещественного (с дробной частью) — вывести 2; если строку нельзя преобразовать в число, то вывести 0. Считать, что дробная часть вещественного числа отделяется от его целой части десятичной точкой «.».
20. Дано целое положительное число. Вывести символы, изображающие цифры этого числа (в порядке слева направо).
Задание №2
1. Дано целое число N (> 0) и строка S. Преобразовать строку S в строку длины N следующим образом: если длина строки S больше N, то отбросить первые символы, если длина строки S меньше N, то в ее начало добавить символы «.» (точка).
2. Даны целые положительные числа N1 и N2 и строки S1 и S2. По- лучить из этих строк новую строку, содержащую первые N1 символов строки S1 и последние N2 символов строки S2 (в указанном порядке).
3. Дан символ C и строка S. Удвоить каждое вхождение символа C в строку S.
4. Дан символ C и строки S, S0. Перед каждым вхождением символа C в строку S вставить строку S0.
5. Дан символ C и строки S, S0. После каждого вхождения символа C в строку S вставить строку S0.
6. Даны строки S и S0. Проверить, содержится ли строка S0 в строке S. Если содержится, то вывести TRUE, если не содержится, то вывести FALSE.
7. Даны строки S и S0. Найти количество вхождений строки S0 в стро- ку S.
8. Даны строки S и S0. Удалить из строки S первую подстроку, совпадающую с S0. Если совпадающих подстрок нет, то вывести строку S без изменений.
9. Даны строки S и S0. Удалить из строки S последнюю подстроку, совпадающую с S0. Если совпадающих подстрок нет, то вывести строку S без изменений.
10. Даны строки S и S0. Удалить из строки S все подстроки, совпадающие с S0. Если совпадающих подстрок нет, то вывести строку S без изменений.
11. Даны строки S, S1 и S2. Заменить в строке S первое вхождение строки S1 на строку S2.
12. Даны строки S, S1 и S2. Заменить в строке S последнее вхождение строки S1 на строку S2.
13. Даны строки S, S1 и S2. Заменить в строке S все вхождения строки S1 на строку S2.
14. Дана строка, содержащая по крайней мере один символ пробела. Вывести подстроку, расположенную между первым и вторым пробелом исходной строки. Если строка содержит только один пробел, то вывести пустую строку.
15. Дана строка, содержащая по крайней мере один символ пробела. Вывести подстроку, расположенную между первым и последним пробелом.
16. Дана строка, состоящая из русских слов, разделенных пробелами (одним или несколькими). Найти количество слов в строке.
17. Дана строка, состоящая из русских слов, набранных заглавными бук- вами и разделенных пробелами (одним или несколькими). Найти количество слов, которые начинаются и заканчиваются одной и той же буквой.
18. Дана строка, состоящая из русских слов, набранных заглавными буквами и разделенных пробелами (одним или несколькими). Найти количество слов, которые содержат хотя бы одну букву «А».
19. Дана строка, состоящая из русских слов, набранных заглавными буквами и разделенных пробелами (одним или несколькими). Найти количество слов, которые содержат ровно три буквы «А».
20. Дана строка, состоящая из русских слов, разделенных пробелами (одним или несколькими). Найти длину самого короткого слова.
Задание №3
1. Найти сумму четных элементов множества, которое является пересечением 2-х других множеств.
2. Найти сумму нечетных элементов множества, которое является объединением 2-х других множеств.
3. Найти сумму кратных трем элементов множества, которое является разностью 2-х других множеств.
4. Найти среднее арифметическое нечетных элементов множества, которое является пересечением 2-х других множеств.
5. Найти среднее арифметическое четных элементов множества, которое является объединением 2-х других множеств.
6. Найти среднее арифметическое кратных пяти элементов множества, которое является разностью 2-х других множеств.
7. Найти максимальный кратный трем элемент в числовом множестве.
8. Найти минимальный кратный пяти элемент в числовом множестве.
9. Найти максимальный четный элемент в числовом множестве, которое является пересечением двух других множеств.
10. Найти минимальный нечетный элемент в числовом множестве, которое является объединением двух других множеств.
11. Найти минимальный четный элемент в числовом множестве, которое является разностью двух других множеств.
12. Уменьшить значение всех элементов множества на значение его минимального четного элемента.
13. Уменьшить значение всех элементов множества на значение его максимального нечетного элемента.
14. Вывести на экран те элементы множества, которые меньше среднего арифметического значений его минимального и максимального элементов.
15. Определить, сколько элементов множества больше, чем среднее арифметическое значений его максимального и минимального элементов.
16. Вывести на экран кратные трем элементы числового множества, которое является разностью двух других множеств.
17. Вы-вести на экран нечетные элементы числового множества, которое является пересечением двух других множеств.
18. Вывести на экран кратные пяти элементы числового множества, которое является объединением двух других множеств.
19. Вывести на экран нечетные элементы числового множества, которое является разностью двух других множеств.
20. Подсчитать количество нечетных элементов во множестве, которое является пересечением двух других множеств.
Контрольные вопросы:
1. Что такое строка?
2. Что такое множество?
3. Как объявляются переменные для хранения строк?
4. Объясните механизм хранения строк?
5. Опишите процедуры для работы со строками
6. Опишите процедуры работы с множествами
7. Как обратится к отдельному элементу строки?
Имя записи.Имя поля
В отличие от массива компоненты (поля или элементы) записи могут быть различного типа. Записи удобно использовать в тех случаях, когда необходимо описать атрибуты (характеристики или свойства) одного объекта, имеющие различный тип.
Запись может быть объявлена в разделе Var или в разделах Type и Var, одновременно.
Var Имя записи: RECORD
Имя поля 1:тип;
Имя поля 2:тип;
. . .
Имя поля n :тип
END ;
или
2. Type Имя типа для записи= RECORD
Имя поля 1:тип;
Имя поля 2:тип;
. . .
Имя поля n :тип
END ;
Var Имя записи:Имя типа для записи;
Второй способ описания более предпочтителен, будем использовать его.
Записи могут быть составными частями массивов или других записей. Так для описания всего списка студентов, состоящего, допустим, из 1000 записей необходимо записать:
Spisok:Array[1..1000] of T_Stud; {Описание массива из записей}
Элементы записи (поля) используются в программе как обычные переменные данного типа. Чтобы обратиться к i - той записи представленного списка (массива Spisok) и к его полю FIO необходимо записать: Spisok[i].FIO. Для того, чтобы обратиться к той же записи и выбрать оценку по математике необходимо записать Spisok[i].Ball[2].
Для упрощения обращения к элементам записи используется оператор присоединения
WITH Имя записи DO
Begin
Операторы обращения к элементам записи
End ;
Для нашего примера используем этот оператор при суммировании трех оценок i-го студента:
. . .
Sum:=0;
With Spisok[i] do
Begin
For j:=1 to 3 do
Sum:=Sum+Ball[j];
. . .
End;
Типовой пример
Дан список, содержащий N записей (N£100) следующей структуры:
№ рейса | Пункт отправления | Пункт назначения | День недели | Время отправления Час Мин | Цена билета |
5 символов | 15 символов | 15 симв. | 1..7 | 0..23 0..59 | Real |
1) Ввести заданый список с экрана в массив записей Spis.
2) Ввести искомый номер рейса - Isk_nom.
3) Найти в списке рейс с заданным номером.
4) Вывести информацию о найденном рейсе на экран.
Uses crt;
Type
T_Time=record
Hour:0..23;
Min:0..59;
end;
tzap=record {Описание типа для одной записи списка}
nom:string[5];
p1,p2:string[15];
day:1..7;
time:T_Time;
price:real;
end;
Var Spis:array[1..100]of tzap; {Описание списка}
N,i:byte;
Isk_nom:string[5];
Begin
Write(' Введите число записей в списке N = ');
Readln(N);
Writeln('Введите список по полям - каждое поле с новой строки');
For i:=1 to N do
With Spis[i] do
begin
Write(' Номер очередного рейса - 5 символов ');
Readln(nom);
Write(' Пункт отправления - 15 символов ');
Readln(p1);
Write(' Пункт назначения - 15 символов ');
Readln(p2);
Write(' День недели - от 1 до 7 ');
Readln(day);
Write(' Время отправления - часы (от 0 до 23) и
минуты (от 0 до 59), через пробел ');
Readln(time.hour,time.min);
Write(' Цена билета = ');
Readln(price);
end;
writeln(' введите искомый номер рейса - 5 символов ');
Readln(Isk_nom);
{Oрганизация поиска заданного рейса в массиве записей Spis}
for i:=1 to N do
with Spis[i] do
if nom = Isk_nom then
begin
writeln(' Рейс найден');
writeln(nom,' ',p1,' ',p2,' ',day,' ',time.hour,':',time.min,' ',price);
readkey;
halt;
end;
writeln(' Рейс не найден');
readkey;
End.
Примечание: При вводе символьной информации необходимо учитывать, что пробел также является символом.
Варианты самостоятельных заданий
Задание №1
1. Составить файл записей, предусмотрев поля: Ф.И.О., семейное положение (для семейных должно быть поле "дети"), средний годовой доход. Составить программу, позволяющую вывести все данные, найти семью с минимальным и максимальным доходом, осуществить выборку по заданному полю.
2. Составить базу данных о студентах, предусмотрев поля: Ф.И.О., экзаменационные отметки. Составить программу, позволяющую вывести все данные; найти и вывести средний балл каждого студента; вывести список студентов, не имеющих удовлетворительных оценок.
3. На складе имеется товар различного вида. Составить базу данных, предусмотрев поля: наименование товара, цена единицы товара, количество. Составить программу, позволяющую вывести весь список товаров; самый дешевый и самый дорогой товар; общую стоимость всего товара.
4. Составить базу данных о сотрудниках фирмы, предусмотрев поля: Ф.И.О., должность, домашний адрес, заработная плата. Составить программу, позволяющую вывести весь список сотрудников; всех, кто живет на данной улице; всех, имеющих уровень зарплаты выше среднего в фирме.
5. Некоторое разведывательное управление имеет досье на своих агентов, в котором предусмотрены такие разделы: Ф.И.О., клички, список выполненных заданий, вознаграждение за каждое задание. Составить программу, позволяющую вывести полный список агентов; агента, выполнившего наибольшее количество заданий; общую сумму вознаграждения для каждого агента.
6. Некоторое разведывательное управление имеет досье на своих агентов, в котором предусмотрены такие разделы: Ф.И.О., клички, список выполненных заданий, вознаграждение за каждое задание. Составить программу, позволяющую вывести полный список агентов; агента, имеющего наибольшее количество кличек; агента, имеющего наибольшую общую сумму вознаграждения.
7. Составить базу данных о сотрудниках фирмы, предусмотрев поля: Ф.И.О., поощрения (выделить премии и нематериальные виды поощрений), количество замечаний. Составить программу, позволяющую вывести весь список сотрудников; всех, имеющих поощрения; всех, имеющих премии с общей суммой всех премий.
8. Составить базу данных об учащихся, предусмотрев поля: Ф.И.О., список выбранных факультативов. Составить программу, позволяющую вывести полный список учащихся; список учащихся данного факультатива, список учащихся, выбравших больше трех факультативов.
9. Составить базу данных об учащихся, предусмотрев поля: Ф.И.О., предметы по выбору, экзаменационные оценки по каждому из них. Составить программу, позволяющую вывести полный список учащихся, список учащихся, выбравших данный предмет, список учащихся, сдавших все экзамены на 4 и 5.
10. Составить базу данных о сотрудниках фирмы, предусмотрев поля: Ф.И.О., должность, заработную плату (оклад, премии, доплата за вредные условия труда). Составить программу, позволяющую вывести весь список сотрудников, сотрудников, занимающих определенную должность, общую зарплату каждого.
11. Составить базу данных о сотрудниках фирмы, предусмотрев поля: Ф.И.О., должность, заработную плату (оклад, премии, доплата за вредные условия труда). Составить программу, позволяющую вывести весь список сотрудников, сотрудников, занимающих определенную должность и имеющих максимальную общую сумму премий, -всех, имеющих максимальную общую зарплату .
12. Составить базу данных о пассажирах самолета, предусмотрев поля: Ф.И.О., багаж (вес, сумма страховки по каждому виду багажа), пункт следования. Составить программу, позволяющую вывести все данные о пассажирах, список пассажиров, следующих до определенной станции, список пассажиров, имеющих багаж весом выше данного.
13. Составить базу данных о пассажирах самолета, предусмотрев поля: Ф.И.О., багаж (вес, сумма страховки по каждому виду багажа), пункт следования. Составить программу, позволяющую вывести все данные о пассажирах, общую сумму страховки для каждого пассажира, общий вес багажа всех пассажиров.
14. Составить базу данных для некоторой туристической фирмы, предусмотрев поля: Ф.И.О., маршрут (протяженность, стоимость). Составить программу, позволяющую вывести все данные о туристах, список туристов, отправляющихся на определенный маршрут, список туристов самого длинного маршрута.
15. Составить базу данных для некоторой туристической фирмы, предусмотрев поля: Ф.И.О., маршрут (протяженность, стоимость). Составить программу, позволяющую вывести все данные о туристах, список туристов самого дорогого и самого дешевого маршрута, среднюю длину всех маршрутов.
16. Составить базу данных о студентах ВУЗа, предусмотрев поля: Ф.И.О., курс, специальность, экзаменационные оценки за семестр. Составить программу, позволяющую вывести: все данные о студентах, список студентов данного курса, список студентов с минимальным средним баллом.
17. Составить базу данных о студентах ВУЗа, предусмотрев поля: Ф.И.О., курс, специальность, экзаменационные оценки за семестр. Составить программу, позволяющую вывести: все данные о студентах, список студентов данной специальности, список студентов с наивысшим средним баллом.
18. Составить базу данных о студентах, предусмотрев поля: Ф.И.О., экзаменационные отметки по предметам. Составить программу, позволяющую вывести все данные; вывести список студентов, имеющих данную отметку по заданному предмету, вывести список студентов, не сдавших хотя бы два экзамена.
19. Составить базу данных о сотрудниках фирмы, предусмотрев поля: Ф.И.О., должность, заработную плату (оклад, премии, доплата за вредные условия труда). Составить программу, позволяющую вывести весь список сотрудников; сотрудников, занимающих определенную должность и не имеющих доплату за вредные условия труда; сотрудников, чья премия составляет более 30% от оклада.
20. На складе имеется товар различного вида. Составить базу данных, предусмотрев поля: наименование товара, цена единицы товара, количество. Составить программу, позволяющую вывести весь список товаров; самый дешевый и самый дорогой товар; общую стоимость всего товара.
Контрольные вопросы:
1. Что такое тип данных записи?
2. Как объявляются записи?
3. Что такое учетное имя?
4. Какие операции допустимы над элементами (полями) записи?
5. Чем отличается запись от массива?
6. Какие операции допустимы над записью в целом?
7. Что такое запись с вариантами?
8. Как используются записи?
Задание №1
1. Фамилии и имена 25 учеников класса записаны в двух различных полях одной таблицы. Напечатать фамилию и имя каждого ученика на отдельной строке
2. Названия 20 футбольных клубов и городов, которые они представляют, записаны в двух различных полях одной таблицы. Напечатать название города каждого клуба на отдельной строке.
3. Известны данные о 20 сотрудниках фирмы (фамилия, имя, зарплата и пол). Определить фамилию мужчины, имеющего самую большую зарплату
4. Известны данные о 20 сотрудниках фирмы (фамилия, имя, зарплата и пол). Определить фамилии мужчины и женщины, имеющих самую маленькую зарплату.
5. Известны данные о 10 сотрудниках фирмы (фамилия, имя, зарплата и пол). Определить количество мужчин
6. Известны данные о 12 сотрудниках фирмы (фамилия, имя, возраст и пол). Определить фамилию самого младшего мужчины.
7. Известны данные о 23 сотрудниках фирмы (фамилия, имя, зарплата и пол). Определить фамилию и имя самой старшей женщины
8. Известны данные о 19 сотрудниках фирмы (фамилия, дата рождения, пол). Определить фамилии мужчин, родившихся летом
9. Известны данные о 21 сотрудниках фирмы (фамилия, имя, зарплата и пол). Определить количество человек, родившихся зимой
10. Фамилии и имена 15 учеников класса записаны в двух различных полях одной таблицы. Напечатать фамилию и имя каждого ученика на отдельной строке
11. Названия 10 футбольных клубов и городов, которые они представляют, записаны в двух различных полях одной таблицы. Напечатать название города каждого клуба на отдельной строке.
12. Известны данные о 20 сотрудниках фирмы (фамилия, имя, зарплата и пол). Определить фамилию мужчины, имеющего самую большую зарплату
13. Известны данные о 20 сотрудниках фирмы (фамилия, имя, зарплата и пол). Определить фамилии мужчины и женщины, имеющих самую маленькую зарплату
14. Фамилии и имена 15 учеников класса записаны в двух различных полях одной таблицы. Определить количество учеников, чьи фамилии начинаются на букву А.
15. Известны данные о 15 сотрудниках фирмы (фамилия, имя, возраст и пол). Определить фамилию самого младшего мужчины.
16. Известны данные о 10 сотрудниках фирмы (фамилия, имя, зарплата и пол). Определить фамилию и имя самой старшей женщины
17. Известны данные о 25 сотрудниках фирмы (фамилия, дата рождения, пол). Определить фамилии мужчин, родившихся летом
18. Известны данные о 17 сотрудниках фирмы (фамилия, имя, зарплата и пол). Определить количество человек, родившихся зимой
19. Фамилии и имена 23 учеников класса записаны в двух различных полях одной таблицы. Напечатать фамилию и имя каждого ученика на отдельной строке
20. Названия 10 футбольных клубов и городов, которые они представляют, записаны в двух различных полях одной таблицы. Напечатать название города каждого клуба на отдельной строке.
Контрольные вопросы:
1. Что такое тип данных записи?
2. Как объявляются записи?
3. Что такое учетное имя?
4. Какие операции допустимы над элементами (полями) записи?
5. Чем отличается запись от массива?
6. Какие операции допустимы над записью в целом?
7. Что такое запись с вариантами?
8. Как используются записи?
Задание №1
1. Выведите свое имя посередине экрана мигающим красным цветом в небольшом прямоугольнике серого цвета
2. Выведите свое имя разними цветами и на разном фоне по главной диагонали экрана
3. Выведите на экран разными цветами сегодняшнюю дату в формате число месяц год
4. Разделите экран монитора на две части по вертикали. Выведите свое имя в левой части серым цветом на синем фоне, а в правой части синим цветом на сером фоне
5. Выведите на экран разными цветами часы в формате : ЧЧ:ММ:СС
6. Разделите экран монитора на две части по горизонтали. Выведите свое имя в левой части красным цветом на желтом фоне, а в правой части свою фамилию желтым цветом на красном фоне
7. Напишите программу, которая по введенным с клавиатуры данным выводила бы ваше имя на экране монитора. Вводимые данные: цвет символа, цвет экрана, координаты текста.
8. Выведите на экран монитора таймер отсчитывающий указанное время
9. Выведите свое имя посередине экрана мигающим красным цветом в небольшом прямоугольнике серого цвета
10. Выведите свое имя разними цветами и на разном фоне по главной диагонали экрана
11. Выведите на экран разными цветами сегодняшнюю дату в формате число месяц год
12. Разделите экран монитора на две части по вертикали. Выведите свое имя в левой части серым цветом на синем фоне, а в правой части синим цветом на сером фоне
13. Выведите на экран разными цветами фразу «До нового года осталось____ дней»
14. Разделите экран монитора на две части по горизонтали. Выведите свое имя в левой части красным цветом на желтом фоне, а в правой части свою фамилию желтым цветом на красном фоне
15. Напишите программу, которая по введенным с клавиатуры данным выводила бы ваше имя на экране монитора. Вводимые данные: цвет символа, цвет экрана, координаты текста.
16. Выведите на экран монитора таймер отсчитывающий указанное время
17. Разделите экран монитора на две части по вертикали. Выведите свое имя в левой части серым цветом на синем фоне, а в правой части синим цветом на сером фоне
18. Выведите на экран разными цветами часы в формате : ЧЧ:ММ:СС
19. Разделите экран монитора на две части по горизонтали. Выведите свое имя в левой части красным цветом на желтом фоне, а в правой части свою фамилию желтым цветом на красном фоне
20. Напишите программу, которая по введенным с клавиатуры данным выводила бы ваше имя на экране монитора. Вводимые данные: цвет символа, цвет экрана, координаты текста.
Контрольные вопросы:
1. Какие стандартные модули Вы знаете?
2. Система координат при работе с модулями CRT и GRAPH
3. Процедуры работы с текстом?
4. Рисование линии, стиль линии
5. Перемещение указателя в точку с координатами
Закрашенные фигуры
Стиль заполнения фигуры
SetFillStyle (s, c);
где s – стиль заполнения фигуры, c – номер активного цвета.
Виды стилей заполнения:
0 - сплошная закраска фоновым цветом
1 - сплошная закраска активным цветом
9 - закраска пикселей в шахматном порядке
12 - пользовательский стиль
2 3 4 5 6 7 8 10 11
Закрашенный прямоугольник
Bar (x1,y1, x2,y2);
x1,y1,x2,y2 – координаты противоположных не смежных вершин прямоугольника.
Параллелепипед
Bar3d(x1,y1,x2,y2,d,t);
x1,y1,x2,y2 – координаты противоположных не смежных вершин передней грани параллелепипеда, d – ширина боковой грани, t - Верхняя грань(True (TopOn) – есть, False (TopOff) – нет).
Закрашенный эллипс
FillEllipse (x,y,Rx,Ry);
где x,y – координаты центра эллипса, Rx,Ry – радиусы эллипса соответственно по оси х и по оси у.
Закрашенный сектор круга
PieSlice (x,y,nu,ku,r);
где x,y – координаты центра круга, r – радиус круга, nu – начальный угол с которого начинается рисование сектора круга, ku – конечный угол, переменные nu,ku – измеряются в градусах.
Закрашенный сектор эллипса
Sector(x,y,nu,ku,rx,ry);
где x,y – координаты центра эллипса, rx,ry – радиусы эллипса соответственно по оси х и по оси у, nu – начальный угол с которого начинается рисование сектора эллипса, ku – конечный угол, переменные nu,ku – измеряются в градусах.
Закраска произвольной фигуры
FloodFill (x,y, b);
где x,y - координаты внутренней точки; b – номер цвета границы.
Вывод текста в графике
Стиль текста
SetTextStyle(s, d, r)
где s – стиль текста, d – направление, r – размер.
стиль: 0 – побитовый направление: 0 - горизонтально (®) размер: 1..10
1 – тройной 1 - вертикально ()
2 – малый
3 – гротесковый
4 – готический
Вывод текста
OutTextXY(x, y,s)
где, x, y – координаты, s – текст (тип - string).
Выравнивание текста
SetTextJustify(h, v)
где h - выравнивание по горизонтали, v - выравнивание по вертикали.
Выравнивание текста относительно точки привязки
Преобразование чисел в текст
Str ( x, s )
где x – исходное число, s - строка (текст) - тип - string
Ширина строки - Функция
TextWidth (S)
где S – строка (ширина в пикселях)
Высота строки - Функция
TextHeight(S)
где S – строка (высота в пикселях)
Варианты самостоятельных заданий
Задание
1. Написать программу, которая сообщает пользователю: «Я умею рисовать отрезок». Запрашивает: «Введите координаты начала и конца отрезка» и рисует отрезок с соответствующими координатами.
2. Построить рисунок лодочки.
3. Написать программу, которая рисует концентрические окружности.
4. Изобразите на экране падающий снег
5. Изобразите на экране лабиринт
6. Нарисуйте радугу, т.е. разноцветные дуги концентрических окружностей опирающихся на нижнюю границу экрана.
7. Написать программу, которая запрашивает координаты центра окружности, ее радиус и рисует закрашенный круг, соответствующий введенным величинам.
8. Написать программу, которая рисует лучи исходящие из левого нижнего угла экрана.
9. В верхнем левом углу экрана нарисовать солнышко.
10. Написать программу, которая рисует произвольную ломанную линию.
11. Написать программу, рисующую произвольный бегущий отрезок.
12. Написать программу, которая рисует эллипсы.
13. Составить программу построения квадрата. На одном из его оснований построить равносторонний треугольник со сторонами произвольной длины.
14. Построить ромб со стороной А и острым углом х.
15. Изобразите на экране движение точки по окружности.
16. «Нарисуйте» часы и «заставьте их «ходить».
17. Составить программу построения отрезка штриховой прямой линии, ограниченного точками с координатами А(X,Y) B(X,Y). Размеры штриха и интервала между штрихами возьмите равными. Исходные данные: значения координат точек и размер штриха введите с клавиатуры.
18. Изобразите на экране таяние горящей свечи.
19. Изобразите на экране звездное небо
20. Составить программу рисования спирали.
Контрольные вопросы:
1. Каким образом происходит подключение графического режима?
2. С помощью какой процедуры можно нарисовать закрашенный круг?
3. Каким образом можно нарисовать перемещающуюся фигуру?
4. Процедуры рисования геометрических фигур
5. Виды стилей заполнения
6. Выравнивание текста относительно точки привязки
Задание
Изобразите на экране монитора следующие геометрические фигуры
Контрольные вопросы:
1. Какие координаты называют абсолютными?
2. Какие координаты называют относительными?
3. Для каких величин существует понятие «текущий»?
4. Как изменяются координаты текущей позиции при применении различных графических процедур и функций?
5. Как изменяется текущий стиль и цвет заполнения фигур?
Задание
1. Нарисуйте картинку «пейзаж» на любую тему
2. Нарисуйте разноцветную мишень
3. Нарисуйте круговую диаграмму, состоящую из 10 заполненных секторов, используя различные орнаменты и цвета заполнения
4. Нарисуйте заполненные различным орнаментом и цветом заполнения трапецию и звезду
5. Нарисуйте шестигранную призму, вид сверху и сбоку. Все видимые грани заполните различным орнаментом и цветом заполнения
6. Изобразите горизонтальную последовательность, состоящую из 16 различных заполненных эллипсов
7. Изобразите последовательность, состоящую из 16 различных заполненных звезд
8. Изобразите последовательность, состоящую из 20 различных заполненных трапеций
9. Нарисуйте график функции синус
10. Нарисуйте египетскую «ступенчатую» пирамиду, вид сверху и сбоку
11. Нарисуйте заполненные различным орнаментом и цветом заполнения трапецию и звезду
12. Нарисуйте троллейбус
13. Изобразите горизонтальную последовательность, состоящую из 16 различных заполненных эллипсов
14. Изобразите последовательность, состоящую из 16 различных заполненных звезд
15. Изобразите последовательность, состоящую из 20 различных заполненных трапеций
16. Нарисуйте снеговика
17. Нарисуйте картинку «пейзаж» на любую тему
18. Нарисуйте разноцветную мишень
19. Нарисуйте машину
20. Нарисуйте компьютер
Контрольные вопросы
1. Сколько цветов можно использовать для цвета фона?
2. Опишите процедуры управления цветом
3. Опишите процедуры и функции рисования геометрических фигур
4. С помощью каких функций можно изменить стиль заполнения фигур?
5. Процедуры рисования закрашенных фигур
Задание
С помощью изученных процедур и функций нарисуйте динамическую картинку на свободную тему. На экране должно присутствовать от 3х движущихся графических объектов, например, движущаяся по экрану машина, или смена времен года, или смена утро-день-вечер-ночь и т. д.
Контрольные вопросы:
1. Инициализация графического режима
2. С помощью каких процедур можно задать текущий стиль линии
3. С помощью каких процедур можно задать текущий стиль заливки фигур
4. С помощью каких процедур можно задать текущий цвет фона
5. Процедуры и функции рисования графических объектов
6. Процедура задержки выполнения программы
7. Процедура очистки экрана
ПРИЛОЖЕНИЕ А ТИТУЛЬНЫЙ ЛИСТ ОТЧЕТА
Краевое государственное бюджетное профессиональное образовательное учреждение
«Алтайский архитектурно-строительный колледж»
09.02.03 ПРОГРАММИРОВАНИЕ В КОМПЬЮТЕРНЫХ СИСТЕМАХ
ОТЧЕТ ПО ПРАКТИЧЕСКОЙ РАБОТЕ №____
ОП.05 Основы программирования
Выполнил студент гр. ПКС-_____ Фамилия И. О.
Проверил преподаватель Фамилия И.О.
201__ г.
ПРИЛОЖЕНИЕ Б. ТИПЫ ДАННЫХ В ПАСКАЛЕ
Логический тип (Boolean) состоит из 2-х значений: False (Ложь) и True (Истина). Над значениями этого типа допустимы операции сравнения, причем False < True.
Значениями символьного типа (Char) являются символы из множества ASCII (American Code for Information Interchange - Американский стандартный код для обмена информацией). Это множество состоит из 256 различных символов, упорядоченных определенным образом.
Перечислимый (или перечисляемый) тип данных задается списком значений (объектов), которые могут принимать переменные этого типа. При этом каждый объект имеет имя.
На основе четырех рассмотренных порядковых типов можно определить новые, порядковые типы: например, можно сузить диапазон значений любого из 4-х порядковых типов. Такие типы называют ограниченными (или интервальными) типами. Другое их название - диапазоны. Такие типы задаются границами своих значений внутри базового типа:
<минимальное значение> .. <максимальное значение>
Целые типы | ||
Название | Длина, байт | Диапазон значений |
Byte | 1 | 0…255 |
ShortInt | 1 | -128…+127 |
Word | 2 | 0…65535 |
Integer | 2 | -32768…+32767 |
LongInt | 4 | -2147483648…+2147483647 |
Вещественные типы
ПРИЛОЖЕНИЕ В. СТАНДАРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ В ПАСКАЛЕ
Стандартные функции
Тип
аргумента
Тип
результата
Integer
Word
Byte
Byte
Integer Word
Byte
Word
LongInt
Boolean
Integer
Word
Integer
Word
Целый
Вещественный
Целый
Вещественный
Вещественный
Вещественный
Вещественный
Вещественный
Вещественный
Вещественный
Целый
Вещественный
Вещественный
Вещественный
Целый
Вещественный
Целый
Вещественный
Вещественный
Вещественный
Вещественный
Вещественный
Нет аргумента
Вещественный
Вещественный
Longint
Вещественный
Вещественный
Вещественный
Вещественный
Вещественный
Longint
Нет аргумента
Вещественный
Word
Word
Целый
Логический
Стандартные процедуры
Описание
процедуры
Тип параметров
Назначение
Randomize
Без параметров
Гарантирует несовпадение последо- вательностей случайных чисел,
выдаваемых функцией Random
Inc(X)
X - целое
Увеличивает значение Х на 1
Dec(X)
X - целое
Уменьшает значение Х на 1
Inc(X,N)
Dec(X,N)
Увеличивает значение Х на N
Dec(X,N)
Dec(X,N)
Уменьшает значение Х на N
ОП.05 ОСНОВЫ ПРОГРАММИРОВАНИЯ
ЧАСТЬ I
Дата: 2019-11-01, просмотров: 595.