Net Fikir » yazılım » Ebob-Ekok Oluşturucu (Python Kod)
Ebob-Ekok Oluşturucu (Python Kod)
Etiketler :
asal sayılar
çarpanlar
ebob
kodlama
setup
yazılım
"Ebob-Ekok Oluşturucu" Python programı, özellikle ortaokul seviyesindeki öğrenciler için matematiksel kavramların daha iyi anlaşılmasına yardımcı olmak amacıyla geliştirilmiştir. Bu yazılım, rastgele seçilen sayılarla EBOB (En Büyük Ortak Bölen) ve EKOK (En Küçük Ortak Kat) hesaplamalarını otomatikleştirerek, öğretmenlerin ve öğrencilerin alıştırma yapmalarını kolaylaştırır. Bu programın temel amacı, öğrencilerin EBOB ve EKOK kavramlarını uygulamalı bir şekilde öğrenmelerini sağlamaktır. Öğrenciler, rastgele oluşturulan sayı gruplarının asal çarpanlarını ayırarak bu değerleri hesaplamayı öğrenirler. Ayrıca, programın çıktısı olan PDF dosyaları, öğretmenlerin sınıf içi etkinliklerde veya ödevlerde kullanabileceği alıştırma sayfaları sunar.
Çarpan ve Katlar konusunda EBOB ve EKOK işlemleinin daha iyi anlaşılması için 300 den küçük sayılar arasından rasgele sayılar seçerek, ikili ya da üçlü sayı grupları oluşturup, bunların EBOB - EKOK değerlerinin bulunması şeklinde alıştırma sayfasını oluşturan PYTHON kodlaması aşağıda verilmiştir. Program arayüzü aşağıdaki gibidir:
Kodlamada istediğiniz şekilde özelleştirmelerde bulunabilir, yeni özellikler ve iyileştirmeler yapabilirsiniz. Programda en fazla 100 kadar işlem oluşturulabilmekte ve sayı grupları 2'li veya 3'lü grup olarak seçilebilmektedir.
Program çıktısı A4 sayfa düzenine göre hazırlanmıştır. Programın Python kodu aşağıdaki gibidir. Aşağıdaki kod düzenini kopyalayarak üzerinde istediğiniz gibi değişikliklikler yapabilirsiniz. Özellikle ortaokul kademesinde alıştırma yaprakları oluşturmada program büyük kolaylık sağlayacaktır. Program sayesinde hazırlanan etkinlikler yardımıyla öğrenciler, öğretmen rehberliğinde sınıf içi etkinliklerde alıştırmalarla EBOB ve EKOK hesaplamalarını öğrenebilirler. Ayrıca evde yapacakları ödevlerle konuyu pekiştirme imkânı bulurlar. Sınav hazırlığı sürecinde de bu pratik alıştırmalar sayesinde konuyu daha iyi anlama fırsatı yakalarlar. Öğretmenler ise sınıf seviyesine uygun zorlukta, özelleştirilmiş alıştırmalar hazırlayarak öğrencilerin ihtiyaçlarına yönelik destek sağlayabilirler. Kadir PANCAR
import random
import math
import os
import platform
import subprocess
from fpdf import FPDF
import tkinter as tk
from tkinter import messagebox
from tkinter import ttk
from collections import Counter
son_gruplar = []
def ortak_bolen_var_mi(grup):
ebob = math.gcd(grup[0], grup[1])
if len(grup) == 3:
ebob = math.gcd(ebob, grup[2])
return ebob > 1
def rastgele_grup(grup_boyutu):
if grup_boyutu == "karisik":
grup_boyutu = random.choice([2, 3])
else:
grup_boyutu = int(grup_boyutu)
while True:
grup = random.sample(range(2, 300), grup_boyutu)
if ortak_bolen_var_mi(grup):
return grup
def pdf_olustur(dosya_adi, toplam_grup_sayisi, grup_boyutu):
global son_gruplar
son_gruplar = []
pdf = FPDF()
pdf.add_page()
pdf.set_font("Arial", "B", 14)
pdf.cell(0, 15, "EBOB EKOK Islemleri", ln=1, align="C")
pdf.set_font("Arial", size=12)
pdf.multi_cell(0, 10, "Asagidaki sayilarin EBOB ve EKOK degerlerini bulunuz. Her bir sayiyi asal carpanlarina ayiriniz.")
pdf.ln(10)
sutun_sayisi = 4
sayfa_genisligi = 210
kenar_bosluk = 10
satir_bosluk = 20
sutun_genislik = (sayfa_genisligi - 2 * kenar_bosluk) / sutun_sayisi
grup_sayaci = 0
while grup_sayaci < toplam_grup_sayisi:
gruplar = [rastgele_grup(grup_boyutu) for _ in range(sutun_sayisi)]
y_start = pdf.get_y()
max_h = 0
for i, grup in enumerate(gruplar):
if grup_sayaci >= toplam_grup_sayisi:
break
x = kenar_bosluk + i * sutun_genislik
pdf.set_xy(x, y_start)
grup_str = " ".join(f"{s:>3}" for s in grup)
pdf.cell(sutun_genislik, 8, grup_str, border=0, ln=0, align="L")
max_h = max(max_h, 8)
son_gruplar.append(grup)
grup_sayaci += 1
pdf.ln(max_h + 10)
pdf.output(dosya_adi)
def ekok_hesapla(a, b):
return abs(a * b) // math.gcd(a, b)
def ekok_liste(grup):
if len(grup) == 2:
return ekok_hesapla(grup[0], grup[1])
else:
return ekok_hesapla(grup[0], ekok_hesapla(grup[1], grup[2]))
def asal_carpan_ayir(n):
i = 2
carpanlar = []
while i * i <= n:
while n % i == 0:
carpanlar.append(i)
n //= i
i += 1
if n > 1:
carpanlar.append(n)
return carpanlar
def carpanlari_ussu_ile_yaz(carpanlar):
sayac = Counter(carpanlar)
return "*".join(
f"{p}^{sayac[p]}" if sayac[p] > 1 else f"{p}"
for p in sorted(sayac)
)
def cevap_pdf_olustur():
if not son_gruplar:
messagebox.showinfo("Uyarı", "Henüz işlem PDF'si oluşturulmadı.")
return
sat_aralik = 5
pdf = FPDF()
pdf.add_page()
pdf.set_font("Arial", "B", 14)
pdf.cell(0, 15, "EBOB EKOK Cevaplari", ln=1, align="C")
pdf.set_font("Arial", size=11)
pdf.ln(10)
sutun_sayisi = 3
sayfa_genisligi = 240
kenar_bosluk = 8
sutun_genislik = (sayfa_genisligi - 2 * kenar_bosluk) / sutun_sayisi
grup_sayaci = 0
while grup_sayaci < len(son_gruplar):
satir_gruplar = son_gruplar[grup_sayaci:grup_sayaci + sutun_sayisi]
y_start = pdf.get_y()
max_h = 0
for i, grup in enumerate(satir_gruplar):
x = kenar_bosluk + i * sutun_genislik
pdf.set_xy(x, y_start)
grup_str = " ".join(f"{s:>3}" for s in grup)
pdf.cell(sutun_genislik, sat_aralik, grup_str, ln=0, align="L")
ebob = math.gcd(grup[0], grup[1])
if len(grup) == 3:
ebob = math.gcd(ebob, grup[2])
ekok = ekok_liste(grup)
y = y_start + sat_aralik
pdf.set_xy(x, y)
pdf.cell(sutun_genislik, sat_aralik, f"EBOB= {ebob}", ln=0, align="L")
y += sat_aralik
pdf.set_xy(x, y)
pdf.cell(sutun_genislik, sat_aralik, f"EKOK= {ekok}", ln=0, align="L")
uslu_carpanlar = []
for sayi in grup:
y += sat_aralik
carpanlar = asal_carpan_ayir(sayi)
uslu = carpanlari_ussu_ile_yaz(carpanlar)
pdf.set_xy(x, y)
pdf.cell(sutun_genislik, sat_aralik, f"{sayi} = {uslu}", ln=0, align="L")
uslu_carpanlar.append(Counter(carpanlar))
ortak_ekok = Counter()
for c in uslu_carpanlar:
for prime in c:
ortak_ekok[prime] = max(ortak_ekok.get(prime, 0), c[prime])
y += sat_aralik
ekok_uslu = "*".join(
f"{p}^{ortak_ekok[p]}" if ortak_ekok[p] > 1 else f"{p}"
for p in sorted(ortak_ekok)
)
pdf.set_xy(x, y)
pdf.cell(sutun_genislik, sat_aralik, f"EKOK = {ekok_uslu}", ln=0, align="L")
max_h = max(max_h, y - y_start + sat_aralik)
pdf.ln(max_h + 12)
grup_sayaci += sutun_sayisi
if pdf.get_y() > 250:
pdf.add_page()
pdf.output("cevaplar_ebob_ekok.pdf")
pdf_ac("cevaplar_ebob_ekok.pdf")
def pdf_ac(dosya_adi):
try:
sistem = platform.system()
if sistem == "Windows":
os.startfile(dosya_adi)
elif sistem == "Darwin":
subprocess.call(["open", dosya_adi])
elif sistem == "Linux":
subprocess.call(["xdg-open", dosya_adi])
except Exception as e:
messagebox.showerror("PDF Açma Hatası", f"PDF açılırken hata oluştu:\n{e}")
def olustur_ve_goster():
girilen = giris.get()
if not girilen.isdigit():
messagebox.showerror("Hata", "Lütfen geçerli bir sayı girin.")
return
adet = int(girilen)
if adet < 1 or adet > 100:
messagebox.showerror("Hata", "Lütfen 1 ile 100 arasında bir sayı giriniz.")
return
try:
pdf_olustur("sayilar_ebob_ekok.pdf", adet, grup_boyutu.get())
pdf_ac("sayilar_ebob_ekok.pdf")
giris.delete(0, tk.END)
except Exception as e:
messagebox.showerror("Hata", str(e))
pencere = tk.Tk()
pencere.title("EBOB-EKOK PDF Oluşturucu")
pencere.geometry("400x230")
pencere.resizable(False, False)
etiket = tk.Label(pencere, text="Kaç tane EBOB-EKOK işlemi olsun? (1-100)", font=("Arial", 11))
etiket.pack(pady=5)
giris = ttk.Entry(pencere, font=("Arial", 12), width=10, justify="center")
giris.pack(pady=5)
giris.focus()
grup_boyutu = tk.StringVar(value="2")
secenek_frame = tk.Frame(pencere)
secenek_frame.pack(pady=5)
tk.Label(secenek_frame, text="Sayı Grubu Seçimi:", font=("Arial", 10)).pack()
radio_frame = tk.Frame(secenek_frame)
radio_frame.pack()
tk.Radiobutton(radio_frame, text="2'li", variable=grup_boyutu, value="2").pack(side="left", padx=5)
tk.Radiobutton(radio_frame, text="3'lü", variable=grup_boyutu, value="3").pack(side="left", padx=5)
tk.Radiobutton(radio_frame, text="Karışık", variable=grup_boyutu, value="karisik").pack(side="left", padx=5)
buton_frame = tk.Frame(pencere)
buton_frame.pack(pady=10)
# Kadir PANCARttk.Button(buton_frame, text="PDF Görüntüle", command=olustur_ve_goster).grid(row=0, column=0, padx=10)
ttk.Button(buton_frame, text="Cevaplar", command=cevap_pdf_olustur).grid(row=0, column=1, padx=10)
pencere.mainloop()
|
|
Takip et: @kpancar |
Aşağıdaki Yazılar İlginizi Çekebilir!!!
Matematik Konularından Seçmeler
matematik
(301)
geometri
(133)
ÖSYM Sınavları
(61)
trigonometri
(56)
üçgen
(49)
çember
(36)
sayılar
(32)
fonksiyon
(30)
türev
(26)
alan formülleri
(25)
analitik geometri
(23)
dörtgenler
(19)
denklem
(18)
limit
(18)
belirli integral
(14)
katı cisimler
(12)
istatistik
(11)
koordinat sistemi
(11)
fraktal geometri
(7)
materyal geliştirme
(7)
asal sayılar
(6)
elips
(3)
tümevarım
(3)
binom açılımı
(2)
hiperbol
(2)






0 yorum:
Fayda vermeyen ilimden Allah'a sığınırım. İlim; amel etmek ve başkalarıyla paylaşmak içindir. Niyetimiz samimiyetle insanlara yararlı olmaktır, akıbetimiz bu vesileyle güzel olsun. Dua eder, dualarınızı beklerim...
"Allah'ım; bana fayda sağlayacak ilimleri öğret ve ilmimi ziyadeleştir."
“Allahım! Sana teslim oldum, sana inandım, sana güvendim. Yüzümü, gönlümü sana çevirdim. İşlediğim tüm günahlarımı affeyle! Ey kalbleri çeviren Allahım! Kalbimi dînin üzere sâbit kıl. Beni Müslüman olarak vefât ettir ve beni sâlihler arasına kat!”
“Rabbim! Bizi doğru yola ilettikten sonra kalplerimizi eğriltme! Bize tarafından bir rahmet bağışla.Öne geçiren de sen, geride bırakan da sensin. Muhakkak ki lütfu en bol olan Sen’sin. Senden başka ilâh yoktur."
Lâ ilâhe illallah Muḥammedürrasulüllâh
KADİR PANCAR