senko Mesaj tarihi: Ekim 15, 2010 Mesaj tarihi: Ekim 15, 2010 #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
Ceday Mesaj tarihi: Ekim 15, 2010 Mesaj tarihi: Ekim 15, 2010 float* olması icin return &A[0] die yazman gerekio die hatırlıom. ya da fonksiyonunun signature'ını float[] sekline cevirip bi dene.
senko Mesaj tarihi: Ekim 15, 2010 Konuyu açan Mesaj tarihi: Ekim 15, 2010 ilk soyledigini denerimde float[] yapamam, fonksiyona giren array integer. int array1 aliyorum fonk icine.
Mirage Mesaj tarihi: Ekim 15, 2010 Mesaj tarihi: Ekim 15, 2010 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.
senko Mesaj tarihi: Ekim 15, 2010 Konuyu açan Mesaj tarihi: Ekim 15, 2010 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?
Mirage Mesaj tarihi: Ekim 15, 2010 Mesaj tarihi: Ekim 15, 2010 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.
Tcpip Mesaj tarihi: Ekim 15, 2010 Mesaj tarihi: Ekim 15, 2010 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]); }
Kojiroh Mesaj tarihi: Ekim 15, 2010 Mesaj tarihi: Ekim 15, 2010 float A[z]; yerine float A* = (float*)calloc(z, sizeof(float)); dener misin sdf Edit: aceleyle yazdım tabi bilemiyorum diğer yerler doğru mu
Deacon Mesaj tarihi: Ekim 15, 2010 Mesaj tarihi: Ekim 15, 2010 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.
senko Mesaj tarihi: Ekim 16, 2010 Konuyu açan Mesaj tarihi: Ekim 16, 2010 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 :)
senko Mesaj tarihi: Ekim 16, 2010 Konuyu açan Mesaj tarihi: Ekim 16, 2010 malloc kullaninca sorunlar cozuldu ama dogru outputlari vermiyor kafayi yememek elde degil :D
LethE Mesaj tarihi: Ekim 16, 2010 Mesaj tarihi: Ekim 16, 2010 son halini bi daha koysana, tcpip nin yazdığının yeterli olması lazım. A = sum/(i+1); kısmı duruyomu olduğu gibi?
senko Mesaj tarihi: Ekim 16, 2010 Konuyu açan Mesaj tarihi: Ekim 16, 2010 #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; }
senko Mesaj tarihi: Ekim 16, 2010 Konuyu açan Mesaj tarihi: Ekim 16, 2010 code tagi tam dogru gosteremiyor
Mirage Mesaj tarihi: Ekim 16, 2010 Mesaj tarihi: Ekim 16, 2010 Sorun ne ki tam olarak? Sonuçta ne yanlış yani? İlk for döngüsünde fazladan bir iterasyon yapıyorsun gibi.
senko Mesaj tarihi: Ekim 16, 2010 Konuyu açan Mesaj tarihi: Ekim 16, 2010 derleyip calistirdiginda vermesi gereken degerleri vermiyor arrayin ilk elemanini 2kere basiyor mesela
Larva Mesaj tarihi: Ekim 16, 2010 Mesaj tarihi: Ekim 16, 2010 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.
senko Mesaj tarihi: Ekim 16, 2010 Konuyu açan Mesaj tarihi: Ekim 16, 2010 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.
Öne çıkan mesajlar