Links
🔢

Tam ve Ondalık Hane Sayısı

❓ Soru

Rastgele girilen bir rasyonel sayının ondalık kısmının ve tam kısmının hane sayısını bulan algoritmayı yazınız.

⛓ Program Kısımları

  1. 1.
    Sayı girmek.
  2. 2.
    Tam ve ondalık hane sayısını bulmak.
  3. 3.
    Sonuçları ekrana yazdırmak.

👓 Çözüm Yöntemi

  • Sayının tam kısmını elde etmek için rasyonel sayının değerini tam sayıya dönüştürerek yeni int değişkene atarız. 150.25 ---int---> 150
  • Sayının ondalık kısmını elde etmek için sayi%10 sıfır olmadığı sürece hane sayacını artırıp sayıyı 10’la çarparız.
    32.46sayi%10!=032.46*10 (1)
    324.6sayi%10!=0324.6*10 (2)
    3246sayi%10!=03246*10 (3)
    32460sayi%10=0

👩‍🔧 Çözüm Adımları

  1. 1.
    Değişkenlerin tanımlanması.
  2. 2.
    sayinın girilmesi.
  3. 3.
    t_sayiya sayının tam değerinin atanması.
  4. 4.
    t_sayi!=0 iken:
    • t_sayi 10’a bölüp tam_hnın artırılması
  5. 5.
    sayi%10!=0 iken:
    • sayi 10’la çarpıp ondalik_hnın artırılması.
  6. 6.
    Sonuçların ekrana yazdırılması.

🤖 Kod

⚙ C++ Kodu

// C++ dilinde float türü girdiler beklenenden biraz farklı saklandığı için diğer
//dillerde geçerli yöntemlerin kodlamaya yeni başlayanları zorlayacağını düşündüğümüzden
//bu soruyu farklı bir yöntemle çözmeyi yeğledik (Sayıyı string olarak okuyup strşng üzerinden işlemler yaparark).
//Float tipiyle ilgili daha fazla bilgi almak için http://floating-point-gui.de/
//adresine göz atabilirsiniz.
#include <iostream>
using namespace std;
int main() {
// Değişkenlerin tanımlanması
int i, tam = 0, ondalik = 0;
string sayi;
cin >> sayi; // sayının string olarak girilmesi
// noktaya kadar olan sayıların sayısının bulunması
for (i = 0; i < sayi.length(); i++) {
if (sayi[i] != '.') {
tam++;
} else {
break;
}
}
ondalik = sayi.length() - tam - 1; // noktadan sonra sayıların sayısının bulunması
// Sonuçların yazdırılması
cout << "Tam kisminin hane sayisi=" << tam << endl;
cout << "Ondalik kisminin hane sayisi=" << ondalik;
}

🐍 Python Kodu

# Değişkenlerin tanımlanması
ondalik_h = 0; tam_h = 0
sayi = float(input()) #`sayi`nın girilmesi
sayi1 = sayi
# “t_sayi”ya sayının tam değerinin atanması
t_sayi = int(sayi)
while t_sayi != 0:
# “t_sayi” 10’a bölüp “tam_h”nın artırılması
t_sayi = t_sayi // 10
tam_h += 1
while sayi % 10 != 0:
# “sayi” 10’la çarpıp “ondalik_h”nın artırılması
sayi = sayi * 10
ondalik_h += 1
# Sonuçların ekrana yazdırılması
print('Tam kisminin hane sayisi=', tam_h);
if sayi1 % 10 != 0:
# `sayı%10=0` olması için birlerin 0 olması lazım ama hane
# sayısına bir fazla eklemiş olduğumuzdan yazdırmadan önce sayıyı 1 azaltırız.
print('Ondalik kisminin hane sayisi=', ondalik_h - 1)
else:
print('Ondalik kisminin hane sayisi= ', ondalik_h)

☕ Java Kodu

import java.util.*;
public class HaneSayisi {
public static void main(String arg[]) {
Scanner input = new Scanner(System.in);
// Değişkenlerin tanımlanması
int ondalik_h = 0, tam_h = 0, t_sayi;
float sayi, sayi1;
sayi = input.nextFloat(); // “sayi”nın girilmesi
sayi1 = sayi;
t_sayi = (int) sayi; // “t_sayi”ya sayının tam değerinin atanması
while (t_sayi != 0) {
// “t_sayi” 10’a bölüp “tam_h”nın artırılması
t_sayi = t_sayi / 10;
tam_h++;
}
while (sayi % 10 != 0){
// “sayi” 10’la çarpıp “ondalik_h”nın artırılması
sayi = sayi * 10;
ondalik_h++;
}
// Sonuçların ekrana yazdırılması
System.out.println("Tam kisminin hane sayisi= " + tam_h);
if (sayi1 % 10 != 0)
// `sayı%10=0` olması için birlerin 0 olması lazım ama hane
// sayısına bir fazla eklemiş olduğumuzdan yazdırmadan önce sayıyı 1 azaltırız.
System.out.println("Ondalik kisminin hane sayisi= " + (ondalik_h - 1));
else
System.out.println("Ondalik kisminin hane sayisi= " + (ondalik_h));
input.close();
}
}

🎉 Ekran Çıktısı

150.25
Tam kisminin hane sayisi= 3
Ondalik kisminin hane sayisi= 2

💡 Notlar

  1. 1.
    sayı%10=0 olması için birlerin 0 olması lazım ama hane sayısına bir fazla eklemiş olduğumuzdan yazdırmadan önce sayıyı 1 azaltırız.