Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Современные средства разработки программного обеспечения. Учебное пособие

.pdf
Скачиваний:
1
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
41
Необходимо протабулировать функцию, зависящую от 2-х переменных или от нескольких параметров согласно индивидуальному варианту. Результат табулирова­ния вывести на консоль в форме таблицы или совокупности таблиц. Параметры таб­лицы вводить с экрана. Для введенной информации о таблицах организовать мини­мальную проверку на достоверность: таблица должна располагаться на видимой части экрана, ширина колонок должна быть достаточной для размещения числовых данных. Параметры: отрезок и шаг табулирования следует вводить с клавиатуры, а не задавать в коде программы в виде констант.
3 Полученные программы по заданиям 1 и 2 оформить в виде функций.
3.1.1 Порядок выполнения лабораторной работы
1 Ознакомиться с целью, задачами, содержанием лабораторной работы, об- щими методическими указаниями к выполнению.
2 Установить и настроить интегрированную среду Visual Studio Code или PyСharm, следую инструкциям на официальном сайте разработчика IDE.
3 Изучить правила работы с условными и циклическими операторами, функ- циями.
4 Подготовить исходные данные к работе.
5 В системе Visual Studio Code или PyСharm выполнить практические задания согласно варианту, вариант выбирается по номеру списка студентов в группе.
6 Оформить отчет.
3.1.2 Индивидуальные варианты заданий к лабораторной работе
1 Варианты заданий по условному оператору.
1 Даны 3 различных действительных числа X,Y,Z. Если их сумма меньше 1, то наименьшее из них заменить полусуммой двух других, в противном случае заменить наименьшее из X иY полусуммой двух оставшихся.
2 Даны действительные числа X,Y. Если X,Y- отрицательны, то каждое значе­ние заменить его модулем; если отрицательно только одно из них, то оба значения
42
увеличить на 0.5; если оба значения не отрицательны и ни одно из них не принадле­жит отрезку [0.5,2], то оба значения уменьшить в 10 раз; в остальных случаях X и Y оставить без изменения.
3 Определить в какую четверть координатной плоскости попала точка с коор­динатами (X,Y). Переменной N присвоить номер четверти. Если точка попала в начало координат, то N=0. Если точка попала на ось или , то напечатать сообщение об этом.
4 Даны числа A1,B1,C1,A2,B2,C2. Напечатать координаты точек пересечения пря­мых: A1x+B1y=C1 и A2x+B2y=C2, либо сообщить, что эти прямые совпадают, не пере­секаются или вовсе отсутствуют.
5 Даны действительные числа A,B,C,D,S,T,U(S,T одновременно не равны нулю). Определить, лежат ли точки (A,B) и (C,D) на прямой, заданной уравнением Sx+Ty +U=0. Если нет, то выяснить принадлежат ли они разным полуплоскостям.
6 Для целого числа К от 1 до 99 напечатать фразу «мне К лет», учитывая при этом, что при некоторых значениях, К слово «лет» надо заменить на слово «год» или «года».
7 Даны действительные числа x,y,z. Получить разность между максимальным и минимальным из этих чисел.
8 Даны натуральные числа А,В, С, которые обозначают число, месяц и год. По­лучить тройку чисел, соответствующую следующему дню.
9 Даны тройки чисел A1,B1,C1 и A2,B2,C2 , которые обозначают две даты. Вы­числить количество дней, прошедших между этими датами.
10 Даны тройки чисел A1,B1,C1 и A2,B2,C2 , которые обозначают две даты. Вы­числить количество полных лет, прошедших между этими датами.
11 Даны числа A,B,C, которые обозначают дату. Определить количество дней, прошедших с начала года.
12 Написать программу, которая вводит номер года нашей эры и печатает его название по старояпонскому календарю. В старояпонском календаре года носили
43
названия животных: крысы, коровы, тигра, зайца, дракона, змеи, лошади, овцы, обе­зьяны, курицы, собаки и свиньи. (1984 год – год зеленой крысы был началом очеред­ного цикла).
13 Написать программу, которая по введенной дате рождения выводит название знака зодиака, соответствующее введенной дате по гороскопу.
14 Даны тройки чисел A1,B1,C1 и A2,B2,C2 , которые обозначают две даты. Опре­делить какая дата более ранняя. Если даты равны вывести об этом сообщение.
15 Даны произвольные числа a,b,c. Выяснить существует ли треугольник с та­кими длинами сторон. Если треугольник существует, то определить является ли он равносторонним ил каким-либо иным.
2 Варианты заданий по циклическому оператору.
1 Вычислить значение функции.
f(x,y)=x+(y/)
при х, изменяющемся от 1,7 до 5,2 с шагом 0,35, а у, изменяющемся от 0 до 2 с шагом /6.
2 На интервале х от 3 до 6 с шагом 0,3 для каждого у на интервале от 5 до 7,2 с шагом 0,2 вычислить значение функции
f(x,y)= 3√ x2 +3y.
3 Протабулировать значение функции
f(x,y)=x+ √3+y2
при х изменяющемся от 0 до 1 с шагом 0,1, а у от 0 до 1 с шагом 0,2.
4 На интервале 0<х<1 с шагом 0.05 для каждого у из промежутка 1<у<2 с шагом 0,1 вычислить значение функции
f (x,y)= y/ e-x + y
2
5 На интервале х от 0,011 до 0,635 с шагом 0,312 для каждого ‘в’ из интервала от 0,012 до 0,021 с шагом 0,001 протабулировать функцию
Z=arccos a+b / x
6 Вычислить значение функции U(x,y)=(y>=2) and (abs(x)<=1) and ((x>=0)and (y<=x) or (x<0) and (y<-x)) при х от -1,5 до 1,5 с шагом 0,5 у от 1 до 1 с шагом 0,25.
44
7 Для каждого “а” от 0,1 до 0,2 при всех “в” от -0,5 до 0,8 с шагом в=0,1 вычис­лить t=cos(ах+b), С=(ах2 +bx+Lna/x+e
-(a+b)
) +X
2
причем, если b- неотрицательное, то
а= 0,025, иначе а= 0,01
8 Для каждого у от 0,16 до 1,6 с шагом 0,24 при всех z от 0,1 до 0,5 вычислить
S=(yx2+z)* arcsin z, причем , если у<0,8 то z=0,1, иначе z=0,05
9 Для каждого а от 1 до 3 с шагом 0,25 при всех b от 0,5 до 0,9 вычислить
С=ах2+bx+0,16 / √a+b+x2 причем, если с>0 то b=0,1, иначе b=0,05
10 Вычислить U(х,у)=(х≥0) and (sqr(x)+ sqr(y) ≤1) or (x≥ -2) and (x≤0) and (y≤ 0,5*x+1) and (y≥ -0,5x -1) при х от -2 до 1 с шагом 0,5, у от -1 до 1 с шагом 0,4
11 На интервале а1≤с1≤b1 с шагом 0,1 и для а2≤с2≤b2 с шагом 0,11 протабу­лировать функцию Z = (e
– (c1x / a1+b2) +e-(c2x / a2+b2)
)
c1+c2 / x
, t= cos (c1*x+c2)
a1, b1, a2, b2 – ввести с экрана.
12 На интервале у от х до 2х с шагом х/5 и для z от 3х до 4х с шагом х/6 прота­булировать S=y2-z2 / y2+z2.
13 На интервале у от х до 2х с шагом х/5 и для z от 3х до 4х с шагом х/6 прота­булировать Р=S*e
-s
14 На интервале у1 от 0,1 до 0,8 с шагом 0,1 для у2 от 0,2 до 0,9 с шагом 0,1 протабулировать Z= t(y1-y2)2 +xy1, где t=x/y2 –вводить.
15 На интервале у1 от 0,1 до 0,8 с шагом 0,1 для у2 от 0,2 до 0,9 с шагом 0,1 протабулировать P= t-ex – y1 / y2, где t=x/y2 –вводить.
3.5 Контрольные вопросы
1 Как работает условный оператор if в Python?
2 Из каких элементов состоит оператор цикла?
3 Как работает оператор for в Python?
4 Что представляют собой в Python аннотации функций?
5 Что такое лямбда-выражения и где их используют?
6 Что такое декоратор в Python, как и для чего применяется?
45
4 Объектно-ориентированное программирование
4.1 Понятия объектно-ориентированного подхода
Объектно-ориентированная парадигма программирования определяет стиль написания программ, согласно которой предметная область рассматривается в виде совокупности взаимодействующих объектов – реальных сущностей, а структура про­граммы строится на основе совокупности взаимодействующих объектов – абстрак­ций. Результирующее множество абстрактных объектов зависит от прагматики, а прагматика определяется целью разработки программной системы.
В отличие от процедурного подхода в ООП основное внимание уделяется дан­ным (объекту), а не процедуре или функциям, используемым для манипулирования этими данными.
Объект – это абстрактное представление вещей и концепций в реальном мире, таких как сотрудники, организации, автомобили, электроника или все, что только можно придумать. А класс – это эскиз или схема создания объектов.
Строительными блоками ООП являются: классы, объекты, атрибуты, методы.
Классы
Класс – это схема объектов. Это как технический проект дома или автомобиля. В таких проектах, например, указываются особенности дома. Используя описания в проектах в качестве руководства, можно построить любое нужное количество домов
[14].
Классы и объекты работают аналогичным образом. Если требуется создать про­грамму, например, обрабатывающую информацию об автомобилях, то нужно будет начать с описания сущности автомобиля, можно назвать его – Car, а затем создания класса Car.
46
Рисунок 4.1 – Сущность – Car
Определение класса в Python
В Python класс определяется с помощью ключевого слова class, за которым сле- дует имя класса и двоеточие. Затем задают метод __init__(), чтобы объявить, какими атрибутами должен обладать каждый экземпляр класса:
Определение класса сообщает Python о пользовательском объекте и о том, как его создать. Оно сообщает Python, какими атрибутами обладает этот объект, исполь­зуя некоторые существующие встроенные типы данных или другие определенные объекты, и какие действия может выполнять объект.
Объекты
После создания класса можно будет создавать объекты данного класса. Хотя класс является схемой, экземпляр – это объект, созданный на основе класса и содер­жащий реальные данные.
Так объект, созданный на основе класса похож, например, на настоящий дом или настоящую машину, созданную по чертежу. Например, если у вас есть класс с именем Car, вы можете создавать объекты car1, car2, ..., carN.
В Python это можно выполнить в виде команды:
имя_объекта = new Имя_класса([значения атрибутов]),
например car1=new Car() или car2 = new Car("Lada 2106")
Car
Car
47
Каждый из этих объектов является отдельным экземпляром класса Car. Таким образом, у него есть свои индивидуальные данные, которые отделены от других объ­ектов класса.
Инструкция new Имя_класса([значения атрибутов]) в команде создания объекта также называется конструктором.
Каждый аргумент в конструкторе экземпляра объекта передается __init__() ме­тоду. В объект car1 не передано никаких аргументов, но в __init__() есть значения по умолчанию, которые и будут установлены в качестве текущих значений атрибутов. В car2 передан параметр "Lada 2106"), который будет установлен в качестве текущего значения атрибута name.
Рисунок ниже иллюстрирует этот момент.
Рисунок 4.2 – Экземпляры (объекты) класса Car
Каждый раз, при создании нового объекта класса Car, __init__() устанавливает начальное состояние объекта, присваивая значения свойств объекта. То есть .__init__() инициализирует каждый новый экземпляр класса.
Важно помнить, что определение класса является всего лишь описанием объ­екта и работает как своего рода шаблон или контракт. Определение не создает сам объект.
name=“MERCEDES-BENZ Ocean Drive”
speed = 200 pos=(10, 100)
Car1
name=”Лада2106” speed = 200
pos=(10, 100)
Car1
48
Создание экземпляра – это шаг, который фактически создает объект в памяти компьютера.
Как только объект создан, можно получить доступ к его атрибутам и методам.
Атрибуты
Это данные или информация, связанная с объектом. В классе Car, описанном выше, название, скорость и координаты являются атрибутами объектов, поскольку они предоставляют необходимую информацию об объектах Car.
Атрибуты определяются в шаблоне класса и представляют состояние объекта. Объекты содержат данные, хранящиеся в поле атрибута.
Можно задать в __init__() любое количество параметров, но первым парамет­ром всегда будет вызываемая переменная self. При создании нового экземпляра класса, Python автоматически передает экземпляр в self параметр метода __init__(), чтобы Python мог определить атрибуты для данного объекта.
Атрибуты, созданные в.__init__(), называются атрибутами экземпляра. Значе- ние атрибута экземпляра специфично для конкретного экземпляра класса.
С другой стороны, можно задавать атрибуты класса – это атрибуты, которые имеют одинаковое значение для всех экземпляров класса. Атрибуты класса, можно определить присвоив значение переменной, имя которой находится за преде­лами.__init__().
Динамическое изменение атрибутов класса
Python позволяет добавлять новые атрибуты в классе после описания, в объекты после интанцирования например, так:
Car.type_car = 'седан'
Или то же самое можно сделать с помощью специальной функции setattr:
setattr(Car,'atr',2)
Прочитать какое-либо значение атрибута, воспользовавшись специальной встроенной функцией:
getattr(Car, 'atrr', False)
Удалить атрибут с помощью функции:
delattr(Car, 'type_car)
49
Перед удалением рекомендуется проверять существование удаляемого атри­бута с помощью функции hasattr:
hasattr(Car, 'type_car ')
Методы
Методы – это функции, определенные внутри класса и описывающие поведение объекта. Методы полезны для повторного использования или сохранения функцио­нальности, инкапсулированной внутри одного объекта единожды.
По сути методы – это процедуры и логика, которые используются для манипу­лирования данными или атрибутами объекта. Методы также могут использоваться для создания новой информации об этом объекте.
В класс Car можно включить метод move для реализации функции передвиже­ния автомобиля, например, следующего вида:
В Python можно определять экземплярные, статические и классовые методы.
Методы экземпляра – это функции, которые вы определяете внутри класса и которые могут вызываться только для экземпляра этого класса. Точно так же, как __init__(), метод экземпляра всегда принимает self в качестве своего первого пара­метра согласно PEP8 .
В класс Car метод move является экземплярным. внутри метода move Аргумент self находится в качестве первого аргумента.
Аргумент self относится к конкретному экземпляру объекта класса. Его также можно использовать для доступа к методам и атрибутам текущего объекта.
Статические методы в Python выполняются в контексте объекта, создаются применением декоратора @staticmethod.
50
У них нет обязательных параметров-ссылок вроде self.
Доступ к таким методам можно получить как из экземпляра класса, так и из самого класса:
class SomeClass(object):
@staticmethod
def hello():
print("Hello, world")
SomeClass.hello() # Hello, world
obj = SomeClass()
obj.hello() # Hello, world
Методы классов выполняются в контексте самого класса (классы – это тоже объекты), создаются с помощью декоратора @classmethod и первым параметром в та­ких методах должна быть обязательно cls – ссылка на класс. Это означает, что данный метод может обращаться только к атрибутам текущего класса, но не к локальным свойствам его экземпляров.
Пример.
class SomeClass(object):
@classmethod
def hello(cls):
print('Hello, класс {}'.format(cls.__name__))
SomeClass.hello() # Hello, класс SomeClass
Статические и классовые методы доступны без инстанцирования.
4.2 Принципы объектно-ориентированного программирования
Для правильного моделирования объектов программистам нужно знать и уметь реализовать четыре основополагающих принципа ООП: абстракция, инкапсуляция, наследование и полиморфизм. Следует отметить, что кроме данных фундаменталь­ных принципов ООП, существуют и другие уточняющие и расширяющие их, более практические принципы, такие как SOLID.
Инкапсуляция
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]