Учебная работа. Курсовая работа: Проект разработки программы-калькулятора CalcKurs на языке программирования Pascal

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...
Контрольные рефераты

Учебная работа. Курсовая работа: Проект разработки программы-калькулятора 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-да