Avatar billede wheeler Nybegynder
25. juli 2005 - 22:17 Der er 10 kommentarer og
2 løsninger

Tværsum funktion?

Findes der ikke en funktion i VB som returnere tværsummen af et tal?

F.eks. 17 = 8 eller 21 = 3

??(21) = 3

Hvad hedder funktionen i VB?
Avatar billede joern Nybegynder
25. juli 2005 - 22:58 #1
Hej.

Jeg bruger VB5 og dér synes ikke at være en funktion, der kan tage tværsum af et tal, jeg kender heller ikke glosen, men "sum of digits" er et bud.

Du kan jo selv lave en funktion - eller skrive koden de steder, hvor den skal anvendes.  Jeg har engang set hvorledes man kan gennemløbe en streng tegn for tegn, men jeg har glemt det igen.  Så mit forslag er lidt primitivt.

  For a = 1 to len(dit_tal)
    b = b + val(mid(dit_tal, a, 1))
  next a

  msgbox("Tværsum af " & dit_tal & " er " & b)

M.v.h. Jørn
Avatar billede joern Nybegynder
25. juli 2005 - 23:31 #2
Hej.

Efter jeg har skrevet svaret, har jeg afprøvet det.  Det fungerer kun med tal på indtil 4 cifre.  Len returnerer nemlig 4, når stregen består af cifre, selv om den er længere.  4 er antallet af bytes, der repræsenterer variabel-typen 'long'.  Dette står i hjælpen til 'Len'.
Hvilken VB-version anvender du?

M.v.h. Jørn
Avatar billede joern Nybegynder
25. juli 2005 - 23:36 #3
Hej.

Længden af strengen skal tages af indholdet i tekstfeltet og ikke af variablen dit_tal.  Så fungerer det.  Om det så kan bruges i dit projekt er en anden sag.

Jeg tror i øvrigt dit_tal med fordel kan ændres til at være en streng-variabel

Dim dit_tal As String
Dim a, b As Integer

Private Sub Command1_Click()

  dit_tal = Text1.Text
  b = 0
  For a = 1 To Len(Text1.Text)
    b = b + Val(Mid(dit_tal, a, 1))
  Next a

  MsgBox ("Tværsum af " & dit_tal & " er " & b)
End Sub

M.v.h. Jørn
Avatar billede ksoren Nybegynder
25. juli 2005 - 23:39 #4
Ellers findes funktionen CStr

Dim b As Integer
Dim s as String

s =  CStr(b)
Avatar billede roenving Novice
26. juli 2005 - 02:36 #5
21 mod 9 ...
Avatar billede nielle Nybegynder
26. juli 2005 - 09:03 #6
Den engelske betegnelse for det danske ord "tværsum" variere lidt afhængig af kilden
"sum of the digits", "sum of digits" eller "sideways sum".

Endvidere har roenving ret, idet det at beregne tværsummen af et tal, simpelthen er det samme som at beregne resten ved division med 9 (Hvis man er matematisk interesseret så er det en sjov lille øvelse at bevise dette).
Avatar billede wheeler Nybegynder
26. juli 2005 - 10:26 #7
Ja, man kan lave en funktion, men VB bør have en selv.

roenving har vist ikke helt ret: Tværsum af 18 er 9, men 18 mod 9 er 0.
Avatar billede nielle Nybegynder
26. juli 2005 - 11:10 #8
Jeg har nu aldrig set noget som helst programmeringssprog have en funktion til at beregne tværsummen med, og kan ikke se hvorfor VB6 skulle være en undtagelse.

Ok, så er det ikke helt rigtigt at tværsummen er det samme som at beregne "rest modulus 9". Imidlertid er det rigtigt i den forstand at hvis "Tallet Mod 9" er lig med 0, ja så er tværsummen simpelthen 9:

Tvaersum = Tallet Mod 9
If (Tvaersum == 0) Then Tvaersum = 9
Avatar billede joern Nybegynder
26. juli 2005 - 17:09 #9
Hej.

Modulus fra en division med giver 0 til rest, når 9 går op i tallet. Men tværsummen kan jo sagtens være højere end 9, hvis tallet er på flere cifre end 2.

http://www.praestkjaer.dk/dk/emner/regning/tal-tricks.htm    om 9-prøven

m.v.h.  Jørn
Avatar billede nielle Nybegynder
26. juli 2005 - 19:06 #10
Tværsummen defineres normalt som "at gå hele vejen":

5657602979 -> 56 -> 11 -> 2
Avatar billede nielle Nybegynder
26. juli 2005 - 19:07 #11
... hvilket i øvrigt også fremgår af linket :^)
Avatar billede joern Nybegynder
26. juli 2005 - 20:37 #12
Hej nielle.

Nu må vi se hvad spørgeren skal bruge det til.  Hvis det er en checksum i forbindelse med dataoverførsel, er det nok bedre at nøjes med første trin.  Men lad #0 komme tilbage og vælge sit svar.

M.v.h. Jørn
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester