C dilinde diziler istenen çıktıyı tam olarak alamama

Katılım
8 Mayıs 2024
Mesajlar
10
Daha fazla  
Cinsiyet
Kadın
Kod:
int main(){
int dizi[40]={5, 8, 4, 9, 10, 1, 2, 7, 6, 5, 4, 9, 4, 6, 8, 10, 2, 5, 7, 9, 4, 6, 1, 7, 9, 10, 5,
 7, 6, 1, 3, 3, 4, 9, 4, 6, 7, 3, 5, 4};
int i;
int kackez[10];

for(i=0;i<40;i++){
    kackez[dizi[i]]++;
}

for(i=0;i<10;i++){
    printf("%d oyu veren kisi sayisi %d'dir.\n",i+1,kackez[i]);
}



   
   
   
    return 0;
}


Soru şu 40 öğrenciden okul yemeğine 1 ile 10 arasında bir puan vermesi isteniliyor ve sonra da bu puanların kaç kez verildiğini söyleyen bir çıktı almam gerekiyor.
Örneğin; 1 oyu veren kişi sayısı 3 dür.
2 oyu veren kişi sayısı 5'dir gibi.
Fakat benim aldığım çıktı bazı sayılarda doğru bazılarında ise çok yanlış.
Şu şekilde:
1 oyu veren kisi sayisi 3'dir.
2 oyu veren kisi sayisi 3'dir.
3 oyu veren kisi sayisi 4223018'dir.
4 oyu veren kisi sayisi 3'dir.
5 oyu veren kisi sayisi 4223031'dir.
6 oyu veren kisi sayisi 5'dir.
7 oyu veren kisi sayisi -1449334195'dir.
8 oyu veren kisi sayisi 32766'dir.
9 oyu veren kisi sayisi 4'dir.
10 oyu veren kisi sayisi 5'dir.
 
Son düzenleyen: Moderatör:
Kod:
int main(){
int dizi[40]={5, 8, 4, 9, 10, 1, 2, 7, 6, 5, 4, 9, 4, 6, 8, 10, 2, 5, 7, 9, 4, 6, 1, 7, 9, 10, 5,
 7, 6, 1, 3, 3, 4, 9, 4, 6, 7, 3, 5, 4};
int i;
int kackez[10];

for(i=0;i<40;i++){
    kackez[dizi[i]]++;
}

for(i=0;i<10;i++){
    printf("%d oyu veren kisi sayisi %d'dir.\n",i+1,kackez[i]);
}



  
  
  
    return 0;
}


Soru şu 40 öğrenciden okul yemeğine 1 ile 10 arasında bir puan vermesi isteniliyor ve sonra da bu puanların kaç kez verildiğini söyleyen bir çıktı almam gerekiyor.
Örneğin; 1 oyu veren kişi sayısı 3 dür.
2 oyu veren kişi sayısı 5'dir gibi.
Fakat benim aldığım çıktı bazı sayılarda doğru bazılarında ise çok yanlış.
Şu şekilde:
1 oyu veren kisi sayisi 3'dir.
2 oyu veren kisi sayisi 3'dir.
3 oyu veren kisi sayisi 4223018'dir.
4 oyu veren kisi sayisi 3'dir.
5 oyu veren kisi sayisi 4223031'dir.
6 oyu veren kisi sayisi 5'dir.
7 oyu veren kisi sayisi -1449334195'dir.
8 oyu veren kisi sayisi 32766'dir.
9 oyu veren kisi sayisi 4'dir.
10 oyu veren kisi sayisi 5'dir.
for(i=0;i<40;i++){
kackez[dizi]++;
}
hocam burada ne yapmak istediniz? kackez[dizi] ifadesi i = 0 için kackez[5] olarak çalışıyor ve siz buna ++ yapmışsınız. Bu değerin artırım yaptığı ifade öncelikle hatalı. Sizin yapmanız gereken, öncelikle bir sayaç kullanarak her ifadenen kaç kere sayıldığını hesaplamak ve bunları kackez dizisine yerleştirmek. Algoritma hatalı
 
Kod:
int main(){
int dizi[40]={5, 8, 4, 9, 10, 1, 2, 7, 6, 5, 4, 9, 4, 6, 8, 10, 2, 5, 7, 9, 4, 6, 1, 7, 9, 10, 5,
 7, 6, 1, 3, 3, 4, 9, 4, 6, 7, 3, 5, 4};
int i;
int kackez[10];

for(i=0;i<40;i++){
    kackez[dizi[i]]++;
}

for(i=0;i<10;i++){
    printf("%d oyu veren kisi sayisi %d'dir.\n",i+1,kackez[i]);
}



 
 
 
    return 0;
}


Soru şu 40 öğrenciden okul yemeğine 1 ile 10 arasında bir puan vermesi isteniliyor ve sonra da bu puanların kaç kez verildiğini söyleyen bir çıktı almam gerekiyor.
Örneğin; 1 oyu veren kişi sayısı 3 dür.
2 oyu veren kişi sayısı 5'dir gibi.
Fakat benim aldığım çıktı bazı sayılarda doğru bazılarında ise çok yanlış.
Şu şekilde:
1 oyu veren kisi sayisi 3'dir.
2 oyu veren kisi sayisi 3'dir.
3 oyu veren kisi sayisi 4223018'dir.
4 oyu veren kisi sayisi 3'dir.
5 oyu veren kisi sayisi 4223031'dir.
6 oyu veren kisi sayisi 5'dir.
7 oyu veren kisi sayisi -1449334195'dir.
8 oyu veren kisi sayisi 32766'dir.
9 oyu veren kisi sayisi 4'dir.
10 oyu veren kisi sayisi 5'dir.
Kod:
int main(){

int dizi[40]={5, 8, 4, 9, 10, 1, 2, 7, 6, 5, 4, 9, 4, 6, 8, 10, 2, 5, 7, 9, 4, 6, 1, 7, 9, 10, 5,

 7, 6, 1, 3, 3, 4, 9, 4, 6, 7, 3, 5, 4};

int i, j;

int kackez[10] = {0,0,0,0,0,0,0,0,0,0};

for(i = 0; i<10;i++){
    for(j = 0; j<40 ;j++){
        if(i+1 == dizi[j])
            kackez++;     
    }
}


for(i=0;i<10;i++){

    printf("%d oyu veren kisi sayisi %d'dir.\n",i+1,kackez);

}
    return 0;

}
 
Aldığınız alakasız değerler dizinizin oluşturulduğu yerlerden kaynaklı. Bir dizi oluşturduğunuz zaman bellekte halihazırda kullanılmayan yerleri size atıyor. İçinde hangi değer var bilmiyorsunuz ama ++ ile arttırıyorsunuz. Sorun bundan kaynaklı olabilir. Bütün array'i öncelikle sıfıra eşitleyebilirsiniz. Algoritmanızda bence bi sorun yok ama arrayi allocate ettiğiniz bellek biriminde o esnada başka sayılar olması bozuyor işi.
 
Kod:
int main(){

int dizi[40]={5, 8, 4, 9, 10, 1, 2, 7, 6, 5, 4, 9, 4, 6, 8, 10, 2, 5, 7, 9, 4, 6, 1, 7, 9, 10, 5,

 7, 6, 1, 3, 3, 4, 9, 4, 6, 7, 3, 5, 4};

int i, j;

int kackez[10] = {0,0,0,0,0,0,0,0,0,0};

for(i = 0; i<10;i++){
    for(j = 0; j<40 ;j++){
        if(i+1 == dizi[j])
            kackez++;   
    }
}


for(i=0;i<10;i++){

    printf("%d oyu veren kisi sayisi %d'dir.\n",i+1,kackez);

}
    return 0;

}
Hatalı kod, kackez değişkeni öyle basılamaz.
 
copy paste yaparken silinmis.

Kod:
#include <stdio.h>


int main(){


int dizi[40]={5, 8, 4, 9, 10, 1, 2, 7, 6, 5, 4, 9, 4, 6, 8, 10, 2, 5, 7, 9, 4, 6, 1, 7, 9, 10, 5,


 7, 6, 1, 3, 3, 4, 9, 4, 6, 7, 3, 5, 4};


int i, j;


int kackez[10] = {0,0,0,0,0,0,0,0,0,0};


for(i = 0; i<10;i++){
    for(j = 0; j<40 ;j++){
        if(i+1 == dizi[j])
            kackez[i]++;     
    }
}




for(i=0;i<10;i++){


    printf("%d oyu veren kisi sayisi %d'dir.\n",i+1,kackez[i]);


}
    return 0;


}

Aldığınız alakasız değerler dizinizin oluşturulduğu yerlerden kaynaklı. Bir dizi oluşturduğunuz zaman bellekte halihazırda kullanılmayan yerleri size atıyor. İçinde hangi değer var bilmiyorsunuz ama ++ ile arttırıyorsunuz. Sorun bundan kaynaklı olabilir. Bütün array'i öncelikle sıfıra eşitleyebilirsiniz. Algoritmanızda bence bi sorun yok ama arrayi allocate ettiğiniz bellek biriminde o esnada başka sayılar olması bozuyor işi.
Algoritmada nasıl sorun yok ben anlayamadım?
 
Algoritmada nasıl sorun yok ben anlayamadım?
Ufak bir sorun varmış. Arttırdığı index yanlışmış. If'lere vs gerek yok aslında.


C:
int main()
{
    int dizi[40]={5, 8, 4, 9, 10, 1, 2, 7, 6, 5, 4, 9, 4, 6, 8, 10, 2, 5, 7, 9, 4, 6, 1, 7, 9, 10, 5,
     7, 6, 1, 3, 3, 4, 9, 4, 6, 7, 3, 5, 4};
    int i;
    int kackez[10] = {0,0,0,0,0,0,0,0,0,0,0};

    for(i=0;i<40;i++)
    {
    kackez[dizi[i] - 1]++;
    }

    for(i=0;i<10;i++)
    {
        printf("%d oyu veren kisi sayisi %d'dir.\n",i+1,kackez[i]);
    }
    return 0;
}

Kaç kez tutulduğuna dair bir dizi tutmak güzel bir yaklaşım. Neticede puanlar 1 ile 10 arasında olacak. dizi'den 1 okuduğumuzda 0. elemanı 1 arttırmak, 3 okuduğumuzda 2. elemanı 1 arttırmak ve en sonunda bu diziyi yazmak en optimal çözüm. O(N) sürede halloluyor iş. Sadece kackez[] dizisini arttırırken 1 puanının indexi 0 olduğu için 1 azaltmak gerek.

Bu kodun çıktısı :
1 oyu veren kisi sayisi 3'dir.
2 oyu veren kisi sayisi 2'dir.
3 oyu veren kisi sayisi 3'dir.
4 oyu veren kisi sayisi 7'dir.
5 oyu veren kisi sayisi 5'dir.
6 oyu veren kisi sayisi 5'dir.
7 oyu veren kisi sayisi 5'dir.
8 oyu veren kisi sayisi 2'dir.
9 oyu veren kisi sayisi 5'dir.
10 oyu veren kisi sayisi 3'dir.
 
Ufak bir sorun varmış. Arttırdığı index yanlışmış. If'lere vs gerek yok aslında.


C:
int main()
{
    int dizi[40]={5, 8, 4, 9, 10, 1, 2, 7, 6, 5, 4, 9, 4, 6, 8, 10, 2, 5, 7, 9, 4, 6, 1, 7, 9, 10, 5,
     7, 6, 1, 3, 3, 4, 9, 4, 6, 7, 3, 5, 4};
    int i;
    int kackez[10] = {0,0,0,0,0,0,0,0,0,0,0};

    for(i=0;i<40;i++)
    {
    kackez[dizi[i] - 1]++;
    }

    for(i=0;i<10;i++)
    {
        printf("%d oyu veren kisi sayisi %d'dir.\n",i+1,kackez[i]);
    }
    return 0;
}

Kaç kez tutulduğuna dair bir dizi tutmak güzel bir yaklaşım. Neticede puanlar 1 ile 10 arasında olacak. dizi'den 1 okuduğumuzda 0. elemanı 1 arttırmak, 3 okuduğumuzda 2. elemanı 1 arttırmak ve en sonunda bu diziyi yazmak en optimal çözüm. O(N) sürede halloluyor iş. Sadece kackez[] dizisini arttırırken 1 puanının indexi 0 olduğu için 1 azaltmak gerek.
ben bu algoritmayı anlayamadım. Python'da list kullanarak bunu yapabiliyorum ama C'de şu an oturmadı tam. Çözüm çok pratik ve zaman karmaşıklığı da çok düşük, elinize sağlık.

ben bu algoritmayı anlayamadım. Python'da list kullanarak bunu yapabiliyorum ama C'de şu an oturmadı tam. Çözüm çok pratik ve zaman karmaşıklığı da çok düşük, elinize sağlık.
Anladım, güzel bir çözüm yoluymuş.
 

Yeni konular

Geri
Yukarı