Liczby pierwsze, nieprawidłowe działanie kodu.

0

Witam,napisałem program który sprawdza czy dana liczba jest liczbą pierwszą.Algorytm oparty jest na teście pierwszości.Program ten zawiera metodę błędu czyli jak np wpiszemy liczbe ujemną to powinien wyswietlić "Podałeś liczbe ujemną" lecz niestety wypisuje to i również ją liczy ,a nie powinien.Przechodzi jakby przez 2 warunki.Jestem początkujący i nie wiem co zrobiłem źle,pewnie jest to mały błąd ale nie potrafie sobie z tym poradzić,proszę o pomoc.Pozdrawiam

using System;
using System.Collections.Generic;
using System.Text;


namespace ConsoleApplication1 
{
    class Program
    {


        static void Main(string[] args)
        {
            long a = 1, k = 0, n = 0;
            byte b = 0;
            string wybor = "Tak";




            do
            {
                try
                {
                    Console.Write("Podaj liczbe: ");
                    wybor = Console.ReadLine();
                    n = Int32.Parse(wybor);
                    k = 0;
                    a = 1;
                    if (n >= 3)
                    {
                        do
                        {
                            a++;
                            if (n % a == 0) k++;
                        } while (a != n - 1);
                    }
                    else
                        if (n == 2) k = 0;


                    if (n == 1 || n == 0) Console.Write("1 i 0 nie sa liczbami pierwszymi ani zlozonymi.");
                    if (k > 0) Console.Write("Podana liczba jest liczba zlozona.");
                    if (k == 0 && n != 0 && n != 1) Console.Write("Podana liczba jest licza pierwsza.");


                }
                catch (Exception ex)
                {
                    Console.Write("#Niepoprawna wartosc! ");
                }
                {
                    if (n < 0) Console.Write("Podałes liczbe ujemna!");
                }
                
                try
                {
                    Console.Write("Sprobowac ponownie? (y/n): ");
                    wybor = Console.ReadLine();
                }
                catch (Exception ex)
                {
                    Console.Write("#Niepoprawna wartosc!");
                }


            } while (wybor != "n");
        }
    }
}

1) - tagi < code>, 2) - nie krzycz w temacie - msm

0

Program ten zawiera metodę błędu czyli jak np wpiszemy liczbe ujemną to powinien wyswietlić "Podałeś liczbe ujemną" lecz niestety wypisuje to i również ją liczy ,a nie powinien.

No niestety nie działa to dokładnie tak jakbyś chciał:

                try
                {
                    kod A
                }
                catch (Exception ex)
                {
                    kod B
                }
                // { - te klamry nic tu nie zmieniają
                    if (n < 0) Console.Write("Podałes liczbe ujemna!");
                // }
 

Wygląda to tak, że najpierw wykonuje się kod A, jeśli wystąpi błąd to kod B a na końcu ten if nieszczęsny

  • żeby odrzucać liczby ujemne, trochę poprawiony i pobieżnie przetestowany kod (btw. jednoznakowe zmienne to złe przyzwyczajenie, staraj się nadawać bardziej opisowe nazwy):
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            long a = 1, k = 0, n = 0;
            byte b = 0;
            string wybor = "Tak";
            do
            {
                try
                {
                    Console.Write("Podaj liczbe: ");
                    wybor = Console.ReadLine();
                    n = Int32.Parse(wybor);
                    k = 0;
                    a = 1;
                    if (n < 0) { Console.WriteLine("Ujemna, sorry"); }
                    else 
                    {
                        if (n >= 3)
                        {
                            do
                            {
                                a++;
                                if (n % a == 0)
                                    k++;
                            } while (a != n - 1);
                        }

                        if (n == 1 || n == 0)
                            Console.Write("1 i 0 nie sa liczbami pierwszymi ani zlozonymi.");
                        if (k > 0)
                            Console.Write("Podana liczba jest liczba zlozona.");
                        if (k == 0 && n != 0 && n != 1)
                            Console.Write("Podana liczba jest licza pierwsza.");
                    }
                }
                catch (Exception ex)
                {
                    Console.Write("#Niepoprawna wartosc! ");
                }

                Console.Write("Sprobowac ponownie? (y/n): ");
                wybor = Console.ReadLine();
            } while (wybor != "n");
        }
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1