Dobrý den, ve Visual Basicu se teprve učím (a všeobecně programování), a nemůžu si poradit s jedním problémem. Zde je kód:
Public Sub zapis(ByVal od As Integer, ByVal N As Integer, ByVal p() As Boolean, ByVal poradi As Integer)
Dim pocet As Integer = 1
Dim soubor As New IO.StreamWriter("prvočísla" + Str(poradi) + ".txt")
For i = od To N - 2
If pocet < 600000 Then
If p(i) = True Then
soubor.WriteLine(i)
pocet += 1
End If
Else
soubor.Close()
zapis(i, N, p, poradi + 1)
End If
Next
soubor.Close()
End Sub
Mám program který vypočítává prvočísla od 2 do zadané hodnoty. Výsledky ukládá do seznamu typu boolean (index=dané číslo, 0/1-je/není prvočíslo). Následně prvočísla zapisuji do textového souboru. Pokud bych to uložil pouze do jednoho, tak pro výpočet prvočísel do 1 000 000 000 je velikost souboru cca 500MB a s tím se pak nedá pracovat. Takže ukládám do jednoho souboru vždy 600 000 prvočísel, pak soubor zavřu, vytvořím další atd. Využívám zde rekurze proměná "od" udává od jaké hodnoty má cyklus seznam procházet "N" je číslo do kterého se prvočísla počítaly "p" je samotný seznam "poradi" určuje název souboru do kterého se ukládá Má hlava mi tvrdí, že pokud cyklus For doběhne do konce( což se stane až u posledního souboru) přeskočí na další příkaz (zavření souboru) a procedura se ukončí. Problém mi nastane vždy právě u posledního souboru, do kterého zapisuje neustále znovu a znovu, do nekonečna... Pokud je prvočísel málo a stačí jeden soubor, tak chyba nenastane, ale pro 2 a více už ano. Snad jsem to vysvětlil dostatečně pochopitelně. Prosím o radu. Tomáš H.
|