Главная страница
Навигация по странице:

  • class

  • private

  • new

  • for

  • Курсовая работа Калашников. Задача по следующим критериям Сравнить получившиеся коды программ


    Скачать 131.17 Kb.
    НазваниеЗадача по следующим критериям Сравнить получившиеся коды программ
    Дата06.05.2023
    Размер131.17 Kb.
    Формат файлаdocx
    Имя файлаКурсовая работа Калашников.docx
    ТипЗадача
    #1112667
    страница8 из 8
    1   2   3   4   5   6   7   8

    Алгоритм выполнения задачи (блок-схема)



    Описание задачи


    Данная программа должна вывести все простые числа в заданном диапазоне (от 0 до n) при помощи алгоритма «Решето Эратосфена».

    Сравнение кода программ по метрике Холстеда


    Python:

    NUOprtr (Number of Unique Operators) — число уникальных операторов программы на Python: 4

    NUOprnd (Number of Unique Operands) — число уникальных операндов программы кода программы на Python: 4.

    Noprtr (Number of Operators) — общее число операторов в программе на Python: 64.

    Noprnd (Number of Operands) — общее число операндов в программе на Python: 4.
    (Halstead Program Vocabulary, HPVoc): HPVoc = NUOprtr + NUOprnd = 5 + 5 = 8.

    (Halstead Program Length, HPLen): HPLen = Noprtr + Noprnd = 64 + 4 = 64.

    (Halstead Program Volume, HPVol): HPVol = HPLen log2 HPVoc = 87 log2 10 = 221.

    (Halstead Difficulty, HDiff): HDiff = (NUOprtr/2) × (NOprnd / NUOprnd) = (64/2) × (4/4) = 32.

    HEff = HDiff × HPVol = 32 × 221 = 7072.
    Java:

    NUOprtr (Number of Unique Operators) — число уникальных операторов программы на Java: 5.

    NUOprnd (Number of Unique Operands) — число уникальных операндов программы кода программы на Java: 3

    Noprtr (Number of Operators) — общее число операторов в программе на Java: 11.

    Noprnd (Number of Operands) — общее число операндов в программе на Java: 39.
    (Halstead Program Vocabulary, HPVoc): HPVoc = NUOprtr + NUOprnd = 9.

    (Halstead Program Length, HPLen): HPLen = Noprtr + Noprnd = 50.

    (Halstead Program Volume, HPVol): HPVol = HPLen log2 HPVoc = 54.

    (Halstead Difficulty, HDiff): HDiff = (NUOprtr/2) × (NOprnd / NUOprnd) = (6/2) × (39 / 3) = 39.

    HEff = HDiff × HPVol = 2106.
    C++:

    NUOprtr (Number of Unique Operators) — число уникальных операторов программы на С++: 7.

    NUOprnd (Number of Unique Operands) — число уникальных операндов программы кода программы на С++: 3.

    Noprtr (Number of Operators) — общее число операторов в программе на С++: 48.

    Noprnd (Number of Operands) — общее число операндов в программе на С++: 13.
    (Halstead Program Vocabulary, HPVoc): HPVoc = NUOprtr + NUOprnd = 10.

    (Halstead Program Length, HPLen): HPLen = Noprtr + Noprnd = 61.

    (Halstead Program Volume, HPVol): HPVol = HPLen log2 HPVoc = 60.

    (Halstead Difficulty, HDiff): HDiff = (NUOprtr/2) × (NOprnd / NUOprnd) = (7/2) × (13/3) = 14.

    HEff = HDiff × HPVol = 840.

    Решение задачи


    1. Все четные числа, кроме двойки, - составные, т. е. не являются простыми, так как делятся не только на себя и единицу, а также еще на 2.

    2. Все числа кратные трем, кроме самой тройки, - составные, так как делятся не только на самих себя и единицу, а также еще на 3.

    3. Число 4 уже выбыло из игры, так как делится на 2.

    4. Число 5 простое, так как его не делит ни один простой делитель, стоящий до него.

    5. Если число не делится ни на одно простое число, стоящее до него, значит оно не будет делиться ни на одно сложное число, стоящее до него.

    Последний пункт вытекает из того, что сложные числа всегда можно представить как произведение простых. Поэтому если одно сложное число делится на другое сложное, то первое должно делиться на делители второго. Например, 12 делится на 6, делителями которого являются 2 и 3. Число 12 делится и на 2, и на 3.


    Код выполнения программы


    1. Python:

    2. список заполняется значениями от 0 до n

    3. a = []

    4. for i in range(n + 1):

    5. a.append(i)

    6.  

    7. # Вторым элементом является единица,

    8. # которую не считают простым числом

    9. # забиваем ее нулем.

    10. a[1] = 0

    11.  

    12. # начинаем с 3-го элемента

    13. i = 2

    14. while i <= n:

    15. # Если значение ячейки до этого

    16. # не было обнулено,

    17. # в этой ячейке содержится

    18. # простое число.

    19. if a[i] != 0:

    20. # первое кратное ему

    21. # будет в два раза больше

    22. j = i + i

    23. while j <= n:

    24. # это число составное,

    25. # поэтому заменяем его нулем

    26. a[j] = 0

    27. # переходим к следующему числу,

    28. # которое кратно i

    29. # (оно на i больше)

    30. j = j + i

    31. i += 1

    32.  

    33. # Превращая список во множество,

    34. # избавляемся от всех нулей кроме одного.

    35. a = set(a)

    36. # удаляем ноль

    37. a.remove(0)

    38. print(a)

    39. java


    mport java.util.ArrayList;

    import java.util.List;
    public class SieveEratosthenes {

    static class PrimePair {

    Integer prime;

    Integer lastCrossed;
    PrimePair(Integer prime, Integer lastCrossed) {

    this.prime = prime;

    this.lastCrossed = lastCrossed;

    }

    }
    private List
    primes;

    private SieveEratosthenes() {

    primes = new ArrayList<>();

    primes.add(new PrimePair(2, 2));

    primes.add(new PrimePair(3, 3));

    }
    private void fillNPrimes(int n) {

    while (primes.size()

    addNextPrime();

    }

    }
    private
    void addNextPrime() {

    int candidate = primes.get(primes.size()-1).prime + 2;

    for (int i = 1; i < primes.size(); i++) {

    PrimePair p = primes.get(i);

    while (p.lastCrossed < candidate) {

    p.lastCrossed += p.prime;

    }

    if (p.lastCrossed == candidate) {

    //restart

    candidate+=2;

    i=-1;

    }

    }

    System.out.println(candidate);

    primes.add(new PrimePair(candidate, candidate));

    }
    public static void main(String[] args) {

    SieveEratosthenes test = new SieveEratosthenes();

    test.fillNPrimes(1000);

    }

    }

    1. C++

    2. int n;

    3. vector prime (n+1, true);

    4. prime[0] = prime[1] = false;

    5. for (int i=2; i<=n; ++i)

    6. if (prime[i])

    7. if (i * 1ll * i <= n) //1ll дляпереводав long long

    8. for (int j=i*i; j<=n; j+=i)

    9. prime[j] = false;



    Выводы


    В данной курсовой работе мною была разработана программа для которая генерируется множество первых n случайных чисел с помощью решета Эратосфена, используя 3 различных языка программирования, а именно Python, Java и C++. Был обоснован выбор каждого из этих языков по нескольким критериям и было проведено сравнение написанных программ по метрике Холстеда.

    Сравнение данных программ подтвердило критерии по котором были выбраны данные языки для написания данной задачи и выявило положительные и отрицательные стороны каждого из этих языков программирования.

    Список используемой литературы


    Учебники, монография, брошюры


    1. Программирование. Принципы и практика с использованием C++ — Бьёрн Страуструп.

    2. Современный Java. Рецепты программирования – Кен Коузен.

    3. Программирование на Python – Марк Лутц.


    Электронные источники

    1. Интернет-сайт Википедия- https://ru.wikipedia.org

    2. Интернет-сайт Habr- https://habr.com/ru

    3. Интернет-сайт tproger - https://tproger.ru

    4. Интернет-сайт Oracle -https://www.oracle.com/java/technologies/javacommunity.html

    5. Что пишут на Python: для чего нужен этот язык программирования / Skillbox Media

    6. Моё обучение · Моё обучение · Stepik

    7. Язык Java: зачем нужен, плюсы и минусы, области применения - сравнение с другими языками программирования, с чего начать (yandex.ru)
    1   2   3   4   5   6   7   8


    написать администратору сайта