Şimdi Ara

Formüll Yardım(Algoritmik) ?

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
8
Cevap
0
Favori
506
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Merhaba arkadaşlar bir formüll sorum olacaktı bişeyler yürütemedim soldaki ler n değeri diyelim sağdakilerde vermesi gereken sonuçlar:

    2 = 0
    3 = 1
    4 = 2
    5 = 0, 3
    6 = 1, 4
    7 = 2, 5
    8 = 0, 3, 6
    9 = 1, 4, 7
    10 = 2, 5, 8
    11 = 0, 3, 6, 9

    bana bunlar şu şekilde lazım i eşit olduğunda sonuca şeklinde ben yaptım:
     
    int nTemp = (n - 2) % 3;

    for(int i = 0; i < n; i++)
    if(i == nTemp)
    nTemp += 3;


    yukardaki gibi yaptığımda amacıma ulaşıyorum ama orda nTemp değişkenini kullanamadan sadece formatı o şekil olan for döngüsü ve elimizde sadece i ve n değerleri olacak bu şekilde nasıl yapabirm yani şu şekil:

     
    for(int i = 0; i < n; i++)
    if(i == formül..)
    // . . .


    ? :)

    < Bu ileti mobil sürüm kullanılarak atıldı >



  • yaptığım programı atayım..:
    http://ideone.com/drqQcO
    artık amacım sayıyı yazıya cevirmekten ayrılıp az bellek kullanan, hızlı, kısa kod oldu :D (daha sorunlar vardır)

    < Bu ileti mini sürüm kullanılarak atıldı >
  • C dilinde kodunu yazdım umarım işinizi görür

     
    #include <stdio.h>

    int main(){

    int sayi;
    int formul;
    int x;

    scanf("%d",&sayi);

    for(int i=2;i<=sayi;i++){

    formul = (i-2)%3;

    printf("%d = ",i);

    for(int j=0;j<i;j++){

    if(formul<i){

    printf("%d,", formul);

    }
    formul= formul+3;

    }
    printf("\n");
    }
    return 0;

    }



    < Bu mesaj bu kişi tarafından değiştirildi frknkntr -- 4 Ocak 2015; 6:01:49 >
  • frknkntr F kullanıcısına yanıt
    hocam teşekkürler ama i '0'dan n'e kadar dönecek tek for olacak sadece i ve n'yi kullanacağız bu şekilde yapmıştım zaten:

     
    int nTemp = (n - 2) % 3;

    for(int i = 0; i < n; i++)
    if(i == nTemp)
    nTemp += 3;


    ama yukarda nTemp kullandım onu felan kullanmadan sadece i ve n değerleri olarak yapamak istiyorum :D

    < Bu ileti mini sürüm kullanılarak atıldı >
  • Fonksiyon yazmaya alışın beyler, çıktılarınız kaybolmasın.

    @lavara123
    Bende bişeyler yazdım, severim böyle ufak tefek örnekleri. Ama senin neden 5 bitlik değişken kullandığını anlayamadım, merak ettim.

     
    #include <string>
    #define MAKS_HANE 18

    const char* s_basamak[][10] = {
    {"", "bir ", "iki ", "üç ", "dört ", "beş ", "altı ", "yedi ", "sekiz ", "dokuz "},
    {"", "on ", "yirmi ", "otuz ", "kırk ", "elli ", "altmış ", "yetmiş ", "seksen ", "doksan "},
    {"", "yüz ", "iki yüz ", "üç yüz ", "dört yüz ", "beş yüz ", "altı yüz ", "yedi yüz ", "sekiz yüz ", "dokuz yüz "}
    };
    const char* s_deger[MAKS_HANE] = {
    "", "", "", "bin ", "", "", "milyon ", "", "", "milyar ", "", "", "trilyon ", "", "", "katrilyon ", "", ""
    };

    std::string yaziyaDonustur(const std::string &sayi)
    {
    int uzunluk = sayi.length();
    if(uzunluk > MAKS_HANE)
    return "SAYI ÇOOOOK UZUN!";
    else if(sayi == "0")
    return "sıfır";

    const char* str = sayi.c_str();
    bool degerli = true;
    std::string yazi;

    for(int i = 0; str[i]; ++i) {
    int imod = --uzunluk % 3;
    if(i != 0 || str[0] != '1')
    yazi += s_basamak[imod][str[i] - '0'];

    if(imod == 2 && sayi.substr(i, 3) != "000")
    degerli = true;
    if(imod == 0 && degerli) {
    yazi += s_deger[uzunluk];
    degerli = false;
    }
    }
    return yazi;
    }




  • neden 5 bit kullandım çünkü belleği daha az kullanmak gibi bir düşüncem var biliyorum saçma 5 bitlik kullanmam ama olsun :D

    hocam sizin fonksiyonda iyiye benziyor ama neden "üç yüz" , "dört yüz" gibi yüzleri yaptığınızı anlayamadım 1'ler basamaklarından yararlanıp sonuna yüz ekletebilrdiniz ama

    < Bu ileti mini sürüm kullanılarak atıldı >
  • Karmaşıklığı azaltmak adına öyle yaptım, daha doğal geldi. Ayrıca böylesi daha verimli.

    Bilgisayarda 8 bitten daha aşağı bellek tahsis edilemez çünkü en küçük blok o kadardır. Sen öyle yapınca derleyici üst 3 biti maskelemek için ekstra kod yazıyor. Bellek tasarrufu olmadığı gibi hızdan kaybediyorsun. Birde özel bir neden olmadıkça short falan kullanma. char bile kullansan o işlemciye çekilince 32 ya da 64 bite genişletiliyor. En doğal ve uygun olanı int tir.

    Bellek kullanımını azaltmak istiyorsan yığın uzunluğunu düşürmelisin. Benim sistemimde 8 mb yığın bölgesi ayarlıyor derleyici. Hiç değişken olmasa bile 8mb gitti demek bu. Atıyorum bunu 1 mb a düşürmek için derleyiciye "-Wl,--stack,1048576" vermelisin.
  • hmm çok teşekkürler hocam ingilizcem olmadığından bunları bilmiyordum .d çok teşekkürler :)

    < Bu ileti mini sürüm kullanılarak atıldı >
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.