Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

c de arraylari nasil fonksiyon disina gonderiyorduk


Öne çıkan mesajlar

Mesaj tarihi:

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

float *prefix_Averages(int [], int );

int main(void)
{
int array1[] = {10, 11, 12, 13, 14, 15, 16, 17};
int n = 0;
int q = 0;
float *pa;
scanf("%d", &n);
pa = prefix_Averages(array1, n);
for(q=0; q<=n; q++)
{
printf("%fn", *(pa+q));
}

}

float *prefix_Averages(int x[], int z)
{
float A[z];
int sum = 0;
int i = 0;
for(i=0; i <= (z-1); i++)
{
sum = sum + x[i];
A[i] = sum/(i+1);
}
return A;
}


boyle bir kod var, istedigim A[] dizisini bastirabilmek ama olmuyor bi turlu, array dondururken yanlis bisiler yapiyorum
Mesaj tarihi:
c tecrübem pek yok ama float A[z]; diye tanımladığın değişken lokal olduğu için fonksiyon sonrasında array'in bellekte ayırdığı yer temizleniyor olmasın? Böyle bir şey varsa float A[z] 'yi caller tarafında tanımlayabilirsin ya da alloc (ya da malloc vb tam hatırlamıyorum) ile kalıcı yer açabilirsin.
Mesaj tarihi:
mantıksız degil hakketen, belki o yüzdendir, gerci ilkini dogru bastırıyor sonra sacmalıyor

malloc ile dinamik yer acmadan nasil statik hale getirebilirim peki?
Mesaj tarihi:
Fonksiyonu çağırmadan array boyunu biliyorsun zaten. float *pa; yerine yerine float pa[n] şeklinde tanımlayıp, pa'yı da argüman olarak fonksiyona verirsin. Fonksiyonun bir şey döndürmesine gerek kalmaz. In parameter hedesi.

edik: Bazı compiler'lar hede[n] şeklinde dinamik array boyuna izin vermiyorlardı galiba. Öyle bir şey varsa malloc zorunlu olabilir belki.
Mesaj tarihi:
fonksiyon bittiğinde o bellek silindiğinden o fonksiyon içinde yarattığın array de silinir. Zaten var olan bir array'i (referansını) pass edip değerlerini değiştirebilirsin.

void deistirbeni(float * arr)
{
arr[0] = 1;
arr[1] = 2;
}

void main()
{
float sonuc[2];

deistirbeni(&sonuc);

printf("%d",sonuc[0]);
}
Mesaj tarihi:
kojiroh senin dediğin çok fena olur. memory leak mi deniyordu onlara ne deniyordu? array tanımlayınca otomatik siliniyor da o şekilde yer ayırırsan free etmen gerekir.

senin yapacağın şey mirage'in söylediği gibi caller'da yer açıp, hesaplayan fonksiyona onun adresini pass etmek.
Mesaj tarihi:
hmm dediginiz gibi float pa[n] yapinca yemiyor gcc :) baska complierler izin verebilirde gcc ile uyumlu olmasi iyi olur yaptigim kodlarin.

yoksa mirage nin dedigi gibi fonksiyona 2 tane array gonderecektim bi tanesini geri alcaktim ama yemedi.

en saglami malloc ile fonksiyon icinde yer acmak olucak heralde. o zaman fonksiyondaki degerler silindikten sonra bile malloc ile acilan yerin sabit kalmasi lazim. bide oyle deniyim ben :)
Mesaj tarihi:

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

float *prefix_Averages(int [], int );

int main(void)
{
int array1[] = {10, 11, 12, 13, 14, 15, 16, 17};
int n = 0;
int q = 0;
scanf("%d", &n);
float *pa;
pa = prefix_Averages(array1, n);
for(q=0; q<=n; q++)
{
printf("%fn", *(pa+q));
}

}

float *prefix_Averages(int x[], int z)
{
float *ap;
int eleman_sayisi;
eleman_sayisi = z;
ap = malloc(eleman_sayisi * sizeof(float));
int sum = 0;
int i = 0;
for(i=0; i <= (eleman_sayisi-1); i++)
{
sum = sum + x[i];
ap[i] = sum/(i+1);
}
return ap;
}

Mesaj tarihi:

for(i=0; i <= (eleman_sayisi-1); i++)
{
sum = sum + x[i];
ap[i] = (float)sum/(i+1);
}


Geri kalanina bakmadim ama bunun duzeltmesi gerek 10.5 hesaplarken float a typecast etmeyince sonucu int olarak 10 yapiyo gene
indexler de var tabi code tagi koseli parantezleri artik gormuyo galiba.
Mesaj tarihi:
coder adam boyle belli eder kendini :D
evet float olmasi lazimdi dedigin gibi 50kere bakipta gorememem benim okuzlugum :d
sak diye cozuldu problem bide ilk forda <= degil < olcak.
×
×
  • Yeni Oluştur...