Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: zamzam23 - 13 Ağustos 2020, 08:39:21

Başlık: dizi içerisinde değer tekrar sayısını buldurmak hk.
Gönderen: zamzam23 - 13 Ağustos 2020, 08:39:21
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.
Başlık: Ynt: dizi içerisinde değer tekrar sayısını buldurmak hk.
Gönderen: fide - 13 Ağustos 2020, 09:45:17
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
Başlık: Ynt: dizi içerisinde değer tekrar sayısını buldurmak hk.
Gönderen: 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;

}
Başlık: Ynt: dizi içerisinde değer tekrar sayısını buldurmak hk.
Gönderen: Andromeda - 13 Ağustos 2020, 12:08:23
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..
Başlık: Ynt: dizi içerisinde değer tekrar sayısını buldurmak hk.
Gönderen: zamzam23 - 13 Ağustos 2020, 15:58:43
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.
Başlık: Ynt: dizi içerisinde değer tekrar sayısını buldurmak hk.
Gönderen: volkanunal - 14 Ağustos 2020, 08:03:12
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.
Başlık: Ynt: dizi içerisinde değer tekrar sayısını buldurmak hk.
Gönderen: Andromeda - 14 Ağustos 2020, 10:23:27
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..
Başlık: Ynt: dizi içerisinde değer tekrar sayısını buldurmak hk.
Gönderen: fide - 14 Ağustos 2020, 11:23:51
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.
Başlık: Ynt: dizi içerisinde değer tekrar sayısını buldurmak hk.
Gönderen: brandice5 - 14 Ağustos 2020, 12:33:45
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;
}
Başlık: Ynt: dizi içerisinde değer tekrar sayısını buldurmak hk.
Gönderen: volkanunal - 14 Ağustos 2020, 17:40:58
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.


Başlık: Ynt: dizi içerisinde değer tekrar sayısını buldurmak hk.
Gönderen: Andromeda - 14 Ağustos 2020, 18:16:43
sağolun..