Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
7
Cevap
681
Tıklama
0
Öne Çıkarma
Formüll Yardım(Algoritmik) ?
L
11 yıl (388 mesaj)
Yüzbaşı
Konu Sahibi

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..)
// . . .


? :)

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil



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

L
11 yıl (388 mesaj)
Yüzbaşı
Konu Sahibi

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ı >

F
11 yıl (177 mesaj)
Teğmen

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 >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @lavara123
L
11 yıl (388 mesaj)
Yüzbaşı
Konu Sahibi

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ı >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @frknkntr
G
11 yıl (8718 mesaj)
Yarbay

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;
}


Bu mesaja 1 cevap geldi.
L
11 yıl (388 mesaj)
Yüzbaşı
Konu Sahibi

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ı >


Bu mesajda bahsedilenler: @elektro_gadget
G
11 yıl (8718 mesaj)
Yarbay

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.


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @lavara123
L
11 yıl (388 mesaj)
Yüzbaşı
Konu Sahibi

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ı >


Bu mesajda bahsedilenler: @elektro_gadget
DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.