Pascal
Версия от 11:39, 21 февраля 2010; Den (обсуждение | вклад)
Стандартные программы для реализации алгоритмов на языке Pascal
Содержание
[убрать]- 1 Функция для определения принадлежности числа к простым:
- 2 Функция для определения наибольшего общего делителя:
- 3 Работа с текстовыми файлами. Чтение и запись:
- 4 Перевод числа из десятичной системы исчисления в систему исчисления с основанием m:
- 5 Перевод числа из системы исчисления с основанием m в десятичную систему:
- 6 Длинная арифметика
Функция для определения принадлежности числа к простым:
Function Prime(n:longint):boolean; var p,i:longint; b:boolean; begin b:=true; if (n=1) or ((n>3) and (n mod 2=0)) then b:=false else begin p:=trunc(sqrt(n)); i:=3; While (i<=p) and b do begin b:=n mod i<>0; i:=i+2; end; end; Prime:=b; end;
Функция для определения наибольшего общего делителя:
Function GCD(a,b:longint):longint; var x,y:longint; begin x:=a; y:=b; While x<>y do if x>y then x:=x-y else y:=y-x; GCD:=x; end;
Работа с текстовыми файлами. Чтение и запись:
var f1,f2:text; sum,a,b:integer; begin Assign(f1,'input.dat'); Assign(f2,'output.sol'); Rewrite(f2); Reset(f1); Read(f1, a); Read(f1, b); close(f1); sum:=a+b; Write(f2, sum); close(f2); end.
Перевод числа из десятичной системы исчисления в систему исчисления с основанием m:
program Сonversion; uses SysUtils; const nmax=1000000000; var i,v,x,m,j:integer; a:array[1..nmax] of byte; begin i:=0; ReadLn(x,m); {Вводим число x которое необходимо перевести в систему исчисления с основанием m} v:=x; While v>0 do begin inc(i); a[i]:=v mod m; v:=v div m end; Write(x,' in the calculus of reason ',m,' = '); for j:=i downto 1 do Write(a[j]); ReadLn; end.
Перевод числа из системы исчисления с основанием m в десятичную систему:
program OppositeToConversion; uses SysUtils; Function Power(x,n:integer):integer; {функция для возведения в степень n числа x} var p,i:integer; begin if n=0 then Power:=1 else begin p:=x; for i:=2 to n do p:=p*x; Power:=p; end; end; var st:string; i,v,sum,m:integer; a:array[1..1000000] of byte; begin ReadLn(st); ReadLn(m); v:=length(st); for i:=1 to v do a[v-i+1]:=StrToInt(st[v-i+1]); sum:=0; for i:=1 to v do sum:=sum+Power(m,i-1)*a[v-i+1]; WriteLn(sum); ReadLn; end.
Длинная арифметика
Длинная арифметика - раздел программирования позволяющий удобно работать с числами которые не могут быть помещены в стандартные типы языка. Ниже представлен код программы реализующий сложение двух чисел, длина которых ограничивается только оперативной памятью. По анологии с этой программой, могут быть решены задачи умножения, деления, возведения в степень, получение факториала больших чисел.
program A+B; var s1,s2:string; a,b:array[1..100] of integer; len,i,c:integer; f1,f2:text; begin Assign(f1,'INPUT.TXT'); Reset(f1); Assign(f2,'OUTPUT.TXT'); ReWrite(f2); c:=0; ReadLn(f1,s1); ReadLn(f1,s2); close(f1); len:=length(s1); {разбиение строк в елементы массивов} for i:=1 to len do a[len-i+1]:=Ord(s1[i])-48; len:=length(s2); for i:=1 to len do b[len-i+1]:=Ord(s2[i])-48; if length(s1)>length(s2) then len:=length(s1) else len:=length(s2); for i:=1 to len do begin c:=c+a[i]+b[i]; {переменная ''c'' будет в дальнейшем использоваться для переноса числа в следующия ряд} a[i]:=c mod 10; {результат сложения запишем в массив ''а''} c:=c div 10; end; if c>0 then begin len:=len+1; a[len]:=c; end; for i:=len downto 1 do {вывод результата в файл} Write(f2,a[i]); close(f2); end.