• Нахождение минимума и максимума двух, трех, четырех данных чисел без использования массивов и циклов.

read(a, b,c, d);

min:=a;

if (min>b) then min:=b;

if (min>c) then min:=c;

if (min>d) then min:=d;

• Нахождение всех корней заданного квадратного уравнения.

read(a, b,c);// решаем уравнение вида ax**2+bx+c=0

if (a=0) then

  if (b<>0) then begin //если а=0 останется уравнение bx+с=0

  x:=c/b; write(‘x=’,x:0:4);

  end

  else begin // если а=0 и b=0 останется уравнение с=0

  if c=0 then write(‘решений бесконечное множество’)

  else write(‘решения нет’)

  end

  else begin

  d:=b*b-4*a*c;

  if (d>0) then begin

  x1:=(-b+sqrt(d))/2/a;

  x1:=(-b-sqrt(d))/2/a;

  write(‘x1=’,x1:0:4,‘, x2=’,x2:0:4);

  end

  else

  if d<0 then

  write (‘решения в действительных числах нет’)

  else begin

  x:=-b/(2*a);

  write(‘x=’,x:0:4);

  end;

  end;

• Нахождение наибольшего общего делителя двух натуральных чисел (алгоритм Евклида).

read(a, b);

{1}

while a<>b do

  if a>b then a:=a-b else b:=b-a;

nod:=a;

{2}

if a=b then nod:=a

else

while a=0 do

  if a>b then begin

  a:=a mod b;

  nod:=b;

  end

  else begin

  b:=b mod a;

  nod:=a;

  end;

//наименьшее общее кратное

Nok:=a*b;

НЕ нашли? Не то? Что вы ищете?

while a<>b do

  if a>b then a:=a-b else b:=b-a;

nod:=a;

nok:=nok/nod;

• Запись натурального числа в позиционной системе с основанием меньшим или равным 10. Обработка и преобразование такой записи числа.

//перевод десятичного числа в р-ичную систему счисления

read(a, p); //a – десятичное число, p<10 – основание системы

q:=’’;

while a>0 do

begin

  b:=a mod p;

  a:=a div p;

  str(b, s); //собираем число в строку q

  q:=s+q;

end;

write(q);

//перевод числа из р-ичной системе счисления в десятичную

read(p, q);

{1}

a:=0;

for i:=1 to length(q) do begin

  a:=a*p+(ord(q[i])-ord(‘0’)); //схема Горнера

end;

{2}

a:=0;

b:=1;

for i:=length(q) downto 1 do begin

  val(q[i],z, code);

  a:=a+z*b; //развернутая форма

  b:=b*p; //степень p

end;

write(a);

//выделение всех цифр числа и вывод в обратном порядке

read(a);

while a>0 do

begin

  b:=a mod 10;

  write(b);

  a:= a div 10;

end;

//выделение всех цифр числа и нахождение суммы цифр

read(a);

s:=0;

while a>0 do

begin

  b:=a mod 10;

  s:=s+b;

  a:= a div 10;

end;

write(s);

//нахождение количества четных цифр числа

read(a);

k:=0;

while a>0 do

begin

  b:=a mod 10;

  if b mod 2 =0 then k:=k+1;

  a:= a div 10;

end;

write(k);

• Нахождение сумм, произведений элементов данной конечной числовой последовательности (или массива).

read(n);

s:=0;

p:=1;

for i:=1 to n do

begin

  read(a);

  s:=s+a;

  p:=p*a;

end;

write(‘сумма=’,s,’, произведение=’,p);

• Использование цикла для решения простых переборных задач (поиск наименьшего простого делителя данного натурального числа, проверка числа на простоту, и т. д.).

//поиск наименьшего простого делителя числа

read(a);

k:=a div 2;

d:=1;

while k>1 do

  if a mod k=0 then begin a:=a div k; d:=k; end

  else k:=k-1;

write(d);

// 1-проверка числа на простоту

if d=1 then write(‘простое’) else write(‘не простое’);

// 2-проверка числа на простоту

read(a);

if a=1 then write(‘не простое’)

else begin

flag:=true;

for i:=2 to round(sqrt(a)) do

  if a mod i = 0 then begin flag:=false; break; end;

if flag then write(‘простое’) else write(‘не простое’);

end;

• Заполнение элементов одномерного и двумерного массива по заданным правилам.

//заполнение матрицы a[n, n] змейкой

// 1 2 3

// 6 5 4

// 7 8 9

read(n);

k:=0;

for i:=1 to n div 2 do

for j:=1 to n do

begin

  k:=k+1;

  a[2*i-1,j]:=k;

end;

if 2*i<=n then

for j:=n downto 1 do

begin

  k:=k+1;

  a[2*i, j]:=k;

end;

//заполнение вектора a[n] числами Фибоначчи

read(n);

a[1]:=1; a[2]:=1;

for i:=3 to n do

  a[i]:=a[i-1]+a[i-2];

//заполнение массива из введенных нечетных чисел

K:=0;

While not eoln()do begin

Read(a);

If odd(a) then begin

  K:=k+1;

  B[k]:=a;

End;

End;

For i:=1 to k do

  Write(b[i], ’ ‘);

//самая длинная подпоследовательность из возрастающих

//(убывающих) элементов

K:=1;

Read(b);

C[k]:=b;

While b<>0 do begin

  Read(a);

  If a=0 then break;

  If a>=b then k:=k+1 else k:=1;

  C[k]:=a;

  b:=a;

End;

For i:=1 to k do

  Write(c[i],’ ‘);

• Операции с элементами массива. Линейный поиск элемента. Вставка и удаление элементов в массиве. Перестановка элементов данного массива в обратном порядке. Суммирование элементов массива. Проверка соответствия элементов массива некоторому условию.

//объявление и ввод массива

var a:array[1..100]of integer;

  i, n:integer;

begin

  read(n);

  for i:=1 to n do

  read(a[i]);

  for i:=1 to n do 

  writeln(a[i]);

// Линейный поиск элемента

find:=false;

read(b);

for i:=1 to n do

  if a[i]=b then begin find:=true; break; end;

if find then write(‘YES’) else write(‘NO’);

//Вставка элемента b в массив перед k-ым элементом

read(b, k);

for i:=n downto k do

  a[i+1]:=a[i];

a[k]:=b;

//Удаление k-го элемента из массива

read(k);

for i:=k to n-1 do

  a[i]:=a[i+1];

n:=n-1;

//Перестановка элементов данного массива в обратном порядке

for i:=1 to n div 2 do

begin

  temp:=a[i];

  a[i]:=a[n-i+1];

  a[n-i+1]:=temp;

end;

//Вывод элементов массива в обратном порядке

for i:=n downto 1 do

  write(a[i],‘ ’);

//Суммирование элементов массива

s:=0;

for i:=1 to n do

  s:=s+a[i];

//Проверка соответствия элементов массива некоторому условию

k:=0;

for i:=1 to n do

  if a[i] mod 5 = 0 then k:=k+1;

• Нахождение минимального (максимального) значения в данном массиве и количества элементов, равных ему, за однократный просмотр массива.

//Нахождение первого минимального (максимального) значения

min:=a[1]; max:=a[1];

for i:=2 to n do begin

  if min>a[i] then min:=a[i];

  if max<a[i] then max:=a[i];

end;

//Нахождение последнего минимального (максимального) значения

min:=a[1]; max:=a[1];

for i:=2 to n do begin

  if min>=a[i] then min:=a[i];

  if max<=a[i] then max:=a[i];

end;

//Нахождение минимального (максимального) значения по индексу

nmin:=a[1]; nmax:=a[1];

for i:=2 to n do begin

  if a[nmin]>a[i] then nmin:=i;

  if a[nmax]<a[i] then nmax:=i;

end;

//Нахождение количества элементов, равных минимальному //максимальному), за однократный просмотр массива

min:=a[1];k:=1;

for i:=2 to n do

  if min>a[i] then begin

  min:=a[i];k:=1;

  end

  else if min=a[i] then k:=k+1;

• Нахождение второго по величине (второго максимального или второго минимального) значения в данном массиве за однократный просмотр массива.

if a[1]>a[2] then begin min1:=a[2];min2:=a[1]; end

else begin

  min2:=a[2];min1:=a[1];

end;

for i:=2 to n do

  if min1>a[i] then begin

  min2:=min1;

  min1:=a[i];

  end

  else if min2>a[i] then min2:=a[i];

write(min2);

• Операции с элементами массива, отобранными по некоторому условию (например, нахождение минимального четного элемента в массиве (1), нахождение количества (2) и суммы всех четных элементов в массиве (3)).

{1}

k:=1;

while (k<=n)and(a[k] mod 2<>0) do k:=k+1;

if k>n then

begin

write(‘минимального четного нет’); exit;

end;

min:=a[k];

for i:=k+1 to n do

  if (a[i] mod 2 =0) and (min>a[i]) then min:=a[i];

write(min);

{2}

k:=0;

for i:=1 to n do

  if (a[i] mod 2 =0) then k:=k+1;

write(k);

{3}

s:=0;

for i:=1 to n do

  if (a[i] mod 2 =0) then s:=s+a[i];

write(k);

• Сортировка массива.

Type mas=array[1..100]of integer;

Var T : mas;

//обменная сортировка пузырек

procedure sort1(var t:mas;n:integer);

  var i, a,s:integer;

begin

  for s:=1 to n-1 do

  for i:=1 to n-s do

  if t[i]>t[i+1] then

  begin

  a:=t[i];

  t[i]:=t[i+1];

  t[i+1]:= a;

  end;

end;

//улучшенная обменная сортировка пузырек

procedure sort1(var t:mas;n:integer);

  var i, a,s:integer; flag:boolean;

begin

  for s:=1 to n-1 do begin

  flag:=true;

  for i:=1 to n-s do

  if t[i]>t[i+1] then

  begin

  a:=t[i];

  t[i]:=t[i+1];

  t[i+1]:= a;

  flag:=false;

  end;

  if flag then break;

  end;

end;

//обменная сортировка челнок

procedure sort2(var t:mas;n:integer);

  var i, a,d:integer;

begin

  for d:=1 to n div 2 do begin

  for i:=d to n-d do

  if t[i]>t[i+1] then

  begin

  a:=t[i];

  t[i]:=t[i+1];

  t[i+1]:= a;

  end;

  for i:=n-d downto d+1 do

  if t[i]<t[i-1] then

  begin

  a:=t[i];

  t[i]:=t[i-1];

  t[i-1]:= a;

  end;

  end;

end;

//сортировка выбором

procedure sort3(var t:mas;n:integer);

  var i, k,s, a:integer;

begin

  for s:=1 to n-1 do begin

  k:=s;

  for i:=s+1 to n do

  if t[i]<t[k] then k:=i;

  if k<>s then begin

  a:=t[k];

  t[k]:=t[s];

  t[s]:=a;

  end;

  end;

end;

//сортировка вставками

procedure sort4(var t:mas;n:integer);

  var i, k,a:integer;

begin

  for k:=2 to n do

  for i:=k-1 downto 1 do

  if t[i+1]<t[i] then

  begin

  a:=t[i+1];

  t[i+1]:=t[i];

  t[i]:=a;

  end

  else break;

end;

• Слияние двух упорядоченных массивов в один без использования сортировки.

var i, j,k, m,z, n:integer;

  a, b,c:array[1..100]of integer;

begin

read(n, m);

for i:=1 to n do

  read(a[i]);

for i:=1 to m do

  read(b[i]);

k:=1; z:=1; j:=0;

repeat

  for i:=k to n do

  if a[i]<=b[z] then

  begin

  j:=j+1;

  c[j]:=a[i]

  end

  else begin

  k:=i;

  break;

  end;

  if i=n then

  begin

  for i:=z to m do

  begin

  j:=j+1; 

  c[j]:=b[i];

  end;

  z:=m+1;

  end;

  for i:=z to m do

  if b[i]<=a[k] then

  begin

  j:=j+1;

  c[j]:=b[i]

  end

  else begin

  z:=i;

  break;

  end;

  if i=m then

  begin

  for i:=k to n do

  begin

  j:=j+1; 

  c[j]:=a[i];

  end;

  k:=n+1;

  end;

until ((k>=n) and (z>=m)) or (j>=n+m);

for i:=1 to n+m do

  write(c[i],' ');

end.

• Обработка отдельных символов данной строки. Подсчет частоты появления символа в строке.

  var a:array[‘a’..’z’]of integer;

  i, c:char;

  k:integer;

begin

  for i:=’a’ to ‘z’ do

  a[i]:=0;

  k:=0;

  read(c);

  while ord(c)>13 do

  begin

  if c in [‘a’..’z’] then

  begin

  a[c]:=a[c]+1;

  k:=k+1;

  end;

  read(c);

  end;

  for i:=’a’ to ‘z’ do

  if a[i]<>0 then

  writeln(i, ’ ’, a[i], ’ ’, a[i]*100/k:0:2, ‘%‘);

end.

• Работа с подстроками данной строки с разбиением на слова по пробельным символам.

n:=0;

s:=’’;

read(c); 

while c<>#10 do begin

  if (c=’ ’)and(s<>’’) then begin

  n:=n+1; 

  a[n]:=s;

  s:=’’;

  end else

  if c<>’ ’ then s:=s+c; 

  read(c);

end;

if s<>’’ then begin

  n:=n+1; 

  a[n]:=s;

end;

for i:=1 to n do

  writeln(a[i]);

• Поиск подстроки внутри данной строки, замена найденной подстроки на другую строку.

readln(s);

readln(w);k:=length(k);

readln(q);

z:=0;

p:= pos(w, s);

while p>0 do begin

  delete(s, p,k);

  insert(q, s,p);

  p:= pos(w, s);

  z:=z+1;

end;

writeln(z);

writeln(s);