takya.ru страница 1
скачать файл
Предлагаемый материал можно использовать для проведения уроков по Информатике и ИКТ при изучении алгоритмов работы с целыми числами. 36 задач, из которых 14 с решениями, систематизированы по уровням, определяющим уровни мыслительных операций и уровни алгоритмического мышления (см. Статью). Задачи 1-го уровня – задачи, решения которых описываются базовыми алгоритмами. Решение задач 2-го, 3-го, 4-го уровней позволяют совершенствовать навыки работы с целыми числами, используя базовые алгоритмы. Работу по переводу учащихся от одного уровня к другому рекомендуется проводить в индивидуальном порядке.

Используемые целочисленные типы:

Тип

Диапазон

Требуемая память (байт)

byte

0 .. 255

1

shortint

-128 .. 127

1

integer

-32768 .. 32767

2

word

0 .. 65535

2

longint

-2147483648 .. 2147483647

4

Используемые арифметические операции:

    • операции сложения (+), вычитания (-), умножения (*) и вещественного деления (/) выполняются так же, как и в обычных арифметических выражениях;

    • целочисленное деление (Div) отличается от обычной операции деления тем, что возвращает целую часть частного, дробная часть отбрасывается

Выражение

Результат

11 Div 5

2

10 Div 3

3

2 Div 3

0

    • деление по модулю (Mod) восстанавливает остаток, полученный при выполнении целочисленного деления.

Выражение

Результат

11 Mod 5

1

10 Mod 2

0

2 Mod 3

2

Задачи

Выделение цифр из числа

Задачи 1-го уровня:

1. Дано натуральное число A (A<=9999). Выделить все цифры из числа



Program In1;

Var A, B:word; Cif:0..9;

Begin

writeln ('Введите натуральное число');

readln(A);

B:=A; {сохранение копии числа}

writeln (‘Цифры числа в обратном порядке:’);

while B<>0 do

begin

{выделение последней цифры



Cif:= B mod 10;

writeln (Cif);

B:=B div 10; {«отбрасывание» последней цифры}

end;

End.

Задачи 2-го уровня:

Дано натуральное число A (A<=9999).

2. Выделить цифры из числа и подсчитать их количество.



Program In2;

Var A, B, Kol: word; Cif:0..9;

Begin

writeln ('Введите натуральное число');

readln(A);

B:=A; {сохранение копии числа}

Kol:=0; {инициализация переменной }

writeln (‘Цифры числа в обратном порядке:’);

while B<>0 do

begin

{выделение последней цифры



Cif:= B mod 10;

writeln (Cif);

Kol:= Kol+1;

B:=B div 10; {«отбрасывание» последней цифры}

end;

writeln ('Количество цифр в числе', A, ' – ', Kol)

End.

3. Определить сумму (произведение) цифр числа.

4. Найти первую цифру числа.

5. Определить количество вхождений заданной цифры в запись числа A.



Задачи 3-го уровня:

Дано натуральное число A (A<=9999)

6. Найти предпоследнюю цифру числа.

7. Найти вторую цифру числа

8. Дано натуральное число M. Получить сумму M последних цифр числа A.

9. Определить количество вхождений каждой значащей цифры числа в запись числа А. Например, для числа 1233 ответ: 1-1; 2-1; 3-2; 3-2, а для числа 44 ответ - 4-2; 4-2.

Program In9;

Var A, B1, B2:word; Kol:byte;

C:0..9;

Begin

writeln (Введите натуральное число);

readln(A);

B1:=A;

while B1<>0 do

begin

{выделение очередной цифры из числа A}



C:=B1 mod 10;

B1:=B1 div 10;

{определение количества вхождений C в число A}



B2:=A; Kol:=0;

while B2<>0 do

begin

if B2 mod 10=C then Kol:=Kol+1;

B2:=B2 div 10

end;

writeln (C:3, '-', Kol);

end;

End.

Задачи 4-го уровня:

Дано натуральное число A (A<=9999)

10. Выяснить, входит ли цифра 3 в запись числа A?



Program In10;

Var A, B:word; F:boolean;

Begin

writeln (‘Введите натуральное число’);

readln(A);

B:=A;

F:=false;

{Выделение цифр из числа и поиск цифры 3}



while (B<>0) and not F do

begin

F:=(B mod 10) = 3;

B:=B div 10

end;

if F then writeln ('да')

else writeln ('нет')

End.

11. Верно ли, что число A содержит ровно три одинаковые значащие цифры, как, например, числа 6676, 4544?

12. Верно ли, что все цифры числа A различны?

13. Является ли число A палиндромом (перевертышем), как, например, числа 2222, 616, 1221.

14. Является ли последовательность цифр числа A возрастающей последовательностью. Например, для числа 76431 ответ положительный, для чисел 6331, 9782 – отрицательный.

15. Приписать по единице в начало и в конец записи числа N. Например, если N= 134, то ответом должно стать число 11341.

Для этого формируем значение нового числа в соответствии со следующим его представлением . С этой целью в программу введены переменные: Cif – очередная выделенная цифра из заданного числа, St – значение очередной степени числа 10.

Program In15;

Var N, Nc, Rez, St:longint;

Cif: byte;

Begin

writeln (‘Введите натуральное число’);

readln(N);

Nc:=N;{создание копии введенного значения}

Rez:=1; {в результате размещается число единиц}

St:=1;

while Nc<>0 do

begin

Cif:=Nc mod 10;

Nc:=Nc div 10;

St:=St*10;

Rez:=Rez+Cif*St;

end;

Rez:=Rez+St*10; {добавление в результат первой цифры}

writeln (‘Новое число – ‘, Rez)

End.

16. Переставить первую и последнюю цифры числа N.

17. Поменять порядок цифр числа N на обратный

18. Выбросить из записи числа N цифры 0 и 5, оставив прежним порядок остальных цифр. Например, из числа 590150 должно получиться 91.

19. Дано целое число K (0<K<32768). Напечатать K-ую цифру последовательности


    1. 123456789101112131415…, в которой выписаны подряд натуральные числа.

Program In19A;

{K - число, определяющее порядковый номер цифры в последовательности.



L – порядковый номер текущей цифры в последовательности.

C - очередное формируемое натуральное число.

Kop - копия очередного натурального числа.

Cif - выделяемая из числа С цифра.

Kol - количество цифр в числе C.}

Var K, L, C, Kop, Cif, Kol:integer;

Begin

readln(K);

L:=0;C:=0;

repeat

{формирование очередного натурального числа}



C:=C+1;

Kop:=C;

{сколько в числе цифр?}



Kol:=0;

while Kop<>0 do

begin

Kol:=Kol+1;

Kop:=kop div 10

end;

L:=L+Kol;

until L>=K;

{начинаем выделять цифры из числа, начиная с последней до искомой}



while L>=K do

begin

Cif:= C mod 10;

L:=L-1;

C:=C div 10

end;

writeln (‘На ‘,K, ‘ –ом месте в последовательности находится цифра- ‘,Cif)

End.

  1. 149162536…, в которой выписаны подряд квадраты всех натуральных чисел;

c. 1123581321…, в которой выписаны подряд все числа Фибоначчи.

Делители натурального числа

Задачи 1-го уровня

20. Даны два натуральных числа N и M. Определить их наибольший общий делитель.

Наибольший общий делитель (НОД) двух целых чисел M и N – это наибольшее целое число, которое делит нацело оба числа. Алгоритм Евклида нахождения НОД основан на следующих свойствах этой величины. Пусть M и N – одновременно не равные нулю целые неотрицательные числа и пусть M>= N. Тогда, если N =0, то НОД (N, M)=M, а если N <>0, то для чисел m, n и r, где r – остаток от деления m на n, выполняется равенство
НОД (M, N)=НОД(N, R). Например, НОД(15, 6)=НОД(6,3)=НОД(3,0)=3.

Program In20;

Var M, N, Nod: longint;

Begin

readln (M, N);

while N<> M do

if Mthen N:=N - M

else M:=M - N;

Nod:=M;

writeln (Nod)

End.

21. Дано натуральное число n (1<= N <=32767). Получить все его натуральные делители.

Считаем, что делители числа находятся в интервале от 2 до N div 2.

Program In21;

Var N, Del: word;

Begin

writeln (‘Введите натуральное число’);

readln(N);

for Del:=2 to N div 2 do

if N mod Del =0 then writeln(Del)

End.

Задачи 2-го уровня

22. Дано натуральное число n (1<= N <=32767). Получить сумму всех его натуральных делителей.

23. Пусть M и N – ненулевые целые числа. Целое число A>0 называется наименьшим общим кратным (НОК) чисел M и N, если A делится и на M, и на N нацело, а также для любого C, которое делится нацело и на M и на N, верно, что оно делится нацело и на A. Если M и N ненулевые числа, то их наименьшее общее кратное существует и справедливо равенство НОК(M, N)=ABS(M * N) Div НОД(M, N). Найти наименьшее общее кратное N и M.

24. Даны натуральные числа M и N. Найти такие натуральные P и Q, не имеющие общих делителей, что P/Q=M/ N.



Задачи 3-го уровня

25. Дано 10 натуральных чисел. Найти их наибольший общий делитель.

26. Два простых числа называются «близнецами», если они отличаются друг от друга на 2 (таковы, например, числа 41 и 43). Напечатать все пары «близнецов» из отрезка [N, 2 N], где N – заданное целое число большее 2.

Задачи 4-го уровня

27. Два натуральных числа называются «дружественными», если каждое из них равно сумме всех делителей другого, за исключением его самого (таковы, например, числа 220 и 284). Вывести все пары «дружественных» чисел, не превосходящих заданного натурального числа.

28. Даны натуральные числа N и K, N > 1. Напечатать K десятичных знаков чисел 1/N. Программа должна использовать только целые переменные.

Например, для N=13, K=12 0,076923076923…

Для решения задачи необходимо обойти ограничения числовых стандартных типов данных. Для этого сдвинем в десятичной записи числа 1/n запятую на k мест вправо, получим число (10 в степени k)/n. Печатаем его целую часть, т. е. делим (10 в степени k) на n нацело, используя обычный метод деления «уголком».

Program In28;

Var I, N, K, Ost:integer;

Begin

writeln (‘Введите натуральное число’); readln(N);

writeln (‘Сколько цифр показать?’); readln (K);

Ost:=1;

for I:=1 to K do

begin

write (10*Ost div N);

Ost:=(10*Ost) mod N;

end;

writeln;

End.

Цифры факториала натурального числа

Значение факториала натурального числа M определяется следующим образом:


M!= 1∙ 2 ∙ 3 ∙ … ∙ (M-1) ∙ M. Принимается в качестве определения, что 1!=1 и 0!=1.

Задачи 2-го уровня

29. Определить последнее значение натурального числа N, факториал которого еще представим во множестве значений byte.



Program In29;

Const Maxim=255;

Var N, F: integer;

Begin

F:=1; N:=1;

while F<Maxim do

begin

N:=N+1;

F:=F*N

end;

N:=N-1;

writeln (N)

End.

Задачи 2-го уровня

30. Определить последнее значение натурального числа N, факториал которого еще представим во множестве значений: shortint, integer, word.



Задачи 4-го уровня

31. По заданному N (1<=N<=32767) определить самую правую ненулевую цифру в записи N!

Факториал числа с некоторого момента заканчивается нулями. Они получаются от перемножения двоек и пятерок. Подсчитываем количество пятерок, входящих в разложение факториала на простые множители. Далее надо искать последнюю цифру произведения, удаляя из каждого сомножителя все пятерки. Двойки удаляются в количестве равному общему количеству пятерок, входящих в разложении факториала на простые множители. В программе находится только последняя цифра произведения натуральных чисел от 1 до N.

{S – количество пятерок в разложении N! на простые множители}



Program In31;

Var N, K, S, T, I, J:integer;

Begin

read (N);

K:=N div 5; S:=0;

while K>0 do

begin

S:=S+K;



K:=K div 5

end;

T:=1;

for I:= 2 to N do

begin

J:=I;

{из очередного сомножителя извлекаются все пятерки}



while J mod 5 =0 do J:=J div 5;

{из этого же сомножителя извлекаются двойки до тех пор пока они есть, либо, пока общее количество извлеченных двоек не совпадет с числом пятерок}



while (S>0) and (J mod 2=0) do

begin

J:=J div 2; S:=S-1

end;

{определяется последняя цифра текущего произведения от 1 до I}



T:=T*(J mod 10) mod 10

end;

write (‘Последняя ненулевая цифра n! – ‘, T)

End.

Задачи 5-го уровня

32. В классе N учеников (2<=N<=500000). Учитель математики решил их рассадить за парты парами таким образом, чтобы у сидящих за одной партой учеников сумма их номеров по классному журналу была простым числом. Распределить учеников на максимально возможное количество таких пар, то есть найти все возможные решения.

Найдем первое большее N простое число. Обозначим его через P. Тогда пары чисел (P-N, N), (P-N+1, N-1) имеют суммарный вес P и удовлетворяют условию задачи. Легко заметить, что все числа от P-N до N входят в одну из пар. После этого осталось решить такую же задачу с новым значением N, равным P-N-1. Этот процесс продолжается до тех пор, пока значение N больше одного. При этом получается что найденное количество пар чисел равно максимально возможному количеству пар из различных чисел от 1 до N. Таким образом, найдено решение, удовлетворяющее все условиям задачи.

Program In32;

Var N, P, I, J:longint;

{функция, определяющая является ли число K простым}



function Prosto (K:longint):boolean;

var L:longint; T:boolean;

begin

T:=false;

L:=2;

while not T and (L*L<=K) do

begin

T:= K mod L=0;

L:=L+1

end;

Prosto:=not T

end;

Begin

writeln ('Введите количество учеников'); readln(N);

while N>1 do

begin

P:=N+1;

{поиск P- простого числа, большего N}



while not Prosto(P) do P:=P+1;

{определение границ диапазона: I - левая, J - правая}



I:=P-N; J:=N; N:=I-1;

{составление пар, сумма которых точно равна P - простому числу}



while I<J do

begin

writeln (I,' ',J);

I:=I+1; J:=J-1

end;

end

End.

33. Число, состоящее из N единиц (1<=N<=32767), возводится в квадрат. Найти все цифры полученного числа.

Число из N девяток 99…9 равно 10n-1. Тогда число из n единиц 11…1 равно (10n-1)/9 и его квадрат равен (10n-1)2/81=(102n-2*10n+1)/81. Число в скобках записывается слева направо следующими цифрами: n-1 девяток, восьмерка, n-1 нулей, единица – 9…980…01. Осталось поделить его «столбиком» на 81.

Program In33;

Var N, I, R : longint;

Begin

read (N);

R:=9;

for I:=2 to 2*N do

begin

R:=R*10;

if I<N then R:=R+9

else

if I=N then R:=R+8

else

if I=2*N then R:=R+1;

write (R div 81);

R:=R mod 81

end

End.

34. «Две дроби» Обыкновенная дробь P/Q задана числителем P (1<=P<=10000) и знаменателем Q (1<=Q<=10000). Вторую дробь получаем выбрасыванием в десятичном представлении заданной дроби K-ой (1<=K<=32767) цифры после запятой. Сравнить первую дробь со второй. Например, в дроби 3/7=0,428571428… при удалении 4-й цифры после запятой получается дробь 0,42871428…, которая больше первой, а при удалении 3-ей (0,42571428…) - меньше.

Для решения задачи используем алгоритм деления столбиком. В программе будем рассматривать остатки от деления при получении K-й и (K+1)-й цифр.

Program In34;

Var P, Q, K, I : integer;

Begin

read (P, Q, K);

if P=Q then write ('=')

else

begin

for I:=1 to K-1 do P:=10*P mod Q;

I:=10*P mod Q;

if I=P then write('=')

else

if I<P then write ('>')

else write ('<')

end

End.

Литература



  1. Окулов С.М.Основы программирования. — М.: ЮНИАМЕДИАСТАЙЛ, 2002. — 424 с.: ил.
скачать файл



Смотрите также:
Предлагаемый материал можно использовать для проведения уроков по Информатике и икт при изучении алгоритмов работы с целыми числами
109.71kb.
Уроках математики в 5 6 классе при изучении следующих тем: Доли и дроби; Процентное отношение, Решение задач на проценты
113.5kb.
Алгоритм учебной деятельности школьников
98.66kb.
Применение икт при изучении темы: "Построение графиков функций" в курсе алгебры
152.68kb.
Уроки нетрадиционного типа занимают значительное место в практике преподавания истории и права. Одним из таких уроков являются уроки-суды
201.43kb.
Рабочая программа по математике 4 класс учебный год
537.79kb.
Физика на Большом Адронном Коллайдере (lhc) в церне. Physics at the lhc in cern
31.1kb.
Рабочая программа Предмет: информатике и икт класс 10. Профиль: базовый Всего часов на изучение программы 35
276.89kb.
Тематическое планирование по Информатике и икт класс
404.57kb.
Пояснительная записка Начальный курс математики курс интегрированный: в нем объединены арифметический, алгебраический и геометрический материалы
160.85kb.
Рабочая программа составлена на основе Образовательной программы среднего (полного) образования (базовый уровень) по информатике и икт моу сош №3 р п
270.42kb.
При выявлении клиента с заболеванием трофическая язва необходимо использовать следующий алгоритм работы
13.13kb.