Pascal — различия между версиями

Материал из synset
Перейти к: навигация, поиск
Строка 2: Строка 2:
  
  
== Наиболее оптимальная функция нахождения простых чисел  ==
+
== Функция для определения простых чисел  ==
 
<pre class="brush:pascal; gutter: false;">
 
<pre class="brush:pascal; gutter: false;">
 
Function Prime(n:longint):boolean;
 
Function Prime(n:longint):boolean;
Строка 26: Строка 26:
 
</pre>
 
</pre>
  
 +
== Функция для определения наибольшего общего делителя: ==
  
 +
<pre class="brush:pascal; gutter: false;">
 +
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;
 +
</pre>
 
== Работа с текстовыми файлами. Чтение и запись: ==
 
== Работа с текстовыми файлами. Чтение и запись: ==
 
   
 
   

Версия 19:30, 16 февраля 2010

Станадартные программы для реализации алгоритмов на языке Pascal


Функция для определения простых чисел

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.

--Den 19:09, 16 февраля 2010 (UTC)