Merge remote-tracking branch 'lab41/master'

This commit is contained in:
dymik739 2023-03-19 12:55:17 +02:00
commit e6acb73ccb
3 changed files with 108 additions and 0 deletions

35
README.md Normal file
View File

@ -0,0 +1,35 @@
# Physics lab 41
Скрипт для автоматичного виконання лабораторної роботи з фізики під номером 41
## Встанолення
Спочатку необхідно завантажити цей скрипт (будь-яким чином), наприклад:
```
git clone http://10.1.1.1:3000/dymik739/physics-lab-41.git
```
Після цього треба перейти у папку зі скриптом, щоб мати можливість запускати його:
```
cd physics-lab-41/
```
## Використання
Спочатку необхідно створити файл з початковими даними таблиці, які були надані викладачем. У файлі необхідно послідовно вписувати значення відповідних змінних, розділяючи їх пропусками.
Кожен рядок таблиці має мати значення у такому порядку:
```
L2 L1 t2 m Δm t2i
```
У цьому файлі дозволяється залишати порожні рядки, коментарі та додаткові параметри. Приклад оформлення можна побачити у файлі `sample_data.txt`, який містить в собі справжні дані до цієї лабораторної. Дійсні числа можна вказувати у десятковому форматі (допускається відділення цілої частини від дробової за допомогою крапки або коми)
Тепер, коли файл початкової таблиці заповнений, можна запустити програму і вказати файл, який треба використати:
```
python3 main.py your_file.txt
```
Програма все обчислить і видасть Вам результати.
Ну і все! Лабораторна робота 41 виконана.
__Увага!__ Ця програма знаходиться на стадії розробки, тому не всі розрахунки відбуваються правильно.

56
main.py Normal file
View File

@ -0,0 +1,56 @@
import os, sys
def avg(a):
return sum(a) / len(a)
def process_table(file):
table = [["L2", "L1", "t2", "m", "Δm", "t2i", "v1", "(v1)^2", "a", "ai", "❬a❭", "A", "B"]]
supported_args = ["r"]
config = {"r": 6}
with open(file, "r", encoding = "UTF-8") as f:
for i in f:
if i.rstrip("\r\n") != "":
if i.rstrip("\r\n")[0] == "#" or i.rstrip("\r\n")[0] == ";":
print(f"Special line: {i}")
try:
cline = i.rstrip("\r\n")[1:].split()
if len(cline) == 2 and cline[0] in supported_args:
config[cline[0]] = int(cline[1])
except:
pass
else:
print(f"Table line: {i}")
table.append(list(map(lambda x: float(x), i.rstrip("\r\n").replace(",", ".").split())))
r = config["r"]
for i in table[1:]:
i.append(round(i[0] / i[2], r))
i.append(round(i[6]**2, r))
i.append(round((i[0]**2)/(2*(i[2]**2)*i[1]), r))
preset_L2 = table[1][0]
preset_L1 = table[1][1]
for i in table[1:]:
i.append(round((preset_L2**2) / (2 * (i[5]**2) * preset_L1), r))
#i.append(round((i[0]**2) / (2 * (i[5]**2) * i[1]), r))
preset_avg_a = [avg(list(zip(*table[1:][i:i+3]))[9]) for i in range(0, 12, 3)]
for i in range(4):
for k in range(3):
table[1 + i*3 + k].append(round(preset_avg_a[i], r))
for i in table[1:]:
i.append(round(i[4]/(2*i[3]), r))
i.append(round(i[10]/(9.8-i[10]), r))
w = max([max(list(map(lambda x: len(str(x)), i))) for i in table])
print("\n".join([" | ".join(list(map(lambda x: str(x).center(w), i))) for i in table]))
miss_rate = round(abs(avg(list(zip(*table[1:]))[11]) - avg(list(zip(*table[1:]))[12])), r)
print(f"\nОбчислюємо похибку за формулою |❬A❭ - ❬B❭| = |{round(avg(list(zip(*table[1:]))[11]), r)} - {round(avg(list(zip(*table[1:]))[12]), r)}| = {miss_rate}")
if len(sys.argv) == 2 and os.path.exists(sys.argv[1]):
process_table(sys.argv[1])
else:
print("Будь ласка, вкажіть файл для обробки")

17
sample_data.txt Normal file
View File

@ -0,0 +1,17 @@
# r 5
0.2 0,227 0,269 49 20.2 0,275
0.2 0,227 0,265 49 20.2 0,299
0.2 0,227 0,262 49 20.2 0,310
0.2 0,207 0,287 49 16.1 0,333
0.2 0,207 0,271 49 16.1 0,327
0.2 0,207 0,280 49 16.1 0,322
0.2 0,187 0,337 49 10.2 0,373
0.2 0,187 0,311 49 10.2 0,365
0.2 0,187 0,298 49 10.2 0,376
0.2 0,157 0,321 49 28 0,265
0.2 0,157 0,325 49 28 0,247
0.2 0,157 0,325 49 28 0,288