program w VB - liczby pierwsze

Awatar użytkownika
lukki_173
Użytkownik
Użytkownik
Posty: 913
Rejestracja: 24 paź 2008, o 17:48
Płeć: Mężczyzna
Lokalizacja: Kościeliska (woj. opolskie)
Podziękował: 56 razy
Pomógł: 218 razy

program w VB - liczby pierwsze

Post autor: lukki_173 »

Witam. Muszę napisać program w Visual Basicu, który wypisze liczby pierwsze z podanego zakresu.

Ma to wyglądać tak, że mamy 3 textboxy. Do pierwszego wpisujemy liczbę od której program ma sprawdzać (np. 3), w drugim do której liczby ma sprawdzać (np. 24). Później należy po kolei sprawdzić, która liczba z tego zakresu jest pierwsza (najlepiej napisać funkcję ale można też inaczej) i następnie wszystkie liczby pierwsze z tego zakresu wypisać w trzecim textboxie.

Zacząłem coś pisać, ale ciągle mam gdzieś błędy.
Proszę o pomoc.
Z góry dziękuję.
Awatar użytkownika
Morusek
Użytkownik
Użytkownik
Posty: 127
Rejestracja: 8 lut 2009, o 17:34
Płeć: Mężczyzna
Lokalizacja: Łódź
Pomógł: 29 razy

program w VB - liczby pierwsze

Post autor: Morusek »

Spróbuj wykorzystać Sito Eratostenesa. BTW na wikipedii jest podobny kod źródłowy napisany w C++.
Awatar użytkownika
lukki_173
Użytkownik
Użytkownik
Posty: 913
Rejestracja: 24 paź 2008, o 17:48
Płeć: Mężczyzna
Lokalizacja: Kościeliska (woj. opolskie)
Podziękował: 56 razy
Pomógł: 218 razy

program w VB - liczby pierwsze

Post autor: lukki_173 »

Tylko że ja bardzo się na tym znam. A o C++ w ogóle pojęcia nie mam. Wiesz ktoś może jak ten program bez Sita Eratostenesa napisać? Tylko z użyciem funkcji do obliczenia liczb pierwszych.
Bardzo proszę o pomoc.
matshadow
Użytkownik
Użytkownik
Posty: 941
Rejestracja: 17 gru 2007, o 21:48
Płeć: Mężczyzna
Lokalizacja: Kingdom Hearts
Podziękował: 6 razy
Pomógł: 222 razy

program w VB - liczby pierwsze

Post autor: matshadow »

Kod: Zaznacz cały

bool prime(int n)
{
      if(n==1||n==0) return false;
      for(int i=2;i*i<=n;i++)
             if(n%i==0) return false;
      return true;
}
to jest w C++, przekonwertuj na VB. Opiera się na tym, że sprawdza czy liczby które są niewiększe od pierwiastka ze sprawdzanej liczby są dzielnikami tej liczby. Jeśli tak, to znaczy że liczba nie jest pierwsza. Jak nie możesz zrozumieć dlaczego do pierwiastka z danej liczby, to zrób pętlę do danej liczby (będzie to oczywiście rozwiązanie dłuższe czasowo), czyli w C++

Kod: Zaznacz cały

for(int i=2;i<n;i++)
Awatar użytkownika
lukki_173
Użytkownik
Użytkownik
Posty: 913
Rejestracja: 24 paź 2008, o 17:48
Płeć: Mężczyzna
Lokalizacja: Kościeliska (woj. opolskie)
Podziękował: 56 razy
Pomógł: 218 razy

program w VB - liczby pierwsze

Post autor: lukki_173 »

Nie umiem tego przekonwertować. Pomoże ktoś?
Awatar użytkownika
Szemek
Użytkownik
Użytkownik
Posty: 4819
Rejestracja: 10 paź 2006, o 23:03
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 43 razy
Pomógł: 1407 razy

program w VB - liczby pierwsze

Post autor: Szemek »

Kod: Zaznacz cały

Public Class PrimeNumbers

    Private Sub FillPrimeList()
        Dim FromNumber, ToNumber, I, N As Integer
        Dim Prime As Boolean
        FromNumber = Convert.ToInt32(FromBox.Text)
        ToNumber = Convert.ToInt32(ToBox.Text)

        For N = FromNumber To ToNumber Step 1
            Prime = True
            If N < 2 Then
                Prime = False
            End If
            I = 2
            Do While I * I <= N And Prime
                If N Mod I = 0 Then
                    Prime = False
                End If
                I = I + 1
            Loop
            If Prime = True Then
                ListBox.Items.Add(N)
            End If
        Next

    End Sub

    Private Sub ShowButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ShowButton.Click
        ListBox.Items.Clear()
        FillPrimeList()
    End Sub

End Class
kod różni się od 'wytycznych' (testowane na Visual Studio 2008, Visual Basic)
zrobiłem 2 pola typu TextBox (FromBox - zakres od, ToBox - zakres do), 1 pole ListBox (tutaj pojawiają się liczby pierwsze), 1 przycisk ShowButton (czyści ListBox, wywołuje procedurę sita Eratostenesa i uzupełnia ListBox liczbami pierwszymi w podanym zakresie)

-- 10 lutego 2009, 03:02 --

zmieniając dwie linijki w kodzie, można użyć trzeciego TextBox

Kod: Zaznacz cały

ListBox.Items.Add(N)
na:

Kod: Zaznacz cały

PrimeBox.Text = PrimeBox.Text + Convert.ToString(N) + ", "
oraz

Kod: Zaznacz cały

ListBox.Items.Clear()
na:

Kod: Zaznacz cały

PrimeBox.Text = ""
abc666

program w VB - liczby pierwsze

Post autor: abc666 »

nie lepiej od trójki iść krokiem dwa? zawsze połowa operacji mniej
Awatar użytkownika
Szemek
Użytkownik
Użytkownik
Posty: 4819
Rejestracja: 10 paź 2006, o 23:03
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 43 razy
Pomógł: 1407 razy

program w VB - liczby pierwsze

Post autor: Szemek »

na pewno lepiej,
trzeba tylko dopisać odpowiednie warunki do kodu
Awatar użytkownika
lukki_173
Użytkownik
Użytkownik
Posty: 913
Rejestracja: 24 paź 2008, o 17:48
Płeć: Mężczyzna
Lokalizacja: Kościeliska (woj. opolskie)
Podziękował: 56 razy
Pomógł: 218 razy

program w VB - liczby pierwsze

Post autor: lukki_173 »

Bardzo dziękuję.
ODPOWIEDZ