enflasyonemeklilikötvdövizakpartichpmhp
DOLAR
32,1784
EURO
34,9535
ALTIN
2.426,34
BIST
10.723,11
Adana Adıyaman Afyon Ağrı Aksaray Amasya Ankara Antalya Ardahan Artvin Aydın Balıkesir Bartın Batman Bayburt Bilecik Bingöl Bitlis Bolu Burdur Bursa Çanakkale Çankırı Çorum Denizli Diyarbakır Düzce Edirne Elazığ Erzincan Erzurum Eskişehir Gaziantep Giresun Gümüşhane Hakkari Hatay Iğdır Isparta İstanbul İzmir K.Maraş Karabük Karaman Kars Kastamonu Kayseri Kırıkkale Kırklareli Kırşehir Kilis Kocaeli Konya Kütahya Malatya Manisa Mardin Mersin Muğla Muş Nevşehir Niğde Ordu Osmaniye Rize Sakarya Samsun Siirt Sinop Sivas Şanlıurfa Şırnak Tekirdağ Tokat Trabzon Tunceli Uşak Van Yalova Yozgat Zonguldak
İstanbul
Hafif Yağmurlu
21°C
İstanbul
21°C
Hafif Yağmurlu
Salı Az Bulutlu
25°C
Çarşamba Az Bulutlu
25°C
Perşembe Az Bulutlu
26°C
Cuma Parçalı Bulutlu
27°C
SON DAKİKA
13:03 HONOR Dört Katmanlı Yapay Zeka Mimarisini Tanıtıyor! VivaTech 2024’te Daha Fazla Yapay Zeka Deneyimi için Google Cloud ile İş Birliği Yaptı
12:50 Ödemiş Belediye Başkanı Mustafa Turan, Ankara ziyaretleri kapsamında Etimesgut Belediye Başkanı Erdal Beşikçioğlu’nu ziyaret etti
12:49 Wilcynski Caddesi’nde yol çalışmasına devam
12:48 Antalya Büyükşehir’in ‘Koku Bahçesi’ ilgi görüyor
12:37 Bakan Tunç: 27 Mayıs demokrasi tarihinin kara lekesi
12:36 Başkanı Arı Nevşehir U17 Ligi’nin final müsabakasını izledi
12:28 Canlarımıza İyi Bakıyor ve Onları Tedavi Ediyoruz
12:25 Dünya Robot Olimpiyatı Türkiye 2024’te kazananlar belli oldu
12:21 Öğrencilere Doğal Afet Farkındalığı Eğitimi Verildi
12:16 Bakan Göktaş: Çocukları her açıdan destekliyoruz
12:15 ASAT Kumluca’nın kırsal mahallelerinde içme suyu hatlarını yeniliyor
12:14 Menderes Billboardları Can Dostların Sesi Oldu
12:09 Kaspersky, Acrid, ScarletStealer ve Sys01 hırsızlık yazılımlarının son evrimine ışık tuttu
11:55 Başkan Zeyrek’e hal esnafından teşekkür
11:50 Yeşilay’ın Yeni Genel Başkanı Doç. Dr. Mehmet Dinç Oldu
11:49 Ege Üniversitesi gastronomi ekibi Gence’de Ege Mutfağını tanıttı
11:44 DAĞDER Gençlik Kolları Başkanı Mustafa Arıaslan oldu
11:43 Başkan Büyükkılıç, Mevlana Kütüphanesi’nde gençlerle buluştu
11:42 Kemalpaşa Belediyesi, kent dokusunu bozan ve yıkılma riski taşıyan metruk yapıların yıkım çalışmalarına aralıksız devam ediyor
11:40 Bayraklı’da gıda satışı yapan işletmelere sıkı denetim
TÜMÜNÜ GÖSTER →

Ortaokulda Sorulan Bu Kodlama Sorusunu Çözebilecek misin?

Günümüzde pek çok kişi matematik ve kodlama arasındaki ilişkiyi tam olarak kabul etmese de, başlangıç seviyesinde kodlama gerçekleştirmek için de …

Ortaokulda Sorulan Bu Kodlama Sorusunu Çözebilecek misin?
05.08.2022
167
A+
A-

Günümüzde pek çok kişi matematik ve kodlama arasındaki ilişkiyi tam olarak kabul etmese de, başlangıç seviyesinde kodlama gerçekleştirmek için de temel düzeyde matematik bilgisi gerekiyor. Bu sayede yazılan, yazdığınız veya yazacağınız kodları anlamak ve anlaşılabilir kılmak mümkün oluyor.

İşte bu durumun son örneği, 21 Mayıs’ta gerçekleşen 30. Bilim Olimpiyatları’nda karşımıza çıktı. TÜBİTAK tarafından düzenlenen olimpiyatlarda ortaokullara sorulan kodlama sorusu, sosyal medyada bugün yeniden gündem oldu. Gelin, soruya, çözümüne ve gelen tepkilere bakalım.

İşte tartışma yaratan o temel düzeydeki kodlama sorusu:

Sayfayı hemen kaydırmayın! Önce biraz anlamaya ve burada ne sorulduğunu algılamaya çalışın.

Peki bu sorunun cevabı ne?

Bu sorunun cevabını verebilmek için aslında günümüzde artık herkeste olması gereken temel düzeyde kodlama bilgisine ihtiyacınız var. C yazılım dilinde yazılan yukarıdaki soru, bize aslında matematiksel bir durumu soruyor. Gelin, önce kodu hiç kodlama bilmeyenlerin de soruyu anlaması için satır satır açıklayalım.

main() {…} ne demek?:

Tüm kodumuzu kaplayan bu yapı, aslında bize bu kodun bir fonksiyonu temsil ettiğini gösteriyor. Bir programın yapı taşı olan fonksiyonlar, belirli bir işi yapmak için bir araya getirilen kodlardan oluşuyor. Fonksiyonlar içinde değişkenler ve yapılacak işlemler tanımlanıyor ve bu fonksiyon çalıştırıldığında ortaya bir sonuç çıkıyor. Bu, aslında tüm programlarda yerleşik olan, bir programın çalıştırıldığı anda ilk kez yürüttüğü kodların bulunduğu bir fonksiyondur.

int a = 0;

Her bir fonksiyon içinde değişken tanımladığımızı söylemiştik. İşte bu kod satırı da bize bir değişkeni tanımlıyor. Buradaki ‘int’ ifadesi, tam sayı değerleri temsil eden veri tipini ifade ediyor. Öncelikle değişkenimizin veri tipini kod içerisinde belirttikten sonra bu değişkenimize bir isim veriyoruz. Ardından değişkenimizin değerini programa sunuyoruz, yani diyoruz ki a’yı 0 al.

for (int b = 55; b > 0; a++, b = b – a);

Sorunun cevabı aslında bu satırda çıkıyor. Bu satırda ‘for(…;…;…)’ döngüsünden faydalanıyoruz. Programlamanın en temel yapı taşlarından birisi olan bu döngü sayesinde birbirini tekrar eden işlemleri satır satır yazmak yerine, tek bir satır içinde yazabiliyoruz. Bu döngü olmasaydı, birbirini tekrar eden işlemleri binlerce satır boyunca alt alta yazabilirdik. Örneğin bir ekrana 1’den 1000’e kadar sayı yazdırmak isteseydik, normalde bunların her birini her satırda “1 yaz, 2 yaz, 3 yaz, 4 yaz, 5 yaz…” gibi tekrarlardık.

For döngüsü, parantezlerin içine alınan ve noktalı virgüller ile ayrılan üç farklı durum istiyor. Bunlardan ilkinde döngümüzün başlangıç değerini tanımlıyoruz, sonrasında döngünün devamı için gereken koşulu söylüyoruz ve son olarak her bir döngüde ne yapılacağını anlatıyoruz. Bu üç durumun yazılış sıralaması kesinlikle değişmiyor. Gelin, yukarıdaki soruda yer alan bu üç durumu da açıklayalım.

  • int b = 55

Burada, tıpkı yukarıda yaptığımız gibi tam sayı türünde değişken belirliyoruz ve bu değişkenin adını ‘b’, değerini ise 55 olarak giriyoruz.

  • b > 0

Burada da döngümüze diyoruz ki, bu döngüyü ‘b’ 0’dan büyük olduğu sürece sürdür. “İyi de az önce b’ye 55 dedik, bu döngü sonsuza kadar sürmez mi?” diyor olabilirsiniz. Fakat az sonra yapacağımız işlemde b’nin değerini her bir döngüde değiştireceğiz.

  • a++, b = b – a

Geldik zurnanın zırt dediği yere. Bu satır, kodlamada noktalama işaretlerinin de ne kadar önemli olduğunu gösteriyor. Az önce for döngüsünün üç durum istediğini söylemiştik. Fakat burada aralarında virgül bulunan iki ifade görüyoruz. İşte bu virgül, aslında for döngüsünden iki işlem yapmasını istediğimizi gösteriyor. Virgül ile de üçüncü durumda belirttiğimiz, yapılmasını istediğimiz işlem sayısını artırabiliyoruz.

İlk işlemimizde (a++) programa diyoruz ki ‘a’ sayısını her döngüde 1 artır. Bu sayede ilk döngüde 0 olan ‘a’ önce 1, sonra 2, 3, 4, 5… diye değerlenecek (Binlerce satır kod yazmaktan da böylelikle kurtuluyoruz aslında). Fakat bu değerleme devam etmeden önce programdan bir şey daha istiyoruz: b = b – a.

Bu ifadede programdan istediğimiz şey ise her döngüyle birlikte ‘b’yi al, ‘b’ sayısından ‘a’ sayısını çıkararak yeni sayıyı ‘b’ye ata. Yani ‘b’ sayısının değerini ‘b-a’ yap. Bunu döngümüzün başladığı ana göre ifade ettiğimizde işlem şu şekilde olacak:

  • b = 55 (b) – 0 (a)
  • b = 55

Bu döngü, yapılan işlemler sonucunda son çıkan ‘b’ değişkeni 0 olana kadar devam edecek. Her bir yeni döngüde de bir önceki döngüde belirlenen ‘b’ değişkenini ele alacak. Yani birinci döngüde b = 55 olurken, ikinci döngüde b = 54 olacak.

printf(“%d”, a)

Bu komut satırında ‘printf’ fonksiyonunu kullanarak programa, konsola bir ifade yazmasını söylüyoruz. ‘%d’ ile yazacağı bu ifadenin bir tam sayı olacağını ve bu tam sayının da ‘a’ olacağını ifade ediyoruz.Bu komut satırı, ancak ve ancak yukarıda yer alan döngünün sonlanmasıyla birlikte, döngü sonucunda oluşan değerleri ele alarak çalışacak. Yani ‘b’, 0’a ulaşmadığı sürece program hiçbir şey yazdırmayacak.

Kodu açıkladık, sıra çözümde:

Şimdi gelelim çözüme. Döngünün her bir döngüde yapacağı işlem ve sonuçları şu şekilde olacak:

  • b = 55 – 0 => b = 55, a’yı 1 artır.
  • b = 55 – 1 => b = 54, a’yı 1 artır.
  • b = 54 – 2 => b = 52, (a sürekli artıyor)
  • b = 52 – 3 => b = 49,
  • b = 49 – 4 => b = 45….

Sorunun cevabı, yani döngünün vereceği son cevap ve döngüyü durduracağı son sayı, b’nin 0’a eşitlenmesi durumunda ortaya çıkacak. Peki döngü sonunda çıkan ‘b’nin sıfırlanması için ne gerekiyor? Elbette ‘a’ sayısına eşit olması. Bu durum da ancak a 10’a ulaştığında gerçekleşiyor:

  • b = 19 – 9 => b = 10
  • b = 10 – 10 => b = 0

Döngümüz, ‘b’ 0 olduğunda dur dediğimizden dolayı artık burada sonlanıyor. Döngü sonucunda ‘b’nin yeni değeri 0, ‘a’nın yeni değeri ise 10 olarak tanımlanıyor. Program, artık bir sonraki kod satırına, yani ‘printf()’ satırına geçiyor ve burada ‘a’ değerini bizlere yazıyor:

  • Cevap: 10.

Tabii tüm bu işlemi yapmak için programın gittiği adımlardan gitmek gerekmiyor. İşte matematik ve anladığını aktarma becerileri de burada devreye giriyor. Bu kod, bir matematik sınavında sorulsaydı aslında şu şekilde olacaktı:

  • 1’den başlayan ardışık sayıların toplamı, en son hangi sayıyı toplama dahil ettiğinizde toplam 55’e ulaşıyor?

Bu sorunun matematiksel cevabı da n(n+1)/2 = 55’in çözümü olacaktı. Burada denklemi karşılayan tek değer de 10 idi.

Soruya gelen tepkiler de bu şekildeydi:

  • Bir Ekşi Sözlük kullanıcısı da aslında sorunun önemini çok iyi şekilde şöyle anlatıyor:

ETİKETLER: , , , ,
Yorumlar

Henüz yorum yapılmamış. İlk yorumu yukarıdaki form aracılığıyla siz yapabilirsiniz.