Pozdravljeni, prosila bi vas če mi lahko napišete rešitev naslednje naloge, ker se ne vidim iz nje! Ne zanam niti začeti, no razen glave funkcije, to pa je tko kot nič!
Naloga pravi: Seštevanje v binarnem številskem sistem je podobno seštevanju v desetiškem. Seštevamo, tako kot v desetiškem sistemu, od desne proti levi. Kadar seštejemo dve enici (v spodnjem primeru se to zgodi na tretjem mestu z desne), je rezultat 0, 1 pa gre naprej.
101100110
+ 0110101
---------------------
110011011
Napišite funkcijo za seštevanje binarnih števil. Funkcija naj prejme seštevanca kot niza (string) in tudi rezultat naj bo niz.
Hvala, pa lep dan še naprej.
Seštevanje v binarnem številskem sistemu!
Pozdravljeni,
Kje pa dobite te naloge? Da vam jaz slučajno ne rešujem kakšnih domačih nalog?
No kakorkoli, zaenkrat se ustaviva pri algoritmu, ki je, če malce premislite skrajno preprost. Obe števili je potrebno poravnati desno in seštevati pripadajoče indekse... Še mnogo lažje pa je, če:
Kje pa dobite te naloge? Da vam jaz slučajno ne rešujem kakšnih domačih nalog?
No kakorkoli, zaenkrat se ustaviva pri algoritmu, ki je, če malce premislite skrajno preprost. Obe števili je potrebno poravnati desno in seštevati pripadajoče indekse... Še mnogo lažje pa je, če:
- Obe števili obrnete.
- Sedaj lepo seštevate od indeksa 1 do največjega indeksa.
- Rezultat še enkrat obrnete.
- Napisati funkcijo, ki niz obrne
- Ugotoviti, kako iz niza dobiti poljuben indeks... to vam naredi funkcija MID.
lp,
Matjaž Prtenjak
Administrator
Matjaž Prtenjak
Administrator
Koda: Izberi vse
Function obrni(s As String) As String
For i = Len(s) To 1 Step -1
obrni = Mid(s, i, 1)
Next
End Function
Drugače pa so te naloge iz prejšnjih izpitov, ki jih rešujem za vajo ker bom imela čez dober teden izpit! Ne bi vas izkoriščala, da bi mi vi reševali domače naloge!!!
Vesela pa sem pomoči, ker se učim sama oz sošolec mi pomaga prek msn-ja, kolikor pač zna. So pa kake naloge take, ker ne vem kako bi jih rešila in se pol zapletem in tko gre pol cel dan mimo in ne rešim nič!
Tako mam kar nekaj nalog, ki naj bi mi za rezultat vračale true, če je neki npr pravilno in false če ni, sam ne morem ugotoviti kako naj bi to napisala tko da navasno pristanem pol kar pri navadni proceduri, ker ne znam napisati funkcije, ki bi mi vračala tak rezultat!
Še enkrat hvala za vso vašo pomoč, Missy.
Če sem funkcijo obrni prav napisala pa imam velike probleme z frunkcijo seštej! Moja koda se mi zdi da je kar neki, ne vem kako naj v primeru rezultata 1, ki je pol 0, tisto 1 prištejem naprej!
Kak nasvet bi prišel prav!
Lp.
Koda: Izberi vse
Function bin(niz1 As String, niz2 As String) As String
Dim m As String
obrni (niz1)
obrni (niz2)
m = ""
If niz1 > niz2 Then
For i = 1 To Len(niz1)
n = Mid(Cint(niz1), i, 1) + Mid(Cint(niz2), i, 1)
If n = 2 Then
m = m & 0
End If
m = m & n
Next
Else
For i = 1 To Len(niz2)
n = Mid(Cint(niz1), i, 1) + Mid(Cint(niz2), i, 1)
Next
End If
obrni (m)
End Function
Lp.
Pozdravljeni,
no ja, ne vem kaj točno se učite oz. zakaj se morate učiti programiranja; toda če boste tako hitro obupali potem to ravno ne bo najbolje... Pa še naloga je tako preprosta je . Na kateri šoli se učite VBA-ja in s kakšno literaturo?
Funkcijo obrni ste skoraj napisali pravilno. Zanimivo mi je, da pišete: "Ne vem če je pravilna"... Ja preizkusite ne! Postavite se lepo v okno 'immediate' in napišite:
in videli boste da vaša funkcija ne deluje pravilno. Potem pa jo pač popravljate tako dolgo, da je pravilna! Napaka je seveda v tem, da vi niza ne gradite; torej znakov mu ne dodajate, temveč mu vedno priredite samo en znak in zato vaša funkcija vrno vrne samo en znak in to je (algoritmično gledano zadnji znak v algoritmu), vsebinsko pa je to prvi znak niza. Niz morate sestavljati, tako kot je prikazano spodaj:
No kar pa se tiče seštevanja dveh nizov pa tudi ne razumem čemu obopujete. Spodaj imate funkcijo, ki je pisana z vsemi komentarji in je tako preprosta, da je že kar boleče
Pri tem vas opozarjam, da je ta funkcija dolga zato, ker je pisana povsem začetniško in ima vse komentarje, ter vam prikaže tudi dve pasti algoritma (vmesni rezltat je lahko tudi 3!) in na koncu lahko ostane še prenos!
Ampak ko gledam vašo kodo vidim, da vam kar nekako gre, toda res obupate na pol poti, dajte se malo potrudit. No seveda pa je koda v stilu:
popolnoma brezvezna!!! Ja čemu pa ste priredili obrnjen niz? Računalniku ste zaukazali, naj niz obrne, rezultata pa niste shranili nikamor!
no ja, ne vem kaj točno se učite oz. zakaj se morate učiti programiranja; toda če boste tako hitro obupali potem to ravno ne bo najbolje... Pa še naloga je tako preprosta je . Na kateri šoli se učite VBA-ja in s kakšno literaturo?
Funkcijo obrni ste skoraj napisali pravilno. Zanimivo mi je, da pišete: "Ne vem če je pravilna"... Ja preizkusite ne! Postavite se lepo v okno 'immediate' in napišite:
Koda: Izberi vse
print obrni("12345")
Koda: Izberi vse
Function obrni1(s As String) As String
For i = Len(s) To 1 Step -1
obrni1 = obrni1 & Mid(s, i, 1)
Next
End Function
Koda: Izberi vse
Function Sestej(niz1 As String, niz2 As String) As String
' najprej oba niza obrnem
niz1 = obrni1(niz1)
niz2 = obrni1(niz2)
' poiščem daljši niz
Dim dol As Integer
If Len(niz2) > Len(niz1) Then
dol = Len(niz2)
Else
dol = Len(niz1)
End If
' deklariram izhod
Dim izhod As String
' pri seštevanju lahko imam prenos
Dim prenos As Integer
' na začetku je prenos 0
prenos = 0
' v zanki se zapeljem skozi najdaljši niz in ustrezne indekse
' preprosto seštevam
Dim i As Integer
For i = 1 To dol
Dim cifra1 As Integer
Dim cifra2 As Integer
' ali smo že na koncu prvega niza, potem lahko tam privzamemo kar ničle!
If (i > Len(niz1)) Then
cifra1 = 0
Else
cifra1 = CInt(Mid(niz1, i, 1))
End If
' enako za niz2
If (i > Len(niz2)) Then
cifra2 = 0
Else
cifra2 = CInt(Mid(niz2, i, 1))
End If
' seštejam obe cifri in prenos
Dim rezultat As Integer
rezultat = cifra1 + cifra2 + prenos
' če je seštevek enak 3 potem moram zapisati 1 in prenos postaviti na 1
If (rezultat = 3) Then
izhod = izhod & "1"
prenos = 1
Else
' če je seštevek enak 2 potem moram zapisati 0 in prenos postaviti na 1
If (rezultat = 2) Then
izhod = izhod & "0"
prenos = 1
Else
' sicer zapišem izračunan seštevek, prenos pa postavim na 0
izhod = izhod & rezultat
prenos = 0
End If
End If
Next
' ko sem na koncu moram še upoštevati poseben primer, ko je rezultat
' daljši od obeh števil; to je takrat, ko je prenos enak 1.
' V tem primeru moram dodati še enico!
If (prenos = 1) Then izhod = izhod & "1"
' izhod še samo obrnem in to je rezultat
Sestej = obrni1(izhod)
End Function
Ampak ko gledam vašo kodo vidim, da vam kar nekako gre, toda res obupate na pol poti, dajte se malo potrudit. No seveda pa je koda v stilu:
Koda: Izberi vse
obrni (niz1)
lp,
Matjaž Prtenjak
Administrator
Matjaž Prtenjak
Administrator