dizi içerisinde değer tekrar sayısını buldurmak hk.

Başlatan zamzam23, 13 Ağustos 2020, 08:39:21

zamzam23

Selamlar,
Bir proje için şöyle bir yapıya ihtiyacım var. Örneğin,

int z[30] = {1,0,1,5,1,0,1,0,1,5,1,0,1,0,1,0,1,5,1,0,1,0,1,0,1,5,1,0,1,5,1,0,1};

böyle bir dizi içerisinde

kaç tane 0
kaç tane 1
kaç tane 5 değeri

olduğunu buldurabilecek güzel bir fonksiyona ihtiyacım var. yardımcı olabilecek arkadaşlara şimdiden teşekkür ediyorum.

fide

#1
int terimSayisi=0;
int terimler=[10] ;
int m, n;

for (i =0;i<len(z);i++)
{
  m=0;
  for (n=0;n<len(terimler) ;n++)
  {
    if (z[i] == terimler[n])
    m++;
  }

  if (m==0)
    {terimler[terimSayisi]=z[i];
    terimSayisi++;}

} 
//terim sayısını bulduk. Şimdi de tekrarı bulalım. 

For(m=0;m<len(terimler);m++)
{
 terimSayisi=0
For(i=0;i<len(z);i++)
{
 İf terimler[m] == z[i] 
 {terimSayisi++;} 
} 
printf("%d den %d adet var" terimler[m], terimSayısı) ;
} 
/


}
Telefondan yazdım. Kontrol etmedim ama buna benzer birşey olmalı

Düzeltme:
Dizinin ilk değeri 0 olacağı için verilen dizide 0 yoksa dizideki eleman sayısı bir fazla verebilir. Kontrol edilmeli
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

volkanunal

#include <stdio.h>

int z[] = {1,0,1,5,1,0,1,0,1,5,1,0,1,0,1,0,1,5,1,0,1,0,1,0,1,5,1,0,1,5,1,0,1};

static int how_many (int* dest_arr, int size, int search_item)
{
  int ret = 0;

  if (size == 0)
    return ret;

  for (int arr_idx = 0; arr_idx < size; ++arr_idx)
  {
    if (dest_arr[arr_idx] == search_item)
    {
      ret++;
    }
  }

  return ret;
}

int main(void) 
{

  int ret = how_many(z, (sizeof(z) / sizeof(z[0])), 1);
  printf("\r\n  ret = %d", ret);
  ret = how_many(z, (sizeof(z) / sizeof(z[0])), 0);
  printf("\r\n  ret = %d", ret);
  ret = how_many(z, (sizeof(z) / sizeof(z[0])), 5);
  printf("\r\n  ret = %d", ret);

  return 0;

}
Primum nil nocere

Andromeda

Alıntı yapılan: volkanunal - 13 Ağustos 2020, 11:19:27
#include <stdio.h>

int z[] = {1,0,1,5,1,0,1,0,1,5,1,0,1,0,1,0,1,5,1,0,1,0,1,0,1,5,1,0,1,5,1,0,1};

static int how_many (int* dest_arr, int size, int search_item)
{
  int ret = 0;

  if (size == 0)
    return ret;

  for (int arr_idx = 0; arr_idx < size; ++arr_idx)
  {
    if (dest_arr[arr_idx] == search_item)
    {
      ret++;
    }
  }

  return ret;
}

int main(void) 
{

  int ret = how_many(z, (sizeof(z) / sizeof(z[0])), 1);
  printf("\r\n  ret = %d", ret);
  ret = how_many(z, (sizeof(z) / sizeof(z[0])), 0);
  printf("\r\n  ret = %d", ret);
  ret = how_many(z, (sizeof(z) / sizeof(z[0])), 5);
  printf("\r\n  ret = %d", ret);

  return 0;

}
.. bu herhangi bir dizi için geçerli değil galiba..
" Tanrı, iradesini hakim kılmak için yeryüzündeki iyi insanları kullanır, yeryüzündeki kötü insanlar ise kendi iradelerini hakim kılmak için Tanrı'yı kullanırlar." ..." Tanrı'dan mesaj gelmiyor, biz Tanrı'ya mesaj gönderiyoruz"

zamzam23

Alıntı yapılan: volkanunal - 13 Ağustos 2020, 11:19:27
#include <stdio.h>

int z[] = {1,0,1,5,1,0,1,0,1,5,1,0,1,0,1,0,1,5,1,0,1,0,1,0,1,5,1,0,1,5,1,0,1};

static int how_many (int* dest_arr, int size, int search_item)
{
  int ret = 0;

  if (size == 0)
    return ret;

  for (int arr_idx = 0; arr_idx < size; ++arr_idx)
  {
    if (dest_arr[arr_idx] == search_item)
    {
      ret++;
    }
  }

  return ret;
}

int main(void) 
{

  int ret = how_many(z, (sizeof(z) / sizeof(z[0])), 1);
  printf("\r\n  ret = %d", ret);
  ret = how_many(z, (sizeof(z) / sizeof(z[0])), 0);
  printf("\r\n  ret = %d", ret);
  ret = how_many(z, (sizeof(z) / sizeof(z[0])), 5);
  printf("\r\n  ret = %d", ret);

  return 0;

}

denedim güzel çalışıyor. teşekkürler.

volkanunal

Alıntı yapılan: Andromeda - 13 Ağustos 2020, 12:08:23.. bu herhangi bir dizi için geçerli değil galiba..

Merhaba hocam, herhangi bir int dizisi için mi soruyorsunuz yoksa herhangi bir türdeki dizi için mi sordunuz. Herhangi bir int dizisi için çalışıyor olması lazım. Herhangi bir türdeki dizi için evet uygun değil.
Primum nil nocere

Andromeda

Alıntı yapılan: volkanunal - 14 Ağustos 2020, 08:03:12Merhaba hocam, herhangi bir int dizisi için mi soruyorsunuz yoksa herhangi bir türdeki dizi için mi sordunuz. Herhangi bir int dizisi için çalışıyor olması lazım. Herhangi bir türdeki dizi için evet uygun değil.
sayılardan oluşan herhangi bir dizi için sordum..
.. program döngüsünde 0,1,5 değerlerini gördüm..
 
dolayısı ile önce dizide kaç farklı eleman var bulmak lazım.. veya döngü içinde bulunabilir ve adet sayılabilir..
sadece ilk başta tanımlı dizi elemanlarını değiştirsem ve başka hiçbir değişiklik yapmasam program doğru çalışır mı.. bu arada C den anlamam..
" Tanrı, iradesini hakim kılmak için yeryüzündeki iyi insanları kullanır, yeryüzündeki kötü insanlar ise kendi iradelerini hakim kılmak için Tanrı'yı kullanırlar." ..." Tanrı'dan mesaj gelmiyor, biz Tanrı'ya mesaj gönderiyoruz"

fide

Alıntı yapılan: Andromeda - 14 Ağustos 2020, 10:23:27sayılardan oluşan herhangi bir dizi için sordum..
.. program döngüsünde 0,1,5 değerlerini gördüm..
 
dolayısı ile önce dizide kaç farklı eleman var bulmak lazım.. veya döngü içinde bulunabilir ve adet sayılabilir..
sadece ilk başta tanımlı dizi elemanlarını değiştirsem ve başka hiçbir değişiklik yapmasam program doğru çalışır mı.. bu arada C den anlamam..

C ile aran yoksa bu işi python ile 2-3 satırda halledersin.

Küme + for + x.count(y) ile yaparsın.
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

brandice5

#8
Herhangi bir dizi icin gecerli olan versiyon.

#include <stdio.h>
#include <stdlib.h> 

int z[] = {1,0,1,5,1,0,1,0,1,5,1,0,1,0,1,0,1,5,1,0,1,0,1,0,1,5,1,0,1,5,1,0,1};

int compare( const void* a, const void* b)
{
     return (*(int*)a - *(int*)b);
}

int main(void) 
{
    int len = sizeof(z)/sizeof(z[0]);
    if (len == 0) return 0;
    qsort(z, len, sizeof(z[0]), compare);

    int value = z[0];
    int count = 0;
    
    for(int i=0; i<len; i++)
    {
        if (value == z[i])
        {
            count++;
        }
        else
        {
            printf("value %d count %d\n", value, count);
            count = 1;
            value = z[i];
        }
    }
    
    printf("value %d count %d\n", value, count);
    
    return 0;
}

volkanunal

Alıntı yapılan: Andromeda - 14 Ağustos 2020, 10:23:27sayılardan oluşan herhangi bir dizi için sordum..
.. program döngüsünde 0,1,5 değerlerini gördüm..
 
dolayısı ile önce dizide kaç farklı eleman var bulmak lazım.. veya döngü içinde bulunabilir ve adet sayılabilir..
sadece ilk başta tanımlı dizi elemanlarını değiştirsem ve başka hiçbir değişiklik yapmasam program doğru çalışır mı.. bu arada C den anlamam..

orada bulunan 0 1 5 aramak istenilen değerler, konuyu açan kişi 0 1 5 olarak sormuştu o yüzden, yani siz kendi dizinizde aramak istedilerinizi girebilirsiniz oraya.

Örnek olarak ;
#include <stdio.h>

int z[] = {2,0,7,3,1,0,1,0,1,5,1,0,1,0,1,0,1,5,1,0,1,0,1,0,1,5,1,0,1,5,1,0,1};

static int how_many (int* dest_arr, int size, int search_item)
{
  int ret = 0;

  if (size == 0)
    return ret;

  for (int arr_idx = 0; arr_idx < size; ++arr_idx)
  {
    if (dest_arr[arr_idx] == search_item)
    {
      ret++;
    }
  }

  return ret;
}

int main(void) 
{

  int ret = how_many(z, (sizeof(z) / sizeof(z[0])), 2);
  printf("\r\n  ret = %d", ret);
  ret = how_many(z, (sizeof(z) / sizeof(z[0])), 7);
  printf("\r\n  ret = %d", ret);
  ret = how_many(z, (sizeof(z) / sizeof(z[0])), 5);
  printf("\r\n  ret = %d", ret);

  return 0;

}


diziyi değiştirdim, aramak istediklerimi de değiştirdim.


Primum nil nocere

Andromeda

" Tanrı, iradesini hakim kılmak için yeryüzündeki iyi insanları kullanır, yeryüzündeki kötü insanlar ise kendi iradelerini hakim kılmak için Tanrı'yı kullanırlar." ..." Tanrı'dan mesaj gelmiyor, biz Tanrı'ya mesaj gönderiyoruz"