added teorem.py - NSD - najvecji skupni delitelj svetil
This commit is contained in:
parent
9ccf422c4a
commit
b72e439234
68
pages/teorem.py
Normal file
68
pages/teorem.py
Normal file
|
|
@ -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.)")
|
||||
Loading…
Reference in a new issue