Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие для учеников .doc
Скачиваний:
12
Добавлен:
18.12.2018
Размер:
2.27 Mб
Скачать

Пример 1

"Вечный календарь". Известно, что если дата лежит в диапазоне от 1582 до 4902 г., номер дня недели (номер воскресенья  0, понедельника − 1,…, субботы − 6) равен остатку от деления на 7 значения выражения [2.6m-0.2]+d+y+[y/4]+[c/4]-2c

Здесь d − номер дня в месяце (1, 2, ...); m номер месяца в году, нумерация начинается с марта (у марта − номер 1, у апреля − номер 2, ..., у декабря − номер 10, январь и февраль считаются месяцами с номерами 11 и 12 предыдущего года); у − две младшие цифры года; с − две старшие цифры года; [х] обозначает целую часть числа х.

Вычислить количество пятниц, приходящихся на 13−е число в XX столетии.

Решение

Program Example_67;

Type month=(marth, april, may, june,

july, august, September,

october, november, december,

january, february);

day=1..31;

year=1582..4902;

week=(sunday, monday, tuesday,

wednesday, thursday,

friday, saturday) ;

Const h=20;

d: day=13;

d_w: week= friday;

Var k:Integer;

{для подсчета кол-ва пятниц}

у: year; Mod_y: 0..99; int_y: 15..49;

m: month;

n:-50..1000;

Begin

k:=0;

For y:=(h-1)*100 To h*100-1 Do

{просмотрим все годы столетия}

For m:=marth To february Do

{просмотрим все месяцы года}

Begin

Mod_y:=y mod 100;

{найдем две последние цифры года}

int_y:=y div 100;

{найдем две первые цифры года}

n:=trunc(2.6*(Ord(m)+1)*0.2)+d+mod_y+

trunc(mod_y/4)+ trunc(int_y/4)-2*int_y;

If n mod 7=0rd(d_w) Then Inc(k);

End;

Writeln('количество пятниц,

приходящихся на ',d,' число в ',h,

' столетии равно ', k);

End.

При решении этой задачи нам понадобилось выполнить преобразование типов.

Пример 2

Найти k−е простое число в арифметической прогрессии 11, 21, 31, 41, 51, 61,…

Решение

Для решения поставленной задачи необходимо просматривать числа последовательности и проверять каждое из них на простоту. Поскольку нам неизвестно, сколько членов последовательности необходимо просмотреть, мы должны просматривать последовательность до тех пор, пока не найдем k−е простое число. Для этого воспользуемся циклом с условием:

Program Example_68;

Var k: Integer;

n, p, d: Longint:

Begin

Writeln('введите номер числа');

Readln(k);

n:=0; p:=1;

While n<k Do

Begin

Inc(p, 10); d:=2;

While (p mod d<>0) and (d<sqrt(p)) Do

Inc(d);

If d>=sqrt(p) Then Inc(n);

End;

Writeln(p);

Readln;

End.

В этом решении мы смогли записать условие d<sqrt(p), так как типы Integer и Real совместимы.

Пример 3

Вычислить сумму значений 1/n5 в прямом и обратном порядке.

Решение.

Перед вычислением четвертой степени значения целой (типа Word) переменной k ее значение присваивается вещественной переменной x. Это делается для того, чтобы избежать переполнения. Ведь диапазон значений вещественных переменных значительно больше, чем диапазон значений целых переменных типа Word.

Program Example_69;

uses Crt;

var x, summa, ammus: real;

k: word;

begin

ClrScr;

Writeln('1/n^5, 1 to 1000');

{суммирование в прямом порядке}

Summa:=0.0;

for k:=1 to 1000 do

begin

x:=k;

summa:=summa+1.0/(x*Sqr(Sqr(x)));

end;

{суммирование в обратном порядке}

ammus:=0.0;

for k:=1000 downto 1 do

begin

x:=k;

ammus:=ammus+1.0/(x*Sqr(Sqr(x)));

end;

Writeln('Прямая сумма=', summa);

Writeln('Обратная сумма', ammus);

Writeln('Разность=', summa-ammus);

Readln;

end.