Завдання № 19. Вивести на екран перших n простих чисел » Pascal - основи програмування

Основи програмування на мові Pascal

 

Спонсори

Завдання № 19. Вивести на екран перших n простих чисел

Завдання № 19. Вивести на екран перших n простих чисел
Формулювання. Дано натуральне число n. Вивести на екран n перших простих чисел. Наприклад, при введенні числа 10 програма повинна вивести відповідь: 2 3 5 7 11 13 17 19 23 29
Рішення. Це завдання схожа на попередню тим, що тут нам теж необхідно перевірити всі натуральні числа на деякому відрізку, на цей раз використовуючи ще один лічильник для подсчі-та знайдених простих. Проте цього разу ми не можемо дізнатися, скільки доведеться перевірити чи-сів, поки не набереться n простих. Отже, тут нам не підходить цикл for, так як ми не можемо порахувати необхідну кількість ітерацій.
    Тут нам допоможе цикл while. Нагадаємо, що тіло циклу while повторюється до тих пір, по-ка залишається істинним булевское вираження в його заголовку (тому його ще називають циклом з передумовою). Так як while не має змінної циклу, яка збільшується на 1 з кожним наступним кроком, то при його використанні необхідно забезпечити зміну деяких пе-ремінних в тілі циклу, від яких залежить умова в його заголовку, таким чином, щоб при досягненні необхідного результату воно стало хибним.
    Так як ми повинні знайти і вивести n перших простих чисел, підраховуючи їх, і з кожного знайденим простим числом деякий лічильник (нехай це буде primes з початковим значенням 0) збільшується на 1, то умовою в заголовку while буде вираз primes <n. Іншими слова-ми, цикл триває, поки число знайдених чисел менше необхідного. На останньому ж кроці буде виведено останнє число, primes стане рівним n і наступного кроку циклу вже не буде, так як умова в його заголовку стане хибним. На цьому робота програми буде закінчена.
Перевірятися на простоту буде деяке число k, яке з кожною итерацией циклу обя-ково буде збільшуватися на 1 (таким чином, ми будемо рухатися по відрізку натуральних чисел, поки не виберемо з нього задану кількість простих).
Алгоритм природною мовою:
1) Введення n;
2) Обнулення змінної primes;
3) Присвоєння змінної k значення 1;
4) Запуск циклу з передумовою primes <n. У циклі:
  1. Обнулення змінної count;
  2. Запуск циклу, при якому i змінюється від 1 до k. У циклі:
    a. Якщо k ділиться на i, то збільшуємо значення змінної count на 1;
  3. Якщо count = 2, виводимо на екран число k, символ пробілу і збільшуємо значення лічильника primes на 1;
  4. Збільшуємо значення k на 1.

Код:


  1. program FirstNPrimes;
  2. var
  3. i, k, n, count, primes: word;
  4. begin
  5. readln(n);
  6. k := 1;
  7. primes := 0;
  8.  while primes < n do begin
  9.   count := 0;
  10.   for i := 1 to k do begin
  11.   if k mod i = 0 then inc(count)
  12. end;
  13. if count = 2 then begin
  14. write(k, ' ');
  15. inc(primes)
  16. end;
  17. inc(k)
  18. end
  19. end.

0019.-FirstNPrimes.rar [706 b] (cкачувань: 12)

    Виконаємо ручну прокрутку алгоритму, взявши в якості n число 2. При цьому будемо вже за звичкою червоним кольором позначати змінні, що змінилися після виконання цього рядка, а прокресленням ті, які на даному етапі не визначені, тому що алгоритм до них ще «не дійшов» . При повторенні кроків циклу ітерації явно рахувати не будемо (хоча легко побачити, що їх номерами повністю відповідає змінюється після кожного чергового виконання тіла змінна k), і в таблиці буде вказана лише той рядок, яка виконується. На тих кроках, на яких змінні не змінюються, будемо пояснювати сенс виконуються операторів.
    Для наочності все ж відділимо один від одного парні і непарні кроки основного циклу while, при цьому його внутрішній цикл будемо вважати самоочевидним і в рядку 12-14 будемо фік-сіровать ті значення змінних, які будуть отримані по виходу з нього.

 

 рядка

n

k

primes

i

count

7

2

8

2

1

9

2

1

0

10

(primes < n) = true – входимо в цикл

11

2

1

0

0

12-14

2

1

0

от 1 до 1

1

15-18

(count = 2) = false

19

2

2

0

1

10

(primes < n) = true – входимо в цикл

11

2

2

0

0

12-14

2

2

0

от 1 до 2

2

15

(count = 2) = true

16

виводимо числа k (тобто 2)

17-18

2

2

1

2

19

2

3

1

2

10

(primes < n) = true – входимо в цикл

11

2

3

1

0

12-14

2

3

1

от 1 до 3

2

15

(count = 2) = true

16

Выводимо числа k (тобто 3)

17-18

2

3

2

2

19

2

4

2

2

10

(primes < n) = false – кінець програми

 

скачать dle 10.4фильмы бесплатно Наступна сторінка » Завдання № 20. Перевірити, чи є задане н... Попередня сторінка » Завдання № 18. Вивести на екран всі про...