Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   С# Найти сумму всех простых чисел, не превосходящих заданного числа n (http://www.tehnari.ru/f41/t253035/)

Defx 02.04.2017 09:55

С# Найти сумму всех простых чисел, не превосходящих заданного числа n
 
первая программа работает, но необходимо реализовать программу в базисе схем с процедурами.
вторая программа считает сумму только при N=3, помогите разобраться почему при N>3 отказывается работать программа

Основная программа:

Код:

namespace ConsoleApplication15
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Введите число\n");
            int N = int.Parse(Console.ReadLine());
            int a = 2;
            int S = 0;
            while (a <= N)
            {
                int p = 1;

                int i = 2;
                while (i <= a / 2)
                    {
                        if (a % i == 0)
                            {
                                p = 0;
                                break;
                            }
                        i = i + 1;
                    }
               
                if (p==1)
                    {
                        S = S + a;
                    }
               
                a = a + 1;
            }

            Console.WriteLine("Сумма простых чисел " + S);
            Console.ReadKey();
        }
    }
}

Программа в базисе схем с процедурами:

Код:

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Введите число N");
            int N = int.Parse(Console.ReadLine());

            int a = 2;
            int s = 0;
            int p = 0;
            int i = 0;

            int v = F2(a, s, p, i, N);
        }

        static int F2(int a, int s, int p, int i, int N)
        {
            int c;
            int p1;
            int i1;
            if (a <= N)
            {
                p1 = 1;
                i1 = 2;
                c = F3(a, s, p1, i1, N);
            }
            else {
              c = s;
              Console.WriteLine("Сумма простых чисел " + c);
              Console.ReadKey();
            }
            return c;
        }

        static int F3(int a, int s, int p, int i, int N)
        {
            int d;
            p = 1;
            i = 2;
            if (i <= a / 2)
            {
                d = F4(a, s, p, i, N);
            }
            else
            {
                d = F5(a, s, p, i, N);
            }
            return d;
        }

        static int F4(int a, int s, int p, int i, int N)
        {
            int q;
            int h;
            if (a % i == 0)
            {       
              q = F3(a, s, p, i, N);
            }
            else
            {
                h = i + 1;
                q = F5(a, s, p, h, N);
            }
            return q;
        }

        static int F5(int a, int s, int p, int i, int N)
        {
            int f;
            int s1;
            int a1;
            if (p == 1)
            {
              s1 = s + a;
              a1 = a + 1;
              f = F2(a1, s1, p, i, N);
            }
            else
            {
                a1 = a + 1;
                f = F2(a1, s, p, i, N);
            }
            return f;
        }
    }
}


Vladimir_S 02.04.2017 10:23

Эх, так и поленился СИ выучить...
Но, хоть в Сях ни бельмеса не понимаю, но что-то мне не нравится функция F3. А именно присвоение в её теле принудительных значений формальным параметрам p и i. Это так и задумано?

Defx 02.04.2017 10:34

Сорян, не должно их там быть, забыл удалить, это так экспериментировал, без них результат тот же =(

Vladimir_S 02.04.2017 13:54

Цитата:

Сообщение от Defx (Сообщение 2475483)
Сорян, не должно их там быть, забыл удалить, это так экспериментировал, без них результат тот же =(

Хорошо, тогда еще вопрос.
У Вас зациклен вызов функций: F3 вызывает F4, а F4 вызывает F3. Так и задумано? Попытался отладить Вашу программу, переведя на Паскаль, но на этом моменте транслятор взбунтовался. Не помогает даже перегон функций в модули. tehno015

Defx 02.04.2017 16:55

Вложений: 1
Возможно и не должно =) вот графовая и линейная форма первой программы, может тут где накосячил =(


Часовой пояс GMT +4, время: 07:28.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.