Beykozlu
New member
Günümüzde bir fazlaca kişi matematik ve kodlama içindeki ilgiyi tam olarak kabul etmese de, başlangıç seviyesinde kodlama gerçekleştirmek için de temel seviyede matematik bilgisi gerekiyor. Bu sayede yazılan, yazdığınız yahut 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ınca düzenlenen olimpiyatlarda ortaokullara sorulan kodlama sorusu, toplumsal medyada bugün bir daha gündem oldu. Gelin, soruya, tahliline ve gelen yansılara bakalım.
İşte tartışma yaratan o temel seviyedeki kodlama sorusu:
Sayfayı çabucak kaydırmayın! Evvel biraz anlamaya ve burada ne sorulduğunu algılamaya çalışın.
Peki bu sorunun karşılığı ne?
Bu sorunun karşılığını verebilmek için aslında günümüzde artık herkeste olması gereken temel seviyede kodlama bilgisine gereksiniminiz var. C yazılım lisanında yazılan üstteki soru, bize aslında matematiksel bir durumu soruyor. Gelin, evvel 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 işlevi temsil ettiğini gösteriyor. Bir programın yapı taşı olan işlevler, muhakkak bir işi yapmak için bir ortaya getirilen kodlardan oluşuyor. İşlevler ortasında değişkenler ve yapılacak süreçler tanımlanıyor ve bu işlev ç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 birinci kere yürüttüğü kodların bulunduğu bir işlevdir.
int a = 0;
Her bir işlev ortasında 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’ sözü, tam sayı değerleri temsil eden bilgi tipini tabir ediyor. Öncelikle değişkenimizin bilgi tipini kod içerisinde belirttikten daha sonra bu değişkenimize bir isim veriyoruz. Akabinde değişkenimizin pahasını programa sunuyoruz, yani diyoruz ki a’yı 0 al.
for (int b = 55; b > 0; a++, b = b – a);
Sorunun yanıtı 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ü yardımıyla birbirini yine eden süreçleri satır satır yazmak yerine, tek bir satır ortasında yazabiliyoruz. Bu döngü olmasaydı, birbirini tekrar eden süreçleri binlerce satır boyunca alt alta yazabilirdik. Örneğin bir ekrana 1’den 1000’e kadar sayı yazdırmak isteseydik, olağanda bunların her birini her satırda “1 yaz, 2 yaz, 3 yaz, 4 yaz, 5 yaz…” üzere yenidenlardık.
For döngüsü, parantezlerin içine alınan ve noktalı virgüller ile ayrılan üç farklı durum istiyor. Bunlardan birincisinde döngümüzün başlangıç değerini tanımlıyoruz, daha 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ı katiyetle değişmiyor. Gelin, üstteki soruda yer alan bu üç durumu da açıklayalım.
İlk sürecimizde (a++) programa diyoruz ki ‘a’ sayısını her döngüde 1 artır. Bu sayede birinci döngüde 0 olan ‘a’ evvel 1, daha sonra 2, 3, 4, 5… diye pahalanacak (Binlerce satır kod yazmaktan da bu biçimdelikle kurtuluyoruz aslında). Ancak bu değerleme devam etmedilk evvel programdan bir şey daha istiyoruz: b = b – a.
Bu tabirde 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 cet. Yani ‘b’ sayısının bedelini ‘b-a’ yap. Bunu döngümüzün başladığı ana bakılırsa söz ettiğimizde süreç şöyle olacak:
printf(“%d”, a)
Bu komut satırında ‘printf’ işlevini kullanarak programa, konsola bir söz yazmasını söylüyoruz. ‘%d’ ile yazacağı bu tabirin bir tam sayı olacağını ve bu tam sayının da ‘a’ olacağını ifade ediyoruz.Bu komut satırı, lakin ve lakin üstte yer alan döngünün sonlanmasıyla birlikte, döngü kararında oluşan pahaları ele alarak çalışacak. Yani ‘b’, 0’a ulaşmadığı sürece program hiç bir şey yazdırmayacak.
Kodu deklare ettik, sıra tahlilde:
Şimdi gelelim tahlile. Döngünün her bir döngüde yapacağı süreç ve neticeleri şöyle olacak:
Soruya gelen yansılar de böyleydi:
İş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ınca düzenlenen olimpiyatlarda ortaokullara sorulan kodlama sorusu, toplumsal medyada bugün bir daha gündem oldu. Gelin, soruya, tahliline ve gelen yansılara bakalım.
İşte tartışma yaratan o temel seviyedeki kodlama sorusu:
Sayfayı çabucak kaydırmayın! Evvel biraz anlamaya ve burada ne sorulduğunu algılamaya çalışın.
Peki bu sorunun karşılığı ne?
Bu sorunun karşılığını verebilmek için aslında günümüzde artık herkeste olması gereken temel seviyede kodlama bilgisine gereksiniminiz var. C yazılım lisanında yazılan üstteki soru, bize aslında matematiksel bir durumu soruyor. Gelin, evvel 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 işlevi temsil ettiğini gösteriyor. Bir programın yapı taşı olan işlevler, muhakkak bir işi yapmak için bir ortaya getirilen kodlardan oluşuyor. İşlevler ortasında değişkenler ve yapılacak süreçler tanımlanıyor ve bu işlev ç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 birinci kere yürüttüğü kodların bulunduğu bir işlevdir.
int a = 0;
Her bir işlev ortasında 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’ sözü, tam sayı değerleri temsil eden bilgi tipini tabir ediyor. Öncelikle değişkenimizin bilgi tipini kod içerisinde belirttikten daha sonra bu değişkenimize bir isim veriyoruz. Akabinde değişkenimizin pahasını programa sunuyoruz, yani diyoruz ki a’yı 0 al.
for (int b = 55; b > 0; a++, b = b – a);
Sorunun yanıtı 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ü yardımıyla birbirini yine eden süreçleri satır satır yazmak yerine, tek bir satır ortasında yazabiliyoruz. Bu döngü olmasaydı, birbirini tekrar eden süreçleri binlerce satır boyunca alt alta yazabilirdik. Örneğin bir ekrana 1’den 1000’e kadar sayı yazdırmak isteseydik, olağanda bunların her birini her satırda “1 yaz, 2 yaz, 3 yaz, 4 yaz, 5 yaz…” üzere yenidenlardık.
For döngüsü, parantezlerin içine alınan ve noktalı virgüller ile ayrılan üç farklı durum istiyor. Bunlardan birincisinde döngümüzün başlangıç değerini tanımlıyoruz, daha 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ı katiyetle değişmiyor. Gelin, üstteki soruda yer alan bu üç durumu da açıklayalım.
int b = 55
b > 0
a++, b = b – a
İlk sürecimizde (a++) programa diyoruz ki ‘a’ sayısını her döngüde 1 artır. Bu sayede birinci döngüde 0 olan ‘a’ evvel 1, daha sonra 2, 3, 4, 5… diye pahalanacak (Binlerce satır kod yazmaktan da bu biçimdelikle kurtuluyoruz aslında). Ancak bu değerleme devam etmedilk evvel programdan bir şey daha istiyoruz: b = b – a.
Bu tabirde 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 cet. Yani ‘b’ sayısının bedelini ‘b-a’ yap. Bunu döngümüzün başladığı ana bakılırsa söz ettiğimizde süreç şöyle olacak:
- b = 55 (b) – 0 (a)
- b = 55
printf(“%d”, a)
Bu komut satırında ‘printf’ işlevini kullanarak programa, konsola bir söz yazmasını söylüyoruz. ‘%d’ ile yazacağı bu tabirin bir tam sayı olacağını ve bu tam sayının da ‘a’ olacağını ifade ediyoruz.Bu komut satırı, lakin ve lakin üstte yer alan döngünün sonlanmasıyla birlikte, döngü kararında oluşan pahaları ele alarak çalışacak. Yani ‘b’, 0’a ulaşmadığı sürece program hiç bir şey yazdırmayacak.
Kodu deklare ettik, sıra tahlilde:
Şimdi gelelim tahlile. Döngünün her bir döngüde yapacağı süreç ve neticeleri şöyle 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 daima artıyor)
- b = 52 – 3 => b = 49,
- b = 49 – 4 => b = 45….
- b = 19 – 9 => b = 10
- b = 10 – 10 => b = 0
- Cevap: 10.
- 1’den başlayan ardışık sayıların toplamı, en son hangi sayıyı toplama dahil ettiğinizde toplam 55’e ulaşıyor?
Soruya gelen yansılar de böyleydi:
- Bir Ekşi Kelamlık kullanıcısı da aslında sorunun değerini fazlaca yeterli biçimde şöyleki anlatıyor: