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.
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
#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;
}
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..
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.
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.
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..
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.
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;
}
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.
sağolun..