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


senko

Öne çıkan mesajlar


#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
Link to comment
Sosyal ağlarda paylaş

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.
Link to comment
Sosyal ağlarda paylaş

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.
Link to comment
Sosyal ağlarda paylaş

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]);
}
Link to comment
Sosyal ağlarda paylaş

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.
Link to comment
Sosyal ağlarda paylaş

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 :)
Link to comment
Sosyal ağlarda paylaş


#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;
}

Link to comment
Sosyal ağlarda paylaş


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.
Link to comment
Sosyal ağlarda paylaş

×
×
  • Yeni Oluştur...