Početnik sam u programiranju pa ako je zadatak smjesan pokusajte me razumjeti:D
Neznam rijesit ovaj zadatak:
Napiši Do While ... Loop petlju koja ispisuje sve brojeve između 547 i 7000 kojima je zadnja znamenka 5.
Ako netko zna rijesit bio bi mu puno zahvalan!
Pozz
- +/- sve poruke
- ravni prikaz
- starije poruke gore
trik je vidjeti koji su to zapravo brojevi i koliko se često pojavljuju. ako kreeš od 547, sljedeći koji završava na 5 je 555, i nakon njega samo ideš dalje korakom od 10, znači 565, 575, itd. sad hoćeš li to zbrajati u neku varijablu pa ispisivati ili ćeš realizirati na neki drugi način, na tebi je.
također možeš za svaki broj između ta dva provjeravati zavrava li na 5 te ga ispisati ako završava. znači za to bi ti uvjeti bili da je djeljiv sa 5, ali ne i sa 10, jer ako je djeljiv sa 10, znači da je djeljiv i sa 5, ali tu onda ulaze i destice, odnosno brojevi koji završavaju na 0, a to se ne traži.
rado bi ti napisao i čitav kod, ali davno sam radio u VBu pa se ne mogu sad prisjetiti svega. a i nemam instaliran visual basic .NET na laptopu trenutno pa ne mogu ni pokušati nešto iskemijati.
rješenje ti je tu, samo ga moraš pretočiti u kod.
int prvi = 547;
int zbroj = prvi % 10;
if(zbroj > 5)
{
zbroj = 15 - zbroj;
}
else if(zbroj < 5)
{
zbroj = 5 - zbroj;
}
else
{
zbroj = 0;
}
prvi = prvi + zbroj;
Bitno je dobti prvi broj koji ćemo u petlji inkementirati za 10, kako reče kolega pitagora.
sada samo kroz do-while petlju provučemo varijablu prvi koju inkrementiramo za 10 i ispisujemo brojeve do uvjeta petlje
Manje bitno, koji jezik, pokušaj napisati ovaj algoritam, a neki VB-ovac će ti pomoći oko sintakse.
Muci me to kako rijesit preko Do While petlje..nakon par sat pokusavanja nisam uspio..rijesio sam kad preko For petlje ali ovo sam Do whille...Loop nekuzim...AAAA
Module _7
Sub main()
Dim i As Integer
For i = 547 To 3000
If i Mod 10 = 5 Then
Console.WriteLine(i)
End If
Next
Console.ReadLine()
End Sub
End Module
Dim i As Integer = 547
Do While i <= 3000
If i Mod 10 = 5 Then
Console.WriteLine(i)
End If
i = i + 1
Loop
Hvala!
Da, samo ima jedan nedostatak, računa mod i vrši provjeru za sve brojeve u nizu, a to je nepotreban posao, izbjeći, pogotovo kod ovakvih velikih raspona.
Dim i As Integer = 547
Do While i <= 3000
If i Mod 5 = 0 Then
Console.WriteLine(i)
End If
i = i + 1
Loop
Može i uvjet sa modulo 5 jednako 0.
Floki dobro predlaže.
Jedno rješenje:
vrtio while loop dok ne dođemo do broja djeljivog sa pet i onda vrtio for petlju sa inkrementom za 5.
@ever
tu imaš nedostatak, 10 % 5 = 0
a brojevi sa 0 ne trebaju
prvi sljedeći broj od donje granice zadanog raspona koji završava sa 5 nađemo izvan petlje, s njim vrtimo petlju koju inkrementiramo za 10
Dim i As Integer = 547
Do While i <= 3000
If i Mod 10 = 5 Then
Console.WriteLine(i)
End If
i = i + 1
Loop
-gornje rješenje je točno za konkretan zadatak. Upravo onako kako je zadano.
-primjer lošeg rješenja (uz ispriku, NHF.. ) jer cilj je učenje ('pravilnijeg'?) pisanja čistog, ne prljavog koda.
Dim i As Integer = 547
Do While i <= 3000
If i Mod 5 = 0 Then
Console.WriteLine(i)
End If
i = i + 1
Loop
Može i uvjet sa modulo 5 jednako 0.
Floki dobro predlaže.
Jedno rješenje:
vrtio while loop dok ne dođemo do broja djeljivog sa pet i onda vrtio for petlju sa inkrementom za 5.
-ne, 10 mod 5 ? .. zadatak, samo za 5ice. Drugačije rješenje bi bilo trimanje right$ stringa-znamenke. Mod je brži za ovaj primjer.
-nepotrebno bi bilo korištenje dvije petlje, ''petljanje''. KISS osigurava čistoću koda, greške, održavanje.. pa i brzinu i količinu resursa (ako bi bilo bitno).
-zadatak je za vježbu, učenje, ne za krpanje po sistemu 'good enough'. Upravo zato ne treba koristiti for-next ili step (koji bi skratio broj iteracija za x5).
Pošto je autor napravio OK rješenje s For-nextom, samo treba prihvatiti (razumjeti) kako i kada korsititi koju od while-until tih petlji.
Osnova im je jednaka (osim što next uvečava brojač za step, dok while-until mora biti ručno..), kao i provjere na top-bottom, koju for-next nema.
- pošto se može koristiti i exit loop, moguće je napraviti manje-više s bilo kojom petljom, ali ponovo, smanjiti 'petljanje' je pravo učenje. Optimizacije su idući korak..
primjer: koji je praktički identičan gornjem.
Dim i As Integer = 547
Do
If i Mod 10 = 5 Then
Console.WriteLine(i)
End If
i = i + 1
Loop Until i > 3000 //OR// while i < 3001
to je ispravna sintaksa , np
međutim u primjeni na ovaj zadatak znači "ubio vola radi jednog odreska"