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

845

    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. Tällä kertaa Marinia kadehtii Minäminä Päivärinta

      Kokoomuksen tyhjäntoimittelija itkeä tuhertaa, kun kansainvälinen superstaramme ei leiki hänen kanssaan. Oikean puoluee
      Maailman menoa
      422
      1816
    2. Miksi jollain jää "talvi päälle"

      Huvittaa kastoa ullkona jotain vahempaa äijää joka pukeutuu edelleen kun olisi +5 astetta lämmittä vaikka on helle keli
      Maailman menoa
      185
      1461
    3. Minua itkettää tämä tilanne

      Meidän pitäisi jutella. Eikö niin? Miehelle.
      Ikävä
      108
      1402
    4. Miksi koulut pakottavat

      Lapset uimaan sekaryhmänä? Murrosikäiset tunnetusti häpeilevät vartalossa tapahtuvia muutoksia. Tulee turhia poissaoloja
      Maailman menoa
      144
      1341
    5. Mitkä oli suurimmat

      Syyt mihin hänessä ihastuit alussa ja pikkuhiljaa tunteiden edetessä
      Ikävä
      45
      1046
    6. Suomen Pallolitto: Tasoryhmät lasten jalkapallossa - Erätauko-tilaisuus ma 20.5.2024

      Tasoryhmät lasten ja nuorten jalkapallossa herättävät paljon keskustelua. Mitä tasoryhmät ovat ja mikä on niiden tarkoit
      Suomi24 Blogi ★
      0
      970
    7. Minulla oli tunteita

      Tein itsestäni pellen. Sait hyvät naurut ja minä 💔
      Ikävä
      63
      956
    8. Mitä et hyväksy miehessä/naisessa josta olet kiinnostunut?

      Itse en halua, että miehellä olisi lapsia!
      Ikävä
      119
      913
    9. Susanne Päivärinta kirjassaan: Sannalla nousi valta päähän, Big Time!

      Päivärinta toteaa ettei ole nähnyt kenenkään muuttuvan niin totaalisesti kuin Marinin, eikä siis todellakaan parempaan s
      Maailman menoa
      93
      900
    10. Se katse silloin

      Oli hetki, jolloin katseemme kohtasivat. Oli talvi vielä. Kerta toisensa jälkeen palaan tuohon jaettuun katseeseen. Tunt
      Ikävä
      32
      886
    Aihe