Merge remote-tracking branch 'lab41/master'
This commit is contained in:
		
						commit
						e6acb73ccb
					
				
							
								
								
									
										35
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								README.md
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										56
									
								
								main.py
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										17
									
								
								sample_data.txt
									
									
									
									
									
										Normal 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
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user