Şimdi Ara

malloc ile dizi oluşturma ve fazla alınan bellek

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
8
Cevap
0
Favori
728
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Merhabalar,
    arkadaşlar simdi 1'den 100'e kadar asal sayıları bulan bir program var ve buldugumuz asal sayıları olusturdugumuz diziye atıyoruz.Yazmıs oldugum kod asagıda..

     
    #include <iostream>
    #include <cstdlib>
    using namespace std;

    int main(int argc, char** argv) {

    int k =0;
    int boyut = 1;
    int* diziptr = (int*)malloc(sizeof(int)*boyut*2);


    for(int i =2 ;i<100;i++){
    int f = 0;
    for(int j=2;j<i;j++){
    if(i%j == 0){
    f=1;
    break;
    }
    }
    if(f==0){
    if(k>=boyut){
    // 2,4,8,16,32,64.. seklinde dinamik olarak dizi boyutunu arttiriyoruz.
    int* diziptr = (int*)malloc(sizeof(int)*boyut*2);
    boyut*=2;
    cout<<boyut<<endl;
    }
    diziptr[k++] = i;

    }

    }
    cout<<endl<<endl;
    for(k=0;k<boyut;k++){
    // Son 7 eleman junk deger gosteriyor.
    cout<<diziptr[k]<<endl;
    }


    free(diziptr); // Aldigimiz bellegi isletim sistemine geri veriyoruz.
    return 0;
    }


    Sorunuma gelirsek simdi ben 2,4,8,16,32.. seklinde diziyi büyütmekteyim.Ancak 1'den 100'e 25 tane asal var ve bu yüzden bellekte 7 integer lik bir bosluk kaldı.Ben böyle yapmaktansa her asal buldugunda 1 tane daha yer acsın seklinde yapmak istiyorum.Yani kısacası toplamda 25 yerlik bi hafızayı kullanayım.
    Yardımcı olursanız sevinirim.







  • Linked list kullanabilirsin.http://www.learn-c.org/en/Linked_lists
    Array mantigi fixed size.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Çalışmaz bu, hata dolu.
  • quote:

    Orijinalden alıntı: Ramon Salazar

    Çalışmaz bu, hata dolu.

    Yararlı cevabınız icin teşekkür ederim.

    @serser12 cevabınız için teşekkür ederim, inceleyeceğim.
  • quote:

    Orijinalden alıntı: snnclsr

    Merhabalar,
    arkadaşlar simdi 1'den 100'e kadar asal sayıları bulan bir program var ve buldugumuz asal sayıları olusturdugumuz diziye atıyoruz.Yazmıs oldugum kod asagıda..

     
    #include <iostream>
    #include <cstdlib>
    using namespace std;

    int main(int argc, char** argv) {

    int k =0;
    int boyut = 1;
    int* diziptr = (int*)malloc(sizeof(int)*boyut*2);


    for(int i =2 ;i<100;i++){
    int f = 0;
    for(int j=2;j<i;j++){
    if(i%j == 0){
    f=1;
    break;
    }
    }
    if(f==0){
    if(k>=boyut){
    // 2,4,8,16,32,64.. seklinde dinamik olarak dizi boyutunu arttiriyoruz.
    int* diziptr = (int*)malloc(sizeof(int)*boyut*2);
    boyut*=2;
    cout<<boyut<<endl;
    }
    diziptr[k++] = i;

    }

    }
    cout<<endl<<endl;
    for(k=0;k<boyut;k++){
    // Son 7 eleman junk deger gosteriyor.
    cout<<diziptr[k]<<endl;
    }


    free(diziptr); // Aldigimiz bellegi isletim sistemine geri veriyoruz.
    return 0;
    }


    Sorunuma gelirsek simdi ben 2,4,8,16,32.. seklinde diziyi büyütmekteyim.Ancak 1'den 100'e 25 tane asal var ve bu yüzden bellekte 7 integer lik bir bosluk kaldı.Ben böyle yapmaktansa her asal buldugunda 1 tane daha yer acsın seklinde yapmak istiyorum.Yani kısacası toplamda 25 yerlik bi hafızayı kullanayım.
    Yardımcı olursanız sevinirim.

    Eğer malloc kullanmak zorunda değilsen daha önceden söylendiği gibi başka tiplere bakman faydalı olur mesela vector gibi.

    Ancak ödev vs icabı malloc ile yapmak zorundaysan realloc fonksiyonu istediğin şeyi yapıyor.

    http://www.cplusplus.com/reference/cstdlib/realloc/




  • Cevabiniz icin tesekkur ederim. Odev icabi değildi ancak hocanin anlatimlari dogrultusunda kafama takilmisti. Sanirim realloc() ile cozebilirim.
  • - N elemanlik bir dizi olustur
    - Her asal buldugunda bir fonksiyona dallan ve orada N+1 lik dizi olustur eski dizinin elemanlarini bu n+1 lik diziye kopyala, son buldugun asal elemani da bu dizinin son elemani yap. Eski dizi ile isin kalmadi onun elemanlarini free'le sonra onun adresine yeni dizinin adresini ver ki program basa döndügünde o diziden yemi olusturdugumuz elemanlara ulasabilsin
    - Geri kalan akisa devam et

    Basitce bu sekilde degil mi istedigin ?

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
  • @cwr

    Yorumunuz için teşekkür ederim.Tam olarak dediğiniz gibi yaptım.Diğer veri yapıları ile de yapılabiliyormuş ancak dizi ile olup olmayacağını merak etmiştim.
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.