Ö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
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.
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..
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
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
bu doğrudan gitmeyi kodlarmısınız
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..
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.
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 ?
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.
while(i!=101){
tek_toplam=tek_toplam+i*(i%2);
cift_toplam=cift_toplam+i*!(i%2);
i++;
}
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.
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.