Реферат по предмету "Информатика"


Численные методы Программа-калькулятор на Pascal

Задание
Разработать программу-калькулятор CalcKurs на языке программирования Pascal, реализующую следующие функции:
1. формирование заданного подмножества натурального ряда с помощью общего делителя;
2. факторизация числа с опциями;
3. нахождение НОД и НОК для заданной совокупности натурального ряда;
4. нахождение рациональных решений уравнения с целочисленными коэффициентами;
5. представление рациональной дроби в виде цепной;
6. представление цепной дроби в виде рациональной.
Оборудование и ПО:
Название Windows: Windows Seven (6.1.7600) Ultimate
Название процессора: Intel (R) Core (TM) 2 CPU 6300 @ 1.86GHz
Установлено памяти: 1 022,49 MB
Среда программирования: Turbo Pascal 7.0
Оглавление
1. Введение
2. Специальная часть
2.1 Интерфейс программы
3. Описание процедур
3.1 Procedure DelOstatok
3.2 Procedure Factor
3.3 Procedure NodNok
3.4 Procedure SuperGorner
3.5 Procedure Express
3.6 Procedure AntiExp
4. Заключение
Список использованных источников
Приложение
1. Введение
Теория чисел — это одно из направлений математики, которое иногда называют «высшей арифметикой». Данная наука изучает натуральные числа и некоторые сходные с ними объекты, рассматривает различные свойства (делимость, разложимость, взаимосвязи и так далее), алгоритмы поиска чисел, а также определяет ряд достаточно интересных наборов натуральных чисел.
Так, к примеру, в рамках теории чисел рассматриваются вопросы делимости целых чисел друг на друга, алгоритм Евклида для поиска наибольшего общего делителя, поиск наименьшего общего кратного, малая и большая теоремы Ферма. В качестве самых известных рядов натуральных чисел можно привести ряд Фибоначчи, простые числа, совершенные и дружественные числа, степени и суперстепени натуральных чисел. [1]
Вне самой математики теория чисел имеет довольно мало приложений, и развивалась она не ради решения прикладных задач, а как искусство ради искусства, обладающее своей внутренней красотой, тонкостью и трудностью. Тем не менее теория чисел оказала большое влияние на математическую науку, поскольку некоторые разделы математики (в том числе и такие, которые впоследствии нашли применение в физике) были первоначально созданы для решения особенно сложных проблем теории чисел. [2]
Разработанная программа включает в себя набор из нескольких основных операций, которые могут понадобиться при решении более сложных задач.
Назначениепрограммы CalcKurs.
Программа CalcKurs выполняет следующие функции:
1. формирование заданного подмножества натурального ряда с помощью общего делителя;
2. факторизация числа с опциями;
3. нахождение НОД и НОК для заданной совокупности натурального ряда;
4. нахождение рациональных решений уравнения с целочисленными коэффициентами;
5. представление рациональной дроби в виде цепной;
6. представление цепной дроби в виде рациональной.
2. Специальная часть
2.1 Интерфейс программы
/>
/>
3. Описание процедур
3.1 Procedure DelOstatok
Назначение.
Данная процедура формирует заданное подмножество натурального ряда с помощью общего делителя.
Алгоритм.
Ищется общий делитель совокупности делителей (общий делитель ищется с помощью нахождения наименьшего общего кратного делителей). На заданном множестве (кол-во цифр в числах) ищем первый элемент, который будет удовлетворять заданному условию (делится на НОК с остатком), запоминаем элемент и прерываем цикл.
Формируем подмножество с помощью прибавления к первому элементу делителя, суммируем количество элементов, пока элементы не станут больше заданной размерности.
Пример. Делитель=10, остаток=3, размерность=2 (от 10 до 99)
Количество элементов=9. Подмножество элементов={13, 23, 33, 43, 53, 63, 73, 83, 93}. Тесты.
1. Некорректные данные
/>
2. Корректные данные
/>
3.2 Procedure Factor
Назначение.
Данная процедура выполняет факторизацию (разложение на простые множители) числа с опциями.
Алгоритм.
Ищем для данного числа простой множитель с помощью решета Эратосфена[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. Корректные данные
/>
3.3 Procedure NodNok
Назначение.
Данная процедура находит НОД и НОК для заданной совокупности натурального ряда.
Алгоритм.
С помощью алгоритма Евклида (есть числа a,b и последовательность R1>R2>R3>…>RN, где каждое RK — это остаток от деления предпредыдущего числа на предыдущее, а предпоследнее делится на последнее нацело. Тогда НОД (a,b), наибольший общий делитель a и b, равен RN, последнему ненулевому члену этой последовательности) находим НОД[4] для первых двух чисел, «цепляем» следующее число для нахождения следующего НОД, и так до тех пор, пока совокупность чисел не закончится.
Для нахождения НОК первых двух чисел используем следующий алгоритм: разлагаем данные числа на простые множители и к одному из таких разложений приписываем множители недостающие у него против разложений остальных данных чисел[5], и аналогично нахождению НОД «цепляем» следующее число.
Пример.
Числа: 21 и 12
НОД (12,21) =3
НОК (12,21) =84
Тесты.
1. Некорректные данные
/>
2. Корректные данные
3.4 Procedure SuperGorner
Назначение.
Данная процедура находит рациональные решения уравнения с целочисленными коэффициентами.
Алгоритм.
Рациональные корни уравнения ищутся с помощью расширенной схемы (метода) Горнера[6] (раскладываем свободный член и коэффициент перед старшей степенью на все возможные множители и делим все множители свободного члена на все множители коэффициента перед старшей степенью (добавляем также знак “-”); подставляем полученные значения в уравнение, если уравнение получается равным нулю, то это значение — корень данного уравнения).
Пример. Уравнение: 6x3-11x2+6x-1=0
Возможные корни: +1, +1/2, +1/3, +1/6
Корни уравнения: 1/3, 1/2, 1
Тесты.
1. Некорректные данные
/>
2. Корректные данные
/>
3.5 Procedure Express
Назначение.
Данная процедура переводит рациональную дробь в цепную[7].
Алгоритм.
Делим числитель на знаменатель, запоминаем его целое значение (a div b, где а — числитель, b — знаменатель), находим остаток от деления числителя на знаменатель (a mod b), присваиваем числителю значение остатка, меняем местами числитель и знаменатель, и так делаем до тех пор, пока (a mod b) не станет равен нулю.
Пример.
Рациональная дробь: 123/47
Цепная дробь: [2,1,1,1,1,1,1,3]
Тесты.
1. Некорректные данные
/>
2. Корректные данные
/>
3.6 Procedure AntiExp
Назначение.
Даннаяпроцедурапереводит цепную дробь в рациональную.
Алгоритм.
Умножаем последний элемент цепной дроби с предпоследним и прибавляем к полученному значению единицу, это будет значением числителя, значением знаменателя будет последний элемент цепной дроби, меняем их местами, теперь последним элементом цепной дроби будет полученный знаменатель; так делаем, пока не закончатся элементы цепной дроби.
Пример. Цепная дробь: [2,3,4,5]. Рациональная дробь: 157/68
Тесты.
1. Некорректные данные
/>
2. Корректные данные
/>
4. Заключение
Разработана программа CalcKurs, выполняющая следующие функции:
1. формирование заданного подмножества натурального ряда с помощью общего делителя;
2. факторизация числа с опциями;
3. нахождение НОД и НОК для заданной совокупности натурального ряда;
4. нахождение рациональных решений уравнения с целочисленными коэффициентами;
5. представление рациональной дроби в виде цепной;
6. представление цепной дроби в виде рациональной.
К минусам программы можно отнести невысокую размерность чисел, которые участвуют в вычислениях (-2147483648. .2147483647), некоторые алгоритмы можно сделать более оптимальными.--PAGE_BREAK--
К плюсам можно отнести простоту в пользовании программой, её малую требовательность к ресурсам компьютера, программа исполняет основополагающие алгоритмы теории чисел. Она может помочь в изучении данного раздела математики.
Список использованных источников
ru. wikipedia.org/wiki/Теория_чисел
www.krugosvet.ru/enc/nauka_i_tehnika/matematika/CHISEL_TEORIYA.html
ru. wikipedia.org/wiki/Решето_Эратосфена
ru. wikipedia.org/wiki/Наибольший_общий_делитель
ru. wikipedia.org/wiki/Наименьшее_общее_кратное
ru. wikipedia.org/wiki/Метод_Горнера
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
if in+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 (maxj0) then for l: =1 to maxj do e: =e*i;
end;
writeln ('НОК делителей=',e);
end;
end;
i: =e;
write ('введитеостаток=');
readln (k);
if ( (i
{вывод эл-ов на экран}
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
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
if in+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 (maxj0) 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
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 abs (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
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 ('делитель или остаток не могут быть
end
else
begin
if i>k then {проверканаделитель>остатка}
begin
write ('введите размерность=');
readln (R);
if R
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делителя}
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
end {if i>k}
else
write ('остаток не может быть > делителя ');
end; {if otriz}
{\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\}
write ('вывести значения на экран? (1-да\0-нет) ');
readln (S);
if S=1 then
if SUM=0 then
writeln ('нет эл-ов, удовл. условию')
else
begin
for D: = a to b do
if (D mod i) =k then
begin
write (' ',D: 4);
{вычисление кол-ва делителей и их мн-ва}
for i: = 1 to n do
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 i n then write (' * ');
end;
writeln;
writeln ('кол-вомножителей: tau (num) =',t);
writeln ('суммамножителей: sigma (num) =',k);
writeln ('Повторить? (Y/N) ');
q: =ReadKey;
until q in ['N','n'] ;
clrscr;
end; {Factor}
{----------------------------------------}
procedure NodNok;
type TArray=array [1.200] of integer;
var a,b: TArray;
i,l,j,maxa,minj,maxj: longint;
k,d: longint;
n: integer;
q: char;
begin
repeat
clrscr;
writeln ('введите ко-во чисел для нахождения НОД и НОК');
readln (n);
writeln ('введите ',n,' чисел: ');
if n
else begin
readln (a [1]);
b [1]: =a [1] ;
maxa: =a [1] ;
for i: =2 to n do
begin
readln (a [i]);
b [i]: =a [i] ;
if a [i] >maxa then maxa: =a [i] ;
end;
i: =1;
while (a [i] =0) and (i
if i=n+1 then writeln ('НОД— любоечисло')
else begin
for j: =1 to n do if a [j] =0 then a [j]: =a [i] ;
k: =1;
for i: =2 to maxa do
begin
minj: =1000;
for l: =1 to n do
begin
j: =0;
while (a [l] mod i=0) do
begin
a [l]: =a [l] div i;
inc (j);
end;
if (j
end;
if (minj0) then for l: =1 to minj do k: =k*i;
end;
vecb [k]: =-j;
k: =k+1;
end;
end;
a: =1;
for j: =1 to abs (vec [1]) do
begin
if (vec [1] mod j) =0 then
begin
veca [a]: =j;
a: =a+1;
{ veca [a]: =-j;
a: =a+1; }
End;
end;
b: =a;
for j: =1 to k-1 do
Begin
for a: =1 to b-1 do
Begin
Begin
c: =i;
sum: =0;
for i: =1 to c do
Begin
sum: =sum+vec [i] *pow1 (vecb [j] /veca [a],c-i);
if (sum-0.00001) then
if vec [a] =1 then writeln ('ответ: ',round (vecb [j]))
else writeln ('ответ: ',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);
if b=0 then writeln (‘знаменатель не может быть=0’)
else begin
write (' [');
while (a mod b>0) do
begin
write (a div b,',');
a: =a mod b;
t: =b;
b: =a;
a: =t;
end;
write (a div b, '] ');
end;
writeln (‘Повторить? (Y/N) ');
q: =ReadKey;
until q in ['N','n'] ;
clrscr;
end; {Express}
{----------------------------------------}
case k of
1: DelOstatok;
2: Factor;
3: NodNok;
4: SuperGorner;
5: Express;
6: AntiExp;
else
writeln ('нетоперации');
end; {case}
writeln ('Повторить выполнение калькулятора? (Y/N) ');
q: =ReadKey;
until q in ['N','n'] ;
clrscr;
readln;
end. {prog}

    продолжение
--PAGE_BREAK--


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.