практика. Советберген Ерулан АЖ29-1 практика. Программирование линейных алгоритмов Арифметические выражения
Скачать 124.49 Kb.
|
""")
""")
Л.Н. Гумилёв атындағы Еуразия ұлттық университеті | [Адрес организации] 15 Нұсқа АЖ – 29 /1 Советберген Ерулан 1 Программирование линейных алгоритмовАрифметические выраженияСредний уровень Задание: записать арифметическое выражение на алгоритмическом языке и указать порядок выполнения операций. import math y = int(input("y:")) j = int(input("j:")) F = 2 * math.sin(0.354 * y + 1) / math.log(y + 2 * j) print("F:", F) Высокий уровень Задание: записать арифметическое выражение на алгоритмическом языке и указать порядок выполнения операций. m = int(input("m:")) y = int(input("y:")) N = (pow(m, 2) + 2.8 * m + 0.355) / (math.cos(2 * y) + 3.6) print("N:", N) Программирование разветвляющихся алгоритмовУсловные операторыСредний уровень import math esp = 0.001 x = int(input("Введите координаты точки В. x :")) y = int(input("Введите координаты точки В. y :")) f = 6 * pow(x, 7) - 4.5 * pow(x, 5) + 4 * pow(x, 2) if math.fabs(f - y) < esp: print("Лежит") else: print("Не лежит") Задача: Ввести с клавиатуры координаты точки B (x, y). Определить лежит ли данная точка на кривой f(x)=6x7-4.5x5+4x2. Погрешность составляет eps=10-3 (т.е. |f(x)-y| Высокий уровень Задача: Даны целочисленные координаты трех вершин прямоугольника, стороны которого параллельны координатным осям. Определить координаты четвертой вершины. x1, y1 = map(int, input("Бірінші төбенің координаталарын еңгізіңіз:").split()) x2, y2 = map(int, input("Екінші төбенің координаталарын еңгізіңіз:").split()) x3, y3 = map(int, input("Үшінші төбенің координаталарын еңгізіңіз:").split()) if x1 == x2: x4 = x3 if x1 == x3: x4 = x2 if x2 == x3: x4 = x1 if y1 == y2: y4 = y3 if y1 == y3: y4 = y2 if y2 == y3: y4 = y1 print("Төртінші төбенің координаталары :", x4, y4) . Оператор выбора вариантовСредний уровень Задание: написать блок схему и программу вычисления функции y(x) для всех различных вариантов входных параметров. Ввести с клавиатуры x, вывести значение функции для всех вариантов. 1. a=3.5; b=-0.73; c=2.5 2. a=15.4; b=-5.6; c=3.5 3. a=5.1; b=4; c=2.7 import math i = int(input("""1. a=3.5; b=-0.73; c=2.5 2. a=15.4; b=-5.6; c=3.5 3. a=5.1; b=4; c=2.7 """)) x = int(input("x:")) def f1(a, x, b, c): y = math.sqrt(math.fabs(a * x - pow(math.cos(pow(b, 3) * x), 2) + 5.1 * pow(c, 2))) return y def f2(x, b): y = math.exp(0.04 * x) + math.log(math.fabs(pow(b, 5) * math.cos(x))) return y def f3(b, x, a): y = pow(math.cos(pow(b, 3) * pow(x, 2)), 2) + math.log(math.fabs(b * x - pow(a, 2))) return y if i == 1: a = 3.5 b = -0.73 c = 2.5 if math.fabs(1 - pow(x, 2)) == a + c: y = f1(a, x, b, c) if math.fabs(1 - pow(x, 2)) > a + c: y = f2(a, x) if math.fabs(1 - pow(x, 2)) < a + c: y = f3(b, x, a) if i == 2: a = 15.4 b = -5.6 c = 3.5 if math.fabs(1 - pow(x, 2)) == a + c: y = f1(a, x, b, c) if math.fabs(1 - pow(x, 2)) > a + c: y = f2(a, x) if math.fabs(1 - pow(x, 2)) < a + c: y = f3(b, x, a) if i == 3: a = 5.1 b = 4 c = 2.7 if math.fabs(1 - pow(x, 2)) == a + c: y = f1(a, x, b, c) if math.fabs(1 - pow(x, 2)) > a + c: y = f2(a, x) if math.fabs(1 - pow(x, 2)) < a + c: y = f3(b, x, a) print("y = ", y) Высокий уровень Задание: написать блок-схему и программу с использованием оператора выбора варианта согласно заданию. Почтовый автомат предлагает поздравительные открытки на три темы (1Новогодние, 2 - С Днем Рождения, 3 - С Днем Защитника Отечества) в трех вариантах (a, b, c) по цене 2 гривны. Ввести с клавиатуры номер темы , вариант, и купюру оплаты (5,10, 20 гривен). Выдать нужную открытку (сообщение, например: «Новогодние, вариант с», а также сдачу (купюрами 1,2,5,10) с виде сообщения, например, «2гр+1гр». Предусмотреть обработку неправильного номера или варианта. d = { 1: "Новогодние", 2: "C Днем Рождения", 3: "C Днем Защитника Отчества" } d2 = { 1: ", вариант a.", 2: ", вариант b.", 3: ", вариант c." } d3 = { 1: "Сдача :2гр +1гр", 2: "Сдача :5гр +2гр +1гр", 3: "Сдача :10гр +5гр +2гр +1гр" } a = int(input("""Выберите тему: 1.Новогодние 2.C Днем Рождения 3.С Днем Защитника Отчества """)) b = int(input("""Выберите вариант: 1. a 2. b 3. c """)) c = int(input("""Выберите купюру оплаты: 1. 5гр 2. 10гр 3. 20гр """)) print(d[a], d2[b], d3[c]) Программирование циклических алгоритмовОператор цикла с параметром7. Средний уровень Задание: составить схему алгоритма и написать программу вычисления суммы (произведения) конечного ряда. При разработке программы предусмотреть пропуск слагаемых (множителей), равных нулю или бесконечности. import math k = int(input("k:")) n = 1 d = 0 s = 0 while n != (k + 1): s = (pow(-1, 2 * n) * (pow((pow(n, 2) - 9), 2))) / math.factorial(3 * n) d += s n += 1 print("Y:", d) Значение k ввести с клавиатуры Операторы цикла с предусловием и постусловием8.Средний уровень Задание: составить блок-схему алгоритма и программу согласно заданию. Билет называют «счастливым», если в его номере сумма первых трех цифр равна сумме последних трех. Подсчитать число тех «счастливых» билетов, у которых сумма трех цифр равна 13. Номер билета может быть от 000000 до 999999 . s = 0 for i in range(10): for j in range(10): for k in range(10): for l in range(10): for m in range(10): for n in range(10): if (i + j + k) == (l + m + n): if i + j + k == 13: s = s + 1 print(s) 9 . Высокий уровень Задание: составить блок-схему алгоритма и программу согласно условию задачи. Вычислить сумму чисел от 1 до N, возведенных в степень M. Возведение в степень оформить как многократное умножение . n = int(input("n:")) m = int(input("m:")) s = 0 for i in range(1,n+1): s += i **m print("Sum:",s) Вычисление бесконечных сумм10.???? уровень Задание: составить блок-схему алгоритма и программу вычисления суммы n членов ряда согласно условию задачи. n = int(input("n:")) x = int(input("x:")) S = 0 for i in range(1, n + 1): s = pow(-1, i + 1) * pow(x, (2 * i) + 1) / (((2 * i) + 1) * ((2 * i) - 1)) S += s print(S) Табулирование функций11.Средний уровень Задание: написать блок-схему и программу вычисления функции на заданном промежутке с шагом 0.2 и построить график этой функции . from math import e, cos, tan, sqrt import matplotlib.pyplot as plt import numpy as np import math fig, ax = plt.subplots() x = np.linspace(-(math.pi / 2), math.pi * 2, 100) print(x.any()) if x.any () > 4.5: y = x - 2 elif 1 <= x.any () <= 4.5: y = 1 + pow(x, 2) elif x.any () < 1: y = math.cos(2 * x) ax.plot(x, y) plt.show() МассивыОдномерные массивы13.Средний уровень Задание: составить схему алгоритма и программу решения задачи import random import math mass = [round(random.uniform(0, 10), 2) for i in range(6)] print(*mass) a = [] s = float(input("s:")) for i in mass: if s > i: d = math.fabs(s) - math.fabs(i) else: d = math.fabs(i) - math.fabs(s) a.append(d) indx = a.index(max(a)) print("Индекс:", indx, "Значение:", mass[indx]) Дан массив вещественных чисел. Определить элемент массива (значение и индекс), который наиболее удален от заданного вещественного числа S. 14. Высокий уровень Задание: составить схему алгоритма и программу решения задачи import random mass = [random.randint(0, 10) for i in range(5)] mass_bin = [] for i in mass: mass_bin.append(bin(i)) print(mass_bin) new_mass = [] mass_bin.sort() print("Өсу реті бойынша :", mass_bin) for i in mass_bin: new_mass.append(int(i, base=2)) s = sum(new_mass) / len(new_mass) print("Орташа арифметикалық :", bin(int(s))) Задан массив чисел в двоичной системе счисления. Упорядочить элементы массива по возрастанию. Определить среднее значение чисел. Двухмерные массивы15. Средний уровень. Задание: написать блок-схему и программу согласно заданию. Дан целочисленный массив В[1..5, 1..5]. Вычислить сумму элементов этого массива, расположенных выше левой диагонали. import random mass = [] for i in range(3): mass.append([random.randint(1, 9) for j in range(3)]) print(*mass, sep="\n") s = 0 for i in range(len(mass)): for j in range(len(mass) - 1 - i): s += mass[i][j] print("Сумма:", s) 16. Высокий уровень. Задание: написать блок-схему и программу согласно заданию. Дано число n. Создайте массив int A[n][n], и заполните его по следующему правилу: числа на диагонали, идущей из правого верхнего в левый нижний угол равны 1; числа, стоящие выше этой диагонали, равны 0; числа, стоящие ниже этой диагонали, равны 2. 0 0 0 1 0 0 1 2 0 1 2 2 1 2 2 2 n = int(input("n:")) a = [[0] * n for i in range(n)] for i in range(n): a[i][n - i - 1] = 1 for i in range(n): for j in range(n - i, n): a[i][j] = 2 print(*a,sep="\n") Функции и библиотекиФункции17. Средний уровень Задание: написать блок-схему и программу согласно заданию. В заданном массиве целых чисел найти максимальное и минимальное число, использую функции определения максимального и минимального числа import random mass = [random.randint(0, 10) for i in range(3)] print(*mass) def mn(m): mn = 999999 for i in m: if mn > i: mn = i return mn def mx(m): mx = 0 for i in m: if i > mx: mx = i return mx print("min:", mn(mass)) print("max:", mx(mass)) 18.Высокий уровень Задание: написать блок-схему и программу согласно заданию. Следует заметить, что практически все задания этой подгруппы можно легко решить и без использования рекурсии. Данное обстоятельство связано с тем, что в заданиях рассматриваются действительно простейшие примеры рекурсии, легко сводимые к итерационным алгоритмам. Более того, в некоторых случаях использование рекурсии приводит к неэффективным алгоритмам (см, например, задания 4 и 5). Однако, именно на подобных примерах проще всего получить первоначальные навыки разработки рекурсивных алгоритмов. Составить программу для нахождения числа, которое образуется из данного натурального числа при записи его цифр в обратном порядке. Например, для числа 1234 получаем результат 4321 . n = input("n:") print(n[::-1]) БиблиотекиДинамические структуры данныхДинамические массивы20. Средний уровень Задание: написать блок-схему и программу согласно заданию. Все массивы в заданиях объявить как динамические. Ввести в StringGrid массив из 13 вещественных чисел. Создать два новых массива – из положительных и отрицательных элементов исходного массива. Поменять местами максимальные элементы новых массивов. mass = [round(random.uniform(-10, 10), 1) for i in range(13)] new_mass1 = [] new_mass2 = [] for i in mass: if i < 0: new_mass1.append(i) else: new_mass2.append(i) print(mass, "\n1:", new_mass1, "\n2:", new_mass2, ) mx1 = max(new_mass1) mx2 = max(new_mass2) new_mass1[new_mass1.index(mx1)] = mx2 new_mass2[new_mass2.index(mx2)] = mx1 print("\n1:", new_mass1, "\n2:", new_mass2) Динамические структуры: стеки и очереди22. Средний уровень Задание: написать программу в соответствии с индивидуальным заданием. Создать очередь строковых значений, для реализации используя односвязные списки. Реализовать операции добавления (enqueue) и удаления (dequeue) элемента из очереди. Добавьте в очередь строки «one», «two», «three», «four» и распечатайте содержимое очереди. Удалите 1 элемент из очереди, затем добавьте в очередь строку «five» и распечатайте очередь еще раз. * Найдите суммарную длину строк, принадлежащих очереди. q = ["one", "two", "three", "four"] for j in range(2): S = 0 for i in q: S += len(i) print(q, "\nSum:", S) q.pop(0) q.append("five") Динамические структуры: списки24. Средний уровень Задание: написать программу в соответствии с индивидуальным заданием. Создать линейный однонаправленный список из целых чисел. Вставить в список последний четный элемент после каждого нечетного элемента. from random import randint mass = [] for i in range(10): n = randint(1, 100) mass.append(n) if n % 2 == 0: pos = n if n % 2 == 1: if "pos" in locals(): mass.append(pos) print(mass) Особые типы данныхСимвольный тип данных26. Средний уровень Задание: написать программу согласно заданию Дан массив символов, содержащий буквы латинского алфавита и цифры. Вывести на экран длину наибольшей последовательности цифр, идущих подряд. mass = ["a", "1", "2", "3", "b", "c", 'd', "5"] s = 0 new_s = [] for i in mass: if i.isdigit(): s += 1 else: new_s.append(s) s = 0 print(max(new_s)) 27. Высокий уровень Задание: написать программу согласно заданию. В заданном массиве символов слова зашифрованы — каждое из них записано наоборот. Расшифровать сообщение . mass = ["тевирП ", '! рим'] for i in mass: mass[mass.index(i)] = i[::-1] print(*mass) Строковый тип данных28. Средний уровень Задание: написать программу согласно заданию. В заданной строке удалить последний символ « » (пробел), который найдется в строке. S = "Привет , мир !" print(S) S = S[:S.rfind(" ")] + S[S.rfind(" ")+1:] print(S) 29. Высокий уровень Задание: написать программу согласно заданию. В заданной строке заменить каждый символ «!» числом, равным индексу этого символа в строке. Str = "Привет ! , мир !" print(Str) newStr = "" for i in Str: if i == "!": a = Str.index(i) Str = Str[:a] + str(a) + Str[a + 1:] print(Str) Структуры30. Средний уровень Задание: написать программу согласно заданию с использованием структуры. № поезда Направление Время прибытия Вывести данные о поездах, пребывающих в пути более суток Время отбытия Расстояние import datetime from collections import namedtuple Train = namedtuple("Train", ["Num", "direction", "arrival_time", "departure_time", "distance", ]) n = int(input("Ведите количество поездов")) for i in range(n): a = input("Время прибытия \n(ГГГГ.ММ.ДД)\n").split(".") d = input("Время отбытия :\n(ГГГГ.ММ.ДД)\n").split(".") b = [] for k in range(len(d)): a[k] = int(a[k]) d[k] = int(d[k]) a = datetime.datetime(*tuple(a)) d = datetime.datetime(*tuple(d)) if (a - d).days > 1: Train1 = Train(input("№ поезда :"), input("Направление:"), a, d, int(input("Расстояние :"))) b.append(Train1) for i in b: print(f""" 31. Высокий уровень Задание: написать программу согласно заданию с использованием структуры. Описать структуру с именем GROUP, содержащую поля: Name – фамилия и инициалы, DAT – дата рождения (год, месяц, число), SES – успеваемость (массив из трех элементов). Написать программу, выполняющую: - ввод с клавиатуры данных в массив GR5,состоящий из 10 структур типа GROUP; - вывод на экран записей, упорядоченных по возрастанию поля SES; -вывод списка студентов, возраст которых на 01.12.2010 года не превышает 20 лет; если таких студентов нет – выдать сообщение. from random import randint import datetime from collections import namedtuple n = int(input("Ведите количество студентовЖ")) a = [] GROUP = namedtuple("GROUP", ["Name", "DAT", "SES"]) for i in range(n): Name = input("Фамилия и инициалы:") data = input("Дата рождения \n(ГГГГ.ММ.ДД)\n").split(".") for k in range(len(data)): data[k] = int(data[k]) DAT = datetime.datetime(*data) SES = [randint(1, 10) for j in range(3)] now = datetime.datetime(2010, 12, 1) if (now - DAT).days < 20 * 365: GROUP1 = GROUP(Name, DAT, SES) a.append(GROUP1) new_a = [] for i in a: new_a.append(sum(i.SES)) new_a.sort() d = [] for i in new_a: for j in a: if i == sum(j.SES): d.append(j) print(d) for i in d: print(f""" ФайлыТекстовые файлы32. Средний уровень Задание: создать текстовый файл в текстовом редакторе. Организовать просмотр содержимого файла и выполнения действий в соответствии с условием индивидуального задания. Обеспечить сохранение всех полученных результатов в новый файл. Дан файл f, компоненты которого являются действительными числами. Найти последнюю компоненту файла. import random f = open("for32", "w") n = 0 while n < 5: n += 1 f.write(str(random.randint(0, 100)) + " ") f.close() f = open("for32") m = f.read() print(m) mass = m.split() print(mass[-1]) 33. Высокий уровень Задание: представленные задания оформить в виде текстового файла Файл состоит из k компонент структуры, где каждая компонента содержит две матрицы: первая размерности m × n, вторая размерности m × l. Получить k сумму соответствующих матриц и записать их во второй файл. Вывести на экран содержимое первого и второго файлов. from random import randint k = int(input("k:")) m = int(input("m:")) n = int(input("n:")) l = int(input("l:")) for g in range(k): mass1 = [[randint(1, 9) for i in range(n)] for j in range(m)] mass2 = [[randint(1, 9) for i in range(l)] for j in range(m)] f = open("for33", "w") for i in mass1: for j in i: f.write(str(j) + " ") f.write("\n") for i in mass2: for j in i: f.write(str(j) + " ") f.write("\n") f.close() f = open("for33") f2 = open("for33_2", "w") a = [] for line in f: q = sum(map(int, line.split())) if q != 0: a.append(q) for i in range(len(a)): f2.write(str(i + 1) + " line,Sum = " + str(a[i]) + "\n") f.close() f2.close() f, f2 = open("for33"), open("for33_2") print(f.read()) print(f2.read()) Бинарные файлы34. Средений уровень Задание: представленные задания оформить в виде бинарного файла. Создать бинарный файл с информацией о работниках телестудии: - фамилия; - должность; - образование; - дата приема на работу; - пол. Вывести сведения о работниках телестудии, которые работают на должности инженеров, но не имеющие высшего образования. import pickle import datetime File = open("34file.bin", "wb") n = int(input("Ведите количество сотрудников :")) mass = [] for i in range(n): tvstudio = { "name": input("Фамилия:"), "post": input("Должность:"), "education": input("Образование:"), "Data": datetime.datetime(*tuple(list(map(int, input("Дата приема на работу:").split("."))))) } mass.append(tvstudio) pickle.dump(mass, File) File.close() input_file = open("34file.bin", "rb") mass = pickle.load(input_file) for i in mass: if i["post"] == "инженер" and i["education"] != "высший": print(f""" Фамилия ---- {i["name"]} Должность ---- {i["post"]} Образование ---- {i["education"]} Дата приема на работу: ----{i["Data"]}""" ) input_file.close() 35.Средний уровень Задание: представленные задания оформить в виде бинарного файла Ввести в Memo или в StringGrid некоторое количество целых чисел в диапазоне 33 - 255 и записать их в бинарный файл. Переписать бинарный файл так, чтобы каждое значение, записанное в файле, было преобразовано в данные типа char, те в символьный тип данных. Распечатать содержимое файла до и после изменения данных в файле. import pickle from random import randint File = open("file.bin", "wb") mass = [] for i in range(10): mass.append(randint(33,255)) print(*mass) new_mass = [] for i in mass: new_mass.append(chr(i)) pickle.dump(new_mass, File) File.close() File = open("file.bin", "rb") m = pickle.load(File) print(*m) File.close() |