Çözüldü C Binary Tree kodu farklı sonuçlar üretiyor

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

Ülküsüz

Hectopat
Katılım
23 Şubat 2021
Mesajlar
1.291
Çözümler
1
Daha fazla  
Cinsiyet
Erkek
Çoğu zaman çalışmıyor ama nadiren çalışıyor, sebebi nedir? Binary tree ile array karışımı bir şey yapmak istedim. Random sayı eklemeyince sorunsuz çalışıyor ancak döngü ile random olarak bir sürü sayı eklemek isteyince %10 ihtimalle çalışıyor. (Genel olarak 10 denememde bir çalıştı)
Genel olarak kod yazma önerilerine de açığım, isimlendirme vs, aklınıza ne gelirse.

C:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void increaseArraySize(int *arr, int *size);
void binaryAddition(int *arr, int size, int value, int startIndex, int endIndex);
void addToArray(int *arr, int *size, int value);

int main() {
 
    int size = 0;
    int *array = (int *)calloc(size, sizeof(int));
 
    // random sayilar uretip diziye ekliyorum
    srand(time(NULL));
    for(int i = 0; i < 100; i++) {
        addToArray(array, &size, rand()%100);
        printf("%d.%d\n", array[i], i); // kac adim oldugunu takip amacli yazdiriyorum
    }
 
    // normalde random yerine bunlar olacak
  /*addToArray(array, &size, 1);
    addToArray(array, &size, 5);
    addToArray(array, &size, 7);
    addToArray(array, &size, 2);
    addToArray(array, &size, 1);
    addToArray(array, &size, 10);
    addToArray(array, &size, 6);
    addToArray(array, &size, -6);
    addToArray(array, &size, 68);
    addToArray(array, &size, -56);
    addToArray(array, &size, -1);
    addToArray(array, &size, 55);
    addToArray(array, &size, 74);
    addToArray(array, &size, 12);
    addToArray(array, &size, 51);
    addToArray(array, &size, -10);
    addToArray(array, &size, 68);
    addToArray(array, &size, -64);
    addToArray(array, &size, 678);
    addToArray(array, &size, -16);*/

    // dizideki elemanlari yazdiriyorum ancak bastakilerle eslesmiyor
    for(int i = 0; i < size; i++) {
        printf("%d ", array[i]);
    }
 
    scanf("%d", &size); // ekran kapanmasin diye koydum bunu
}

void increaseArraySize(int *arr, int *size) {
 
    int newSize = (*size) + 1;
 
    if((*size) == 0) {
        arr = (int *)calloc(newSize, sizeof(int));
        *size = newSize;
    } else {
        arr = (int *)realloc(arr, newSize * sizeof(int));
        arr[*size] = 0;
        *size = newSize;
    }
}

void binaryAddition(int *arr, int size, int value, int startIndex, int endIndex) {
 
    int middleIndex = (startIndex + endIndex) / 2;
 
    if(startIndex == endIndex) {
        if(value < arr[middleIndex]) {
            int tmp1 = value;
            int tmp2 = value;
            for(int i = startIndex; i <= size; i++) {
                tmp2 = arr[i];
                arr[i] = tmp1;
                tmp1 = tmp2;
            }
        } else {
            int tmp1 = value;
            int tmp2 = value;
            for(int i = middleIndex+1; i <= size; i++) {
                tmp2 = arr[i];
                arr[i] = tmp1;
                tmp1 = tmp2;
            }
     
        }
    } else if (value < arr[middleIndex]) {
        binaryAddition(arr, size, value, 0, middleIndex-1);
    } else {
        binaryAddition(arr, size, value, middleIndex+1, endIndex);
    }
}

void addToArray(int *arr, int *size, int value) {
 
    increaseArraySize(arr, size);
 
    if((*size) == 1) {
        arr[0] = value;
    } else {
        int oldSize = (*size) - 1;
        binaryAddition(arr, oldSize, value, 0, oldSize-1);
    }
}
 
Çözüm
C:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int *increaseArraySize(int *arr, int *size);
void binaryAddition(int *arr, int size, int value, int startIndex, int endIndex);
int *addToArray(int *arr, int *size, int value);

int main() {
 
    int size = 0;
    int *array = (int *)calloc(size, sizeof(int));
 
    // random sayilar uretip diziye ekliyorum
    srand(time(NULL));
    for(int i = 0; i < 100; i++) {
        array = addToArray(array, &size, rand()%100);
        printf("%d.%d\n", array[i], i); // kac adim oldugunu takip amacli yazdiriyorum
    }
 
    // normalde random yerine bunlar olacak
  /*addToArray(array, &size, 1);
    addToArray(array, &size, 5);
    addToArray(array, &size, 7);

    addToArray(array, &size, 2);
    addToArray(array, &size, 1);
    addToArray(array, &size, 10);
    addToArray(array, &size, 6);
    addToArray(array, &size, -6);
    addToArray(array, &size, 68);
    addToArray(array, &size, -56);
    addToArray(array, &size, -1);
    addToArray(array, &size, 55);
    addToArray(array, &size, 74);
    addToArray(array, &size, 12);
    addToArray(array, &size, 51);
    addToArray(array, &size, -10);
    addToArray(array, &size, 68);
    addToArray(array, &size, -64);
    addToArray(array, &size, 678);
    addToArray(array, &size, -16);*/

    // dizideki elemanlari yazdiriyorum ancak bastakilerle eslesmiyor
    for(int i = 0; i < size; i++) {
        printf("%d ", array[i]);
    }
 
    scanf("%d", &size); // ekran kapanmasin diye koydum bunu
}

int *increaseArraySize(int *arr, int *size) {
 
    int newSize = (*size) + 1;
 
    if((*size) == 0) {
        arr = (int *)calloc(newSize, sizeof(int));
        *size = newSize;
    } else {
        arr = (int *)realloc(arr, newSize * sizeof(int));
        arr[*size] = 0;
        *size = newSize;
    }
    return arr;
}

void binaryAddition(int *arr, int size, int value, int startIndex, int endIndex) {
 
    int middleIndex = (startIndex + endIndex) / 2;
 
    if(startIndex >= endIndex) {
        if(value < arr[middleIndex]) {
            int tmp1 = value;
            int tmp2 = value;
            for(int i = startIndex; i <= size; i++) {
                tmp2 = arr[i];
                arr[i] = tmp1;
                tmp1 = tmp2;
            }
        } else {
            int tmp1 = value;
            int tmp2 = value;
            for(int i = middleIndex+1; i <= size; i++) {
                tmp2 = arr[i];
                arr[i] = tmp1;
                tmp1 = tmp2;
            }
   
        }
    } else if (value < arr[middleIndex]) {
        binaryAddition(arr, size, value, 0, middleIndex-1);
    } else {
        binaryAddition(arr, size, value, middleIndex+1, endIndex);
    }
}

int *addToArray(int *arr, int *size, int value) {
 
    arr = increaseArraySize(arr, size);
 
    if((*size) == 1) {
        arr[0] = value;
    } else {
        int oldSize = (*size) - 1;
        binaryAddition(arr, oldSize, value, 0, oldSize-1);
    }
    return arr;
}
Bende çalışıyor.
for(int i = 0; i < size; i++) { printf("%d ", array); }
i yi 0 dan başla 1 artır demissiniz olmasınıistediğiniz - karakterler var.Bu hata değilmi ? yanlış da biliyor olabilirim ilgimi çekti sadece bu durum.

Random rnd deyip belli bir aralıkta göremedim random sayı üretirken.
 
@AYDNd dizilerde indisleme (Array'da indexleme) işlemi 0'dan başlar. Haliyle eleman sayısının 1 azı, son indis olur.
4 eleman varsa "0, 1, 2, 3" şeklinde indislenirler.
Başka bir şeyden bahsediyorsan daha açık yazar mısın? Anlamadım zaten ne demek istediğini.
 
// random sayilar uretip diziye ekliyorum
srand(time(NULL));
for(int i = 0; i < 100; i++) {
addToArray(array, &size, rand()%100);
printf("%d.%d\n", array, i); // kac adim oldugunu takip amacli yazdiriyorum
}

Random sayı ekliyorsunuz 0 dan bir bir artır 100 e kadar deyip ekle demissiniz.


buradaki sayılar - .
 
Buradaki sayılar...
Şimdi anladım, demek istediğim kimse herhalde rastgele sayıları bir diziye doldurmaz. Normal zamanda random değil de belirli sayılar eklenecektir ancak şu an için tek tek girmek yerine döngü kullanarak random olarak oluşturdum.

Üsttekilerle eşleşmiyordan kastım ise burada kaçıncı adımda olduğunun yanı sıra o adımdaki elemanın değerini de yazdırıyorum ancak en sondakilerle kıyaslayınca farklı görünüyorlar.
C:
printf("%d.%d\n", array[i], i); // kac adim oldugunu takip amacli yazdiriyorum
 
C:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int *increaseArraySize(int *arr, int *size);
void binaryAddition(int *arr, int size, int value, int startIndex, int endIndex);
int *addToArray(int *arr, int *size, int value);

int main() {
 
    int size = 0;
    int *array = (int *)calloc(size, sizeof(int));
 
    // random sayilar uretip diziye ekliyorum
    srand(time(NULL));
    for(int i = 0; i < 100; i++) {
        array = addToArray(array, &size, rand()%100);
        printf("%d.%d\n", array[i], i); // kac adim oldugunu takip amacli yazdiriyorum
    }
 
    // normalde random yerine bunlar olacak
  /*addToArray(array, &size, 1);
    addToArray(array, &size, 5);
    addToArray(array, &size, 7);

    addToArray(array, &size, 2);
    addToArray(array, &size, 1);
    addToArray(array, &size, 10);
    addToArray(array, &size, 6);
    addToArray(array, &size, -6);
    addToArray(array, &size, 68);
    addToArray(array, &size, -56);
    addToArray(array, &size, -1);
    addToArray(array, &size, 55);
    addToArray(array, &size, 74);
    addToArray(array, &size, 12);
    addToArray(array, &size, 51);
    addToArray(array, &size, -10);
    addToArray(array, &size, 68);
    addToArray(array, &size, -64);
    addToArray(array, &size, 678);
    addToArray(array, &size, -16);*/

    // dizideki elemanlari yazdiriyorum ancak bastakilerle eslesmiyor
    for(int i = 0; i < size; i++) {
        printf("%d ", array[i]);
    }
 
    scanf("%d", &size); // ekran kapanmasin diye koydum bunu
}

int *increaseArraySize(int *arr, int *size) {
 
    int newSize = (*size) + 1;
 
    if((*size) == 0) {
        arr = (int *)calloc(newSize, sizeof(int));
        *size = newSize;
    } else {
        arr = (int *)realloc(arr, newSize * sizeof(int));
        arr[*size] = 0;
        *size = newSize;
    }
    return arr;
}

void binaryAddition(int *arr, int size, int value, int startIndex, int endIndex) {
 
    int middleIndex = (startIndex + endIndex) / 2;
 
    if(startIndex >= endIndex) {
        if(value < arr[middleIndex]) {
            int tmp1 = value;
            int tmp2 = value;
            for(int i = startIndex; i <= size; i++) {
                tmp2 = arr[i];
                arr[i] = tmp1;
                tmp1 = tmp2;
            }
        } else {
            int tmp1 = value;
            int tmp2 = value;
            for(int i = middleIndex+1; i <= size; i++) {
                tmp2 = arr[i];
                arr[i] = tmp1;
                tmp1 = tmp2;
            }
   
        }
    } else if (value < arr[middleIndex]) {
        binaryAddition(arr, size, value, 0, middleIndex-1);
    } else {
        binaryAddition(arr, size, value, middleIndex+1, endIndex);
    }
}

int *addToArray(int *arr, int *size, int value) {
 
    arr = increaseArraySize(arr, size);
 
    if((*size) == 1) {
        arr[0] = value;
    } else {
        int oldSize = (*size) - 1;
        binaryAddition(arr, oldSize, value, 0, oldSize-1);
    }
    return arr;
}
Bende çalışıyor.
 
Son düzenleme:
Çözüm
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…