Film ve Dizi Öneri Topluluğu
 
freelancer
   

Ramazan Bayramımız Kutlu Olsun

Konuyu Oyla:
  • Toplam: 0 Oy - Ortalama: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Bir Problemin Algoritması Veya Formülü
#1
Elimizde bir küçük bir de büyük olmak üzere 2 sayı ve adım sayısı var. Örneğin küçük sayımız 2, büyük sayımız 10 ve adım sayımız da 5 olsun. 5 adımda 2'den 10'a ulaşacağız. Küçük sayıdan başlayarak her adım bir önceki adımdan sabit bir artış oranı ile artırarak 5 adımda büyük sayıya ulaşmalıyız.

Elimizdeki bilinenler: Küçük sayı, büyük sayı ve adım sayısı
Bilinmeyen: Artış oranı

Bilinenler kullanılarak bilinmeyen bulunabilir mi? Bulunabilirse nasıl formül & algoritma yazılabilir?

Artış oranı belli olan bir örnek göstereyim:
Küçük sayımız: 1
Büyük sayımız: 1.331
Adım sayısı: 4
Artış oranı: 0.1

Adımlar:
-Adım 1: 1
-Adım 2: 1.1 = 1 + (1 * 0.1)
-Adım 3: 1.21 = 1.1 + (1.1 * 0.1)
-Adım 4: ‭1.331‬ = 1.21 + (1.21 * 0.1)


Bu problemi, Barış Özcan'ın zinciri kırma programından esinlenerek kodladığım bir fonksiyon için istiyorum. Aşağıda artış oranını ya el ile ya da varsayılan değer olarak alıyorum.
Kod:
void main() {
  zinciriKirma();
}

/**
* Girilen başlangıç tarihinde bir işi girilen
* başlangıç sayısı kadar yaparak başladığımız
* zinciri kırma programında girilen gün sayısı
* boyunca her gün bir önceki gün yaptığımız
* birimin girilen artış oranı kadar fazlasını
* yaparak kendimizi o işe alıştırabilir ve
* o işte geliştirebiliriz.
*
* Varsayılan ayarlarla bulunduğumuz yılın
* başında bir işi 1 birim yaparak başladığımız
* zinciri kırma programında 1 yıl boyunca her gün
* bir önceki gün yaptığımız birimin %1 daha fazlasını
* yaparak kendimizi o işe alıştırabilir
* ve o işte geliştirebiliriz.
*
* [startingDate] başlangıç günü (varsayılan: Bulunan yılın başlangıcı)
*
* [startingNumber] başlangıç sayısı (varsayılan: 1)
*
* [increaseRate] artış oranı (varsayılan: %1)
*
* [dayCount] gün sayısı (varsayılan: 365)
* */
void zinciriKirma({
  double startingNumber = 1,
  int dayCount = 365,
  double increaseRate = 1 / 100,
  DateTime? startingDate,
}) {
  double currentNumber = startingNumber;
  double total = 0;
  double unitTotal = 0;
  double divider = 0.5;
  int dividerCount = 0;
  double unit = 0;
  startingDate = startingDate ?? DateTime(DateTime.now().year);
  DateTime currentDate = startingDate;

  for (int i = 1; i <= dayCount; i++) {
    int currentDividerCount = currentNumber ~/ divider;

    if (currentDividerCount != dividerCount) {
      dividerCount = currentNumber ~/ divider;
      unit = dividerCount * divider;
      print(
          "${dateFormat(currentDate)} (Gün $i) gününde geçilecek birim: $unit");
    }

    if (i != dayCount) {
      currentDate =
          DateTime(currentDate.year, currentDate.month, currentDate.day + 1);
      currentNumber = currentNumber + (currentNumber * increaseRate);
    }
  }

  print("-" * 20);
  currentNumber = startingNumber;
  currentDate = startingDate;

  for (int i = 1; i <= dayCount; i++) {
    total += currentNumber;

    dividerCount = currentNumber ~/ divider;
    unit = dividerCount * divider;
    unitTotal += unit;

    print("${dateFormat(currentDate)} (Gün $i): $unit Birim ($currentNumber)");

    if (i != dayCount) {
      currentDate =
          DateTime(currentDate.year, currentDate.month, currentDate.day + 1);
      currentNumber = currentNumber + (currentNumber * increaseRate);
    }
  }

  print("Toplam: $total - Birim Toplam: $unitTotal");
}

String dateFormat(DateTime date) {
  String month;

  switch (date.month) {
    case 1:
      month = "Ocak";
      break;
    case 2:
      month = "Şubat";
      break;
    case 3:
      month = "Mart";
      break;
    case 4:
      month = "Nisan";
      break;
    case 5:
      month = "Mayıs";
      break;
    case 6:
      month = "Haziran";
      break;
    case 7:
      month = "Temmuz";
      break;
    case 8:
      month = "Ağustos";
      break;
    case 9:
      month = "Eylül";
      break;
    case 10:
      month = "Ekim";
      break;
    case 11:
      month = "Kasım";
      break;
    case 12:
      month = "Aralık";
      break;
    default:
      month = "GEÇERSİZ";
      break;
  }

  return "${date.day} $month ${date.year}";
}
Önizleme sitesi: https://dartpad.dev/?null_safety=true

Göz atmalarını istediğim ve aklımda kalan kişileri etiketleyeyim:
@Time Traveler @kaRanLık-61 @atakaj @Hatake
1pAza1.png
HTML CSS jQuery Dart Flutter

"Son Tema Ekibi Lideri"
Cevapla PGM
Teşekkür verenler:
#2
(19-04-2021 Saat: 03:14)mehmetext Nickli Kullanıcıdan Alıntı: Elimizde bir küçük bir de büyük olmak üzere 2 sayı ve adım sayısı var. Örneğin küçük sayımız 2, büyük sayımız 10 ve adım sayımız da 5 olsun. 5 adımda 2'den 10'a ulaşacağız. Küçük sayıdan başlayarak her adım bir önceki adımdan sabit bir artış oranı ile artırarak 5 adımda büyük sayıya ulaşmalıyız.

Elimizdeki bilinenler: Küçük sayı, büyük sayı ve adım sayısı
Bilinmeyen: Artış oranı

Bilinenler kullanılarak bilinmeyen bulunabilir mi? Bulunabilirse nasıl formül & algoritma yazılabilir?

Artış oranı belli olan bir örnek göstereyim:
Küçük sayımız: 1
Büyük sayımız: 1.331
Adım sayısı: 4
Artış oranı: 0.1


Kod:
(Büyük Sayı - Küçük Sayı) / (Adım Sayısı) = (Artış Değeri)
 
şeklinde yapabilirsin. Artış oranı değil aslında bu artış değeri. Yanlış mı anladım acaba sorunu? 
Eline sağlık bu arada, zinciri kırma uygulaması olursa ben de kullanmak isterim :)
Ücretli grafik tasarım işleriniz için özel mesaj yoluyla ulaşabilirsiniz.
"Hiçbir kuş, komşusundan daha fazla yuva yapmaya uğraşmadı; hiçbir tilki, saklanacak tek bir kovuk bana yetmez! diye kendini harap etmedi; hiçbir sincap bir değil de iki kış yetecek kadar ceviz biriktiremediği için endişeden ölmedi ve hiçbir köpek yaşlılık yılları için biriktirmiş kemiği olmadığını dert ederek uykusuz kalmadı."

oyPjvR.png
Ara
Cevapla PGM
Teşekkür verenler:
#3
(19-04-2021 Saat: 11:08)Time Traveler Nickli Kullanıcıdan Alıntı:
(19-04-2021 Saat: 03:14)mehmetext Nickli Kullanıcıdan Alıntı: Elimizde bir küçük bir de büyük olmak üzere 2 sayı ve adım sayısı var. Örneğin küçük sayımız 2, büyük sayımız 10 ve adım sayımız da 5 olsun. 5 adımda 2'den 10'a ulaşacağız. Küçük sayıdan başlayarak her adım bir önceki adımdan sabit bir artış oranı ile artırarak 5 adımda büyük sayıya ulaşmalıyız.

Elimizdeki bilinenler: Küçük sayı, büyük sayı ve adım sayısı
Bilinmeyen: Artış oranı

Bilinenler kullanılarak bilinmeyen bulunabilir mi? Bulunabilirse nasıl formül & algoritma yazılabilir?

Artış oranı belli olan bir örnek göstereyim:
Küçük sayımız: 1
Büyük sayımız: 1.331
Adım sayısı: 4
Artış oranı: 0.1


Kod:
(Büyük Sayı - Küçük Sayı) / (Adım Sayısı) = (Artış Değeri)
 
şeklinde yapabilirsin. Artış oranı değil aslında bu artış değeri. Yanlış mı anladım acaba sorunu? 
Eline sağlık bu arada, zinciri kırma uygulaması olursa ben de kullanmak isterim :)

Evet yanlış anlaşılmış hocam. Dediğiniz formülü örnekte uyguladığımızda sonuç 0.08275 çıkıyor fakat artış oranı 0.1 olarak belirli. Artış değeri dersek her adımda belli bir sabit artış var demek oluyor. Artış oranı dersek de her adımda bir önceki adımın belli bir oran fazlası oluyor.

Öyle bir mobil uygulama geliştirmeyi düşünüyorum aslında. Şu an piyasada birçok zinciri kırma uygulaması var fakat hiçbirinde Barış Özcan'daki ve yazdığım fonksiyondaki gibi az artıştan çok artışa doğru bir özellik yok. Böyle bir uygulama geliştirsem bir yararı olur mu diye düşünmüyor değilim.

Yukarıdaki problemi de zinciri kırma programında kullanıcı girilen gün sayısına kadar hedef birimin 30 olmasını istediğinde mesela o artış oranı ne olmalı onu bulmaya çalışıyorum. Kullanıcı artış oranını girmek yerine hedef birimi girer ve hangi gün ne kadar yapması gerektiğini görmek ister mesela. Verdiğim örnekte 1'den 1.331 sayısına ulaşıyoruz 4 adımda. İlk adım başlangıç değerinin kendisi zaten. Diğer adımlarda da bir önceki sayıya o sayının %10'u ekleniyor, yani artış oranı %10 yani 0.1 oluyor. Umarım açıklayabilmişimdir.
1pAza1.png
HTML CSS jQuery Dart Flutter

"Son Tema Ekibi Lideri"
Cevapla PGM
Teşekkür verenler:
#4
Bu değer çok izafi bazı alanlarda o video izlemiştim. Yapılabilir güzel düşünce.
Spor uygulamaları zayıflamak için benzer şeyleri kullanıyorlar sanırım. Kendini geliştirme uygulaması olabilir daha özgün olan diğerlerinde. Hatta görevler bile eklenebilir. Kendi sistemlerini oluşturamayan yada hedefi olmayan için oyunlardaki campaningler gibi. İyi çalışmalar.
Tüm Destek Forumun Kuralları
Görevli Kuralları
- Saçma Konu Başlıklarına ve Özelden Destek Vermiyorum...!
Ücretli Her Türlü Script(MyBB,vB,smf,wordpress,phpBB,joomla,eschat,cms, vb.) Kurulumu ve Optimizasyon Yapılır.Ücretli Tema Tasarımı Yapılır.
Prof. Dr. MyBB Öğretmeni kaRanLık-61( Mustafa SEVİM )

İki Tarafta Zifiri kaRanLık




Mutlu Son İstiyorsan Çabalamalısın. Sadece Oturduğu Yerden Başarıya ulaşan varlık tavuktur. Bir Kurt Asla Evcilleşip Köpek Olmaz...
Cevapla PGM
Teşekkür verenler:
#5
(20-04-2021 Saat: 13:43)kaRanLık-61 Nickli Kullanıcıdan Alıntı: Bu değer çok izafi bazı alanlarda o video izlemiştim. Yapılabilir güzel düşünce.
Spor uygulamaları zayıflamak için benzer şeyleri kullanıyorlar sanırım. Kendini geliştirme uygulaması olabilir daha özgün olan diğerlerinde. Hatta görevler bile eklenebilir. Kendi sistemlerini oluşturamayan yada hedefi olmayan için oyunlardaki campaningler gibi. İyi çalışmalar.

"Bu değer çok izafi bazı alanlarda o video izlemiştim." burada ne demek istediğinizi anlayamadım hocam.
Problem hakkında nasıl çözüleceğine dair bir düşünceniz var mıdır acaba?
1pAza1.png
HTML CSS jQuery Dart Flutter

"Son Tema Ekibi Lideri"
Cevapla PGM
Teşekkür verenler:
#6
(21-04-2021 Saat: 03:40)mehmetext Nickli Kullanıcıdan Alıntı:
(20-04-2021 Saat: 13:43)kaRanLık-61 Nickli Kullanıcıdan Alıntı: Bu değer çok izafi bazı alanlarda o video izlemiştim. Yapılabilir güzel düşünce.
Spor uygulamaları zayıflamak için benzer şeyleri kullanıyorlar sanırım. Kendini geliştirme uygulaması olabilir daha özgün olan diğerlerinde. Hatta görevler bile eklenebilir. Kendi sistemlerini oluşturamayan yada hedefi olmayan için oyunlardaki campaningler gibi. İyi çalışmalar.

"Bu değer çok izafi bazı alanlarda o video izlemiştim." burada ne demek istediğinizi anlayamadım hocam.
Problem hakkında nasıl çözüleceğine dair bir düşünceniz var mıdır acaba?
ben algoritmayı yaptığını düşündüm için öneride bulunmadım :)
izafi kastım bir şeyin ne kadar ilerlediğini anlamak bu yolla doğru ölçülmeyebilir.
Önerim döngü,

php anlatırsam bir while ile yapılabilir gibi geliyor derinlemesine düşünmedim tabi.
sınır olarak büyük sayı koymak. while başlangıcı 1 olacak(yani kucuk değer) bu değer değişen değişkenimiz olacak. Yani artış eklendiğinde bu sayı değişecek her döngü döndüğünde bu sayının değeri artış yöntemiyle değişcek bu sayı büyük sayıya eşitlendi mi duracak zaten. Küçük sayı başlangıcı yani while değerinin zaten.
4 değişken ediyor.
* artış miktarı
* buyuk sayı
* kucuk sayı
* while değeri değişecek/ekrana basılacak sayı/while başlangıc değeri/Başlangıcta zaten kucuk sayıya eşit olacak.
Tüm Destek Forumun Kuralları
Görevli Kuralları
- Saçma Konu Başlıklarına ve Özelden Destek Vermiyorum...!
Ücretli Her Türlü Script(MyBB,vB,smf,wordpress,phpBB,joomla,eschat,cms, vb.) Kurulumu ve Optimizasyon Yapılır.Ücretli Tema Tasarımı Yapılır.
Prof. Dr. MyBB Öğretmeni kaRanLık-61( Mustafa SEVİM )

İki Tarafta Zifiri kaRanLık




Mutlu Son İstiyorsan Çabalamalısın. Sadece Oturduğu Yerden Başarıya ulaşan varlık tavuktur. Bir Kurt Asla Evcilleşip Köpek Olmaz...
Cevapla PGM
Teşekkür verenler:


Hızlı Menü:


Şu anda bu konuyu okuyanlar: 2 Ziyaretçi