Урок #4. «Арифметика
в ТР 7.0.
Простые числа.»
Глава #1 «Не
все так просто»
*что нужно знать и что делать*
История математики немыслима без истории простых чисел.
В школе
мы оперируем определением: всякое число большее 1 и имеющее только два делителя
себя и «1» - простое. Вспомним первую «десятку» простых чисел
2,3,5,7,11,13,17,19,23,29…
Интересно, кто то из вас не задумался , а давайте напишем
программу выводящая N – первых простых чисел. Но сначала задача попроще:
Задание: «Определить какое число N – простое или составное, если простое вывести «1»,
если составное вывести «0»».
Во
входном файле INPUT.TXT записано целое число N, причем 1<N<=32000.
Вывести в
выходной файл OUTPUT.TXT соответствующее
сообщение.
Пример:
INPUT.TXT
7
OUTPUT.TXT
1
Приступим к задаче…
Глава #2 «Делимость
числа»
*с чего начать*
Делителями числа называются все числа на которое оно
делится без остатка, их всегда больше равно «2», то есть если равно «2» -
простое. Какие возможности дает нам Паскаль? У него есть два арифметических
оператора <div> и <mod>.
Отношение вида <div> между числом и его делителем –
целая часть от деления, а отношение вида <mod> между числом и его делителем - их
остаток от деления.
Очень просто два примера:
10 div 5=2 10 mod 5=0
10 div 7=1 10 mod 7=3
Вопрос: 10
div 3=? 10 mod 3=?
Для нашей программы мы будем
использовать отношение <mod>.
Практически
вручную попробуем определить простоту
одного числа например N=7. Логически решение строится так: просматриваем
все числа от 1 до 7 , считая их
делителями
7. В виде таблицы:
7 mod 1=0 +
7 mod 2=1 -
7 mod 3=1 -
7 mod 4=3 -
7 mod 5=2 -
7 mod 6=1 -
7 mod 7=0 + да число простое всего два делителя, эти
случаи выделены.
В цикле с параметром генерируем все
числа от 1 до 7:
FOR I:=1 TO 7 DO <условие>, но проблема в условии!!
Познакомимся
с оператором условия в Паскале:
IF <УСЛОВИЕ> THEN < ОПЕРАТОР1, ЕСЛИ УСЛОВИЕ
ВЫПОЛНЯЕТСЯ>
ELSE < ОПЕРАТОР2, ЕСЛИ УСЛОВИЕ НЕ
ВЫПОЛНЯЕТСЯ>;
Запишем вместе:
FOR I:=1 TO 7 DO
IF 7 MOD I=0 THEN <СЧЕТЧИК>??Еще одна проблема нужен оператор
счетчика делителей, но мы уже его знаем! Это оператор S:=S+I – накопитель как в программе BANK.PAS
У нас
удобнее K:=K+1 или INC(K);
Не
забудьте обнулить счетчик в начале K:=0.
Запишем все вместе:
K:=0;
FOR I:=1 TO 7 DO IF 7 MOD I=0 THEN INC(K);
Теперь
после выполнения этого фрагмента программы у нас подсчитывается количество
делителей числа, осталось вывести сообщение о простоте этого числа если в
счетчик записалось только два делителя с помощью полного оператора условия.
K:=0;
FOR I:=1 TO 7 DO IF 7 MOD I=0 THEN INC(K);
IF K=2 THEN WRITE(‘1’) ELSE WRITE (‘0’);
А теперь полный текст программы:
var N: integer ;
K: integer ;
I: integer;
begin
assign(input,’input.txt’);
assign(output,’output.txt’);
reset(input);
rewrite(output);
read (N);
K:=0;
FOR I:=1
TO N DO IF N MOD I=0 THEN INC(K);
IF K=2 THEN
WRITE(‘1’) ELSE WRITE (‘0’);
end.
Практическое задание:
1.На диске А создать файл PROST.PAS и ввести
программу
2.Во входной файл INPUT.TXT записать 7 и проверить работу программы
3.Протестировать программу на года 2001, 2002,2003,2004,2005,2006,2007
Глава #3 «Вопросы для повторения
и ДЗ»
Вопросы для повторения:
1.
Какие
арифметические операторы определены в Паскале и как они работают?
2.
Как
записать неполный оператор условия?
3.
Как
записать полный оператор условия?
4.
Как
создается счетчик?
5.
Как
тестировать программу несколько раз?
Домашнее
задание:
Написать программу «Дано целое число N.Найти сумму делителей этого числа» в режиме работы с входными и
выходными файлами
Пример:
INPUT.TXT
6
OUTPUT.TXT
12