Javascript

2020 TYT Matematik Para Makinesiyle İlgili Sorunun Çözümünü Javascript Diliyle Kodlama

Yeni bir matematik sorusunun çözümüyle karşınızdayız. Bu sorumuz 2020 TYT sorusu. Sorumuz aşağıda yer almaktadır. Amacımız programlama tekniğini kullanarak sorunun çözümünü yapmak. Hem matematik hem de programlama alanında kendimizi geliştirmek istiyoruz. Sorumuzu ve çözümünü inceleyelim.

Bir para çekme makinesi, istenilen miktardaki parayı 5 TL, 10 TL, 20 TL, 50 TL ve 100 TL değerindeki kâğıt paralardan en az sayıda kullanarak vermektedir. Her kâğıt paradan yeterli sayıda bulunan bu para çekme makinesinden; Ahmet 495 TL, Buse 265 TL ve Cansu 550 TL para çekiyor.

Para çekme makinesinin Ahmet, Buse ve Cansu’ya verdiği kâğıt para sayıları sırasıyla olduğuna göre, aşağıdaki sıralamalardan hangisi doğrudur?

A) PA < PB < PC                    B) PA < PC < PB                    C) PB < PA < PC                   

D) PB < PC < PA                    E) PC < PB < PA                   

PA = 4.100 + 1.50 + 2.20 + 1.5 = 8

PB = 2.100 + 1.50 + 1.10 + 1.5 = 5

P= 5.100 + 1.50 = 6

Buna göre doğru cevap D şıkkıdır.

Daha önceki uygulamalarda programın kodlanması için şu aşamaları kullanmıştık.

Değişkenleri tanımla

Değerleri gir

İşlemi yap

Sonucu görüntüle

Kodlama işlemini soruda yer alan her cümleyi teker teker inceleyerek, yukarıda verilen aşamalara göre, gerçekleştirelim. İlk cümlemiz şuydu. "Bir para çekme makinesi, istenilen miktardaki parayı 5 TL, 10 TL, 20 TL, 50 TL ve 100 TL değerindeki kâğıt paralardan en az sayıda kullanarak vermektedir."

Değişkenleri tanımla

Bu soruda 5 TL, 10 TL, 20 TL, 50 TL ve 100 TL değerleri sayısal ifadelerdir. Bunları değişkenler yardımıyla kullanalım. Değişken ismi olarak banknot kullanabiliriz. Ancak burada 5 tane sabit değer verilmiştir. Değişkenleri şöyle tanımlayabiliriz.

            let banknot1 = 5;
            let banknot2 = 10;
            let banknot3 = 20;
            let banknot4 = 50;
            let banknot5 = 100;

Dikkat ettiyseniz değişkenlerin aldığı değerler aynı tipte ve özellikte olup tamsayıdır. Burada 5 sabit değer için 5 tane değişken tanımlandı. Diyelim ki aynı tipte ve özellikte 100 tane sabit değer girilseydi, 100 tane değişken mi tanımlayacaktık. Tabi ki hayır. Aynı tipte ve özellikte olup aynı amaç için kullanılan değerleri bir isim altında tanımlayabiliriz. Bu tip bilgileri tek isim altında saklamak için Array(dizi) değişken tipini kullanabiliriz. Şimdi yukarıda tanımladığımız 5 değişkeni banknot ismi altında liste biçiminde tanımlayalım.

            let banknot = [100, 50, 20, 10, 5];

Görüldüğü gibi hem kod sayısı azaldı, hem de değerler [] arasında tanımlanarak kullanımı kolaylaştı. Sayıların sıralanışına dikkat ettiniz mi. Değişken tanımlarken 5 sayısından başlayarak aşağıdan yukarıya doğru tanımlamıştık. Liste biçiminde ise 100 sayısından başlayıp yukarıdan aşağıya doğru sıraladık. Çünkü soruda "en az sayıda" ibaresi yer almaktaydı. Çekilecek paranın en az banknot gerektirmesi için paranın en yüksek banknota bölünmesi gerekir. Peki bu değerlere nasıl ulaşacağız. Örneğin 20 sayısını nasıl görüntüleriz. Liste elemanlarına apartmanlarda verilen kat ismi gibi değerler verilir. Apartmanlarda ilk kata zemin kat denmektedir. Diğer katlar Kat 1, Kat 2,... diye gitmektedir. Liste elemanlarında ise bunun karşılığı 0, 1, 2,... ile ifade edilir. Buna indis denmektedir. Siz hangi değeri ekranda görüntülemek istiyorsanız o sıranın indis değerini yazmanız yeterli olacaktır.  Şimdi 20 sayısına ulaşan kodu yazalım.

            document.write(banknot[2]);

20 sayısının indis değeri 2 olduğu için [2] yazıldığında 20 sayısı ekranda görüntülenir. Şimdi tüm sayıları görüntüleyelim.

            document.write(banknot[0] + "<br>");
            document.write(banknot[1] + "<br>");
            document.write(banknot[2] + "<br>");
            document.write(banknot[3] + "<br>");
            document.write(banknot[4]);

Liste elemanlarına teker teker ulaşmak istediğimizde kod sayısının çokluğunu görürsünüz. Dikkat ettiyseniz aynı komut aynı değişkenin değerini görüntülemektedir. Bir ya da birden fazla tekrar eden komutun bir blok altında tanımlanması için for komutu kullanılır. Şimdi yukarıdaki satırları for komutuyla kodlayalım.

            for (var i = 0; i < banknot.length; i++) {
                document.write(banknot[i] + "<br>");
            }

Görüldüğü gibi kodlarımız azaldı, programın işlevselliği sağlandı. Soruda yer alan ilk cümlemize ait gerekli işlemleri gerçekleştirmiş olduk. Şimdi sorumuzda yer alan ikinci cümleyi inceleyelim. "Her kâğıt paradan yeterli sayıda bulunan bu para çekme makinesinden; Ahmet 495 TL, Buse 265 TL ve Cansu 550 TL para çekiyor." Burada verilen değerler sabit olup aynı tipte ve özelliktedir. Kişilerin adı, çektiği paralar verilmektedir. Burada Ahmet bilgisi yerine Pa, Buse yerine Pb, Cansu yerine Pc kullanabiliriz. Sorunun cevaplarına baktığınızda banknot sayısı Pa, Pb, Pc değerlerinin sıralanışı şeklinde istenmektedir. Burada her bir elemanın ismi, çekilen para tutarı ve banknot sayısı değişkenler yardımıyla tutulacaktır. Şimdi ilk elemanın aldığı değerleri değişkenler yardımıyla oluşturalım.

            var para11 = 0;
            var para12 = 495;
            var para13 = "Pa";

Şimdi ikinci elemanın aldığı değerleri değişkenler yardımıyla oluşturalım.

            var para21 = 0;
            var para22 = 265;
            var para23 = "Pb";
Son olarak üçüncü elemanın aldığı değerleri değişkenler yardımıyla oluşturalım.
            var para31 = 0;
            var para32 = 550;
            var para33 = "Pc";
Elimizde sadece 3 eleman olmasına rağmen işlemi gerçekleştirmek için bir sürü değişken tanımladık. Değişken isimlerinin bu kadar çok olduğu bir programda program hakimyeti azalır, hata yapma ihtimali çoğalır. Dikkat ettiysenin verilen değerler aynı tipte ve özellikte olup aynı amaç için kullanılmaktadır. Burada tanımlaması yapılan tüm değerleri Array(dizi) biçiminde gösterebiliriz. Şimdi bunu gerçekleştirelim.
            let para = [[0, 495, "Pa"],
            [0, 265, "Pb"],
            [0, 550, "Pc"]
            ]

Nasıl? Programda gereksiz satırlar ortadan kalktı, değişkenin aldığı değerlerin kontrolü kolaylaşmış oldu. Yukarıda tanımladığımız banknot dizi elemanıyla burada tanımladığımız para dizi elemanı aynıdır. Banknot dizi elemanını her katta bir daire olan 3 katlı bir apartmana benzetebiliriz. Para dizi elemanını ise her katta 3 daire olan 3 katlı apartmana benzetebiliriz. Peki, 265 sayısına nasıl ulaşabiliriz. Hatırlarsanız indis değerleri sıfırdan başlıyor idi, O halde 265 sayısı apartmanın birinci katında bir nolu daireyi temsil eder. Şimdi kodumuzu yazalım.

            document.write(para[1][1]);

Para listesinde yer alan tüm verileri listeleyelim.

            for (var i = 0; i < para.length; i++) {
                for (var j = 0; j < para[i].length; j++) {
                    document.write(para[i][j] + "<br>");
                }
            }            

Şu ana kadar yazılan kodları listeleyelim.

            let banknot = [100, 50, 20, 10, 5];

            let para = [[0, 495, "Pa"],
            [0, 265, "Pb"],
            [0, 550, "Pc"]
            ]

Sorumuza geri dönelim. Son cümlemize bakalım. "Para çekme makinesinin Ahmet, Buse ve Cansu’ya verdiği kâğıt para sayıları sırasıyla olduğuna göre, aşağıdaki sıralamalardan hangisi doğrudur?" Burada yer alan cümleye göre ilgili kişilerin bankadan aldıkları banknot sayılarını bulmamız gerekiyor. Öncelikle Ahmet isimli şahsın alacağı banknot sayısını bulalım. Ahmet isimli şahıs 495 TL çekecekti. Bu sayıyı banknot listesinde yer alan değerlere sırasıyla böleceğiz. Kalan para 0 olduğunda işlemi tamamlayacağız. Öncelikle gerekli olan değişkenleri tanımlayalım. Kişinin çekeceği para tutarını saklamak için cekilen isimli tamsayı bir değişken tamamlayalım. Kalan parayı saklamak için kp isimli bir değişken tanımlayalım.

            var cekilen = 0;
            var kp = 0;

Ahmet isimli kişinin çekeceği para para listesinde 0. satırın 1. sütununda yer almaktadır. Gerekli tanımlamayı yapalım.

cekilen = para[0][1]

Bu tutarın kasada bulunan banknotlara bölünmesi işlemini gerçekleştireceğiz. Öncelikle 100 sayısına bölelim. Tam kısmını Ahmet isimli kişinin alacağı banknot sayısına ekleyelim.

            para[0][0] += Math.floor(cekilen / banknot[0]);
            document.write(para[0][0]);

Kalan parayı bulmak için çekilen parayı ilk banknot olan 100 sayısına bölelim ve kalanı bulalım. Elde edilen değeri kp değişkenine aktaralım.

            kp = cekilen % banknot[0];
            document.write(kp);

100 liralık banknotlar bittiğine kalan parayı çekilen tutar olarak değiştirelim.

            cekilen = kp;

Şimdi 50 liralık banknot işlemini yapalım. Bu banknot banknot listesinde 2. sıradaydı. Çekilen tutarı 50 sayısına bölelim. Tam kısmını Ahmet isimli kişinin alacağı banknot sayısına ekleyelim.

            para[0][0] += Math.floor(cekilen / banknot[1]);
            document.write(para[0][0]);

Kalan parayı bulmak için çekilen parayı ikinci banknot olan 50 sayısına bölelim ve kalanı bulalım. Elde edilen değeri kp değişkenine aktaralım.

            kp = cekilen % banknot[1];
            document.write(kp);

50 liralık banknotlar bittiğine kalan parayı çekilen tutar olarak değiştirelim.

            cekilen = kp;

Şimdi 20 liralık banknot işlemini yapalım. Bu banknot banknot listesinde 3. sıradaydı. Çekilen tutarı 20 sayısına bölelim. Tam kısmını Ahmet isimli kişinin alacağı banknot sayısına ekleyelim.

            para[0][0] += Math.floor(cekilen / banknot[2]);
            document.write(para[0][0]);

Kalan parayı bulmak için çekilen parayı üçüncü banknot olan 20 sayısına bölelim ve kalanı bulalım. Elde edilen değeri kp değişkenine aktaralım.

            kp = cekilen % banknot[2];
            document.write(kp);

20 liralık banknotlar bittiğine kalan parayı çekilen tutar olarak değiştirelim.

            cekilen = kp;

Şimdi 10 liralık banknot işlemini yapalım. Bu banknot banknot listesinde 4. sıradaydı. Çekilen tutarı 10 sayısına bölelim. Tam kısmını Ahmet isimli kişinin alacağı banknot sayısına ekleyelim.

            para[0][0] += Math.floor(cekilen / banknot[3]);
            document.write(para[0][0]);

Kalan parayı bulmak için çekilen parayı dördüncü banknot olan 10 sayısına bölelim ve kalanı bulalım. Elde edilen değeri kp değişkenine aktaralım.

            kp = cekilen % banknot[3];
            document.write(kp);

10 liralık banknotlar bittiğine kalan parayı çekilen tutar olarak değiştirelim.

            cekilen = kp;

Şimdi 5 liralık banknot işlemini yapalım. Bu banknot banknot listesinde 5. sıradaydı. Çekilen tutarı 5 sayısına bölelim. Tam kısmını Ahmet isimli kişinin alacağı banknot sayısına ekleyelim.

            para[0][0] += Math.floor(cekilen / banknot[4]);
            document.write(para[0][0]);

Kalan parayı bulmak için çekilen parayı beşinci banknot olan 5 sayısına bölelim ve kalanı bulalım. Elde edilen değeri kp değişkenine aktaralım.

            kp = cekilen % banknot[4];
            document.write(kp);

5 liralık banknotlar bittiğine kalan parayı çekilen tutar olarak değiştirelim.

            cekilen = kp;
Kodu çalıştıralım. Burada dikkat ederseniz kodlarımız banknot sayısı kadar yani 5 defa tekrar edilmiştir. Aynı amaç için kullanılan komutları tek blok altında tanımlamak için for döngüsünü kullanabilirdik. Döngüyü kullanarak kodları kısaltabiliriz. Ayrıca dikkat ettiyseniz kp değişkeninin değeri 0 olmaktadır. Zaten bunun olması gerekir. Bankadan alacağımızın olmaması ve tüm paranın çekildiğini anlamak için kp değerinin 0 olması gerekir. Şimdi kodlarımızı for döngüsünü kullanarak düzenleyelim. Öncelikle banknot listesindeki tüm elemanlara ulaşmak için for döngüsünü kullanalım.
            for (var i = 0; i < banknot.length; i++) {
                document.write(banknot[i] + "<br>");
            }

Çekilen parayı ilk banknot olan 100 sayısına bölelim. Tam kısmını Ahmet isimli kişinin aldığı banknot sayısına ekleyelim.

            for (var i = 0; i < banknot.length; i++) {
                para[0][0] += Math.floor(cekilen / banknot[i]);
            }

Kalan parayı bulmak için çekilen tutarı ilk banknot olan 100 sayısına bölelim. Elde edilen değeri kp değişkenine aktaralım.

            for (var i = 0; i < banknot.length; i++) {
                para[0][0] += Math.floor(cekilen / banknot[i]);
                kp = cekilen % banknot[i];
            }

Para çekme işlemi kp değişkeni 0 oluncaya kadar devam edecektir. Eğer 0 olursa döngüden çıkalım.

            for (var i = 0; i < banknot.length; i++) {
                para[0][0] += Math.floor(cekilen / banknot[i]);
                kp = cekilen % banknot[i];
                if (kp == 0) {
                    break;
                }
            }

Kalan para sıfırdan büyükse elde edilen değeri cekilen değişkenine aktaralım.

            for (var i = 0; i < banknot.length; i++) {
                para[0][0] += Math.floor(cekilen / banknot[i]);
                kp = cekilen % banknot[i];
                if (kp == 0) {
                    break;
                } else {
                    cekilen = kp;
                }
            }

Ahmet isimli kişinin alacağı banknot sayısını bulduk. Elde edilen değeri görüntüleyelim.

            cekilen = para[0][1];

            for (var i = 0; i < banknot.length; i++) {
                para[0][0] += Math.floor(cekilen / banknot[i]);
                kp = cekilen % banknot[i];
                if (kp == 0) {
                    break;
                } else {
                    cekilen = kp;
                }
            }

            document.write(para[0][0]);

495 TL için 8 tane banknot verildiğini görürsünüz. Şimdi Buse'nin aldığı banknot sayısını bulalım. Buse'nin çekeceği para para listesinde 1. satır, 1. sütunda yer almaktadır. Buna göre kodları düzenleyelim.

            cekilen = para[1][1];

            for (var i = 0; i < banknot.length; i++) {
                para[1][0] += Math.floor(cekilen / banknot[i]);
                kp = cekilen % banknot[i];
                if (kp == 0) {
                    break;
                } else {
                    cekilen = kp;
                }
            }

            document.write(para[1][0]);

265 TL için 5 tane banknot verildiğini görürsünüz. Şimdi Cansu'nun aldığı banknot sayısını bulalım. Cansu'nun çekeceği para para listesinde 2. satır, 1. sütunda yer almaktadır. Buna göre kodları düzenleyelim.

            cekilen = para[2][1];

            for (var i = 0; i < banknot.length; i++) {
                para[2][0] += Math.floor(cekilen / banknot[i]);
                kp = cekilen % banknot[i];
                if (kp == 0) {
                    break;
                } else {
                    cekilen = kp;
                }
            }

            document.write(para[2][0]);

550 TL için 6 tane banknot verildiğini görürsünüz. Burada 3 kişinin çektiği para için ne kadar banknot aldıklarını bulduk. Aslında kodlar 3 defa tekrar etmekte, aynı amaç için kullanılmaktadır. Daha önce söylediğimiz gibi for döngüsünü kullanabiliriz. Hadi şimdi bu işlemleri gerçekleştirelim.

            for (var p = 0; p < para.length; p++) {
                cekilen = para[p][1];
                for (var i = 0; i < banknot.length; i++) {
                    para[p][0] += Math.floor(cekilen / banknot[i]);
                    kp = cekilen % banknot[i];
                    if (kp == 0) {
                        break;
                    } else {
                        cekilen = kp;
                    }
                }
            }
            
            document.write(para);

Şu ana kadar yazılan kodları tekrar anımsayalım.

            let banknot = [100, 50, 20, 10, 5];

            let para = [[0, 495, "Pa"],
            [0, 265, "Pb"],
            [0, 550, "Pc"]
            ]

            var cekilen = 0;
            var kp = 0;

            for (var p = 0; p < para.length; p++) {
                cekilen = para[p][1];
                for (var i = 0; i < banknot.length; i++) {
                    para[p][0] += Math.floor(cekilen / banknot[i]);
                    kp = cekilen % banknot[i];
                    if (kp == 0) {
                        break;
                    } else {
                        cekilen = kp;
                    }
                }
            }
            
            document.write(para);

Probleme ait gerekli işlemleri yaptık. Ancak bizden istenen kişilerin küçükten büyüğe doğru sıralanmasıdır. Bu işlemi gerçekleştirmek için para listesini sıralamamız gerekir. Hadi bu işlemi gerçekleştirelim.

            para.sort();
            document.write(para);

Burada sıralama işlemi ilk sütuna göre gerçekleşmektedir. Belirtilen sütuna göre işlemleri gerçekleştirmek istiyorsanız sıralama işlemini aşağıdaki gibi yapabilirsiniz.

            para.sort(function (a, b) {
                var o1 = a[0];
                var o2 = b[0];


                if (o1 < o2) return -1;
                if (o1 > o2) return 1;
                return 0;
            });

            document.write(para);

Problemin çözümünde doğru cevap D şıkkıydı. Bu şık PB < PC < PA şeklindeydi. Şimdi bu işlemi gerçekleştirelim. Öncelikle para listesinde sıralama kriteri olan sütunu for döngüsüyle listeleyelim.

            for (var p = 0; p < para.length; p++) {
                document.writeln(para[p][2]);
            }

Sıralama doğru bir şekilde yapıldı. Ancak araya < işareti konulması gerekir. Şimdi bunu yapalım.

            for (var p = 0; p < para.length; p++) {
                if (p > 0) {
                    if (para[p][0] == para[p - 1][0])
                        document.writeln("=");
                    else
                        document.writeln("<");
                }
                document.writeln(para[p][2]);
            }

Programımız istenildiği gibi doğru sonucu vermektedir. Birçok konuyu öğrenmiş olduk. Şimdi kodlarımızı düzenleyelim.

            let banknot = [100, 50, 20, 10, 5];

            let para = [[0, 495, "Pa"],
            [0, 265, "Pb"],
            [0, 550, "Pc"]
            ]

            var cekilen = 0;
            var kp = 0;

            for (var p = 0; p < para.length; p++) {
                cekilen = para[p][1];
                for (var i = 0; i < banknot.length; i++) {
                    para[p][0] += Math.floor(cekilen / banknot[i]);
                    kp = cekilen % banknot[i];
                    if (kp == 0) {
                        break;
                    } else {
                        cekilen = kp;
                    }
                }
            }

            para.sort(function (a, b) {
                var o1 = a[0];
                var o2 = b[0];


                if (o1 < o2) return -1;
                if (o1 > o2) return 1;
                return 0;
            });

            for (var p = 0; p < para.length; p++) {
                if (p > 0) {
                    if (para[p][0] == para[p - 1][0])
                        document.writeln("=");
                    else
                        document.writeln("<");
                }
                document.writeln(para[p][2]);
            }

Konu hakkında sormak istediğiniz soru varsa Yorumlar kısmına yazabilirsiniz.


İlgili Makaleler
Basamak Değerleri Seçilerek Elde Edilen Sayılarla Toplama İşlemi Alıştırmaları Yapan Programı Javascript Script Dilinde Yapınız
Javascript Kodlarıyla Tarayıcı Penceresinde Yön Tuşlarıyla Kutunun Hareket Ettirilmesi
Web Sayfasında Tıklanan Resmin Gerçek Boyutunu Öğrenme
JavaScript Kodlarıyla TextBox Nesnesine Sadece Sayıların Girilmesini Sağlama
Tetris Oyununu Javascript Dilini Kullanarak Web Sayfasında Kodlama1
Faktöriyel Hesabı Yapan Javascript Uygulaması
Validation Kontrollerini Yaparak Kimlik Bilgileri Formunu Oluşturan Programı Javascript Script Dilinde Yapınız
Koordinat Düzleminde Verilen Bir Noktanın Hangi Bölgeye Düştüğünü Bulan Programı Javascript Script Dilinde Yapınız
RadioButton Yardımıyla Web Sayfasının Arkaplan Rengini Değiştiren Uygulamayı Javascript Kodlarıyla Tasarlama
Girilen Bir Sayının Tek mi Çift mi Olup Olmadığını Kontrol Eden Web Uygulamasını Javascript Diliyle Yapma
Çarpma İşaretini Kullanmadan İki Sayıyı Çarpan Programı Javascript Script Dilinde Yapınız
Radio Button İçinden Seçilen Değeri Görüntüleyen Programı Javascript Script Dilinde Yapınız
2020 TYT Matematik Para Makinesiyle İlgili Sorunun Çözümünü Javascript Diliyle Kodlama
Bölme İşaretini Kullanmadan İki Sayıyı Bölen Programı Javascript Script Dilinde Yapınız
Pascal Üçgenine Ait İlk 10 Terimin Kat Sayılarını Bulan c# Web Uygulaması
RadioButton Yardımıyla Resim Galerisi Oluşturan Web Sayfasını Javascript Kodlarıyla Tasarlama
Birinci Dereceden Bir Bilinmeyenli Bir Denkleme Ait Çözüm Kümesine Göre Grafik Oluşturan Programı Javascript Script Dilinde Yapınız
JavaScript Script Dilinde Değişkenlere Değer Atama
Mevcut Tarihi Takvim Yaprağı Şeklinde Gösteren Programı Javascript Script Dilinde Yapınız
Kredi Kartı Taksitlendirme İşlemini Yapan Uygulamayı Terminal Tabanlı Olarak Tasarlayan Web Uygulaması

Yorum Ekle
   
Kötü İyi