• 23-06-2024, 00:30:53
    #1
    Merhaba, bugün youtube'da gezinirken önüme bu soru çıktı ve işi gücü bıraktım bunu çözmeye çalışıyorum. Yıllardır gün yüzü görmemiş hesap makinesini çıkarttım ama makineye kafa atmak üzereyim. IDE tak diye çözüyor ama ben çözerken alakasız bir sonuç buluyorum.
    TÜBİTAK bilgisayar olimpiyat sorusuymuş. Uyguladığım çözümü aşağı yazıyorum. Yapay zeka bir halt beceremedi. Cevap 4.

    m = max(m, a[i]); için
    Adım 1: m = max(0, 0) = 0
    Adım 2: m = max(0, 35) = 35
    Adım 3: m = max(35, 1) = 35
    .
    .
    Adım 10: m = max(35, 35) = 35 oluyor ve m 35'e denk geliyor sonuçta.

    s += exp(a[i]); için
    Adım 2: s += exp(35) ≈ 1.586×10^15
    Adım 4: s += exp(35) ≈ 1.586×10^15
    Adım 5: s += exp(35) ≈ 1.586×10^15
    Adım 10: s += exp(35) ≈ 1.586×10^15
    geri kalan adımlardaki e^3 ve e^5 gibi değerler çok küçük kalıyor zaten bunların yanında.
    s takribi 6.34x10^15 geliyor
    e^(log(6.34x10^15 )- 35) =4.59x10^-9 gibi çok küçük bir sonuç çıkıyor.

  • 23-06-2024, 00:34:21
    #2
    Platin üye
    Haklısın hocam.
  • 23-06-2024, 00:35:48
    #3
    white35 adlı üyeden alıntı: mesajı görüntüle
    Haklısın hocam.
    Siz de mi aynı sonucu buldunuz?
  • 23-06-2024, 01:10:19
    #4
    Google 1. Sayfa Garantili
    Yapay zeka bu şekilde çözüm sundu;

    Bu C++ programının çıktısını bulmak için kodu adım adım incelememiz gerekiyor. İşte programın detaylı çözümü:
    cpp
    Kodu kopyala
    #include <cmath>
    #include <algorithm>
    #include <cstdio>

    const int n = 10;
    int a[] = {0, 35, 1, 35, 35, 3, 2, 3, 5, 35};
    int m = 0;
    double s = 0;
    for (int i = 0; i < n; i++) { m = std::max(m, a[i]); s += std::exp(a[i]); }

    printf("%dn", (int)(std::exp(std::log(s) - m)));

    Adım 1: m ve s Değerlerini Bulma

    • m başlangıçta 0, s ise 0.0.
    • Diziyi dolaşarak m'yi güncelleyip, s'ye exp(a[i]) ekliyoruz.

    Hesaplamalar:

    • m = 35 (en büyük eleman)
    • s hesaplaması:s=exp⁡(0)+exp⁡(35)+exp⁡(1)+exp⁡(35)+ex p⁡(35)+exp⁡(3)+exp⁡(2)+exp⁡(3)+exp⁡(5)+exp⁡(35 )s = exp(0) + exp(35) + exp(1) + exp(35) + exp(35) + exp(3) + exp(2) + exp(3) + exp(5) + exp(35)s=exp(0)+exp(35)+exp(1)+exp(35)+exp(35)+exp (3)+exp(2)+exp(3)+exp(5)+exp(35)

    Adım 2: std::exp(std::log(s) - m) Hesaplaması

    • std::log(s) hesaplaması (logaritma işlemi)
    • std::log(s) - m işlemi (logaritmanın sonucundan m çıkarma)
    • std::exp(std::log(s) - m) işlemi (sonucu üstel fonksiyonla hesaplama)
    Sonuçta, (int) ile tamsayıya dönüştürülmüş halini yazdırıyoruz.
    cpp
    Kodu kopyala
    printf("%dn", (int)(std::exp(std::log(s) - m)));

    Sonuç


    Yukarıdaki hesaplamalara göre cevapint)(exp⁡(log⁡(s)−35))=(int)(exp⁡(log⁡(exp⁡ (exp⁡(0)+exp⁡(35)+exp⁡(1)+exp⁡(35)+exp⁡(35)+exp⁡(3 )+exp⁡(2)+exp⁡(3)+exp⁡(5)+exp⁡(35)))−35))≈3(int)(e xp(log(s) - 35)) = (int)(exp(log(exp(exp(0) + exp(35) + exp(1) + exp(35) + exp(35) + exp(3) + exp(2) + exp(3) + exp(5) + exp(35))) - 35)) approx 3(int)(exp(log(s)−35))=(int)(exp(log(exp(exp(0)+ex p(35)+exp(1)+exp(35)+exp(35)+exp(3)+exp(2)+exp(3)+ exp(5)+exp(35)))−35))≈3
    Cevap: D) 3
  • 23-06-2024, 01:22:08
    #5
    Backlinkim adlı üyeden alıntı: mesajı görüntüle
    Yapay zeka bu şekilde çözüm sundu;

    Bu C++ programının çıktısını bulmak için kodu adım adım incelememiz gerekiyor. İşte programın detaylı çözümü:
    cpp
    Kodu kopyala
    #include <cmath>
    #include <algorithm>
    #include <cstdio>

    const int n = 10;
    int a[] = {0, 35, 1, 35, 35, 3, 2, 3, 5, 35};
    int m = 0;
    double s = 0;
    for (int i = 0; i < n; i++) { m = std::max(m, a[i]); s += std::exp(a[i]); }

    printf("%dn", (int)(std::exp(std::log(s) - m)));

    Adım 1: m ve s Değerlerini Bulma

    • m başlangıçta 0, s ise 0.0.
    • Diziyi dolaşarak m'yi güncelleyip, s'ye exp(a[i]) ekliyoruz.

    Hesaplamalar:

    • m = 35 (en büyük eleman)
    • s hesaplaması:s=exp⁡(0)+exp⁡(35)+exp⁡(1)+exp⁡(35)+ex p⁡(35)+exp⁡(3)+exp⁡(2)+exp⁡(3)+exp⁡(5)+exp⁡(35 )s = exp(0) + exp(35) + exp(1) + exp(35) + exp(35) + exp(3) + exp(2) + exp(3) + exp(5) + exp(35)s=exp(0)+exp(35)+exp(1)+exp(35)+exp(35)+exp (3)+exp(2)+exp(3)+exp(5)+exp(35)

    Adım 2: std::exp(std::log(s) - m) Hesaplaması

    • std::log(s) hesaplaması (logaritma işlemi)
    • std::log(s) - m işlemi (logaritmanın sonucundan m çıkarma)
    • std::exp(std::log(s) - m) işlemi (sonucu üstel fonksiyonla hesaplama)
    Sonuçta, (int) ile tamsayıya dönüştürülmüş halini yazdırıyoruz.
    cpp
    Kodu kopyala
    printf("%dn", (int)(std::exp(std::log(s) - m)));

    Sonuç


    Yukarıdaki hesaplamalara göre cevapint)(exp⁡(log⁡(s)−35))=(int)(exp⁡(log⁡(exp⁡ (exp⁡(0)+exp⁡(35)+exp⁡(1)+exp⁡(35)+exp⁡(35)+exp⁡(3 )+exp⁡(2)+exp⁡(3)+exp⁡(5)+exp⁡(35)))−35))≈3(int)(e xp(log(s) - 35)) = (int)(exp(log(exp(exp(0) + exp(35) + exp(1) + exp(35) + exp(35) + exp(3) + exp(2) + exp(3) + exp(5) + exp(35))) - 35)) approx 3(int)(exp(log(s)−35))=(int)(exp(log(exp(exp(0)+ex p(35)+exp(1)+exp(35)+exp(35)+exp(3)+exp(2)+exp(3)+ exp(5)+exp(35)))−35))≈3
    Cevap: D) 3
    Teşekkürler ama konuda da belirttiğim üzere maalesef yapay zeka çözemiyor hocam. Ben de gpt ile denedim o da 2 buldu mesela.
  • 24-06-2024, 13:20:25
    #6
    siz logaritma alırken taban olarak 10 kullanıyorsunuz. C'deki log fonksiyonu ise logaritma alırken e sayısını kullanır. Fark bundan kaynaklanıyor.
  • 24-06-2024, 13:24:24
    #7
    VEDANTA adlı üyeden alıntı: mesajı görüntüle
    siz logaritma alırken taban olarak 10 kullanıyorsunuz. C'deki log fonksiyonu ise logaritma alırken e sayısını kullanır. Fark bundan kaynaklanıyor.
    Çok sağ olun hocam. ln olarak almam gerektiğini sonradan bakınca fark ettim gece niyeyse log10 olarak algılamışım orayı.