From b72e439234dcddee5bfcdd1dda52f935b1c431a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dejan=20Ro=C5=BEi=C4=8D?= Date: Thu, 8 Jan 2026 12:46:13 +0100 Subject: [PATCH] added teorem.py - NSD - najvecji skupni delitelj svetil --- pages/teorem.py | 68 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 pages/teorem.py diff --git a/pages/teorem.py b/pages/teorem.py new file mode 100644 index 0000000..6a8613b --- /dev/null +++ b/pages/teorem.py @@ -0,0 +1,68 @@ +import streamlit as st + +st.set_page_config(page_title="Evklidov algoritem", page_icon="🧮") + +st.title("🧮 Evklidov algoritem za izračun NSD") + +st.markdown(""" +### Kaj je Evklidov algoritem? +Evklidov algoritem je starodaven in zelo učinkovit postopek za iskanje **največjega skupnega delitelja (NSD)** dveh naravnih števil. +Temelji na dejstvu, da je NSD(a, b) enak NSD(b, ostanek pri a ÷ b), dokler ostanek ni 0. +""") + +st.info("Vnesi dve pozitivni celi števili in aplikacija bo pokazala vse korake algoritma ter rezultat.") + +# Vnos števil +col1, col2 = st.columns(2) +with col1: + a = st.number_input("Prvo število (a)", min_value=1, value=64000000, step=1) +with col2: + b = st.number_input("Drugo število (b)", min_value=1, value=360000, step=1) + +if st.button("🚀 Izračunaj NSD", type="primary"): + # Kopija za prikaz + original_a, original_b = a, b + + # Zagotovimo, da je a večje ali enako b + num1, num2 = a, b + steps = [] + step = 1 + + if num1 < num2: + num1, num2 = num2, num1 + steps.append(f"🔄 Zamenjava: večje število je {num1}, manjše {num2}") + + while num2 != 0: + quotient = num1 // num2 + remainder = num1 % num2 + steps.append(f"**Korak {step}:** {num1} ÷ {num2} = {quotient} (celo število)") + steps.append(f" Ostanek: {num1} - {quotient} × {num2} = **{remainder}**") + steps.append(f" → NSD({num1}, {num2}) = NSD({num2}, {remainder})") + steps.append("") # prazen prostor + num1, num2 = num2, remainder + step += 1 + + nsd = num1 + + # Izpis rezultata + st.success(f"🎉 Največji skupni delitelj (NSD) števil {original_a} in {original_b} je: **{nsd}**") + + # Prikaz korakov + st.markdown("### 📋 Koraki Evklidovega algoritma:") + for s in steps: + st.markdown(s) + + st.markdown(f"**Končni rezultat:** Ostanek je 0 → NSD = **{nsd}**") + + # Bonus: okrajšanje ulomka + st.markdown("### 🎁 Bonus: Okrajšanje ulomka a / b") + if original_b % nsd == 0 and original_a % nsd == 0: + okrajsan_st = original_a // nsd + okrajsan_im = original_b // nsd + st.latex(f"\\dfrac{{{original_a}}}{{{original_b}}} = \\dfrac{{{okrajsan_st}}}{{{okrajsan_im}}}") + if okrajsan_im == 1: + st.info(f"Ulomek se okrajša na celo število: **{okrajsan_st}**") + else: + st.warning("Napaka pri okrajšavi – to se ne bi smelo zgoditi.") + +st.caption("Izdelal z ❤️ za učenje matematike | Streamlit + Evklid (okoli 300 pr. n. št.)") \ No newline at end of file