Tek döngüde 3 işlem

Başlatan desman, 28 Şubat 2012, 20:03:06

desman

Ö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
A freshman at YTU

Klein

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.

desman

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..
A freshman at YTU

kayaaydin

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

muuzoo

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
gunluk.muuzoo.gen.tr - Kişisel karalamalarım...

muhittin_kaplan

bu doğrudan gitmeyi kodlarmısınız

desman

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..
A freshman at YTU

muuzoo

#7
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.
gunluk.muuzoo.gen.tr - Kişisel karalamalarım...

muhittin_kaplan

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 ?




muuzoo

#9
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.
gunluk.muuzoo.gen.tr - Kişisel karalamalarım...

taso

#10

while(i!=101){

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

cift_toplam=cift_toplam+i*!(i%2);
i++;
}

muhittin_kaplan

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.

muuzoo

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.



gunluk.muuzoo.gen.tr - Kişisel karalamalarım...