Тема: «Разработка системы алгоритмов по теме « Решение задач целочисленной арифметики » Содержание Введение .......................................................................................................... 3 Урок 1 . Алгоритм Евклида .......................................................................... 4 Урок 2 . Числа Фибоначчи, Армстронга и Мерсена. ................................ 6 Урок 3. Алгоритмы нахождения чисел с заданными свойствами на целочисленном отрезке................................................................................ 10 Урок 4. Алгоритмы нахождения чисел с заданными характеристиками на целочисленном отрезке .......................................... 14 Урок 5. Перевод чисел из одной системы счисления в другую .............. 17 Урок 6. Задачи о магических квадратах. ................................................... 20 Заключение ................................................................................................... 24 Литература: ................................................................................................... 25 2 Введение Алгоритм Евклида. Числа Фибоначчи, Армстронга и Мерсена. Алгоритмы нахождения чисел с заданными свойствами на целочисленном отрезке : простые, совершенные, автоморфные числа, числаполиндромы и пифагоровы тройки, дружественные числа и числа-близнецы. 3 Алгоритм Евклида Задача 1. Определите, является ли введенное число а простым или составным, и найдите все его делители. Алгоритм решения: Var a,i:longint; f: boolean; BEGIN Readln(a); {ввод числа} f: =false; for i:=2 to (a div 2) do {поиск делителей числа от 2 до a div 2} if a mod i = 0 then begin f: =true; Writeln (‘Делитель числа a:’,i) еnd; if f then Writeln(‘Число’,а,’ — составное’) else Writeln(‘Число’,а’ — простое’) END. Задача 2. Найти и вывести без повторений все простые делители целого числа m. Алгоритм решения: Var l: boolean; m,j : integer; Begin Write('Введите число : '); Readln(m); l := true; 4 j := 2; while m<>1 do begin if m mod j =1 then begin if l then Writeln(j); m := m div j; l := false end else begin j := j+l; l := true end end End. 1. Алгоритм решения: Var i, n , k :word; Begin Read ( n) ; k:=1; for i:=1 to n do if n mod i =0 then {если m делится на i , то i - делитель} begin writeln (i); k:=k+1; {подсчет количества делителей} end; writeln (k); 5 end. 2. Алгоритм решения: label m1; Var a,i:integer; ostatok:real; begin writeln ('Введите целое число'); readln(a); i:=2; m1: if i<=9 then begin {вычисление остатка} ostatok:=a mod i; if ostatok=0 then writeln('Делится на ’, i) else writeln (‘He делится на’, i); {увеличение делителя} i:=i+l; goto m1; end End. Числа Фибоначчи, Армстронга и Мерсена. Задача 1. Построить алгоритм вычисления n-го числа Фибоначчи с использованием рекурсий. Алгоритм решения: Var n:integer; Function fib(k: integer):longint; begin if k<=1 then fib:=1 {при k=0 fib=1} {иначе рекурсивная формула} else fib:=fib(k-1)+fib(k-2) 6 end; Begin Write(‘Введите числоN=’); Readln(n); Writeln(‘Число Фибоначчи’); {обращение к функции fib} Writeln(fib(n)); End. Натуральное число А, состоящее из n цифр, называется числом Армстронга, если оно равно сумме своих цифр, возведенных в степень n. Например, 13+ 53 + +33 = 153. Задача 2. Существует строка текста, состоящая из 1, 2, 3, 4-значных натуральных чисел, отделенных друг от друга пробелом, в конце строки стоит точка. Найдите и выведите все числа Армстронга в этой строке. Алгоритм решения: VAR ol:array[1..4] of integer; {массив для хранения цифр числа} cod,i,k,n,j: integer; o,s,vs:longint; stl.sl,: string; f: boolean; {признак отсутствия в строке чисел Армстронга} BEGIN Writeln (‘Введите строку из цифр’); readln(stl); k: = l; n: = l; f: = false; while k< =length(stl) do {просмотр строки текста посимвольно} begin if (stl[k]=‘ ‘) or (stl[k]=‘.‘) then begin si: =copy(stl,n,k - n); {выделим запись натур. числа} 7 val(sl,o,cod); {преобразуем строку в числовое представление} s:=0; for i: = 1 to length(sl) do begin val(sl[ij,ol[i],cod); {вычисляем сумму п-степеней цифр числа} vs: = l; for j: =1 to length(sl) do vs: =vs * ol[i]; s: =s + vs end; if o = s then begin writeln(‘Число Армстронга :’,о); f: =true end; n:=k+l end; inc(k) end; if not(f) then writeln(‘Чисел Армстронга в строке нет’) END. 1.Найти число Фибоначчи Fn ,если F0=1, F1=1, Fn= Fn-1 + Fn-2 и Fn >k. Алгоритм решения: Var f0,f1,f,k:integer; Begin f0:=1; f1:=1; {начальные данные} read(k); f:=2; 8 while f<=k do begin f0:=f1; f1:=f; f:=f0+f1; {формула Фибоначчи} end; writeln(‘f=’,f); End. Задача 2. На натуральном отрезке [а, b] найти все идеальные числа. Натуральное число является идеальным, когда оно равно сумме его делителей, за исключением самого числа. Алгоритм решения: Var a,b,S,l,i:longint; begin writeln ('Введите число а '); read (a); writeln ('Введите число b>a '); read (b); for i:=a to b do begin S:=0; {начальное значение суммы делителей} for l:=1 to (i div 2) do if i mod l=0 then S:=S+1; {нахождение суммы делителей} if S=i then writeln(i,' - идеальное число') end; readln; readln end. 9 Алгоритмы нахождения чисел с заданными свойствами на целочисленном отрезке Задача 1. Дано целое число А. Выделить все цифры этого числа и найти произведение всех нечетных его цифр. Алгоритм решения: Var x,r,q:longint; Pr:longint; Begin writeln('Введи целое число x:'); read(x); r:=x mod 10; {остаток от деления} q:=x div 10; {частное от деления} if r mod 2<>0 then Pr:=r {если остаток нечетный, то произведение = остатку} else Pr:=1; {если остаток четный, то произведение = 1} while q>0 do begin r:=q mod 10; {остаток от деления} q:=q div 10; {частное от деления} if (r mod 2)<>0 then Pr:=Pr*r; end; writeln('Произведение нечетных цифр числа=',Pr); readln;readln End. Задача 2. Дан натуральный отрезок [a, b]. Найти в границах этого отрезка сумму всех натуральных чисел, которые делятся на 2 или на 5. Алгоритм решения : Var 10 a,b:longint; Sum:longint; i:integer; Begin writeln('Введите концы отрезка:'); write('a='); read(a); write('b='); read(b); Sum:=0; for i:=a to b do {нахождение суммы чисел, удовлетворяющих условию} if (i mod 2=0) or (i mod 5=0) then Sum:=Sum+i; writeln('Sum=',Sum); readln; readln; End. Задача 3. Составьте программу ввода целого трехзначного числа, формирование и вывод числа с обратным порядком цифр. Алгоритм решения : var abc,a,b,c,ab:integer; begin writeln ('Введите трехзначное число'); readln(abc); c:=abc mod 10; {отделение последней цифры} ab:=(abc-c) div 10; {отделение первых двух цифр} b:=ab mod 10; {отделение второй цифры} a:=(ab-b) div 10; {отделение первой цифры} writeln(c,b,a); {вывод цифр числа в обратном порядке} readln; end. Задача 4. Составить программу ввода натурального числа n и определение 11 того, является ли оно полиндромом, т.е. таким, десятичная запись которого читается одинаково слева направо и справа налево. Алгоритм решения: var l,m,n,k:longint; begin writeln ('Введите натуральное число n'); readln(n); k:=n; m:=0; while k>0 do begin l:=k mod 10; {отделение остатка} k:=k div 10; {отделение частного деления на 10} m:=l+m*10 {заполнение числа цифрами в обратном порядке} end; if m=n then writeln ('Число ',n,' является полиндромом') else writeln ('He является полиндромом'); readln; end. Задача 1. Составить программу ввода натурального числа n и определения того, является ли оно совершенным. Совершенное число n равно сумме всех своих делителей, не превосходящих само n. Алгоритм решения : var number,count,sum:integer; begin repeat 12 write(‘Введитe натуральное число n= '); readln(number); until n>0; sum:=l; for count:=2 to number div 2 do if (number mod count) = 0 then sum:=sum+count; {подсчет суммы делителей} if number = sum then writeln(number, '-совершенно число') else writeln(number,'- не совершенное число') end. Задача 2. Найдите на натуральном отрезке [a, b] четное число с наибольшей суммой всех своих делителей. Само число и единицу не учитывайте. Алгоритм решения: Var m,p,s,max,i,a,b: longint; BEGIN Write (‘Введите числа А и В (А<В):’); Readln(a); Readln(b); if odd(a) {если а нечетно, увеличить его на единицу} then a: =а + 1; max: =2; while а<=b do {просмотр всех четных чисел на отрезке} begin s:=2; for i:=3 to a div 2 do if (a mod i)=0 then s:=s+i; {вычисление суммы делителей} if max< =s then begin max:=s; m: =a end; 13 a:=a + 2; end; Writeln(‘Четнoe число с наибольшей суммой своих делителей :’,m) END. Алгоритмы нахождения чисел с заданными характеристиками на целочисленном отрезке Задача 1. Найдите и выведите все тройки чисел на натуральном интервале чисел [a,b], удовлетворяющие условию: если l, m, n Є [a,b] .то эта тройка чисел удовлетворяет равенству l2 = m2 + n2. Алгоритм решения: Var a,b,i,j :longint; Begin Write(‘Введите числа А и В (А<В):’); Readln(a); Readln(b); for i: =a to b-1 do for j: = i + 1 to b do if (i * i+j*j>a) and (i*i + j * j < b) then Writeln(‘( ‘,i,’ , ’,j,’ , ’,trunc(sqrt(i * i + j * j)),’ )’) end. Задача 2. Определите все натуральные числа на отрезке [10, 20000], сумма цифр каждого из которых, возведенная в некоторую степень, дает само число. На пример, 18 * 18 * 18 = 5832, 9 * 9 = 81. Алгоритм решения: Var k,n,i,s:longint; 14 Begin i: = 10; while i< =20000 do begin n: = i; s:=0; {определение суммы цифр числа} while n> = 1 do begin s: =s + n mod 10; n: =n div 10 end; n: =i; k:=s; {умножение суммы цифр на саму себя} while (s<n) and (S<>1) do s: = s * к; if s=n then Writeln(i); i:=i+l end end. Задача 3. Найдите на натуральном отрезке [a, b] все пары простых чисел, разность между которыми равна 2. Такие пары чисел, например3 и 5, 5 и 7, 11 и 13, называют числами-близнецами. Алгоритм решения: Var j,i,m,n,a,b,p,k:word; c1,c2:boolean; Begin writeln('Введите левый конец отрезка,a>0 '); readln(a); writeln('Введите правый конец отрезка,b>0 '); 15 readln(b); p:=0; for i:=a to b do for j:=i+1 to b do begin {Является ли число i простым} k:=0; for m:=1 to i do if i mod m=0 then k:=k+1; if k=2 then c1:=true else c1:=false; {Является ли число j простым} k:=0; for n:=1 to j do if j mod n=0 then k:=k+1; if k=2 then c2:=true else c2:=false; if c1 and c2 then begin k:=j-i; if k=2 then begin writeln('Числа ',i, ' и ',j ,' являются числами-близнецами '); p:=p+1; end; end; end; if p=0 then writeln('Таких чисел нет'); readln; end. Задача 4. Найдите все пары дружественных чисел на натуральном отрезке [a,b]. Два натуральных числа называются дружественными, если каждое из них равно сумме всех делителей другого, кроме самого этого числа. 16 Алгоритм решения: Var a,b,i,j:integer; v:array[1..100] of integer; begin writeln('Введите a,b'); readln(a,b); for j:=a to b do for i:=1 to j do if j mod i=0 then v[j]:=v[j]+i; for i:=a to b do for j:=a to b do if (i=v[j]-i) and (i<>j) and (j=v[i]-j) then writeln('Дружественные числа ',i,' i ',j); writeln; { for i:=a to b do write(v[i],' '); } readln; end. 5. Перевод чисел из одной системы счисления в другую Цели обучения: рассмотреть алгоритмы перевода из одной системы счисления в другую; закрепление умений и навыков решения целочисленных задач. Задача 1. Составить алгоритм перевода из в 10-ой системы счисления в 2ую систему счисления. Алгоритм решения: Var n,s,p: longint; 17 BEGIN write ('Введите число'); readln(n); s:=0; p: = l; repeat s: =s + (n mod 2)*p; {дв. число + остаток от деления дес. числа на 10} p: =p* 10; n: =n div 2 until n< 1; writeln('s = ',s) END. Из 10-ой системы счисления в 16-ричную систему счисления. Алгоритм решения: var n: longint; s,t:string; BEGIN write ('Введите число'); readln(n); s:=''; repeat case n mod 16 of {выбор остатка числа при делении на 16 и замена его на соответствующий символ} 0..9: begin str(n mod 16,t); s:=t+s; end; 10: s:='A'+s; 18 11: s:='B'+s; 12: s:='C'+s; 13: s:='D'+s; 14: s:='E'+s; 15: s:='F'+s; end; n:=n div 16 until n< 1; writeln('s = ',s) END. 1. Составить алгоритм перевода из в 10-ой системы счисления в любую другую систему счисления с основанием меньшим 10. Переводимое число в 10-ой системе счисления и новое основание системы счисления ввести с клавиатуры. Алгоритм решения: Var o: byte; l,s,v:longist; Begin writeln(‘Введите основание с/c’); readln(o); writeln(‘Введите число L’); readln(l); s:=0; v:=1; while l>1 do begin s:=s+(l mod o)*v; {число + остаток от деления дес. числа на основание} v:=v*10; l:=l div o; 19 end; writeln(‘Число с новой с/с’,s) End. 6. Задачи о магических квадратах. Задача 1. Магическим называется квадрат, в котором сумма чисел по всем горизонталям, вертикалям и диагоналям совпадает. Найти все магические квадраты 3x3 составленью из девяти цифр (1 ..9). Пример: 2 7 6 9 5 1 4 3 8 Алгоритм решения: label 11,12,13,14,15,16,17,18; var al,a2,a3,a4,a5,a6,a7,a8,a9,x,n:integer; begin writeln(‘Поиск магических квадратов 3*3...'); for al :=1 to 9 do begin for a2:=l to 9 do begin for a3:=l to 9 do begin for a4:=l to 9 do begin for a5:=1to 9 do begin for a6:=l to 9 do begin 20 for a7;=l to 9 do begin for a8:=l to 9 do begin for a9:=l to 9 do begin if (a9=a8) or (a9=a7) or (a9=a6) or (a9=a5) or (a9=a4) or (a9=a3) or (a9=a2) or (a9=al) then goto 11; if (a8=a7) or (a8=a6) or (a8=a5) or (a8=a4) or (a8=a3) or (a8=a2) or (a8=al) then goto 12; if (a7=a6) or (a7=a5) or (a7=a4) or (a7=a3) or (a7=a2) or (a7=al) then goto 13; if (a6=a5) or (a6=a4) or (a6=a3) or (a6=a2) or (a6=al) then goto 14; if (a5=a4) or (a5=a3) or (a5=a2) or (a5=al) then goto 15; if (a4=a3) or (a4=a2) or (a4=al) then goto 16; if (a3=a2) or (a3=al) then goto 17; if(a2=al)then goto 18; x:=al+a2+a3; if (a4+a5+a6=x) and (a7+a8+a9=x) and (al+a4+a7=x) and (a2+a5+a8=x) and (a3+a6+a9=x) and (al+a5+a9=x) and (a3+a5+a7=x) then begin n:=n+l; writel ('Квадрат ',n); writeln(al,' ',a2,' r,a3); writeln(a4,' ',a5,' ',a6); writeln(a7,' ',a8,' ',a9); readln; end; ll:end;12:end;13:end;14:end;15:end;16:end;17:end;18:end;end; end. Задача 1 .Написать алгоритм определения количества билетов с 6-значными номерами, у которых сумма первых 3 десятичных цифр равна сумме 3 последних десятичных цифр. Идея решения. Просматриваем числа от 0 до 999999. Делим число на 2 части: 21 первые 3 цифры и последние 3 цифры, находим сумму цифр каждой из частей, сравниваем результат. Алгоритм решения: function summ(x:longmt):byte; {возвращает сумму цифр числа} var k,l:byte; y:longint; begin y:=x; l:=0; while (y<>0) do begin k:=y mod 10; y:=y div 10; l:=l+k end; summ:=l; end; {----------------------------------------} var wl,w2,i,j,count:longint; n,m:byte; begin count:=0; for j:=0 to 999999 do begin wl:=j div 1000; w2:=j mod 1000; if summ(wl) = summ(w2) then begin count:=count+1; writeln(j,’’,count); 22 end; end; End. 23 Заключение Современное общество предъявляет новые требования к поколению, вступающему в жизнь. Надо обладать умениями и планировать свою деятельность, и находить информацию, необходимую для решения поставленной задачи, и строить информационную модель исследуемого объекта или процесса, и эффективно использовать новые технологии. Такие умения необходимы сегодня каждому молодому человеку. Поэтому первой и важнейшей задачей школьного курса информатики является формирования у учащихся соответствующего стиля мышления. Цель данной курсовой работы - разработка практических заданий для учителя по организации учебного процесса при изучении темы «Решение задач целочисленной арифметике в 10 классе », разработка целей и задач, проведение тематического планирования. Изучение этой темы имеет большое значение для развития у школьников теоретического, творческого мышления, а также формирования так называемого операционного мышления, направленного на выбор оптимальных решений. Кроме того, изучение этой темы очень важно для обучения школьников вообще, так как ''человек чему-то научается только в том случае, если у него в голове складывается блок-схема действия, выделены подпрограммы и проложены информационные связи. Таким образом, человек неизмеримо усилит свой интеллект, если сделает частью своей натуры способность планировать свои действия, вырабатывать общие правила и способ их применения к конкретной ситуации, организовать эти правила в осознанную и выразимую структуру, одним словом, сделается программистом'' . 24 Литература: 1. Программа средней общеобразовательной школы «Информатика VIII-XI классы». – Минск, 2000. – 72 с. 2. Павловский А.И., Пупцев А.Е., Гращенко П.Л. Информатика: Учебное пособие для 10-го кл. с углубл. изучением информатики общеобразоват. шк. с русским языком обучения. – Мн., Нар. асвета, 2000. – 223 с.: ил. 3. Культин Н. «Turbo Pascal в задачах и примерах». – Санкт-Петербург,2004. – 256 с. 4. Алексеев Е.Р., Чесноков О.В., Павлыш В.Н., Словинская Л.В. «Турбо Паскаль 7.0». – Москва,2004. – 394 с. 5. Информатизация образования №9 ,1997г.,Мн.-130с. 25