• 30-10-2009, 23:01:59
    #1
    Üyeliği durduruldu
    Arkadaşlar C dilinde dosyadaki 10M sayıyı; "long int" kullanarak bir diziye aktaramadm.Derlerken hata vermiyor ancak program çalışırken hata veriyor..

    Asıl yapmak istediğim 10M sayıyı bir dosyadan alıp, diziye kopyalamak. Sayıları sıralamak ve kaç saniyede işlemin tamamlandığını bulmak.


    100K sayı için oluyor. Yani programlamayı yaptım. Ancak 10M yapınca hata veriyor.
    long int değişkeni bildiğim kadarıyla 4.2G sayı aralığında çalışıyor...

    Yardım edebilecek var mı acaba?

    Kodlar burada..



    #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    
        void arayasokmasiralama (long int D[],long int N){
            long int i,k,ekle;
    
            for (i=1; i<N; i++){
                ekle=D[i];
                for(k=i-1; k>=0 && ekle<=D[k]; k--){
                    D[k+1]=D[k];
                }
                D[k+1]=ekle;
                }
        }
    
    
    
    int main(){
        time_t basla, bit;
        int fark;
        long int i;
        long int a[99999];
    
        printf("Hesaplaniyor\n");
        
        time (&basla);
    
        FILE  *Dosya;
        Dosya = fopen("sayilar.txt","r");
    
        for(i=0;i<100000;i++)
        
            {
                fscanf(Dosya,"%d\n",&a[i]);
            }      
    
    
        fclose(Dosya);
        arayasokmasiralama(a,100000);
        
    
    
        time (&bit);
        fark = difftime(bit, basla);
        printf("%d saniye surdu.\n",fark);
    
    
        return(0);
    
    
    }
    Not: 10M sayı yaptırmaya çalışmak için aşağıdaki 3 sayıyı değiştireceksiniz.:


    long int a[99999];
    değiştir
    long int a[9999999];


    for(i=0;i<100000;i++)
    değiştir
    for(i=0;i<10000000;i++)


    arayasokmasiralama(a,100000);
    değiştir
    arayasokmasiralama(a,10000000);
  • 01-11-2009, 20:34:29
    #2
    long int ile int arasinda bir fark yoktur. Sadece long da sadece int de long int de hepsinin değeri aynıdır. Derlerken elbette hata vermeyecektir. Cunku kod bazında doğrudur ancak koşma anında sorun çıkaracaktır. Double veritipini dene.