Merhaba, hoş geldiniz. Bu gösterimde, son zorluğumuz için bir çözüm
sunmak istiyorum. Bu nedenle, c programımıza
bir dizi dakika alan ve bu temsilin gün cinsinden ne
olduğuna ve bunun kaç yıl olduğuna dönüştüren bir çözüm sunmak
istiyorum.
Pratik bir program olması gerekmez,
ancak esas olarak aritmetik operatörleri
kullanarak ve klavyeden girdi alarak öğrenebileceğiniz birkaç
temel kavramı gösterecektir.
Ayrıca bunun için döküm operatörünü kullanmanız gerekiyor, ki bunu yarışmada
belirtmemiş olabilirim, ama umarım siz bunu
çözmüşsünüzdür çünkü döküm operatörünü kullanmanıza gerek yok,
başlangıçta bir çözümün modül operatörüne
ihtiyaç duyduğunu düşünüyordum. Ancak bir modül
yaparsanız, sanırım sadece 2 inç alır.
Neyse, başlayalım. Soğuk blokları başlatalım ve bir proje
oluşturalım, bu noktaya kadar oldukça iyi olduğumuz temel şeylerden geçelim.
Bu yüzden ayrıntılara girmeyeceğim, sadece izleyebilirsiniz.
Ancak yeni bir proje oluşturacağım ve bu bir konsol projesi olacak
ve kesinlikle c olacak ve buna ne isim vereceğim,
yine her zaman iyi anlamlı isimler almak istersiniz.
Dakika dönüşümü diyeceğim.
Yani bir dakika dönüştürme uygulaması gibi.
Şimdi de ana planımızı değiştireceğim. c dosyası.
O zaman bundan kurtulalım. Ve ifadeleri dahil etmeye devam edeceğiz.
Ve her zaman olduğu gibi, yorum eklemek isteyeceksiniz, yorumları eklediğinizden
emin olun, ben yapmıyorum diye siz de yapmamalısınız anlamına gelmez.
Bu standart bir uygulama. Sadece verimlilik ve zaman açısından, bunu dışarıda bırakıyorum.
Programın en başında yapmaktan hoşlandığım şey,
kullanmam gereken değişkenlerimi temizlemek ve ardından onları başlatmaktır.
Bu şekilde başlayalım. Kullanıcının gireceği dakika için bir tamsayı
değişkeni oluşturacağım. Ben de bu tutanağın girildiğini söyleyeceğim. Onu 0'a başlatacağım.
Yıllar için bir çift yaratacağım. Bu aslında ne kadar hesaplama yapmak
istediğinize bağlı olarak uzun bir süre olabilir çünkü aslında oldukça büyük
bir ondalık sayıya girebilirsiniz.
Bu kadar uzun süre daha iyi bir seçenek olabilir. Ancak şimdilik sadece bir double kullanacağım
ve bunu 0 olarak başlatacağım. 0 ve bu 0'a eşit günler.
0.
Ve şimdi kullanıcıdan girdi almak istiyorum.
Kullanıcıdan girdi almak için yapacağınız ilk şey, kullanıcıya girdiyi girmesini söylemektir.
Bu yüzden lütfen dakika sayısını girin diyen
bir çıktı görüntüleyeceğim.
Ve oraya iki nokta üst üste koyacak, bir boşluk bırakacak ve
noktalı virgülle bitirecektir.
Sırada gerçekten girdi almak var.
Burada muhtemelen kullanıcıdan yorum olarak girdi al diyeceksiniz.
Kullanıcıdan nasıl girdi alacağız? scanf fonksiyonunu kullanırız.
Bunu bir süre önce hatırlayın, printf'e benzer şekilde scanf deyin.
Ve ilk parametre, dönüştürmek için
okumak istediğiniz veri türüdür.
Unutmayın, her şey bir dize veya metin olarak okunur.
Bu yüzden onu nasıl depolayacağınıza dönüştürmeniz gerekir.
Bu yüzden printf'te olduğu gibi çift tırnak içine alırsınız. Bir biçim belirteci kullanırsınız.
İşte. Sadece ondalık olarak saklamak istediğimi söyleyeceğim.
Bu yüzden d bir tamsayı diyeceğim,
ondalık tamsayı değil, üzgünüm.
Bir sonraki argüman ise bunu hangi değişkende saklayacağınızdır.
Girilen dakikalar içinde saklayacağım.
Şimdi scan f'yi hatırlayın ve aslında
orada sadece scan var, string hariç her bir
veri tipi için scanf, ampersand sağlamanız
gerekir. Adres alt operatörü.
Bu yüzden bunu sağlamak zorundayız. Bir sayı okuyoruz, bu yüzden ve işareti yapmalıyız.
Bunu dersten hatırlayın. Sonra bunu noktalı virgülle eklemek istiyorum.
Ve bu noktada, muhtemelen test etmelisiniz.
Kullanıcıdan girdi alabildiğinizden emin olun. Ve muhtemelen girdiğiniz şeyi görüntülemek için sadece bir printf'iniz vardır.
Ancak bunun doğru olduğunu bildiğim için devam edeceğim.
Satır 15'te bir hesaplama yapmam gerekecek.
Esas olarak, dakikaları yıl olarak saklamak istiyorum.
Şimdi yapacağım şey, unuttuğum başka bir değişken yaratmak ve bu değişkenin
yıl cinsinden dakikaları saklamasını sağlamak.
Çünkü bu işinizi kolaylaştıracak. Bu yüzden burada sadece dakika ve yıl diyeceğim.
Burada değişkenleri adlandırmak için kullandığım kuralın camelCase olduğunu fark edeceksiniz.
İlk koğuşun küçük harfle yazıldığı ve bundan
sonraki her kelimede ilk karakterin büyük harfle yazıldığı yerdir.
Bunu daha önce açıklamamıştım, bu yüzden bahsetmem gerektiğini düşündüm.
İlk hesaplamada dakikalarımı ve yılımı ayarlamak istiyorum
çünkü yıllarımı bu şekilde
hesaplayacağım. Yani dakikalar ve yıllar aslında eşit olacak -- ve ben sadece
organize etmek için parantez kullanmayı seviyorum, böylece her şey açık olacak. Daha okunabilir hale getirir.
60 olacak, çünkü 60 bir saatteki
dakika sayısıdır. Ve bunu bir gündeki saat sayısı olan 24 ile çarpacağım.
Bunu bir yıldaki gün sayısı olan 365
ile çarpacağım.
Dolayısıyla bu hesaplama bana bir yılda kaç dakika olduğunu verecektir.
Ve şimdi bunu yıllarımı hesaplamak için kullanabilirim.
Yani burada bir sonraki satırda, yıllar eşittir diyebilirim -- yani burada atama operatörlerini
kullanıyoruz, eşittir.
Ve sonra 16. satırdaki parantezlerde yaptığımız şey, bir çarpma
olan yıldız işaretini kullanmaktır. Çok güzel.
Yıllar sadece eşit olacak -- ve yine parantez kullanmak istiyorum.
Kullanıcı tarafından girilen dakikaların yıl içindeki dakikalara
bölünmesiyle elde edilir.
Yani 5000 dakika girdiyseniz ve bir yılda 20000 dakika varsa, 5000 bölü
20000 size kaç yıl olduğunu verecektir, bu da 0 puan
gibi bir şey olacaktır.
Günleri hesaplamak
için, burada sadece dakikaların
60 ve 60'a bölünerek girildiğini
söyleyeceğim. 0 çünkü bir
saatte 60 dakika
var.
Saatleri elde ettikten sonra, bunu 24 olan gün sayısına
bölebilirim. 0.
İsteseydim bunu başka bir hesaplamanın içine de koyabilirdim.
Ancak yine de bunu doğru sırada yaptığımızdan emin olmak istiyorum.
Bu yüzden önce dakika girişini 60'a böleceğim.
Aslında bu konuda endişelenmenize gerek yok çünkü
burada bölme işlemi yapıyoruz, bu nedenle ilişkisellik soldan sağa olacak
ve aslında bu parantezlere ihtiyacım yok. Ancak parantez eklemeyi her zaman sevmişimdir çünkü daha okunaklı hale getirir.
Sonuncuyu da ekleyelim.
Bu biraz gereksiz. Burada ihtiyacım bile yok. Bu yüzden sadece ilklerini
dışarıda bırakalım. Ve bu bizim günlerimizi göstermelidir.
Şimdi hesaplamalarımı yaptım ve bazı operatörleri kullandım.
Verilerimi yazdırmak için bir printf yapmak istiyorum.
Burada önce dakikaları yazdırın diyeceğim,
yüzde d dakika
yaklaşık olarak yüzde f yıl ve yüzde f gündür.
Ve sonra bir satır beslemesi ekleyeceğim.
Bunun yaptığı şey, değişkenlerin çıktısını görüntülemek için printf kullanmak ve
yüzde sembollerinin işaretleme belirticilerimizi hatırlamasıdır.
Yazdırmak istediğim ilk şey dakikalar, bu yüzden girildiğinde ilk virgülden sonra dakikaları koymam gerekiyor.
İkincisi yıl, bu yüzden yıl demek istiyorum çünkü bu yüzde f yıl.
Üçüncüsü de günler gibi bir
şey.
Şimdi derleyip çalıştırmalıyım ve onlar da benim için dönüştürme işlemini yapmalılar.
Öyleyse devam edelim ve inşa edelim. Ne bir sabah ne de bir hata var.
Hadi koşalım ve bir yılda kaç dakika olduğundan bile
emin değilim. Bunu nasıl test edeceğimden emin
değilim ama başlangıç olarak 5000 dakika koyalım.
Programı çalıştırdığımda benden dakika sayısını girmemi istiyor, ben 5000 yazacağım.
Ve eğer bir sayı girmediyseniz, scanf fonksiyonunuzda bunu bir
sayıya dönüştürdüğünüz için bir çökme yaşayabilirsiniz.
Geri tuşuna bastığımda 5000 dakikanın yaklaşık 0 olduğunu
söylüyor. 009513
yıl ve 3. 47222 gün, ki bu
mantıklı görünüyor çünkü bir saatte 60 dakika
çarpı 24, bu bir gün için kabaca 2400
falan eder, yani 2400 ve
2400, 60 kere değil. Üzgünüm, 60 kere
24 yaklaşık 1200 eder.
Yani 1200, 5000'e nasıl giriyor, her gün için kaç kez, muhtemelen
yaklaşık 3. 4 civarı.
Yani kabaca bu doğru gibi görünüyor.
Bunu birden fazla kez çalıştırabilir, fark edeceğiniz bazı büyük sayılar koyabilirsiniz.
Burada sadece çiftleri depoluyoruz. Yani eğer çalıştırırsanız ve 600 milyar
gibi çok büyük bir rakam girmeye çalışırsanız, yanlış
sonuçlar alabilirsiniz -- yani
burada yanlışlıklar olabilir. Yani bu size veri türleri sorunlarını gösteriyor.
Bu yüzden bir int içinde saklıyorum. Int yalnızca 8 bayttır. Bu büyük numarayı girdim.
İçinde saklanamaz. Bu yüzden çıktı almaya gittiğimde,
tamamen farklı bir numaraya, 184298154'e yazdırıyor.
Bunun nedeni girdiğim şeyin bir int değerinden büyük olması.
Bu nedenle, bu programın daha da hassas olmasını istiyorsanız ve bazı
veri türlerini değiştirmek için daha büyük sayılar girmek istiyorsanız, ints'leri double'lara
veya hatta double'ları long'lara değiştirmeyi düşünebilirsiniz.
Yani 350 yıl ve 127000 gün gibi bir süre söz konusu.
Yani, yine veri türlerinin yanı sıra operatörleri de anlamanızı
sağlamaya çalışan hoş ve küçük bir
dönüştürme uygulaması.
Pek çok farklı dönüşüm uygulamamız olabilir. Daha fazla pratik yapmak için
yazmak istediğiniz bir başka güzel uygulama da Fahrenheit to Celsius uygulaması
olacaktır.
Kullanıcının Fahrenheit girmesini ve ardından bunu Santigrat'a dönüştürmesini sağlayan bir uygulama yazın.
Yani aklınıza gelen pek çok farklı senaryo var. Ancak bu sizi operatörleri kullanmaya zorlayacaktır.
Ayrıca istersek burada bir oyuncu seçimi
bile yapabiliriz. Günlerin çok kesin olmasından hoşlanmadıysak
ve belki de double değerini int olarak değiştirmek istiyorsak.
Ve bunu biraz daha az kesin hale getirmek istiyoruz. Aslında bunu sadece parantezleri
sağlayarak ve sonra int yaparak bir it'ye dökebiliriz.
Ve bu aslında o sayıyı günlerce götürür.
Ve eğer ondalık 3 ise. 549 ya da başka bir şey, 3'e dönüştürür.
Belki de bu kullanıcı için daha iyi olur, size kalmış.
Ama şimdilik ikili olarak kalsın.
Ama böyle öğreniyorsun. Programla oynarsınız, farklı senaryolar denersiniz, farklı
girdiler denersiniz, her şeyin doğru olduğundan emin olursunuz. Teşekkür ederim.