Учебная работа. Курсовая работа: Проект разработки программы-калькулятора CalcKurs на языке программирования Pascal
ГОСУДАРСТВЕННЫЙ технический УНИВЕРСИТЕТ
Факультет «СИСТЕМЫ УПРАВЛЕНИЯ, ИНФОРМАТИКА И ЭЛЕКТРОЭНЕРГЕТИКА»
Кафедра 308 «Информационные технологии»
Объяснительная записка к курсовой работе
по дисциплине: «Теория чисел»
Выполнил: Тузов И.И.
Группа 03-119
Управляющий: доцент, к.т.н. Гридин А.Н.
Москва 2010
Оглавление
Задание
Оглавление
Введение
1. интерфейс программки
2. Описание процедур
2.1 DelOstatok
2.2 Factor
2.3 NodNok
2.4 SuperGorner
2.5 Express
2.6 AntiExp
Заключение
Перечень использованных источников
приложение
Листинг программки
Задание
Создать программу-калькулятор CalcKurs на языке программирования Pascal, реализующую последующие функции:
1.формирование данного подмножества натурального ряда при помощи общего делителя;
2.факторизация числа с опциями;
3.нахождение НОД и НОК для данной совокупы натурального ряда;
4.нахождение оптимальных решений уравнения с целочисленными коэффициентами;
5.время от времени именуют «высшей математикой». Данная наука изучает натуральные числа и некие схожие с ними объекты, разглядывает разные характеристики (делимость, разложимость, связи и так дальше), методы поиска чисел, также описывает ряд довольно увлекательных наборов натуральных чисел.
Так, например, в рамках теории чисел рассматриваются вопросцы делимости целых чисел друг на друга, метод Евклида для поиска большего общего делителя, поиск меньшего общего кратного, малая и большая аксиомы Ферма. В качестве самых узнаваемых рядов натуральных чисел можно привести ряд Фибоначчи, обыкновенные числа, совершенные и дружеские числа, степени и суперстепени натуральных чисел.[1]
Вне самой арифметики теория чисел имеет достаточно не много приложений, и развивалась она не ради решения прикладных задач, как Искусство ради искусства, владеющее собственной внутренней красотой, тонкостью и трудностью. Тем не наименее теория чисел оказала огромное воздействие на математическую науку, так как некие разделы арифметики (в том числе и такие, которые потом отыскали применение в физике) были сначало сделаны для решения в особенности сложных заморочек теории чисел.[2]
Разработанная программка содержит в себе набор из нескольких главных операций, которые могут пригодиться при решении наиболее сложных задач.
Предназначение программки CalcKurs.
программка CalcKurs делает последующие функции:
1.формирование данного подмножества натурального ряда при помощи общего делителя;
2.факторизация числа с опциями;
3.нахождение НОД и НОК для данной совокупы натурального ряда;
4.нахождение оптимальных решений уравнения с целочисленными коэффициентами;
5.интерфейс программки
2. Описание процедур
2.1 DelOstatok
Предназначение.
Данная процедура сформировывает данное подмножество натурального ряда при помощи общего делителя.
метод.
Ищется общий делитель совокупы делителей (общий делитель ищется при помощи нахождения меньшего общего кратного делителей). На данном огромном количестве (кол-во цифр в числах) отыскиваем 1-ый элемент, который будет удовлетворять данному условию (делится на НОК с остатком), запоминаем элемент и прерываем цикл.
Формируем подмножество при помощи добавления к первому элементу делителя, суммируем количество частей, пока элементы не станут больше данной размерности.
Пример.
Делитель=10, остаток=3, размерность=2 (от 10 до 99)
количество частей=9
Подмножество частей={13, 23, 33, 43, 53, 63, 73, 83, 93}
Испытания.
1.Неправильные данные
2.Корректные данные
2.2 Factor
Предназначение.
Данная процедура делает факторизацию (разложение на обыкновенные множители) числа с опциями.
метод.
Отыскиваем для данного числа обычной множитель при помощи решета Эратосфена[3] (Для нахождения всех обычных чисел не больше данного числа n, следуя способу Эратосфена, необходимо выполнить последующие шаги:
Выписать попорядку все целые числа от 2-ух до n (2, 3, 4, …, n).
Пусть переменная p вначале равна двум — первому обычному числу.
Вычеркнуть из перечня все числа от 2p до n, делящиеся на p (другими словами, числа 2p, 3p, 4p, …)
Отыскать 1-ое не вычеркнутое число, большее чем p, и присвоить значению переменной p это число.
Повторять шаги 3 и 4 до того времени, пока p не станет больше, чем n
Все не вычеркнутые числа в перечне — обыкновенные числа.)
и делим данное число на данный множитель, позже отыскиваем последующий обычной множитель(если он повторяется, то возводим его в степень), и так до того времени, пока число не станет равным единице. Записываем все обыкновенные множители.
Дальше находим все делители числа и составляем из их огромное количество. Вычисляем сумму делителей.
Пример.
Число=21
огромное количество делителей=1 3 7 21
кол-во обычных множителей=2
21=3 ^ 1 * 7 ^ 1
кол-во множителей=4
сумма множителей=32
Испытания.
1.Неправильные данные
2.Корректные данные
2.3 NodNok
Предназначение.
Данная процедура находит НОД и НОК для данной совокупы натурального ряда.
метод.
При помощи метода Евклида (есть числа a,b и последовательность R1>R2>R3>…>RN, где каждое RK — это остаток от деления предпредыдущего числа на предшествующее, а предпоследнее делится на крайнее нацело. Тогда НОД(a,b), больший общий делитель a и b, равен RN, крайнему ненулевому члену данной нам последовательности) находим НОД[4] для первых 2-ух чисел, «цепляем» последующее число для нахождения последующего НОД, и так до того времени, пока совокупа чисел не завершится.
Для нахождения НОК первых 2-ух чисел используем последующий метод: разлагаем данные числа на обыкновенные множители и к одному из таковых разложений приписываем множители недостающие у него против разложений других данных чисел[5], и аналогично нахождению НОД «цепляем» последующее число.
Пример.
Числа: 21 и 12
НОД(12,21)=3
НОК(12,21)=84
Испытания.
1.Неправильные данные
2.Корректные данные
2.4 SuperGorner
Предназначение.
Данная процедура находит оптимальные решения уравнения с целочисленными коэффициентами.
метод.
Оптимальные корешки уравнения ищутся при помощи расширенной схемы(способа) Горнера[6] (раскладываем вольный член и коэффициент перед старшей степенью на все вероятные множители и делим все множители вольного члена на все множители коэффициента перед старшей степенью (добавляем также символ “-”); подставляем приобретенные значения в уравнение, если уравнение выходит равным нулю, то это
Пример.
Уравнение: 6×3-11×2+6x-1=0
Вероятные корешки: +1, +1/2, +1/3, +1/6
Корешки уравнения: 1/3, 1/2, 1
Испытания.
1.Неправильные данные
2.Корректные данные
2.5 Express
Предназначение.
Данная процедура переводит рациональную дробь в цепную[7].
метод.
Делим числитель на знаменатель, запоминаем его целое
Пример.
Рациональная дробь:123/47
Цепная дробь: [2,1,1,1,1,1,1,3]
Испытания.
1.Неправильные данные
2.Корректные данные
2.6 AntiExp
Предназначение.
Данная процедура переводит цепную дробь в рациональную.
метод.
Умножаем крайний элемент цепной дроби с предпоследним и прибавляем к приобретенному значению единицу, это будет значением числителя, значением знаменателя будет крайний элемент цепной дроби, меняем их местами, сейчас крайним элементом цепной дроби будет приобретенный знаменатель; так делаем, пока не завершатся элементы цепной дроби.
Пример.
Цепная дробь: [2,3,4,5]
Рациональная дробь: 157/68
Испытания.
1.Неправильные данные
2.Корректные данные
Заключение
Разработана программка CalcKurs, выполняющая последующие функции:
1.формирование данного подмножества натурального ряда при помощи общего делителя;
2.факторизация числа с опциями;
3.нахождение НОД и НОК для данной совокупы натурального ряда;
4.нахождение оптимальных решений уравнения с целочисленными коэффициентами;
5.методы можно создать наиболее хорошими.
К плюсам можно отнести простоту в использовании программкой, её малую требовательность к ресурсам компа, программка исполняет основополагающие методы теории чисел. Она может посодействовать в исследовании данного раздела арифметики.
Перечень использованных источников
1. HTTP://ru.wikipedia.org/wiki/Теория_чисел
2. http://www.krugosvet.ru/enc/nauka_i_tehnika/matematika/CHISEL_TEORIYA.html
3. http://ru.wikipedia.org/wiki/Решето_Эратосфена
4. HTTP://ru.wikipedia.org/wiki/Наибольший_общий_делитель
5. HTTP://ru.wikipedia.org/wiki/Наименьшее_общее_кратное
6. HTTP://ru.wikipedia.org/wiki/Метод_Горнера
7. http://dic.academic.ru/dic.nsf/es/39322/непрерывная
приложение
Листинг программки
program kurs;
uses crt;
function pow(a,x:longint):longint;
var
t,i:longint;
begin
t:=a;
for i:=1 to x-1 do
t:=t*a;
pow:=t;
end; {pow}
{—————————————-}
procedure DelOstatok;
var
dd:array [1..200] of integer;
R:integer; {размерность чисел}
i:longint; {делитель}
k:longint; {остаток}
D,a,b:longint; {элементы данного огромного количества}
SUM:longint; {кол-во эл-ов, удовл условию}
S,T:byte;
q:char;
e,j,l,n:integer;
maxa,minj,maxj:longint;
begin
repeat
begin
writeln(‘введите ко-во чисел для нахождения НОК делителей’);
readln(n);
writeln(‘введите ‘,n,’ чисел: ‘);
readln(dd[1]);
maxa:=dd[1];
for i:=2 to n do
begin
readln(dd[i]);
if dd[i]>maxa then maxa:=dd[i];
end;
i:=1;while (dd[i]<>0) and (i<=n) do inc(i);
if i<>n+1 then writeln(‘НОК не сущ-ет’)
else begin
e:=1;
for i:=2 to maxa do
begin
maxj:=0;
for l:=1 to n do
begin
j:=0;
while (dd[l] mod i=0) do
begin
dd[l]:=dd[l] div i;
inc(j);
end;
if (j>maxj) then maxj:=j;
end;
if (maxj<>0) then for l:=1 to maxj do e:=e*i;
end;
writeln(‘НОК делителей=’,e);
end;
end;
i:=e;
write (‘введите остаток=’);
readln(k);
if ((i<=0) or (k<0)) then {проверка
{вывод эл-ов на экран}
end; writeln;
end;
writeln(‘Повторить ?(Y/N)’);
q:=ReadKey;
until q in [‘N’,’n’];
clrscr;
end; {DelOstatok}
{—————————————-}
procedure Factor;
var
numb, powers: array [1..100] of longint;
c:longint;
n:longint;
n1,H:longint;
i:longint;
k,t: longint;
q:char;
begin
repeat
write(‘Введите число=’);
readln(c);
if c<=0 then {проверка на корр числа}
begin
writeln(‘число обязано быть>0’);
readln;
exit;
end
else
{вывод мн-ва делителей}
begin
write(‘мн-во делителей: D(num)=’);
for H:= 1 to c do
if c mod H=0 then
write(H,’ ‘);
end;
{конец вывода делителей}
n:= 1;
n1:= 0;
while c <> 1 do
begin
i:= 2;
while c mod i <> 0 do {проверка на делимостьс/без остатка}
Inc(i);
Inc(n1);
if n1 = 1 then
begin
numb[n]:= i;
powers[n]:= 1;
end
else
if numb[n] = i then Inc(powers[n])
else
begin
Inc(n); {повышение кол-ва обычных множителей}
numb[n]:= i;
powers[n]:= 1;
end; {while}
c:= c div i; {деление числа на обычной множитель}
end; {while}
{\\\\}
writeln;
writeln(‘кол-во обычных множителей: ‘,n);
write(‘num = ‘);
k:=1;
t:=1;
writeln(‘НОД=’,k);
if k=1 then writeln(‘числа взаимно обыкновенные’);
end;
begin
i:=1;while (b[i]<>0) and (i<=n) do inc(i);
if i<>n+1 then writeln(‘НОК не сущ-ет’)
else begin
d:=1;
for i:=2 to maxa do
begin
maxj:=0;
for l:=1 to n do
begin
j:=0;
while (b[l] mod i=0) do
begin
b[l]:=b[l] div i;
inc(j);
end;
if (j>maxj) then maxj:=j;
end;
if (maxj<>0) then for l:=1 to maxj do d:=d*i;
end;
writeln(‘НОК=’,d);
end;
end;
end;
writeln(‘Повторить ?(Y/N)’);
q:=ReadKey;
until q in [‘N’,’n’];
clrscr;
end;{NodNok}
{—————————————-}
procedure SuperGorner;
type
Vector= array[1..11] of integer;
rvector=array[1..100] of real;
var
sum,suma:real;
i,k,j,b,c,a,n:integer;
vec:Vector;
vecb:rvector;
veca:rvector;
q:char;
BEGIN
Writeln(‘Введите степень уравнения (max = 10)’);
Readln(n);
if n<=0 then writeln(‘степень не быть может<=0’)
else begin
Inc(n);
writeln(‘введите его коэффициенты:’);
for i := 1 to n do
read(vec[i]);
while vec[i]=0 do
Begin
i:=i-1;
writeln(‘ответ:0’);
End;
k:=1;
b:=vec[i];
for j:=1 to абс(b) do
begin
if (b mod j)=0 then
begin
vecb[k]:=j;
k:=k+1;
procedure AntiExp;
var s: array [1..100] of integer;
a,b,i,n,t:integer;
q:char;
begin
repeat
writeln(‘введите кол-во эл-ов цепной дроби=’);
read(n);
if n<=0 then writeln(‘кол-во эл-ов не быть может<=0’)
else begin
writeln(‘введите значения этих эл-ов=’);
for i:=1 to n do
read(s[i]);
a:=1;b:=s[n];
for i:= n downto 2 do
begin
t:=s[i-1]*b+a;
a:=b;
b:=t;
end;
writeln;
writeln(b,’/’,a);
end;
writeln(‘Повторить ?(Y/N)’);
q:=ReadKey;
until q in [‘N’,’n’];
clrscr;
end;{AntiExp}
{—————————————-}
var
k:integer;
q:char;
begin
writeln(‘Дискретная математика’);
writeln(‘Курсовая работа, группа 03-119, каф308’);
writeln(‘выполнил: Тузов И.И.’);
writeln(‘управляющий: Гридин А.Н.’);
writeln;
writeln(‘Калькулятор с функциями, описанными ниже’);
writeln;
Writeln(‘Нажмите Enter’);
readln;
clrscr;
repeat
writeln(‘Какую выполнить операцию?’);
writeln;
writeln(‘1-вычисление мн-ва N-значных чисел с данным делителем и остатком ‘);
writeln(‘2-факторизация числа’);
writeln(‘3-нахождение НОД и НОК чисел’);
writeln(‘4-нахождение рационльных корней уравнения с целочисл коэфф’);
writeln(‘5-перевод рациональной дроби в цепную’);
writeln(‘6-перевод цепной дроби в рациональную’);
read(k);
делителя и остатка на отриц-сть}
begin
write (‘делитель либо остаток не могут быть<0 ‘);
end
else
begin
if i>k then {проверка на делитель>остатка}
begin
write (‘введите размерность=’);
readln(R);
if R<=0 then
begin
writeln (‘неправильная размерность ‘);
readln;
end
else begin
if R=1 then
begin a:=1; b:=9; end
else begin
a:=pow(10,(R-1)); {инициализация верх и нижн границ}
b:=pow(10,R);
b:=b-1;
end;
end;
if b<i then {проверка на делимое>делителя}
writeln (‘делиоме не быть может < делителя ‘)
else
begin
SUM:=0; {обнуление сумы кол-ва эл-ов}
for D:= a to b do
begin
if (D mod i)=k then {проверка эл-ов на условие}
begin
SUM:=SUM+1;
end;
end;
writeln;
writeln (‘кол-во эл-ов с делителем=’, i:3, ‘ и остатком=’, k:3, ‘ равно’, SUM:6);
end; {b<i}
end {if i>k}
else
write (‘остаток не быть может > делителя ‘);
end; {if otriz}
{\\\\}
write (‘вывести значения на экран?(1-да