You are on page 1of 33

Міністерство освіти та науки України

Національний університет «Львівська політехніка»,


Інститут комп’ютерних наук та інформаційних технологій,
Кафедра «Системи автоматизованого проектування»

Звіт
до лабораторного практикума
з курсу «Основи програмування. Частина 2»

Виконано: ст. гр. ФЛ-25


Кшенська К. О.

Львів- 2023
САМОАНАЛІЗ УСПІШНОСТІ У НАВЧАННІ

Заповнити наприкінці 14-го тижня

1. Заняття відбуваються за розкладом в режимі онлайн за допомогою засобів


відеоконференційного зв'язку (аудиторно та із відео-записами роз’яснень за
темами). Опишіть детально саме свій досвід процесів начання на заняттях

Заняття відбувають аудиторно, за розкладом. Під час тривоги студенти йдуть в


укриття.

2. Онлайн заняття відбуваються у доступній формі із належним відображенням на


екрані матеріалу (або у відео-записі….) Детально опишіть, як саме Ви
опрацьовували викладений матеріал.

Аудиторні заняття(лекції) проходять в лекційних залах з презентацією матеріалу на


екрані. Особисто мені зручніше опрацьовувати записи лекцій з ВНС.

3. Викладач уміє інтерактивно працювати, підтримувати зацікавленість,


спонукати до дискусії

Так.

4. Методи проведення лабораторних занять дозволяють засвоїти матеріал й


виконати індивідуальні роботи

Так, викладач пояснює завдання, перевіряє виконану роботу і допомагає виправити


помилки, якщо вони є.

5. Навчальні матеріали у ВНС дозволяють підготуватися до занять, опрацювати


теоретичний матеріал й виконати індивідуальні роботи

Так, матеріали у ВНС включають в себе і завдання і лекційний матеріал, тому


виконувати лабораторні завдання дуже зручно.

6. Скільки занять із скількох Ви були, й скільки занять був викладач на


відеозаняттях (або аудиторно)

Мене не було декілька занять, але точне число сказати не зможу, викладачі були на
кожному занятті.

7. Яка якість роботи ВНС як системи (доступ, швидкість, опрацювання запитів).


Це технічний параметр залежить й від сервера, й від Вашого гаджета, каналів
зв’язку.

ВНС доступний, працює досить швидко, якщо не перегружати запитами.


8. Охарактеризуйте СВОЇ знання, вміння, навички до й після дисципліни.

З минулого семестру я знала деякі основи, а цього семестру я їх сильно розвинула


вдосконалила.

9. Як Ви й що саме засвоїли у навчальних лекціях

Засвоїла майже весь навчальний матеріял, хоча дві останні теми були непростими.

10. Як Ви й що засвоїли й охарактеризуйте навчальні лаб.роботи саме для Вашого


досвіду. Що Ви набули?

Я набула навичок роботи з більш складними задачами програмування, тож розумію як


працюють деякі програми.

11. Розширено охарактеризуйте для себе онлайн процеси навчання (комунікація,


планування, оцінювання, мотивування)

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

12. Який досвіт Ви готові занотувати у своє резюме для кар’єри.

Те, що я вивчала програмування цілий рік.

13. Загальна Ваша самооцінка 0...100 як Ви себе самооцінюєте у межає навчання


саме із цього курсу? Який приріст?

75

14 Скріни само продуктивності щотижня із ВНС


САМОАНАЛІЗ ВЗАЄМОДІЇ З ВИКЛАДАЧАМИ

Заповнити в електронному «Кабінеті студента» до 1 листопада

……тут вставити лише скрін, що був факт проходження анкетування-опитування,


«Надано відповіді» в електронному «Кабінеті студента>>Навчання>>Опитування» без
конкретних результатів анкети (неупереджене ставлення викладачів перед сесією).
Фінальні результати й так оголосять потім на наступний семестр після завершення курсу
……вставити лише скрін,
Список індивідуальних завдань
за номером варіанта
……..Активувати у ВНС автоматичний ГЕНЕРАТОР номерів варіантів. Ці номери вписати
далі разом із повними реченнями й формулами варіанту завдання із лаб.робіт
ПРОГРАМУВАТИ ОСОБИСТІ ЗАВДАННЯ в осінньому семестрі обов’язково двома мовами:
Python, JavaSript. Тому що тепер по 2 пари щотижня й кожна тема по 2 тижні.
Решта мов теж можна вставляти у звіт як розв’язки.

Лаб.8 завдання:
лаб.5 номер 03
лаб.6 номер 29
лаб.7 номер 01

Завдання із генератора у ВНС:


Лаб.9 завдання: 01
1. У текстовому файлі обчислити кількість крапок, ком і знаків оклику в
кожному рядку.

Лаб.10 завдання: 13
Для даних двох множин А та В цілих чисел у межах від 1 до 25 утворити множини C, D, E, F,
деC=AUB, D=A∩B, E=A\B, F=B\A. Перевірити, чи виконуються умови A⊆C, D⊆C, C=E U F
U D, E∩F=∅. Надрукувати елементи множин A, B, C, D, E, F.

Лаб.11 завдання: 22
У базі даних супермаркету міститься інформація про товар і його залишок на складі. У разі
залишку конкретного товару, меншого за 100 кілограм, необхідно видавати повідомлення
менеджеру про необхідність придбання такої продукції.

Лаб.12 завдання: 16
Сформувати динамічний рядок, вивести його на друк. Якщо у рядку є дві літери “К”, то
логічній змінній L присвоїти значення TRUE

Лаб.13 завдання: 09
Сформувати кільцевий однонаправлений список і видалити з нього всі літери “Р” перед
літерою “А”. Вивести на друк обидва списки.

Лаб.14 завдання: 29
Сформувати дерево, елементами якого є службові слова мови Паскаль, упорядковані за
алфавітом. Здійснити пошук слова CASE. Якщо слово відсутнє, то додати вузол з
відповідним ключем.
….
Лабораторна робота №8
Тема: "Поновлення знань й вмінь про IDE, Math, умовні конструкції, цикли, масиви, файли"
Мета: Мета роботи – поновити знання та вміння із попереднього курсу із "частина 1"
минулого семестра теми 01-04: IDE; math; if-then-else, case, switch; цикли, for, repeat, while);
теми 05-07: масиви array; символьні char, string; файли file) для всіх мов Python, Java,
JavaScript, C, C#, PHP, Pascal та порівняння їх правопису

Короткі теоретичні відповіді на контрольні запитання на повторення матеріалу за минулий


семестра
Загальне завдання про повторення минулого семестра, щоб пригадати

Програми (можна кілька із лаб.5-6-7)

Лаб. 5
Лаб. 6

*Лабораторна робота №7 не хоче навіть запускатися, не те що працювати.

Скріни результатів перевіряння й пригадування програмування у редакторах, які зробили


НАНОВО вже восени, щоб пригадати як програмувати.

Висновки
Мета роботи була пригадати все те, що було зроблено минулого семестру, але з невідомих
мені причин деякі лабораторні роботи не компілювалися так, як треба і як це було минулого
семестру, хоча в коді не було жодних змін.

Скріни тренінга-захисту у ВНС


Лабораторна робота №9
Тема: Підпрограми: функції, процедури (subprogram, function, procedure).
Мета - ознайомитися з особливостями застосування підпрограм в алгоритмічній мові.
Вивчити особливості застосування різних видів параметрів процедур, глобальних та
локальних змінних. Набути практичних навичок програмування з використанням процедур.
Ознайомитися з особливостями застосування підпрограм-функцій в алгоритмічній мові.
Вивчити рекурсивні функції та правила їх застосування. Набути практичних навичок
програмування з використанням функцій.

Короткі теоретичні відповіді на контрольні запитання


із ВНС онлайн самоконтролі теорії

Індивідуальне завдання (див. У додатках)


1. У текстовому файлі обчислити кількість крапок, ком і знаків оклику в
кожному рядку.

Програма із підпрограмами
Python
file_path = "C:/Users/user/Desktop/kkk/prog/lab9/file9.txt"
def count_punctuation(file_path):
try:
with open(file_path, 'r', encoding='utf-8') as file:
text = file.read()
# Count the punctuation marks
full_stops = text.count('.')
commas = text.count(',')
exclamation_marks = text.count('!')

return full_stops, commas, exclamation_marks


except FileNotFoundError:
print(f"File '{file_path}' not found.")
except Exception as e:
print(f"An error occurred: {e}")

if __name__ == "__main__":
file_path = "file9.txt" # Replace with the path to your text file
full_stops, commas, exclamation_marks = count_punctuation(file_path)

print(f"Number of Full Stops: {full_stops}")


print(f"Number of Commas: {commas}")
print(f"Number of Exclamation Marks: {exclamation_marks}")

Блок-схеми

Скріни програми й результатів запуску програми


Висновки
Мета роботи була ознайомитися з використанням підпрограм і функцій. Я використала
підпрограму для відкриття і підрахунку пунктуації в файлі після чого повернула результат в
головну програму для виведення результату на екран.

Скріни тренінга-захисту у ВНС


Лабораторна робота №10
Тема: "Реалізація множин у мові програмування"
Мета – ознайомлення із особливостями застосування множинних типів у мові
програмування. Вивчити особливості застосування множин під час розв’язування завдань.
Набути практичних навичок програмування з використанням множинного типу.

Відповіді на контрольні запитання


із ВНС онлайн самоконтролі теорії

Загальне й індивідуальне завдання для Додатку


Для даних двох множин А та В цілих чисел у межах від 1 до 25 утворити множини C, D, E, F,
деC=AUB, D=A∩B, E=A\B, F=B\A. Перевірити, чи виконуються умови A⊆C, D⊆C, C=E U F
U D, E∩F=∅. Надрукувати елементи множин A, B, C, D, E, F.

Блок-схема

Скріни роботи програм


python
# Define sets A and B
A = set(range(1, 26)) # A contains integers from 1 to 25
B = set(range(1, 26)) # Example set B, change it as needed

# Form sets C, D, E, and F


C = A.union(B) # C = A U B
D = A.intersection(B) # D = A ∩ B
E = A.difference(B) # E = A \ B
F = B.difference(A) # F = B \ A

# Check the conditions


condition1 = A.issubset(C) # A ⊆ C
condition2 = D.issubset(C) # D ⊆ C
condition3 = C == E.union(F).union(D) # C = E U F U D
condition4 = E.isdisjoint(F) # E ∩ F = ∅

# Print the elements of sets A, B, C, D, E, and F


print("Set A:", A)
print("Set B:", B)
print("Set C:", C)
print("Set D:", D)
print("Set E:", E)
print("Set F:", F)

# Check and print the conditions


print("Condition 1 (A ⊆ C):", condition1)
print("Condition 2 (D ⊆ C):", condition2)
print("Condition 3 (C = E U F U D):", condition3)
print("Condition 4 (E ∩ F = ∅):", condition4)

javascript
// Define sets A and B
const A = new Set([...Array(25).keys()].map(x => x + 1)); // A contains integers from 1 to 25
const B = new Set([...Array(25).keys()].map(x => x + 1)); // Example set B, change it as needed

// Form sets C, D, E, and F


const C = new Set([...A, ...B]); // C = A U B
const D = new Set([...A].filter(x => B.has(x))); // D = A ∩ B
const E = new Set([...A].filter(x => !B.has(x))); // E = A \ B
const F = new Set([...B].filter(x => !A.has(x))); // F = B \ A

// Check the conditions


const condition1 = Array.from(A).every(x => C.has(x)); // A ⊆ C
const condition2 = Array.from(D).every(x => C.has(x)); // D ⊆ C
const condition3 = [...C].every(x => E.has(x) || F.has(x) || D.has(x)); // C = E U F U D
const condition4 = [...E].every(x => !F.has(x)); // E ∩ F = ∅

// Print the elements of sets A, B, C, D, E, and F


console.log("Set A:", Array.from(A));
console.log("Set B:", Array.from(B));
console.log("Set C:", Array.from(C));
console.log("Set D:", Array.from(D));
console.log("Set E:", Array.from(E));
console.log("Set F:", Array.from(F));

// Check and print the conditions


console.log("Condition 1 (A ⊆ C):", condition1);
console.log("Condition 2 (D ⊆ C):", condition2);
console.log("Condition 3 (C = E U F U D):", condition3);
console.log("Condition 4 (E ∩ F = ∅):", condition4);
Скріни результатів для всіх програм
python

Js

Висновки
Моє завдання було перевірити умови в створених множинах А і В, я використала всі числа
від 1 до 25 для їх створення і всі умови підтвердилися, але можна також вписати числа
самостійно або вибрати рандомні з встановлених меж.
Скріни тренінга-захисту у ВНС
Лабораторна робота №11
Тема: "Комбіновані, структуровані типи даних, записи у мові програмування"
Мета – ознайомитись із особливостями застосування комбінованих типів (записів, структур)
у алгоритмічній мові програмування. Вивчити особливості застосування різних видів
записів. Набути практичних навичок програмування з використанням комбінованих типів.

Відповіді на контрольні запитання


із ВНС онлайн самоконтролі теорії

Загальне й індивідуальне завдання для Додатку


У базі даних супермаркету міститься інформація про товар і його залишок на складі. У разі
залишку конкретного товару, меншого за 100 кілограм, необхідно видавати повідомлення
менеджеру про необхідність придбання такої продукції.

Текст програми із використанням комбінованого типу (структури)


python
# Initialize the supermarket inventory
supermarket_inventory = {
'product1': int(input('Quantity of product1: ')),
'product2': int(input('Quantity of product2: ')),
'product3': int(input('Quantity of product3: ')),
'product4': int(input('Quantity of product4: ')),
}
# Function to check the inventory and notify the manager if the quantity is less
than 100 kilograms
def check_inventory(inventory):
for product, quantity in inventory.items():
if quantity < 100:
print(f"Notification: Product '{product}' is running low. Current
quantity: {quantity} kilograms. Please restock.")
# You can send a notification to the manager here (e.g., via email or a
messaging service).

# Simulate products' quantities getting lower with each run


for _ in range(4): # Repeat 5 times (you can change the number of runs)
for product in supermarket_inventory:
# Simulate a random decrease in quantity (you can adjust the decrease
logic)
decrease_amount = int(input('Enter sold quantity:'))
supermarket_inventory[product] -= decrease_amount

# Check the inventory after each run


check_inventory(supermarket_inventory)

Блок-схема

Скріни результатів обчислення при різних вхідних числах і похибках


Висновки
Я зробила програму, для підрахунку залишку і виведення повідомлення, якщо залишок
менший за конкретне число. Використала введення для початкового числа і для витрат,
таким чином, коли лишається менше 100, виводиться повідомлення. Також ця програма
зберігає попередні дані і віднімає від попереднього залишку, тобто число зменшується з
кожним циклом.

Скріни тренінга-захисту у ВНС


Лабораторна робота №12
Тема: "Вказівникові типи та динамічні об'єкти даних у мові програмування"
Мета – ознайомитись із особливостями застосування динамічних об’єктів, вказівників;
методів формування і обробки динамічних рядків символів. Набути практичних навичок
програмування з використанням динамічних об’єктів.

Короткі теоретичні відповіді на контрольні запитання


із ВНС онлайн самоконтролі теорії

Загальне й індивідуальне завдання для Додатку


Сформувати динамічний рядок, вивести його на друк. Якщо у рядку є дві літери “К”, то
логічній змінній L присвоїти значення TRUE

Блок-схема
Текст програми
# Введення рядку вручну або за допомогою вводу користувача
dynamic_string = input("Введіть рядок: ")

# Виводимо динамічний рядок на друк


print("Динамічний рядок:", dynamic_string)

# Перевіряємо, чи є дві літери "К" у рядку


l = dynamic_string.lower().count("k") == 2

# Виводимо значення L
print("Змінна L:", l)

Скріни результатів
Висновки
Моя робота була в тому, щоб зробити програму для обробки динамічного рядка і рахування
літер К в ньому. Я зробила ручне введення рядка і після цього програма переводить всі
літери в маленькі і рахує кількість букв К, якщо їх 2, то виводиться відповідне повідомлення.

Скріни тренінга-захисту у ВНС


Лабораторна робота №13
Тема "Складні динамічні вказівникові структури: одно- двонаправлені списки, черги, стеки у
мові програмування".
Мета – ознайомитись із особливостями застосування динамічних об’єктів складної
структури: списками, стеками та чергами; з операціями, які виконуються над елементами цих
об’єктів. Набути практичних навичок програмування з використанням динамічних об’єктів
складної структури.

Відповіді на контрольні запитання


із ВНС онлайн самоконтролі теорії

Загальне й індивідуальне завдання для Додатку


Сформувати кільцевий однонаправлений список і видалити з нього всі літери “Р” перед
літерою “А”. Вивести на друк обидва списки.

Текст програми із використанням динамічних структур та підпрограм формування списків,


чи черг, чи стеків
class Point:
def init(self):
self.elem = 0
self.next = None

def vstav(lanka, info):


q = Point()
q.elem = info
q.next = lanka.next
lanka.next = q

def vydal(lanka):
q = lanka
while q.next is not None:
if q.next.elem == 'P' and q.next.next is not None and q.next.next.elem ==
'A':
q.next = q.next.next.next
else:
q = q.next

def vyvid(lanka):
q = lanka
while q is not None:
print(q.elem, end=' ')
q = q.next
print()

def is_int(s):
try:
int(s)
return True
except ValueError:
return False

print("\nPlease, enter letters")


st = input().split(' ')
i = -1
vslov = Point()
vslov.next = vslov
vlan = vslov

while True:
i += 1
num = st[i]
vstav(vlan, num)
vlan = vlan.next
if i == len(st) - 1:
break

print("\nList before\n")
vyvid(vslov)
vlan = vslov
vydal(vlan)
print("\nResult\n")
vyvid(vslov)

Блок-схеми основного алгоритму та підалгоритмів


Скріни програми

Висновки
Лабораторна була спрямована на створення кільцевого списку і зчитування кожної ланки для
виконання операції. Задача полягала в віднайденні бувки Р яка стоїть перед А і видаленні Р.

Скріни тренінга-захисту у ВНС


Лабораторна робота №14
Тема: "Динамічні вказівникові структури: бінарні дерева у мові програмування"
Мета – ознайомитись із особливостями побудови та застосування динамічних об’єктів
складної структури: таблиць і бінарних дерев; з операціями, які виконуються над елементами
цих об’єктів. Набути практичних навичок програмування з використанням динамічних
об’єктів складної структури зокрема бінарних дерева.

Відповіді на контрольні запитання


із ВНС онлайн самоконтролі теорії

Загальне й індивідуальне завдання для Додатку


Сформувати дерево, елементами якого є службові слова мови Паскаль, упорядковані за
алфавітом. Здійснити пошук слова CASE. Якщо слово відсутнє, то додати вузол з
відповідним ключем.

Рисунок схеми побудови гілок бінарного дерева


Тексти програм із використанням динамічних бінарних дерев та підпрограм формування
вузлів дерева
class DataInfo:
def init(self):
self.info = ""

class Point:
def init(self):
self.kluch = 0
self.zap = None
self.lv = None
self.pr = None

vtree = None
node = None
kl = 0
st = ""

def treecheck(k, d):


q = None
rez = None
b = False
p=d
if d is not None:
while True:
q=p
if p.kluch == k:
b = True
else:
q=p
if k < p.kluch:
p = p.lv
else:
p = p.pr
if (b == True) or (p is None):
break
rez = q
return b, rez

def treeadd(k, d, rec):


b, p = treecheck(k, d)
if b == False:
t = DataInfo()
t.info = rec
s = Point()
s.kluch = k
s.zap = t
s.lv = None
s.pr = None
if d is None:
d=s
else:
if k < p.kluch:
p.lv = s
else:
p.pr = s
return d

def vd(d):
q=d
while (q.lv is not None):
q = q.lv
return q

def treewatch(d, st):


if d is not None:
treewatch(d.lv, "left=")
print(st, d.kluch, "", d.zap.info)
treewatch(d.pr, "right=")

# mainprogram
vtree = None
node = None
kl = 0
st = ""

# pre-installed data
vtree = treeadd(100, vtree, "in")
treeadd(50, vtree, "if")
treeadd(200, vtree, "label")
treeadd(65, vtree, "go to")
treeadd(250, vtree, "mod")
treeadd(60, vtree, "do")
treeadd(300, vtree, "not")
treeadd(350, vtree, "record")
print("My tree before:")
treewatch(vtree, "TOP1=")
b, node = treecheck(55, vtree)
if b == True:
print("My tree after:")
treewatch(vtree, "TOP2=")
else:
treeadd(55, vtree, "case")
print("My tree after:")
treewatch(vtree, "TOP2=")

Блок-схеми для основного алгоритму та під алгоритмів

Скріни програм
Висновки
Бінарні дерева допомагають у візуалізації, раціоналізації та пошуку інформації у великій її
кількості. В цій лабораторній я робила дерево зі службовими словами мови Паскаль, далі
мала шукати конкретне слово і, якщо такого не було, додати відповідний вузол дерева або
вивести те саме дерево.

Скріни тренінга-захисту у ВНС

You might also like