TURBO PASCAL

Новости           

Программы

Turbo Pascal

Игры

Документация

"Странности"

FAQ

Ссылки

Благодарности

Гостевая книга

От автора

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

Пример 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 предыдущего года); y - две младшие цифры года; c - две старшие цифры года; [x] - означает целую часть числа x.

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

Вопросы для обсуждения

  1. Какие понадобятся типы данных?
  2. Какие величины остаются постоянными в процессе работы?
  3. Какие переменные необходимы для решения задачи, каков их тип?
  4. Для вычисления значения выражения (*) необходимо выполнить преобразование типов, для этого воспользуемся функцией trunc, которая преобразует вещественное число в целое путём отбрасывания дробной части числа. Какие значения может принимать данное выражение?
  5. Какие значения принимает функция ord для констант типа месяц?

Решение

Program Example_26;
Type month = (january, february, marth, april, may, june, jule, august, september, october, november, december);
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; {для подсчёта количества пятниц}
y : 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=Ord(d_w) Then Inc(k);
End;
Writeln('количество пятниц, приходящихся на ',d,' число в ',h,' столетии равно ',k,');
End.

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

Пример 2

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

Решение

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

Program Example_27;
Var k : Integer;
n, p, d : Longist;
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 совместимы.

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

  1. Даны натуральные числа, обозначающие число, месяц и год. Используя условие примера 1, определить день недели, на который падает указанная дата.
  2. День учителя ежегодно отмечается в первое воскресенье октября. Дано натуральное число n, обозначающее номер года. Определить число, на которое приходится День учителя.
  3. Рассмотрим некоторое натуральное число. Если это не палиндром, то изменим порядок его цифр на обратный и сложим исходное число с получившимся. Если сумма не палиндром,то над ней повторяется то же действие и т.д., пока не получится палиндром. Даны натуральные числа k, m, l (k<l). Проверить, верно ли, что для любого натурального числа из диапазона от k до l процесс завершается не позднее, чем после m таких действий.
  4. Найти 100 первых простых чисел.
  5. Дано натуральное число n, целые числа a1, a2,..., an. Рассмотреть отрезки последовательности a1, a2,...,an (подпоследовательности идущих подряд членов), состоящих из
    1. полных квадратов;
    2. степеней пятёрки;
    3. простых чисел.

    В каждом случае получить наибольшую из длин рассматриваемых отрезков.

    Содержание

 

На главную страницу
(с)Все права защищены

По всем интересующим вопросам прошу писать на электронный адрес

    Rambler's Top100 PROext: Top 1000
    Rambler's Top100 Яндекс цитирования
Hosted by uCoz