Реферати українською » Информатика, программирование » Проект розробки програми-калькулятора CalcKurs на мові програмування Pascal


Реферат Проект розробки програми-калькулятора CalcKurs на мові програмування Pascal

МОСКОВСЬКИЙАВИАЦИОННЫЙ ІНСТИТУТ (МАІ)

ДЕРЖАВНИЙТЕХНИЧЕСКИЙ УНІВЕРСИТЕТ

Факультет «СИСТЕМИ УПРАВЛІННЯ,ИНФОРМАТИКА ІЭЛЕКТРОЭНЕРГЕТИКА»

Кафедра 308 «Інформаційні технології»

>Пояснительная записка до курсової роботі

з дисципліни: «Теорія чисел»

>Виполнил:Тузов І.І.

Група 03-119

Керівник: доцент,к.т.н.Гридин О.Н.

Москва 2010


>Оглавление

Завдання

>Оглавление

Запровадження

1. Інтерфейс програми

2. Опис процедур

2.1DelOstatok

2.2Factor

2.3NodNok

2.4SuperGorner

2.5 Express

2.6AntiExp

Укладання

Список використаних джерел

Додаток

>Листинг програми


Завдання

Розробитипрограмму-калькуляторCalcKurs мовою програмуванняPascal, реалізуючу такі функції:

>1.формирование заданого підмножини натурального низки з допомогою загального дільника;

>2.факторизация числа з опціями;

>3.нахождениеНОД і НОК для заданої сукупності натурального низки;

>4.нахождение раціональних рішень рівняння зцелочисленними коефіцієнтами;

>5.представление раціональної дробу як ланцюгової;

>6.представление ланцюгового дробу як раціональної.

Обладнання ГЕС і ПО:

Назва Windows: Windows Seven (6.1.7600)Ultimate

Назва процесора:Intel(R)Core(TM)2CPU 6300 @1.86GHz

Встановлено пам'яті: 1 022,49 MB

Середовище програмування: TurboPascal 7.0


Запровадження

Теорія чисел — це один напрям математики, яке називають «вищої арифметикою». Ця наука вивчає натуральні числа і пояснюються деякі подібні до ними об'єкти, розглядає різні властивості (подільність, розчинність, взаємозв'язок харчування та таке інше), алгоритми пошуку чисел, і навіть визначає ряд досить цікавих наборів натуральних чисел.

Так, приміром, у межах теорії чисел розглядаються питання подільності цілих чисел друг на друга, алгоритм Евкліда на допомогу пошуку найбільшого загального дільника, пошук найменшого загального кратного, мала і велика теореми Ферма. Як найвідоміших рядів натуральних чисел можна навести ряд Фібоначчі, прості числа, скоєні дружні числа, ступені тасуперстепени натуральнихчисел.[1]

Поза самої математики теорія чисел має досить мало додатків, і розвивалася вона заради розв'язання прикладних завдань, бо як мистецтво заради мистецтва, що має своїм внутрішнім красою, тонкощами і труднощами. Проте теорія чисел справила великий вплив на математичну науку, оскільки розділи математики (зокрема і ті, що згодом застосовуються у фізиці) були спочатку створено рішення особливо складних проблем теоріїчисел.[2]

Розроблена програма включає у собі набір з кількох основних операцій, що потенційно можуть знадобитися під час вирішення складніших завдань.

Призначення програмиCalcKurs.

ПрограмаCalcKurs виконує такі функції:

>1.формирование заданого підмножини натурального низки з допомогою загального дільника;

>2.факторизация числа з опціями;

>3.нахождениеНОД і НОК для заданої сукупності натурального низки;

>4.нахождение раціональних рішень рівняння зцелочисленними коефіцієнтами;

>5.представление раціональної дробу як ланцюгової;

>6.представление ланцюгового дробу як раціональної.


1. Інтерфейс програми


2. Опис процедур

2.1DelOstatok

Призначення.

Ця процедура формує заданий підмножина натурального низки з допомогою загального дільника.

Алгоритм.

>Ищется загальний дільник сукупностіделителей (загальний дільник шукається з допомогою перебування найменшого загального кратногоделителей). На заданому безлічі (у цифр в числах) шукаємо перший елемент, що задовольнятиме заданому умові (ділиться на НОК із залишком), запам'ятовуємо елемент і перериваємо цикл.

Формуємо підмножина з допомогою поповнення до першого елементу дільника, підсумуємо кількість елементів, поки елементи стануть більше заданої розмірності.

Приклад.

>Делитель=10,остаток=3,размерность=2 (від 10 до 99)

Кількістьелементов=9

>Подмножествоелементов={13, 23, 33, 43, 53, 63, 73, 83, 93}

Тести.

>1.Некорректние дані


>2.Корректние дані

2.2Factor

Призначення.

Ця процедура виконуєфакторизацию (розкладання на прості множники) числа з опціями.

Алгоритм.

Шукаємо для даного числа простий множник з допомогою решетаЭратосфена[3] (Для перебування всіх простих чисел максимум заданого числа n, слідуючи методуЭратосфена, треба зробити такі кроки:

Виписати підряд усі цілі числа від двох до n (2, 3, 4, …, n).

Нехай зміннаp спочатку дорівнює двом — першому простому числу.

>Вичеркнуть зі списку все числа від2p до n, діляться наp (тобто, числа2p,3p,4p, …)

Знайти перше невичеркнутое число, більше ніжp, і привласнити значенням перемінноїp їх кількість.

Повторювати кроки 3 і 4 до того часу, покиp стане більше, ніж n

Не викреслені вересня списку — прості числа.)

і ділимо заданий число даний множник, потім шукаємо таке простемножитель(если він повторюється, то будуємо їх у ступінь), й дуже до того часу, поки число стане рівним одиниці.Записиваем все прості множники.

Далі знаходимо вседелители числа і складаємо їх безліч.Вичисляем сумуделителей.

Приклад.

>Число=21

безлічделителей=1 3 7 21

у простихмножителей=2

21=3 ^ 1 * 7 ^ 1

умножителей=4

сумамножителей=32

Тести.

>1.Некорректние дані

>2.Корректние дані


2.3NodNok

Призначення.

Ця процедура знаходитьНОД і НОК для заданої сукупності натурального низки.

Алгоритм.

З допомогою алгоритму Евкліда (є числаa,b і послідовністьR1>R2>R3>…>RN, де кожнаRK - це залишок від розподілупредпредидущего числа на попереднє, а передостаннє ділиться на останнєнацело. ТодіНОД(a,b), найбільший загальний дільник a і b, дорівнюєRN, останньомуненулевому члену цієї послідовності) знаходимоНОД[4] для у перших двох чисел, «>цепляем» таке число перебування наступногоНОД, й дуже до того часу, поки сукупність чисел не закінчиться.

Для перебування НОК у перших двох чисел використовуємо наступний алгоритм: розкладаємо дані числа на прості множники і до жодного з таких розкладань приписуємо множники відсутні в нього проти розкладань інших данихчисел[5], і аналогічно віднайденнюНОД «>цепляем» таке число.

Приклад.

>Числа: 21 та дванадцяти

>НОД(12,21)=3

>НОК(12,21)=84

Тести.

>1.Некорректние дані


>2.Корректние дані

2.4SuperGorner

Призначення.

Ця процедура знаходить раціональні рішення рівняння зцелочисленними коефіцієнтами.

Алгоритм.

Раціональні коріння рівняння шукаються з допомогою розширенійсхеми(метода)Горнера[6] (розкладаємо вільний член і коефіцієнт перед старшої ступенем попри всі можливі множники і ділимо все множники вільного члена попри всі множники коефіцієнта перед старшої ступенем (додаємо також знак “-”); підставляємо отримані значення рівняння, якщо рівняння виходить рівним нулю, це значення – корінь даного рівняння).

Приклад.

>Уравнение:6x3-11x2+6x-1=0

Можливі коріння: +1, +1/2, +1/3, +1/6

Коріння рівняння: 1/3, 1/2, 1

Тести.

>1.Некорректние дані

>2.Корректние дані

2.5 Express

Призначення.

Ця процедура переводить раціональну дріб вцепную[7].

Алгоритм.

Ділимо чисельник на знаменник, запам'ятовуємо його ціле значення (adiv b, де а – чисельник, b - знаменник), знаходимо залишок від розподілу чисельника на знаменник (amod b), привласнюємо чисельника значення залишку, змінюємо місцями чисельник і знаменник, й дуже робимо до того часу, поки (amod b) стане нульовий.

Приклад.

>Рациональнаядробь:123/47

Ланцюгова дріб: [2,1,1,1,1,1,1,3]

Тести.

>1.Некорректние дані

>2.Корректние дані


2.6AntiExp

Призначення.

Ця процедура переводить ланцюгову дріб в раціональну.

Алгоритм.

Множимо останній елемент ланцюгового дробу з передостаннім і плюсуємо до одержаному значенням одиницю, це завжди буде значенням чисельника, значенням знаменника буде останній елемент ланцюгового дробу, змінюємо їх місцями, тепер останнім елементом ланцюгового дробу буде отриманий знаменник; так робимо, доки закінчаться елементи ланцюгового дробу.

Приклад.

Ланцюгова дріб: [2,3,4,5]

>Рациональная дріб: 157/68

Тести.

>1.Некорректние дані


>2.Корректние дані


Укладання

Розроблено програмуCalcKurs, виконує такі функції:

>1.формирование заданого підмножини натурального низки з допомогою загального дільника;

>2.факторизация числа з опціями;

>3.нахождениеНОД і НОК для заданої сукупності натурального низки;

>4.нахождение раціональних рішень рівняння зцелочисленними коефіцієнтами;

>5.представление раціональної дробу як ланцюгової;

>6.представление ланцюгового дробу як раціональної.

До мінусів програми можна віднести невисоку розмірність чисел, які беруть участь у обчисленнях (-2147483648..2147483647), деякі алгоритми можна зробити більш оптимальними.

До плюсів можна віднести простоту в користуванні програмою, її малу вимогливість до ресурсів комп'ютера, програма виконує основні алгоритми теорії чисел. Вона може допомогти до вивчення даного розділу математики.


Список використаних джерел

1.ru.wikipedia.org/wiki/Теория_чисел

2.krugosvet/enc/nauka_i_tehnika/matematika/CHISEL_TEORIYA.html

3.ru.wikipedia.org/wiki/Решето_Эратосфена

4.ru.wikipedia.org/wiki/Наибольший_общий_делитель

5.ru.wikipedia.org/wiki/Наименьшее_общее_кратное

6.ru.wikipedia.org/wiki/Метод_Горнера

7.dic.academic/dic.nsf/es/39322/непреривная


Додаток

>Листинг програми

>programkurs;

>usescrt;

>functionpow(a,x:longint):longint;

>var

>t,i:longint;

>begin

>t:=a;

>fori:=1 tox-1do

>t:=t*a;

>pow:=t;

end; {>pow}

{----------------------------------------}

>procedureDelOstatok;

>var

>dd:array [1..200] ofinteger;

>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];

>fori:=2 to ndo

>begin

>readln(dd[i]);

>ifdd[i]>maxathenmaxa:=dd[i];

end;

>i:=1;while (>dd[i]<>0) and (>i<=n)doinc(i);

>ifi<>n+1thenwriteln('НОК несущ-ет')

>elsebegin

>e:=1;

>fori:=2 tomaxado

>begin

>maxj:=0;

>forl:=1 to ndo

>begin

>j:=0;

>while (>dd[l]modi=0)do

>begin

>dd[l]:=dd[l]div і;

>inc(j);

end;

>if (>j>maxj)thenmaxj:=j;

end;

>if (>maxj<>0)thenforl:=1 tomaxjdoe:=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;

>untilq in ['>N','n'];

>clrscr;

end; {>DelOstatok}

{----------------------------------------}

>procedureFactor;

>var

>numb,powers:array [1..100] oflongint;

>c:longint;

>n:longint;

>n1,H:longint;

>i:longint;

>k,t:longint;

>q:char;

>begin

>repeat

>write('Введите число=');

>readln(c);

>ifc<=0then {перевірка на кор числа}

>begin

>writeln('число маєбить>0');

>readln;

exit;

end

>else

{висновокмн-ваделителей}

>begin

>write('мн-воделителей:D(num)=');

>for H:= 1 to зdo

>if зmodH=0then

>write(H,' ');

end;

{кінець виведенняделителей}

n:= 1;

>n1:= 0;

>while з <> 1do

>begin

і:= 2;

>while зmod і <> 0do {перевірка наделимостьс/без залишку}

>Inc(i);

>Inc(n1);

>ifn1 = 1then

>begin

>numb[n]:= і;

>powers[n]:= 1;

end

>else

>ifnumb[n] = іthenInc(powers[n])

>else

>begin

>Inc(n); {збільшеннякол-ва простих множників}

>numb[n]:= і;

>powers[n]:= 1;

end; {>while}

з:= зdiv і; {розподіл числа простий множник}

end; {>while}

{\\\\\\\\\}

>writeln;

>writeln('кол-во простих множників: ',n);

>write('num = ');

>k:=1;

>t:=1;

>writeln('НОД=',k);

>ifk=1thenwriteln('числа взаємно прості');

end;

>begin

>i:=1;while (>b[i]<>0) and (>i<=n)doinc(i);

>ifi<>n+1thenwriteln('НОК несущ-ет')

>elsebegin

>d:=1;

>fori:=2 tomaxado

>begin

>maxj:=0;

>forl:=1 to ndo

>begin

>j:=0;

>while (>b[l]modi=0)do

>begin

>b[l]:=b[l]div і;

>inc(j);

end;

>if (>j>maxj)thenmaxj:=j;

end;

>if (>maxj<>0)thenforl:=1 tomaxjdod:=d*i;

end;

>writeln('НОК=',d);

end;

end;

end;

>writeln('Повторить ?(>Y/N)');

>q:=ReadKey;

>untilq in ['>N','n'];

>clrscr;

>end;{NodNok}

{----------------------------------------}

>procedureSuperGorner;

>type

>vector=array[1..11] ofinteger;

>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);

>ifn<=0thenwriteln(‘степень неспроможнабить<=0’)

>elsebegin

>Inc(n);

>writeln('введите його коефіцієнти:');

>for і := 1 to ndo

>read(vec[i]);

>whilevec[i]=0do

>Begin

>i:=i-1;

>writeln('ответ:0');

End;

>k:=1;

>b:=vec[i];

>forj:=1 toabs(b)do

>begin

>if (bmodj)=0then

>begin

>vecb[k]:=j;

>k:=k+1;

>procedureAntiExp;

>vars:array [1..100] ofinteger;

>a,b,i,n,t:integer;

>q:char;

>begin

>repeat

>writeln('введите уел-ов ланцюгового дробу=');

>read(n);

>ifn<=0thenwriteln(‘кол-воел-ов неспроможнабить<=0’)

>elsebegin

>writeln('введите значення цихел-ов=');

>fori:=1 to ndo

>read(s[i]);

>a:=1;b:=s[n];

>for і:= ndownto 2do

>begin

>t:=s[i-1]*b+a;

>a:=b;

>b:=t;

end;

>writeln;

>writeln(b,'/',a);

end;

>writeln('Повторить ?(>Y/N)');

>q:=ReadKey;

>untilq 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

>ifi>kthen {перевірка наделитель>остатка}

>begin

>write ('введіть розмірність=');

>readln(R);

>ifR<=0then

>begin

>writeln ('некоректна розмірність ');

>readln;

end

>elsebegin

>ifR=1then

>begina:=1;b:=9; end

>elsebegin

>a:=pow(10,(R-1)); {ініціалізація гору інижн кордонів}

>b:=pow(10,R);

>b:=b-1;

end;

end;

>ifb<ithen {перевірка наделимое>делителя}

>writeln ('>делиоме може бути < дільника ')

>else

>begin

>SUM:=0; {обнуління сумикол-ваел-ов}

>for D:= a to bdo

>begin

>if (Dmodi)=kthen {перевіркаел-ов на умова}

>begin

>SUM:=SUM+1;

end;

end;

>writeln;

>writeln ('уел-ов зделителем=',i:3, ' і залишком=',k:3, ' одно',SUM:6);

end; {>b<i}

end {>ifi>k}

>else

>write ('залишок може бути > дільника ');

end; {>ifotriz}

{\\\\\\\\}

>write ('вивести значення наекран?(1-да[fde_1328386681_3388661218_1328386681_1182638863_2178]-нет)');

>readln(S);

>ifS=1then

>ifSUM=0then

>writeln('нетел-ов,удовл. умові')

>else

>begin

>for D:= a to bdo

>if (Dmodi)=kthen

>begin

>write(' ',>D:4);

{обчисленнякол-ваделителей та йогомн-ва}

>for і:= 1 to ndo

>begin

>write(numb[i], ' ^ ',powers[i]);

>k:=k*((pow(numb[i],powers[i]+1) - 1)div (>numb[i] - 1));

>t:=t*(powers[i]+1); {уделителей}

>if і <> nthenwrite(' * ');

end;

>writeln;

>writeln('кол-во множників:tau(num)=',t);

>writeln('сумма множників:sigma(num)=',k);

>writeln('Повторить ?(>Y/N)');

>q:=ReadKey;

>untilq in ['>N','n'];

>clrscr;

>end;{Factor}

{----------------------------------------}

>procedureNodNok;

>typeTArray=array [1..200] ofinteger;

>vara,b:TArray;

>i,l,j,maxa,minj,maxj:longint;

>k,d:longint;

>n:integer;

>q:char;

>begin

>repeat

>clrscr;

>writeln('введитеко-во чисел перебуванняНОД і НОК');

>readln(n);

>writeln('введите ',n,' чисел: ');

>ifn<=0thenwriteln(‘кол-во чисел неспроможнабить<=0’)

>elsebegin

>readln(a[1]);

>b[1]:=a[1];

>maxa:=a[1];

>fori:=2 to ndo

>begin

>readln(a[i]);

>b[i]:=a[i];

>ifa[i]>maxathenmaxa:=a[i];

end;

>i:=1;

>while (>a[i]=0) and (>i<=n)doinc(i);

>ifi=n+1thenwriteln('НОД – будь-яке число')

>elsebegin

>forj:=1 to ndoifa[j]=0thena[j]:=a[i];

>k:=1;

>fori:=2 tomaxado

>begin

>minj:=1000;

>forl:=1 to ndo

>begin

>j:=0;

>while (>a[l]modi=0)do

>begin

>a[l]:=a[l]div і;

>inc(j);

end;

>if (>j<minj)thenminj:=j;

end;

>if (>minj<>0)thenforl:=1 tominjdok:=k*i;

end;

>vecb[k]:=-j;

>k:=k+1;

end;

end;

>a:=1;

>forj:=1 toabs(vec[1])do

>begin

>if (>vec[1]modj)=0then

>begin

>veca[a]:=j;

>a:=a+1;

{veca[a]:=-j;

>a:=a+1;}

End;

end;

>b:=a;

>forj:=1 tok-1do

>Begin

>fora:=1 tob-1do

>Begin

>Begin

>c:=i;

>sum:=0;

>fori:=1 to зdo

>Begin

>sum:=sum+vec[i]*pow1(vecb[j]/veca[a],c-i);

>if (>sum<0.00001) and (>sum>-0.00001)then

>ifvec[a]=1thenwriteln('ответ:',round(vecb[j]))

>elsewriteln('ответ:',round(vecb[j]), '/',>round(veca[a]));

end;

End;

End;

End; end;

>readln;

>end;{SuperGorner}

{----------------------------------------}

>procedure Express;

>var

>a,b,t:integer;

>q:char;

>begin

>repeat

>writeln('введите чисельник=');

>readln(a);

>writeln('введите знаменник=');

>readln(b);

>ifb=0thenwriteln(‘знаменатель неспроможнабить=0’)

>elsebegin

>write('[');

>while (amodb>0)do

>begin

>write(adiv b,',');

>a:=amod b;

>t:=b;

>b:=a;

>a:=t;

end;

>write(adiv b, ']');

end;

>writeln(‘Повторить ?(>Y/N)');

>q:=ReadKey;

>untilq in ['>N','n'];

>clrscr;

>end;{Express}

{----------------------------------------}

>casek of

>1:DelOstatok;

>2:Factor;

>3:NodNok;

>4:SuperGorner;

>5:Express;

>6:AntiExp;

>else

>writeln ('немає операції');

>end;{case}

>writeln('Повторить виконання калькулятора ?(>Y/N)');

>q:=ReadKey;

>untilq in ['>N','n'];

>clrscr;

>readln;

>end.{prog}


Схожі реферати:

Навігація