Çözüldü C'de bir fonksiyonu kendini yenilecek formda yazmak

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

Aykan5498

Hectopat
Katılım
6 Ocak 2019
Mesajlar
188
Merhaba, yazdığım bir kod var maalesef ki içinden çıkamadım programda ilk önce bir dizi sayı girilecek ardından en büyüğünü en arkaya atıcak, ardından bunu kendini yenileyerek büyükten küçüğe sıralayacak. Maalesef ki kendini yenilettiremedim. Her seferinde sayıları girer girmez sonlandı.

C:
#include <stdio.h>
#include <stdlib.h>
#define N 5.

/* run this program using the console pauser or add your own getch, system("pause") or input loop */
void selection_sort(int a[], int len);

int main(int argc, char *argv[])
{
int b[N], i;

printf(" ");
for(i = 0; i < N; i++)
{
scanf("%d", &b[I]);
}

selection_sort(b, N);

for(i = 0; i < N; i++)
{
printf("%d ", b[I]);
}

return 0;
}

void selection_sort(int a[], int len)
{
int i, j, sayitutucu;

sayitutucu = a[len - 1];

for(i = len - 1; i >= 0; i--)
{
if(sayitutucu == a[I])
continue;

if(a[I] > sayitutucu)
{
sayitutucu = a[I];
j = i;
}
}

a[j] = a[len - 1];
a[len - 1] = sayitutucu;

if(len == 0)
return;

selection_sort(a, len - 1);

}
 
Çözüm
Ben bu siteden C kodunu çalıştırıyorum ve site segmantation error veriyor.
Sorunu çözdüm. (Sadece "segmentation error". Doğru sonuç üretmiyor olabilir.)
j değeri for içerisindeki if'e düşene kadar tanımsız.
Bu yüzden a[j] çağrısında j tanımsızsa patlıyor.
C:
void selection_sort(int a[], int len){
    if(len == 0)
        return;
    int i, j = 0, sayitutucu;

    sayitutucu = a[len - 1];

    for(i = len - 1; i > 0; i--){
        if(sayitutucu == a[i])
            continue;
        if(a[i] > sayitutucu){
            sayitutucu = a[i];
            j = i;
        }
    }
    a[j] = a[len - 1];
    a[len - 1] = sayitutucu;

    selection_sort(a, len - 1);
}
j değeri for içerisindeki if'e düşene kadar tanımsız.
Bu yüzden a[j] çağrısında j tanımsızsa patlıyor.
Değişken ilklendirmenin önemini bir kez daha görmüş olduk.
Sanırım algoritmayı biraz karışık kuruyorum. Bunu düzeltmek için tavsiye edebileceğiniz bir şey var mı?
Hazır fonksiyonları kullanın veya inceleyip özümseyin.
 

Geri
Yukarı