Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => Visual Basic .NET => Konuyu başlatan: desman - 28 Şubat 2012, 20:03:06

Başlık: Tek döngüde 3 işlem
Gönderen: desman - 28 Şubat 2012, 20:03:06
Öncelikle selamlar;

Visual basicte 1'den 100'e kadar olan sayıların, tek sayıların ve çift sayıların toplamlarını veren programını tek döngü kullanarak yazmam lazım.
3 dögü kullanarak yapmak gayet kolay fakat iş tek döngüde yapmaya gelince takıldım.
Önerilerinizi,yardımlaınızı bekliyorum.
Bu 1'den 100 kadar olan sayıların toplamını veren program istediğim hale gelmesi için neler eklemeliyim ??
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim i, toplam As Integer
        For i = 1 To 100
            toplam = toplam + i
        Next
        MsgBox(toplam)
    End Sub
End Class
Başlık: Ynt: Tek döngüde 3 işlem
Gönderen: Klein - 28 Şubat 2012, 20:12:53
VB bilmiyorum. C için örnek vereyim VB çevirimini sen yap.

for(i=0;i<100;i++){
   toplam = toplam+i;
   if ( i % 2)   tek_toplam = tek_toplam+i;
     else cift_toplam = cift_toplam + i;
}


Not: if(i%2) ifadesi  eğer i'nin mod 2'si 1 ise demek.
Başlık: Ynt: Tek döngüde 3 işlem
Gönderen: desman - 28 Şubat 2012, 20:27:05
Teşekkürler hocam, bnde öyle bi çözüm getirdim;
Private Sub Command1_Click()
Dim i, toplam, çtoplam, ttoplam As Integer
i2 = 0
For i = 1 To 100 Step 2

ttoplam = ttoplam + i
çtoplam = çtoplam + i + 1
toplam = toplam + i * 2 + 1


Next
Print ttoplam
Print çtoplam
Print toplam

End Sub

Sizin dediğiniz şekilde if kullanarak da denicem..
Başlık: Ynt: Tek döngüde 3 işlem
Gönderen: kayaaydin - 08 Mayıs 2012, 19:39:07

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim x, tek, cift As Integer
        For x = 1 To 100
          if ( i % 2)=1 tek=tek+x
          if ( i % 2)=0 cift=cift+x
        Next
        MsgBox(tek+cift)
        MsgBox(tek)
        MsgBox(cift)
    End Sub
End Class


Başlık: Ynt: Tek döngüde 3 işlem
Gönderen: muuzoo - 08 Mayıs 2012, 23:25:30
Döngü şart mı? Kestirmeden gitsek  :)

Ardışık sayılar : 1 + 2 + 3 +....+ n = [n*(n+1)]/2

Çift sayılar: 2 + 4 + 6 + ... + 2n = n.(n+1)

Tek sayılar : 1 + 3 + 5 + .... + (2n − 1) = n.n=n^2
Başlık: Ynt: Tek döngüde 3 işlem
Gönderen: muhittin_kaplan - 08 Mayıs 2012, 23:44:09
bu doğrudan gitmeyi kodlarmısınız
Başlık: Ynt: Tek döngüde 3 işlem
Gönderen: desman - 09 Mayıs 2012, 00:09:09
Hocam o formülleri toplam sembolünde görmüştük,
o formülleri kodlamak sorun olmasa gerek,
Bu ödevdi hocamız tek döngü kullanarak yapmamızı istemişti o yüzden tek döngüde yapmanın derdindeyiz..
Başlık: Ynt: Tek döngüde 3 işlem
Gönderen: muuzoo - 09 Mayıs 2012, 00:29:15
Alıntı yapılan: muhittin_kaplan - 08 Mayıs 2012, 23:44:09
bu doğrudan gitmeyi kodlarmısınız

Basic bilmiyorum fakat temel hatları algoritma şöyle bir şey olabilir:

int ust_limit = 100;
int toplam,tek_toplam,cift_toplam;
toplam = (ust_limit*(ust_limit + 1))/2;
cift_toplam = (ust_limit/2)*((ust_limit/2)+1);
tek_toplam = (ust_limit/2)^2;


Bu tabi 1-100 arası istendiği için. Eğer bir ön kontrol eklenirse diğer durumlarada uyarlanabilir. Mesela ust_limit tek ise ufak bir düzeltme gibi.
Başlık: Ynt: Tek döngüde 3 işlem
Gönderen: muhittin_kaplan - 09 Mayıs 2012, 11:51:44
yukarda verdiklerinle kodlar birbirini karşılıyormu muzoo

Alıntı Yap[n*(n+1)]/2---(ust_limit*(ust_limit + 1))/2
n.(n+1)----(ust_limit/2)*((ust_limit/2)+1);
n^2----(ust_limit/2)^2

benmi yanlış düşünüyorum.

(ust_limit*(ust_limit + 1))/2=[n*(n+1)]/2
(ust_limit/2)*((ust_limit/2)+1)=(n/2)*[(n/2)+1]
(ust_limit/2)^2=(n/2)^2

olması gerekmiyormu ?



Başlık: Ynt: Tek döngüde 3 işlem
Gönderen: muuzoo - 09 Mayıs 2012, 16:25:30
Alıntı yapılan: muhittin_kaplan - 09 Mayıs 2012, 11:51:44
yukarda verdiklerinle kodlar birbirini karşılıyormu muzoo

benmi yanlış düşünüyorum.

(ust_limit*(ust_limit + 1))/2=[n*(n+1)]/2
(ust_limit/2)*((ust_limit/2)+1)=(n/2)*[(n/2)+1]
(ust_limit/2)^2=(n/2)^2

olması gerekmiyormu ?

Farkliligi goremedim. Biraz daha aciklayici olabilir misiniz? Ben sadece "n" degiskeni yerine "ust_limit" gibi bir degisken kullandim.Algoritma olarak bir fark var mi? Parantez kullanimini soyluyorsaniz c icin dogru bir kullanim.
Başlık: Ynt: Tek döngüde 3 işlem
Gönderen: taso - 09 Mayıs 2012, 19:54:31

while(i!=101){

tek_toplam=tek_toplam+i*(i%2);

cift_toplam=cift_toplam+i*!(i%2);
i++;
}
Başlık: Ynt: Tek döngüde 3 işlem
Gönderen: muhittin_kaplan - 09 Mayıs 2012, 20:35:23
Muzo ilk verdiğin kısa yollar ile sonrasında yazdığın koldar birbirini tutuyor mu ?
yada ammaaaannn boşver gitsin. konuyla alakalı değil zayten.
Başlık: Ynt: Tek döngüde 3 işlem
Gönderen: muuzoo - 09 Mayıs 2012, 21:52:49
Alıntı yapılan: muhittin_kaplan - 09 Mayıs 2012, 20:35:23
Muzo ilk verdiğin kısa yollar ile sonrasında yazdığın koldar birbirini tutuyor mu ?
yada ammaaaannn boşver gitsin. konuyla alakalı değil zayten.
Konu ile alakasız ama bir açıklık getirmek adına yazmak istedim.
İlk verdiğim kısa yolda 1 den 100e kadar olan ardışık sayıların toplamı için

Ardışık sayılar : 1 + 2 + 3 +....+ n = [n*(n+1)]/2 formülünü vermiştim. Bu durumda n=100 olduğunda formül :

toplam=(100*(100+1))/2 olmakta. Ben de örnek algoritmada bu durum için: toplam = (ust_limit*(ust_limit + 1))/2  kodunu verdim. ust_limit=100 için birebir aynı sonuç çıkıyor.

Çift sayılar: 2 + 4 + 6 + ... + 2n = n.(n+1) formülünü vermiştim. Bu durumda 2n=100 olduğundan n=50 oluyor. Örnek algoritmada bu durum için cift_toplam = (ust_limit/2)*((ust_limit/2)+1) kodunu kullandım. ust_limit=100 olduğu için ikiye böldüm. cift_toplam = (50)*((50)+1) haline geliyor. Bu da verdiğim kısa yolu sağlıyor.

Tek sayılar için: 1 + 3 + 5 + .... + (2n − 1) = n.n=n^2 formülünü vermiştim. Bu durumda (2n-1)=99 olacağından 2n=100 olur, n=50 olur. Örnek algoritmada da tek_toplam = (ust_limit/2)^2 kodunu kullandım. Yani aynı sonucu elde ediyorum.

Bu durumda yazdığım örnek algoritma, verdiğim kısa yolları sağlıyor.