» »

Pisanje Preprostih Makrov

Pisanje Preprostih Makrov

Vodeb7 ::

Imam en problem glede naloge z makri ... navodila so tole, spodaj pa moja nepravilno delujoča koda

---------------------------------------------------------------------------------------------------------------------
Pri tej nalogi je potrebno napisati makre, ki bodo kodirale oz. dekodirale besedilo v Writerju z operacijo XOR. Za kodiranje oz. dekodiranje mora uporabnik vnesti geslo. Potrebno je napisati naslednje podprograme:
function izracunajHash(geslo, zacetni_hash) - v tej funkciji boste implementirali sekljalno funkcijo, ki bo iz uporabnikovega gesla izračunala začetno seme za generator psevdo naključnih števil (več o tem se nahaja v pomoči). Za sprejem naloge so postavljene naslednje dodatne zahteve:
Spremenljivka zacetni_hash naj ima nastavljeno vrednost 15172
V funkciji jemljete znake od prvega znaka proti zadnjemu
Sprehod preko znakov morate implementirati z zanko Do Until...Loop
function kodiraj(niz) - izhod iz funkcije bo kodiran/dekodiran vhodni niz. Predpostavite, da je generator naključnih števil že postavljen na pravilno vrednost (več o tem se nahaja v pomoči). Kodirajte le znake, katerih ascii vrednost je večja od 31. Za sprejem naloge so postavljene naslednje dodatne zahteve:
V funkciji jemljete znake od zadnjega znaka proti prvemu
Sprehod preko znakov morate implementirati z zanko Do While...Loop
sub kodiraj_besedilo(seme) - ta podprogram poskrbi, da se kodirajo vsi navadni odstavki v besedilu. Prav tako se v tem podprogramu izvrši inicializacija generatorja naključnih vrednosti
sub kodiraj_UI - ta podprogram vsebuje uporabniški vmesnik vašega makra in je v bistvu glavni program. V njem boste zahtevali geslo za kodiranje (privzeto geslo naj bo vaša vpisna številka) in poklicali prej spisane podprograme
---------------------------------------------------------------------------------------------------------------------
Sub Main

End Sub

function izracunajHash(geslo,zacetni_hash)
hash = zacetni_hash
maska=&H00FFFFFF
i=len(geslo)
if i>0 then

Do Until i=0
znak=Mid(geslo,i,1)
znak=asc(znak)
hash = 33*hash+znak
hash=hash AND &H00007FFF
i=i-1
Loop
hash=hash AND maska
izracunajHash=hash
else
izracunajHash=hash
end if
end function

function kodiraj(niz)
Dim i as Integer
dol_niza=Len(niz)
if dol_niza>0 Then
i=dol_niza
Do While i>0
znak_niza$=Mid(niz,i,1)
Dim A As Integer
A=Asc(znak_niza$)
if A>31 Then
B=CInt(rnd()*31)
A=A XOR B
znak_niza1$= Chr(A)
Mid(niz,i,1,znak_niza1$)
end if
i=i-1
Loop
end if
kodiraj=niz
end function

Sub kodiraj_besedilo(seme)
Randomize(seme)
oParEnum = ThisComponent.Text.createEnumeration()
Do While oParEnum.hasMoreElements()
oPar = oParEnum.nextElement()
If oPar.supportsService("com.sun.star.text.Paragraph") Then
oPar.String = kodiraj(oPar.String)
End If
Loop
End Sub

Sub kodiraj_UI
geslo = InputBox("Vnesi niz:", "Geslo", "E1000000")
hash = izracunajHash(geslo, 15172)
kodiraj_besedilo(hash)
MsgBox("Konec")
end Sub
---------------------------------------------------------------------------------------------------------------------
Mi zna prosim kdo pomagat pa najdet napako? javlja mi tole:

Dolžina makrov v modulu MojModul.... 1130 (najbrž OK)
Testiranje funkcije izracunajHash(niz, zacetniHash)
Sprehod naprej
Vhod: niz=A1234567, zacetniHash= 9843
Pričakovan izhod: 21760 (Tip: Long)
Dobljen izhod: 11424 (Tip: Long) ...Napaka
Testiranje funkcije izracunajHash(niz, zacetniHash) s praznim nizom (robni primer)
Testiranje funkcije function kodiraj(niz)
Sprehod nazaj
Testiranje funkcije function kodiraj(niz) s praznim nizom (robni primer)

---------------------------------------------------------------------------------------------------------------------
problem je v tem delu, ker se zanka premalokrat zavrti ....
Pričakovan izhod: 21760 (Tip: Long)
Dobljen izhod: 11424 (Tip: Long)

---------------------------------------------------------------------------------------------------------------------
function izracunajHash(geslo,zacetni_hash)
hash = zacetni_hash
maska=&H00FFFFFF
i=len(geslo)
if i>0 then

Do Until i=0
znak=Mid(geslo,i,1)
znak=asc(znak)
hash = 33*hash+znak
hash=hash AND &H00007FFF
i=i-1
Loop
hash=hash AND maska
izracunajHash=hash
else
izracunajHash=hash
end if
end function


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Facebook več sto milijonov gesel hranil v besedilni obliki

Oddelek: Novice / Zasebnost
319994 (7243) MrStein
»

C# program za pretvorbo v desetiško število z rekurzijo

Oddelek: Programiranje
81501 (1224) MrStein
»

[c#] program za kodiranje besedil, gesel,...

Oddelek: Programiranje
122849 (2461) LightBit
»

PHP - Register form

Oddelek: Izdelava spletišč
241987 (1615) roli
»

kopiranje iz enega fajla v drug??

Oddelek: Programiranje
131224 (984) Seth

Več podobnih tem