int diziyi komple metoda gönderip değerlerini toplayıp geri almak

Başlatan forumsad, 03 Ekim 2012, 15:41:14

forumsad

arkadaşlar biraz c# bırakma bunalımını atlatıp tekrar devam ediyorum..

sorunum şu bir int dizim var içinda sayılar var bu sayıları bir metodla toplatıp sonucu almam lazım

aşağıda bir çalışma yaptım ama ancak static int değişken tanımlayarak alabildim....

dizinin toplamını return ile nasıl alırız

saygılarımla

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace dizi
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public int[] puanlar = new int[5];
        private void button1_Click(object sender, EventArgs e)
        {
            //önce diziyi rakamlarla dolduralım
            for (int i = 0; i < puanlar.Length; i++)
            {
                puanlar[i] = i; 
            }

            //sonra diziyi komple metoda gönderelim
            diziElemanlariniTopla(puanlar);
            label1.Text = toplam.ToString();

        }

        static int toplam;
        public void diziElemanlariniTopla(params int[] glnDizi)
        {
             toplam = glnDizi[0]+ glnDizi[1] + glnDizi[2] + glnDizi[3]+ glnDizi[4];
            //return toplam;
        }
    }
}

muhittin_kaplan

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace dizi
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public int[] puanlar = new int[5];
        private void button1_Click(object sender, EventArgs e)
        {
            //önce diziyi rakamlarla dolduralım
            for (int i = 0; i < puanlar.Length; i++)
            {
                puanlar[i] = i; 
            }

            //sonra diziyi komple metoda gönderelim
            label1.Text =diziElemanlariniTopla(puanlar).tostring;
        }

                public void diziElemanlariniTopla(params int[] glnDizi) 
        {
             int deger;
             deger = glnDizi[0]+ glnDizi[1] + glnDizi[2] + glnDizi[3]+ glnDizi[4];
             return deger;
         }
    }
}

denermisin olması gerek. ben deneyemedim

mufitsozen

Alıntı Yappublic void diziElemanlariniTopla(params int[] glnDizi)
        {
             int deger;
             deger = glnDizi[0]+ glnDizi[1] + glnDizi[2] + glnDizi[3]+ glnDizi[4];
             return deger;
         }

public void diye tanimli method nasil deger dondurur hocam, esyanin tabiyatina aykiri. Hata olmadan derliyebiliyormusun?
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

forumsad

tam olarak yapmak istediğim bu
ama çalışmadı

mesaj birleştirme:: 03 Ekim 2012, 16:02:12

int  diziElemanlariniTopla(params int[] glnDizi)

bu şekilde düzeltince çalıştı

çok teşekkürler

muhittin_kaplan

Hocam iyi yakalamışsın. Döndürülen değer ne olacak ? tabiki int.
public int diziElemanlariniTopla(params int[] glnDizi) 
        {
             int deger;
             deger = glnDizi[0]+ glnDizi[1] + glnDizi[2] + glnDizi[3]+ glnDizi[4];
             return deger;
         }


mesaj birleştirme:: 03 Ekim 2012, 16:04:24

Hacam Şu an makinada IDE olarak not defteri, Derleyici olarak BEN varım.

forumsad

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace dizi
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public int[] puanlar = new int[5];
        private void button1_Click(object sender, EventArgs e)
        {
            //önce diziyi rakamlarla dolduralım
            for (int i = 0; i < puanlar.Length; i++)
            {
                puanlar[i] = i; 
            }

            //sonra diziyi komple metoda gönderelim
            label1.Text = diziElemanlariniTopla(puanlar).ToString();

        }


        public int  diziElemanlariniTopla(params int[] glnDizi)
        {
            int deger;
            deger = glnDizi[0] + glnDizi[1] + glnDizi[2] + glnDizi[3] + glnDizi[4];
            return deger;


        }
    }
}



çalışan hali çok teşekkürler devamına bir sorum daha var

dizi elemanlarını döngü ile toplattığımda hata alıyorum


        public int  diziElemanlariniTopla(params int[] glnDizi)
        {
            int deger;
            for (int i = 0; i < glnDizi.Length; i++)
            {
                deger += (int)glnDizi[i];    //deger hata veriyor
            }
            //deger = glnDizi[0] + glnDizi[1] + glnDizi[2] + glnDizi[3] + glnDizi[4];
            return deger;
        }


saygılarımla

muhittin_kaplan

Forumsad Peki sana soru ? Maden Fonksiyonlar üzerinde çalışıyorsun.
a b c Adında kendine parametre olarak verilen bir fonksiyon a+1,b+2 ve c+4 olarak geri döndüren fonksiyonu yazabilirmisin.

sözde kod

BenimFonksiyon (int a,int b, int c)
{
return a+1
return b+2
retunn c+4
}

a=benimfonksiyon (2,4,8).a
b=benimfonksiyon (2,4,8).b
c=benimfonksiyon (2,4,8).c

gibi




mesaj birleştirme:: 03 Ekim 2012, 16:12:19

hata olarak ne veriyor. Bir fazla hatası gibi birşey mi ?

forumsad

hocam verdiği hata

Use of unassigned local variable 'deger'

istediğiniz şekilde bir örnek yapıp koyacağım

saygılar

mufitsozen

deger degiskeniz sifirlanmamis!

Tanimlandigi anda icinde herhangi bir deger olabilir.
Zaten aldiginiz mesajda onu soyluyor
Toplama yapmadan once (donguden once) deger'i sifirlamaniz lazim
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

forumsad

muhittin_kaplan hocam

ancak bu şekilde bir şey yapabildim
        private void button2_Click(object sender, EventArgs e)
        {
           int a=topla(2,3,4);
           MessageBox.Show(a.ToString());
        }

        public int topla(int a, int b, int c)
        {
            int a1=a+1;
            int b1=b+2;
            int c1=c+4;

            return a1;
        }


mesaj birleştirme:: 03 Ekim 2012, 16:31:33

döngü içinde toplama sorunuda çözüldü

int deger = 0;  olarak değiştirince hata vermeden çalıştı


çok teşekkürler   

muhittin hocam sorunuzun cevabını yazarsanız öğrenmiş oluruz....

saygılarımla

muhittin_kaplan

Aslında soruyu sorarken C# ile VB.Net in yakın cevaplar olacağından yola çıkarak başlamıştım. Ama Anlamsız şekilde farklı çıktı. Aşağıdaki linkte C ile

#include<stdio.h>
 
typedef struct{
	int integer;
	float decimal;
	char letter;
	char string[100];
	double bigDecimal;
}Composite;
 
typedef union{
	int num;
	char letter;
}Zip;
 
Composite example()
{
	Composite C = {1,2.3,'a',"Hello World",45.678};
	return C;
}
 
Zip example2()
{
	Zip r;
	r.num = 99;
	r.letter = 'C';
	return r;
}
 
int main()
{
	Composite C = example();
	Zip rar = example2();
 
	printf("Values from a function returning a structure : { %d, %f, %c, %s, %f}",C.integer, C.decimal,C.letter,C.string,C.bigDecimal);
	printf("\n\nValues from a function returning a union : { %d, %c}",rar.num,rar.letter);
 
	return 0;
}


ile vb.net arasındaki benzerlik

Public Structure Student
    Public Name As String
    Public Age As Integer
    Public GradePointAverage As Decimal
End Structure

Public Function GetStudent() as Student
     Dim udtNew As Student
    
    udtNew.Name = "Johny"
    udtNew.Age = 12
    udtNew.GradePointAverage = 3.5

    Return udtNew
     
End Funtion


buda c# ama ben yapıdan birşey anlamadım

using System;
using System.Collections.Generic;
using System.Linq;
 
namespace ReturnMultipleValues
{
    internal class Program
    {
       static void Main()
       {
           var minMax = MinMaxNum(new[] {4, 51, 1, -3, 3, 6, 8, 26, 2, 4});
 
           int min = minMax.Item1;
           int max = minMax.Item2;
 
           Console.WriteLine("Min: {0}\nMax: {1}", min, max);
       }
 
        static Tuple<int,int> MinMaxNum(IEnumerable<int> nums)
        {
            var sortedNums = nums.OrderBy(num => num).ToArray();
            return new Tuple<int, int>(sortedNums.First(), sortedNums.Last());
        }
    }
}


Kodların bir bölümü
http://rosettacode.org/wiki/Return_multiple_values#C alıntıdır.
       

fatih6761

@muhittin bey kodun C# da kısa olması LINQ den kaynaklanıyor. LINQ ile C# çok değişti, profesyonel programlama çok kolay hale geldi. Verdiğiniz örnekte Tuple<int, int> IEnumerable<int> gibi olaylar LINQ oluyor. Dizi işlemleri tek satırlık kod haline geliyor. Bildiğiniz ingilizce cümlecikler... Mesela:

int[] klasik_dizi = IEnumerable.Range(0, 100).ToArray<int>(); // 0 dan yüze bir dizi, ToArray ile geçiliyor
List<int> kareleri = (from sayi in klasik_dizi
                               where sayi < 50
                               select sayi * sayi).ToList<int>();


Burada farklı dizi türlerini kullandım. Bu kod önce 0 dan 100 e kadar tüm sayıları diziye alıyor, sonra 50 den küçük olan sayıların karelerini bir diziye yerleştiriliyor...
For ile yapılmış hali:

int[] klasik_dizi = new int[100];
for(int i = 0; i < 100; i++)
    klasik_dizi = i;

int[] kareleri = new int[50];
for(int i = 0; i < 50; i++)
    kareleri = klasik_dizi * klasik_dizi;


Not : burada kareler ilk aşamada oluşabilir, iyileştirilebilir, ama dizi farklı yerden gelmişte olabilir. O kısmı düşünmeyelim lütfen   :)
Özetle verdiğiniz kod, C# içinde, aynen C deki gibi oluşturulabilir, ama kodu yazan programcılar yeni teknoloji LINQ den ve Lambda Expression lardan faydalanmışlar...

muhittin_kaplan

Hocam Genelde Algı (en azından bende öyle) .net dilleri arasında bariz farkların olmamasıdır. Örneği bu şekilde yazmaları kafamı karıştırmış araştırdığımda linq ya ulaşmıştım.
teşekkür ederim açıklama için.

fatih6761

Haklısınız hocam, netice de .Net dilleri ama bu aralar C# ın yapımcısı Microsoft, VB yi bırakmış ve C# üzerine yoğunlaşmış durumda. VB ve Basic temelli diller ( özelleşmiş türevler hariç ), C ( ve türevleri ) kadar yetenekli değiller. < Bilgim dahilinde konuşuyorum, yanlışsam düzeltin >. C# ın C yeteneklerini de kapsaması bir avantaj. Bu yetenek çatı özellikleriyle birleşince güzel bir dil ortaya çıkıyor. ( Bence ) Ve bana kalırsa VB.Net iyi bir çalışma değil. VB.Net; VB den çok C ye benziyor.
Haksız mıyım? VB yazarları beni yanlış anlamasın, sadece bilgim dahilinde yorum yapıyorum  :)
İyi çalışmalar...

muhittin_kaplan

Hocam Aslında (Bu olaya Kadar ) c# c ye benzer, vb biraz daha ayrılır diyordum.