Şimdi Ara

hangi fonksiyon dahaiyi ve kusurları neler Uzman Görülerinizi Almadn Geçmeyeyim

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
34
Cevap
0
Favori
513
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 12
Sayfaya Git
Git
sonraki
Giriş
Mesaj
  • merhaba arkadaşlar aşağıda iki fonkiyon vardır ve ikiside aynı işi yapmaktadır ve yapıkları işler ise bir dosyada kaçtane string kelimesi olduğunu döndürdemktir birincisi yani "fwsearch" fonksiyonu "fwsearch2" fonksiyonuna göre 1 byte daha az bellek alan tüketerek işini yapmaktadır fakat cpu açısından yani hız açısından "fwsearch2" fonksiyonuna göre daha yavaş olduğunu düşünüyorum belkide daha hızlıdır merak ettiğim sorular...

    1 - hangisi daha hızlı
    2 - hangisi daha verimli yani daha iyi
    3 - fonksiyonlarda bir kusur varsa düzeltimiş halini yollayıp kusurun ne oldğunu söylermisiniz
    4 - bu fonksiyonların verimli olanından daha verimlisini yani daha iyisini biliyorsanız yollarmısınız birde neden daha iyi olduğunu söylermisiniz


    tüm sorular bunlar arkadaşlar yardımcı olursanız çok sevinirim ben bir çok kod yazarım ve silerim fakat silmemin nedeni yalnış olduğundan deği verimsiz olduğundan yani en verimlisini yapmaya çalışırım bu yüzdende siz bu verim konusunda yani yuakrıdaki ceavplar konusnda ne düşünüyorsunuz çoook merak ettim şimdiden herkeze teşetkkürler

     
    long int fwsearch(signed char *string, FILE *dosya)
    {
    long int len = 0, sonuc = 0;
    signed char ch;

    while((ch = fgetc(dosya)) != EOF)
    {
    if(len >= 0)
    {
    if(string[len] == ch)
    {
    len++;
    continue;
    }
    }

    if(ch == ' ' || ch == '\n' || ch == '\t' || ch == '\f')
    {
    if(len <= 0)
    {
    len = 0;
    }

    else if(string[len] == '\0')
    {
    len = 0;
    sonuc++;
    }

    else
    {
    len = 0;
    }
    }

    else if(len != -1)
    {
    len = -1;
    }
    }

    if(len >= 1)
    {
    if(string[len] == '\0')
    {
    sonuc++;
    }
    }

    return sonuc;
    }



     
    /* fwsearch2 fonksiyonu fwsearch fonksiyonundan
    1 byte fazlalıkla bellek alnı kaplamakla beraber cpu açısından daha iyidir */

    unsigned long int fwsearch2(signed char *string, FILE *dosya)
    {
    unsigned long int len = 0, sonuc = 0;
    signed char ch, cr = 1;

    while((ch = fgetc(dosya)) != EOF)
    {
    if(cr && string[len] == ch)
    {
    len++;
    }

    else if(ch == ' ' || ch == '\n' || ch == '\t' || ch == '\f')
    {
    if(!cr)
    {
    cr = 1;
    }

    else if(string[len] == '\0')
    {
    sonuc++;
    }

    if(len)
    {
    len = 0;
    }
    }

    else if(cr)
    {
    cr = 0;
    }
    }

    if(cr && string[len] == '\0')
    {
    sonuc++;
    }

    return sonuc;
    }







  • We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. ( Donald Knuth )
    Once kodunu optimize etmeden once iyi yazmaya bak misal:

     if(len <= 0) 
    {
    len = 0;
    }

    else if(string[len] == '\0')
    {
    len = 0;
    sonuc++;
    }

    else
    {
    len = 0;
    }


    Sunu bu kadar uzatacagina:
    len = 0; 
    if (string[len] == '\0') {sonuc++;}

    yazip gecmelisin ki senden baska kodunu okuyan iflerle else lerle kafasi allak bullak olmasin.

    Onun disinda len -1 den baska negatif sayi olmayacagina gore gidipte len <= 0 durumuysa len = -1 yazma. Onun yerine ternary operator dedigimiz birsey var su sekilde calisiyor
    degisken = boolean ? boolean dogrunun sonucu : boolean yanlisin sonucu;
    yani senin durumda len = len == -1 ? 0 : len;

    Onun disinda sunu:

            else if(len != -1) 
    {
    len = -1;
    }

    boyle yazmak yerine else { len = -1; } diye yazip gecsen daha iyi olur.

    Birde mumkun oldugunca ladder programming (merdiven programlama) dedigimiz if icinde if ordan for ordan if e gecen seyleri azalt misal:

        if(len >= 1) 
    {
    if(string[len] == '\0')
    {
    sonuc++;
    }
    }


    yerine

        if(len >= 1 && string[len] == '\0') { 
    sonuc++;
    }

    yazabilirsin hatta ustte ogrettigim seyi buna uygulayarak:
    sonuc = (len >= 1 && string[len] == '\0') ? sonuc++ : sonuc;
    seklinde 1 satirlik yazabilirsin.

    Onun disinda eger integer++ veya ++integer farki yoksa kullaniminda mutlaka ++integer kullan C/C++ icin.

    2. koduna gelince cr ne demek onu bide aciklasan cok iyi olurdu.

    Kullandigin 2 fonksiyonda hemen hemen ayni mantik var. Yani birisi oteksinden hizli mi yavas mi dersen bunu bilemeyiz ancak test yaparak ogreniriz. Fakat 2. fonksiyon daha okunabilir.

    Birde diger farkettigim sey su ornegin fonksiyona "deneme" stringi atalim ve dosyada su olsun:

    "denemdeneme"

    Bunun sonucunu ben 1 beklerim fakat senin fonksiyonun 0 verir gibime geliyor, cunku sadece ( else if(ch == ' ' || ch == '\n' || ch == '\t' || ch == '\f') ) durumlarini kontrol ediyorsun.




  • öncelikle çok teşekkür ederim gerçektende üşenmeden yazmışsınız gelçi kimse bukadar uzun bir soruyla uğraşmaz sadım ama neyse sizin söylediklernizi dikkate aldım bazı yerlerde gerçektende haklısınız fakat yaptığınızı bazı yalnışlar var

    - şurada şunu "ladder programming" demiş ve "if(string[len] == ch && len >=1)" demişsiniz fakat bu bir hatalı kodlarmadır bunun nedeni ise len değişkeni -1 değeride alabilyor olmasıdır bu yüzden string dizisinin -1. değerini alabilmek bazen olmasada çok büyük ihtimal hata verir bu yüzden "string" dizisinin -1. elemanını almamak için ilk önce len değişkeninin "-1" değerininin olup olmadığını anlamak için ikitane iç içe if bloğu koydum

    - ve "cr" değişkeni nedir diye sormuşsunuz bu benim için "control" isminin "cr" şeklinde kısaltılmışıdır ve cr değişkeni 0 ise kelime ayracı yoktur 1 ise kelime ayracı vardır

    - birde neden "else { len = -1; }" dediniz "else if(len != -1) {len = -1;}" daha mantıklı olmazmı çünki len değişkeninin değeri -1 olduğu halde tekrar -1 atamak bana matnıklı birşey gelmediği için len değeri -1 değerinden farklı ise -1 değerini ata dedim

    - birde dosyanın içinde "denemedeneme" olursa demişsiniz haklısınız "0" değerini döndürür çünki dosyada "deneme" diye bir kelime yoktur "deneme" diye bir byte dizisi vardır eğer dosyanın içeriği "deneme deneme" şeklinde olsaydı fonksiyon 2 değerini döndürürdü çünki dosyada 2 tane "deneme" kelimesi var

    - ve son olarakda neden "sonuc++" yerine "++sonuc" şeklinde kullanmamı önerdiniz gerçektende çok merak ettim "sonuc++" şeklinde kullanıpta "++sonuc" şeklinde kullanmazsak ne oluyorki ?



    < Bu mesaj bu kişi tarafından değiştirildi Harun2525 -- 26 Temmuz 2015; 11:59:29 >




  • quote:

    Orijinalden alıntı: Harun2525

    öncelikle çok teşekkür ederim gerçektende üşenmeden yazmışsınız gelçi kimse bukadar uzun bir soruyla uğraşmaz sadım ama neyse sizin söylediklernizi dikkate aldım bazı yerlerde gerçektende haklısınız fakat yaptığınızı bazı yalnışlar var

    - şurada şunu "ladder programming" demiş ve "if(string[len] == ch && len >=1)" demişsiniz fakat bu bir hatalı kodlarmadır bunun nedeni ise len değişkeni -1 değeride alabilyor olmasıdır bu yüzden string dizisinin -1. değerini alabilmek bazen olmasada çok büyük ihtimal hata verir bu yüzden "string" dizisinin -1. elemanını almamak için ilk önce len değişkeninin "-1" değerininin olup olmadığını anlamak için ikitane iç içe if bloğu koydum

    - ve "cr" değişkeni nedir diye sormuşsunuz bu benim için "control" isminin "cr" şeklinde kısaltılmışıdır ve cr değişkeni 0 ise kelime ayracı yoktur 1 ise kelime ayracı vardır

    - birde neden "else { len = -1; }" dediniz "else if(len != -1) {len = -1;}" daha mantıklı olmazmı çünki len değişkeninin değeri -1 olduğu halde tekrar -1 atamak bana matnıklı birşey gelmediği için len değeri -1 değerinden farklı ise -1 değerini ata dedim

    - birde dosyanın içinde "denemedeneme" olursa demişsiniz haklısınız "0" değerini döndürür çünki dosyada "deneme" diye bir kelime yoktur "deneme" diye bir byte dizisi vardır eğer dosyanın içeriği "deneme deneme" şeklinde olsaydı fonksiyon 2 değerini döndürürdü çünki dosyada 2 tane "deneme" kelimesi var

    - ve son olarakda neden "sonuc++" yerine "++sonuc" şeklinde kullanmamı önerdiniz gerçektende çok merak ettim "sonuc++" şeklinde kullanıpta "++sonuc" şeklinde kullanmazsak ne oluyorki ?

    Bak Ladderde dedigimin sirasini degistirmissin ben (string[len] == ch && len >=1) demedim, (len >= 1 && string[len] == '\0') dedim. Bu tarz operatorler akilli calisir, misal:

    (a || b || c || d || e || f) gibi bir booleanimiz olsun, || da olay ne? eger taraflardan birisi dogruysa cevap dogrudur. O zaman sistem diyor ki ha eger parantez icinde sadece || varsa ilk dogruya ulastigim yerde islemi bitirirm diyor. yani a degeri dogruysa gidipte b den f ye kadar dogru mu yanlis mi bakmaz! ayni sekilde (a && b && c) olursa eger a nin degeri yanlissa o zaman b ile c ye bakmaz.

    Ileride C++ a (veya baska bir object oriented dile) gecersen objelerde surekli check yapildigini gorursun misal:

    if ( bilmemne != null && bilmemne.fonksiyon(baskaBirsey) ) gibi

    O yuzden if(string[len] == ch && len >=1) boyle birsey segfault verebilir, fakat if (len >= 1 && string[len] == '\0'), durumunda string[len] kismina gidildigi zaman len her zaman 0 dan buyuk bir sayi cikar.


    Gel gelelim cr olayina, C de boolean yoktur o yuzden 1 byte lik char kullanirlar genelde. Sen mantikli olsun diye bilmemneBool koyarsan daha aciklayici olur.

    "else { len = -1; }" dediniz "else if(len != -1) {len = -1;}" kismi ise, cunku oraya kadar if, else if vs bloklarinin icine girmediyse len degiskeninin -1 den baska birsey olmamasini istiyorsun. O zaman -1 e ata gec, onemseme onceki degerini.

    "denemedeneme" demedim "denemdeneme" dedim, fakat ikisinde de 0 veriyorsa o senin bilecegin birseydir, yani farkinda ol diye dedim (ipucu genelde mulakatlarada bu tarz seyleri onceden soylemeni/sormani isterler bunlara edge case deriz)

    gelelim ++ olayina. C/C++ dillerinde ++ yi once koymak sonra koymaktan ya ayni zamanda isler ya da daha kisa zamanda isler. Bu biraz senin seviyeni asiyor ama ne farki var dersen farki su:
    sonuc++ dedigin zaman sonuc sayisi misal 5 se, 5 olarak isleniyor sonradan arttiriliyor. ++sonuc dedigimiz zaman ise sayi 5 iken, once arttiriliyor sonra degeri donuluyor. Bunu en iyi anlamak icin
    int sayi = 5;
    int digerSayi = sayi;

    prinft("sayi++=%d ; ++digerSayi=%d", sayi++, ++digerSayi);
    prinft("sayi=%d ; digerSayi=%d", sayi, digerSayi);

    seklinde dene.




  • 1 byte daha az bellek diye bişey olmaz. Her değişken için ayrı ayrı bellek ayrılsa programlar yerlerde sürünürdü.

    Karakterleri tek tek aldığın için baştan hatalısın, halbuki fscanf tam istediğin şeyi yapıyor. strcmp de göremedim? Küçük küçük çok sayıda if-else ler gözler için sakat. Bu işlem aynı dosya üzerinde çok sayıda yapılacaksa farklı alternatifler gerekir.


    Test amacıyla şu dosyayı kullanabilirsin. norvig.com/big.txt
    Kısa sürecek işlemler yapma sakın yanıltıcı olur.



    < Bu mesaj bu kişi tarafından değiştirildi Guest-BF8E9B238 -- 26 Temmuz 2015; 16:35:43 >
  • elktro gadget ağabeyciğim fsancf kullan demişsin ve bu yüzden baştan hatalısın demişsin ben hazırcılıktan nefret ederim fscanf kullansaydım ee bunun algoritması nerede yapacağım işin neredeyse %70'ini fscanf yapardı bu yüzden fsancf kullanmadım yoksa bende biliyorum iki üç fonksiyonlar işi kapatmayı ama önemli olan kendimizine yapabilmesidir ve Allah aşkına karakterleri tek tek almadan ve hazırcılık yapmadan nasıl yapıcaz eğer gerçektenden yaptıysan helal olsun yaptığın fonksiyonunun kodlarınıda görmek isterim doğrusu evet hatalarm var ama karakterleri tek tek almanın hata olduğun düşünmüyorum ve test için demişsin ben o dosyada hangi kelimeyi aratayım fonksiyona
  • getc' de kullanma o halde? Ya fopen? Dosya açan fonksiyonu kendin yazmak varken.
  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
  • quote:

    Orijinalden alıntı: Harun2525

    elktro gadget ağabeyciğim fsancf kullan demişsin ve bu yüzden baştan hatalısın demişsin ben hazırcılıktan nefret ederim fscanf kullansaydım ee bunun algoritması nerede yapacağım işin neredeyse %70'ini fscanf yapardı bu yüzden fsancf kullanmadım yoksa bende biliyorum iki üç fonksiyonlar işi kapatmayı ama önemli olan kendimizine yapabilmesidir ve Allah aşkına karakterleri tek tek almadan ve hazırcılık yapmadan nasıl yapıcaz eğer gerçektenden yaptıysan helal olsun yaptığın fonksiyonunun kodlarınıda görmek isterim doğrusu evet hatalarm var ama karakterleri tek tek almanın hata olduğun düşünmüyorum ve test için demişsin ben o dosyada hangi kelimeyi aratayım fonksiyona

    Ne demek hazirlikciliktan nefret ederim? Sen ileride herseyi 0 dan mi yazicagini zannediyorsun? Zaten herseyi kendin yazarim dersen illa ki hazir yazilmisi kadar cogunlukla iyi olmaz zaten. Tekerlegi de yeniden icat etmeye gerek yok.

    Karakterleri tek tek alma kismina hem katiliyorum hemde katilmiyorum.
    Tek tek alman memory kisminda sana kazanc saglar fakat ayni zamanda islemci olarak kayip saglar. Yani bu bir tradeoff tur.




  • ThisisaNightmare T kullanıcısına yanıt
    hayır hayı onu demek istemedim sizin nedemek istediğinizi anladım mesela olur ya bazen kendinizi test etmek için veyada size verilen bir görev için belki hazır yapsaydım daha iyi olurdu bilemem gerçi sanmıyorum ama gerektirdiğinen fazla hazırcı olmak gerçektende gelişimimizi çok yavaşlatır tabi burada şunu demek istemiyorum her fonksiyonu kendim yazayım demiyorum sadece gerektirdiği kadar aşırı ileriye gitmeye gerek yok ben zaten bu fonksiyonu yapma amacım kendimi geliştirmekti bu fonksiyonu yazarken birçok şey öğrendim hem kendim hemde siz öğrettiniz çok sağolun işte bu yüzden gerektirdiğinen fazla hazırcılığa gitmek istemiyorum size şöyle bir görev verebilirler test etmek için gidin "malloc" fonksiyonunun yaptığı işin aynısını yapan bir fonksiyon yapın derseler aman canııım zaten malloc fonksiyonu var ne gerek var yapmayayımmı dersiniz ? tabikide yaparsınız belki malloc fonksiyonundan daha iyisini veya kötüsüne yaparsını o hiç öenmli değil ama bayağı katkısı olur size işte bu yüzden fscanf kullanmadım zaten fscanf fonksiyonuda kendi içinde karakter bazında işlem yapıyordur %90 ihtimal hem karakter bazında yapmıyorsa nasıl yapacakki ? neyse umarım beni anlamışsınızdır




  • Tek tek almak hiçbir şekilde kazanç sağlamaz, külliyen yanlış. Giriş tamponlu zaten, buffer var orada sen istesen de istemesen de.
  • elektro ağabey ozaman doğrusunu söyle
  • quote:

    Orijinalden alıntı: elektro_gadget

    Tek tek almak hiçbir şekilde kazanç sağlamaz, külliyen yanlış. Giriş tamponlu zaten, buffer var orada sen istesen de istemesen de.

    Sanirim demek istedigimi anlamadiniz.

    Listede n tane "kelime" olsun, her "kelime" de ortalama m uzunlugunda olsun.

    Simdi yapicagimiz islem en kisa O(n*m) time complexity tutmasi gerekiyor.(dosyanin unsorted ve indexlenmedigini vs dusunerek) Konuyu acan arkadasin algoritmasi da bunu sagliyor.

    fscanf ise bize kelime kelime string i veriyor. O zaman her fscanf memory de O(m) lik yer kapliyor. Iste tek tek okursa arkadas constant space (yani O(1) ) ile isi cozmus oluyor.



    < Bu mesaj bu kişi tarafından değiştirildi ThisisaNightmare -- 27 Temmuz 2015; 10:50:03 >
  • ThisisaNightmare T kullanıcısına yanıt
    hocam zaten okadar derine inmeyede gerek yok zaten mantıklı bir şekilde bakıldığında %90 "fscanf" fonksiyonuda karakter bazında işlem yapıyor hem "fsacnf" fonksiyonu benim fonksiyonumdan daha özellikli olduğu için fscanf kullanmak fonksiyonumu yavaşlatır çünki fscanf sadece kelime ayrıştrmıyor bu yüzden fscanf kullanmak hız düşürür bence
  • quote:

    Orijinalden alıntı: Harun2525

    hocam zaten okadar derine inmeyede gerek yok zaten mantıklı bir şekilde bakıldığında %90 "fscanf" fonksiyonuda karakter bazında işlem yapıyor hem "fsacnf" fonksiyonu benim fonksiyonumdan daha özellikli olduğu için fscanf kullanmak fonksiyonumu yavaşlatır çünki fscanf sadece kelime ayrıştrmıyor bu yüzden fscanf kullanmak hız düşürür bence

    Hiz cok dusurmez. Fakat dedigim gibi dosya atiyorum 1 TB olsun, icindeki en buyuk kelime 1 GB boyutunda olsun. O zaman fscanf ile %s istersen o 1 GB lik kelime denk geldiginde memory'de 1 GB lik yer ayirip kelimeyi tutmasi gerekiyor. Tek tek harf okuyunca ise boyle bir sikinti yok. Diger bir durumda fscanf ile aldigin kelime esit degilse o zaman bu 1 GB lik hafizayi bosuna harcadin ustune 1 GB lik karakter sayisi kadar fscanf da iterate etti.



    < Bu mesaj bu kişi tarafından değiştirildi ThisisaNightmare -- 27 Temmuz 2015; 22:46:51 >




  • hocam bu durumda neden elektro gadget hayla karakter bazında işlem yaptığım için fscanf kullanmadığım için yavaş diyor oysaki sizinde dediğiniz gibi fscanf kullanmaktan daha hızlı ve bellekte gereksiz yer harcama ihtimali var
  • quote:

    Orijinalden alıntı: Harun2525

    hocam bu durumda neden elektro gadget hayla karakter bazında işlem yaptığım için fscanf kullanmadığım için yavaş diyor oysaki sizinde dediğiniz gibi fscanf kullanmaktan daha hızlı ve bellekte gereksiz yer harcama ihtimali var

    99% ihtimalle kelimelerin 1 kB boyutunu gecmeyecektir, o yuzden boyle vakit harcamak yerine fonksiyonu kullan gec diye dusunuyor diye dusunuyorum. Fakat dedigim gibi yarin bir mulakata cagrilirsin adam der sana bunu sabit bellek yeri kullanacak sekilde yap, o zaman o fonksiyonu kullanamazsin.
  • ama hocam her koşula uyumlu bir fonksiyonun uyumlu olacağınıda zannetmiyorum cağrıldığımızdada onların dediğine göre birşeyler yaparız belki ama onların dedikleriki derlerse bellek alanını işgal eden bir fonksiyon saçma olur hem bizi test etmek için ipneliğine dosyanın içine 1gb vs.. uzunluğunda çok uzun kelimeler koyabilir ve birde kelime eşit olmazsa nekadar büyük bellek israfı yapıldığını siz düşünün... sanırsam elktro gadget bunu düşünememiş


    hocam konu dısı olacak ama yinede sormak istedim "enum" tipini bilirsiniz en tuhafıma giden şey enum tipinde değişkenler peki bu değişkenlerin aralığı ney onuda merak ettim gerçi yaptığım testlere dayanarak "int" ile aynı olduğunu fark ettim fakat "int" veri tipi bazen 2 byte kaplıyor bazı işletim sistemlerinde ozaman değişşirmi kısacası "enum" tipi nekadar byte bilgilendirseniz çook memnun olurum şimdiden teşekkürler




  • quote:

    Orijinalden alıntı: Harun2525

    ama hocam her koşula uyumlu bir fonksiyonun uyumlu olacağınıda zannetmiyorum cağrıldığımızdada onların dediğine göre birşeyler yaparız belki ama onların dedikleriki derlerse bellek alanını işgal eden bir fonksiyon saçma olur hem bizi test etmek için ipneliğine dosyanın içine 1gb vs.. uzunluğunda çok uzun kelimeler koyabilir ve birde kelime eşit olmazsa nekadar büyük bellek israfı yapıldığını siz düşünün... sanırsam elktro gadget bunu düşünememiş


    hocam konu dısı olacak ama yinede sormak istedim "enum" tipini bilirsiniz en tuhafıma giden şey enum tipinde değişkenler peki bu değişkenlerin aralığı ney onuda merak ettim gerçi yaptığım testlere dayanarak "int" ile aynı olduğunu fark ettim fakat "int" veri tipi bazen 2 byte kaplıyor bazı işletim sistemlerinde ozaman değişşirmi kısacası "enum" tipi nekadar byte bilgilendirseniz çook memnun olurum şimdiden teşekkürler

    Bilmiyorum dusunmusmudur dusunmemismidir ama hakli oldugu yani su, ileride profesyonel kod yazarsan; olabildigince test edilmis ve kisa kod kullanman en iyisidir. O yuzden kutuphane sana bunu yapabilecegin bir fonksiyonu veriyorsa; o zaman kullan gitsin. Yarin bir gun optimize etmen gerekirse o zaman gider fonksiyonu degistirirsin zaten.

    Enum ile ilgili maalesef genel bir bilgi yok, compilerin ve hangi versiyonu olduguna gore degisiyor misal C99 icin (http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf ):

    6.7.2.2 Enumeration specifiers
    [...]
    Constraints
    The expression that defines the value of an enumeration constant shall be an integer constant expression that has a value representable as an int.

    Yani kisaca C99 icin enum degerleri int ile ayni olmali diyor.

    Iste C99'un int i 2 byte ile calisan sistemde 2 byte, 4 byte ile calisanda 4 byte yer kapliyor.

    Aman bununla mi ugrasicam, bana her sistemde ayni olmasi lazim diyorsan o zaman seni Java bolumune alalim.




  • Muhabbete bak ya 1gb uzunluğunda kelime olacakmış bu yüzden fscanf yavaş olurmuş yok birkaç byte fazladan tüketirmiş. Evet doğru 1.000.000.000 karakterden oluşacak bir kelime olacağını hesap edemedim üzgünüm.

    Ha bu arada karakterleri piksel piksel alırsan daha hızlı olur bak. Mesela nokta geldi ne yapacaksın? Pİksel piksel alsaydın tek pikselde iş biterdi böylece diğer pikseller için fazladan bellek harcamamış olurdun yaa.
  • elektro ağabey 1 gb kelime olsun veya olmasın sen olayı anlamamışsın hadi diyelimki "fscanf" fonksiyonu daha iyi peki bu "fscanf" fonksiyonu nasıl bir fonksiyonki karakterlere bakmadan kelimeleri anlayabiliyor siz fscanf önersenizde %90 fscanf de karakter bazdına işem yapıyor yani fscanf kullanınca ayrı bir şey olmuyor ! sadece kodlar biraz daha kısa oluyor okadar fakat bunun yanında fonksiyon hızı yavaşlıyor vede bellekte fazladan yer kaplıyor.... bilmeme anlatabildimmi ayrıca 2 -3 else if veya if bloğu için fscanf kullaıp fonksiyonu yavaşlatmayı göze alıyorsanız tmm ve bu söylediklerimden sonra hayla fscanf yok karakter diyorsanız bana fscanf fonksiyounun kendi içinde karakter bazında işlem yapmadığını açıklayın ispat edin bakalım nasıl yapıyormuş bende çok merak ettim gerçektende ?
  • 
Sayfa: 12
Sayfaya Git
Git
sonraki
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.