Ohjelman teko apua?!!

Ihan aloittelija

Pystyisikö joku tarkka silmäinen löytämään missä on tekeleessäni vika. Itse en ole löytänyt vaikka käynyt useasti läpi.
Ohjelmana minulla pitää olla Visual Basic 2008 Express edition, enkä mitenkään hyvä ole ohjelmoimaan, joten jos joku osaisi neuvoa, neuvoisiko niiiin hel-pos-ti että tyhmäkin tajuaisi.

Tarkoituskenani ohjelmassa hakea tekstitiedosto, johon syötetty allekkain tämän tyyppisiä esim. 219A001214 tai 420L1887092. viimeinen numero on tarkiste jota ei lasketa. Samoin 4 ensimmäistä merkkiä ei lasketa, eli lasku alkaa vasta kirjaimen jälkeen. Alkuun olen saanut ohjelman tekemään niin, että ottaa huomioon vasta kirjaimen jälkeen tulevat merkit, mutta 0:lla kertomista en ole onnistunut estämään..

Laskun pitäisi olla: Kerroin on 2 1 2 1 2 1. Vasemmalta oikealle ja pitäisi vaihtua joka kierroksella, yhtä numeroa kerrallaan kertoen. Näiden kaikkien tulos jaetaan 10, jonka jakojäännös pitäisi olla tarkiste. Eli toisin sanoen, sen summan tuloksen viimeinen numero on tarkiste.

Kerrointa en siis saa vaihtumaan, siten että aloittaa kertomisen 2. osaisiko joku neuvoa mitä pitäisi tehdä.

Kiitokset etukäteen.



Option Strict On
Imports System.Console
Imports System.IO
Module Module1

Sub Main()

Const KORTINPITUUS1 As Integer = 10
'Const KORTINPITUUS2 As Integer = 11

Dim oLukija As StreamReader 'lukijan esittely
Dim oKirjoittaja As New StreamWriter("c:\Tarkastetut.txt")
Dim intLaskettuTm, intSyotettyTm As Integer

'Dim strViesti As String

Dim kortti As String '= "179A005644" testausmateriaalina tekstitiedostossa



WriteLine("tunnistus aloitetaan tekstitiedoston haulla.")
ReadLine()
oLukija = New StreamReader("c:\Haetut.txt") 'Oletetaan tiedoston löytyvän
While oLukija.Peek -1
kortti = oLukija.ReadLine()
intLaskettuTm = LaskeTarkastusmerkki(kortti)

intSyotettyTm = CInt(kortti.Substring(KORTINPITUUS1 - 1, 1))

if intSyotettyTm = intLaskettuTm Then
strViesti = String.Concat("kortti ", kortti, " on oikein.")
WriteLine(strViesti)
oKirjoittaja.WriteLine(strViesti)
'Else
strViesti = String.Concat("kortti ", kortti, " on virheellinen.")
WriteLine(strViesti)
End If
End While
oKirjoittaja.Close()
oLukija.Close()
End Sub

Function LaskeTarkastusmerkki(ByVal kortti As String) As Integer
Const KORTINPITUUS1 As Integer = 10
Dim intSumma, intTulo, intKerroin, i, intNumero, intLaskettuTM As Integer
Dim IntSyotettyTm As Integer
intSumma = 0
intKerroin = 2




For i = 4 To KORTINPITUUS1 - 2 ’aloittaa kirjaimen jälk. kertoo myös 0:lla
intNumero = CInt(kortti.Substring(i, 1))
intTulo = intNumero * intKerroin
intSumma = intSumma intTulo 'kokonaissummaa tarvitaan tarkastusmerkin päättelyssä
Select Case intKerroin ' vaihdetaan kerroin seuraavaa kierrosta varten
Case 1
intKerroin = 1
Case 2
intKerroin = 2
End Select
Next


intLaskettuTM = 10 - (intSumma Mod 10)
If intLaskettuTM = 10 Then 'muunnetaan tarkastusmerkki on yksinumeroiseksi
intLaskettuTM = 0
End If

IntSyotettyTm = CInt(kortti.Substring(KORTINPITUUS1 - 1, 1)) '

If IntSyotettyTm = intLaskettuTM Then
Console.WriteLine(String.Concat("kortti ", kortti, " on oikein."))
Else
Console.WriteLine(String.Concat("kortti ", kortti, " on virheellinen."))
End If
ReadLine()
End Function



End Module

1

940

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • ...

      Select Case-rakenteessa intkerroin ei vaihdu, kun siihen sijoitetaan sama joka siinä jo on.

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Sanna Marin kysyi hämmästyneenä: Onko Suomessa jäänmurtajia?

      Nettilehden toimittaja kysyi Sanna Marinilta suoraan, että sovittiinko nuo jäänmurtajien kaupat jo 2019, jolloin Marin k
      Maailman menoa
      109
      4282
    2. Voiko normaali ihminen ryhtyä vasemmistolaiseksi?

      Tätä jäin pohdiskelemaan.
      Maailman menoa
      149
      3673
    3. SDP haluaa 40 000 nettomaahanmuuttajaa

      SDP:n Suunnanmuutos-vaihtoehtobudjetissa, käy ilmi, että demarit itse asiassa vaativat räjähdysmäistä ”työperäisen” maah
      Maailman menoa
      88
      3435
    4. Mikä tuota vasemmistolaisista jankkaavaa vaivaa?

      Pahasti on ihon alle, siis korvien väliin, päässeet kummittelemaan. Ei ole terveen ihmisen merkki jankata yhdestä asia
      Maailman menoa
      39
      2829
    5. Mitä ajattelit kun näit

      kaivattusi ensimmäisen kerran? xd
      Ikävä
      129
      1730
    6. Nyt meni lopulliset lämmöt.

      Alan käyttäytymään yhtä kylmästi miehiä kohtaan kuin mua kohtaan on käyttäydytty ja vain käytetty viimeiset pari vuotta
      Sinkut
      37
      1558
    7. Orpo loukkaantui fasismiin viittaavasta sanavalinnasta

      Mutta miksi loukkaantui? Orpohan on tehnyt yhteistyötä fasistien kanssa jo vuonna 2019, siis jo neljä vuotta ennen loukk
      Maailman menoa
      14
      1201
    8. Sulla on avaimet ja keinot

      Jos haluat jatkaa tutustumista. Itse olen niin jäässä etten pysty tekemään enää mitään. Pidempi keppi johon on helpompi
      Ikävä
      19
      1184
    9. Meitä ei tule

      Koska periaatteemme ovat rakkautta vahvempia. Tämä on siis koettelemus, jonka tarkoitus on vahvistaa meitä yksilöinä 😌
      Ikävä
      22
      1144
    10. Onko erityinen paikka jossa haluaisit nyt olla

      Onko joku spesiaali lempipaikka missä mieluiten olisit?
      Ikävä
      42
      1140
    Aihe