Pascal в ЕГЭ по информатике

обучение PascalABC

Примеры заданий ЕГЭ по информатике с решением на Паскале. На странице использованы условия задач из демо вариантов и задачника с сайта Полякова Константина Юрьевича (kpolyakov.spb.ru)

Задание 5

Демо-2022
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. К этой записи дописываются справа ещё два разряда по следующему
правилу:
а) складываются все цифры двоичной записи числа N, и остаток от деления суммы на 2 дописывается в конец числа (справа). Например, запись 11100 преобразуется в запись 111001;
б) над этой записью производятся те же действия – справа дописывается остаток от деления суммы её цифр на 2.
Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа N) является двоичной записью результирующегочисла R.
Укажите такое наименьшее число N, для которого результат работы данного алгоритма больше числа 77. В ответе это число запишите в десятичной системе счисления.

Решение:

var
  n, i, b, s, k: integer;
  r: real;
  st: string;
begin
  for n := 1 to 100 do
  begin
    k := n; //перебор исходного числа N
    s := 0; //сумма цифр двоичного кода
    r := 0; //результирующее десятичное число R
    st := ''; //очищаем строку двоичного кода для нового числа
    while k >= 1 do //цикл перевода в двоичный код исходного числа
    begin
      s := s + (k mod 2); //вычисление суммы цифр двоичного кода
      st := st + (k mod 2);//формирование строки двоичного кода из остатков деления на 2
      k := k div 2;// деление на 2
    end;
    st := ReverseString(st) + s mod 2; //переворачиваем код и дописываем остаток
    s := s + s mod 2;//вычисление суммы нового кода
    st := st + s mod 2;//формирование строки двоичного кода с добавлением остатка
    for i := 1 to Length(st) do //преобразование двоичного кода в десятичное число
      if st[i] = '1' then r := r + power(2, Length(st) - i);
    if r > 77 then begin println(n, r);break; end;//вывод найденных чисел
  end;
end.

Задание 6

Демо-2022 Определите, при каком наибольшем введённом значении переменной s программа выведет число 64.

zad6-22

Решение: Используем исходный код. Добавим в него цикл перебора значений S и вывода при выполнении условия. Последнее значение и будет ответом.

var
  s, n, i: integer;
begin
  for i := 1 to 510 do
  begin
    s := i;  
    s := s div 10;
    n := 1;
    while s < 51 do
    begin
      s := s + 5;
      n := n * 2
    end;
    if n = 64 then writeln(i);
  end;
end.

Задание 14

Демо-2022 Значение арифметического выражения: 3*438+2*423+420+3*45+2*44+1 – записали в системе счисления с основанием 16. Сколько значащих нулей содержится в этой записи?

Решение:

var k,x:biginteger;
begin
  k:=0;
	x:=3*4bi**38+2*4bi**23+4bi**20+3*4bi**5+2*4bi**4+1;
	while x>0 do
	begin
		if x mod 16=0 then k:=k+1;
		x:=x div 16;
	end;
  print(k)
end.

Демо-2021 Значение арифметического выражения: 497 + 721 – 7 – записали в системе счисления с основанием 7. Сколько цифр 6 содержится в этой записи?

Решение:

var s, i,k6,x:integer;
osn,n:biginteger;
begin
  osn:=7; 
    k6:=0;
    n:=power(osn,14)+power(osn,21)-7;
    while n>0 do
    begin
      if n mod 7 = 6 then k6:=k6+1;
      n:=n div 7;
    end;
      print(k6);          
end.

Демо-2020 Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из 70 идущих подряд цифр 8? В ответе запишите полученную строку.
НАЧАЛО
_ПОКА нашлось (2222) ИЛИ нашлось (8888)
__ЕСЛИ нашлось (2222)
___ТО заменить (2222, 88)
___ИНАЧЕ заменить (8888, 22)
__КОНЕЦ ЕСЛИ
_КОНЕЦ ПОКА
КОНЕЦ

Решение:

begin
  var s: string := '8' * 70;
  while (s.contains('2222')) or (s.contains('8888')) do
  begin
    if (s.contains('2222')) then
      s := s.replace('2222', '88')
    else
      s := s.replace('8888', '22');
  end;
  writeln(s);
end.

Задание 15

Демо-2021 Обозначим через ДЕЛ(n, m) утверждение «натуральное число n делится без остатка на натуральное число m». Для какого наибольшего натурального числа А формула ¬ДЕЛ(x, А) → (ДЕЛ(x, 6) → ¬ДЕЛ(x, 9)) тождественно истинна (то есть принимает значение 1 при любом натуральном значении переменной х)?

Решение:

// Делители
var
 a,x, flag: integer;
 
begin
  for  a := 1 to 100 do
  begin
    flag := 0;
    for x := 1 to 1000 do
      if not(x mod a = 0) <= ((x mod 6 = 0) <= not (x mod 9 = 0)) = false then begin
        flag := 1;
        break;
      end;
    if flag = 0 then print(a);
  end;
end.

К.Поляков №161 Определите наименьшее натуральное число A, такое что выражение
(X & 29 ≠ 0) → ((X & 17 = 0) → (X & A ≠ 0))
тождественно истинно (то есть принимает значение 1 при любом натуральном значении переменной X)?

Посмотреть решение
var
  A, x, flag: integer;
 
begin
  for A := 0 to 31 do
  begin
    flag := 0;
    for x := 0 to 31 do
      if (((x and 29) = 0) or ((x and 17) <> 0) or ((x and A) <> 0))=false then flag := 1;
      if flag = 0 then 
	  begin
        writeln(A); 
	    break;
      end;
  end;
end.

Задание 16

Демо-2022 Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями:
F(n) = 1 при n = 1;
F(n) = n + F(n − 1), если n – чётно,
F(n) = 2 × F(n − 2), если n > 1 и при этом n – нечётно.
Чему равно значение функции F(26)?

Решение:

var
  i, n: integer;
  f: array[1..100] of integer;
begin
  print('Введите значение n');
  readln(n);
  f[1] := 1;
  for i := 2 to n do 
    if i mod 2 = 0 then f[i] := i + f[i - 1] else f[i] := 2 * f[i - 2];
  print(f[n]);
end.

К.Поляков №46Алгоритм вычисления функции F(n) задан следующими соотношениями:
F(n) = n при n ≤ 3;
F(n) = 2 · n · n + F(n – 1) при чётных n > 3;
F(n) = n · n · n + n + F(n – 1) при нечётных n > 3;
Определите количество натуральных значений n, при которых F(n) меньше, чем 107.

Посмотреть решение
var
  i: integer;
  f: array[1..1000] of integer;
begin
  i:=3;
  f[1] := 1;
  f[2] := 2;
  f[3] := 3;
 while f[i]< 10**7 do 
   begin
    i:=i+1;
    if i mod 2 = 0 then f[i] := 2*i*i + f[i - 1] else f[i] := i*i*i+i +f[i - 1];    
    end;
  print(i-1);// не учитываем последнее число
end.

Задание 17

Демо-2022
В файле содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения от –10 000 до 10 000 включительно. Определите и запишите в ответе сначала количество пар элементов последовательности, в которых хотя бы одно число делится на 3, затем максимальную из сумм элементов таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности.

Файл с данными: 17.txt

Решение:

var a,b,k,maxsum: integer;  
begin    
  Assign( input, '17.txt' );
  maxsum:=-20000; k:=0;
  readln(a);
  while not eof do begin
  readln(b);
  if (a mod 3 = 0) or (b mod 3 = 0) then begin
            k := k + 1;
            if a + b > maxsum then maxsum := a + b;
        end;
        a := b;
    end;
  Println( k, maxsum)
end.

Задание 22

Демо-2022
Ниже на языке программирования записан алгоритм. Получив на вход число x, этот алгоритм печатает два числа: L и M. Укажите наибольшее число x, при вводе которого алгоритм печатает сначала 4,а потом 5.
задание 22 демо 22

Решение:

var
  x, i, L, M, Q: integer;
begin
  for i := 9 to 50 do
  begin
    x := i;
    Q := 9;
    L := 0;
    while x >= Q do
    begin
      L := L + 1;
      x := x - Q;
    end;
    M := x;
    if M < L then
    begin
      M := L;
      L := x;
    end;
    if (L = 4) and (M = 5) then print(i);
  end;
end.

Задание 24

Демо-2022
Текстовый файл состоит из символов P, Q, R и S. Определите максимальное количество идущих подряд символов в прилагаемом файле, среди которых нет идущих подряд символов P. Для выполнения этого задания следует написать программу.

Файл с данными: 24.txt

Решение:

var
  i, maxlen, curlen: longint;  {описание переменных}
  s: string;
  f: text;{текстовый файл}
begin
  assign(f, '24.txt');    {исходный текстовые файл с данными}
  reset(f);
  readln(f, s);{открываем файл для чтения данных}
  maxlen := 1;            
  curlen := 1; 
  for i := 2 to Length(s) do 
    if not ((s[i] = 'P') and (s[i-1] = 'P')) then 
    begin
      curLen := curLen + 1;
      if curLen > maxLen then maxLen := curLen;
    end
    else curLen := 1;
  writeln(maxLen);   
  close(f);     { закрываем файл}
end.

Задание 25

Демо-2022
Пусть M – сумма минимального и максимального натуральных делителей целого числа, не считая единицы и самого числа. Если таких делителей и у числа нет, то значение M считается равным нулю. Напишите программу, которая перебирает целые числа, большие 700 000, в порядке возрастания и ищет среди них такие, для которых значение M оканчивается на 8. Выведите первые пять найденных чисел и соответствующие им значения M.
Формат вывода: для каждого из пяти таких найденных чисел в отдельной строке сначала выводится само число, затем – значение М.
Строки выводятся в порядке возрастания найденных чисел.

Решение:

var
  d1, chislo: integer;
begin
  for chislo := 700001 to 700100 do
    for d1 := 2 to chislo - 1 do
      if chislo mod d1 = 0 then begin
        if (d1 + chislo div d1) mod 10 = 8 then println(chislo, d1 + chislo div d1);
        break;
      end;
end.
Рейтинг
( 27 оценок, среднее 4.81 из 5 )
Понравилась статья? Поделиться с друзьями:
Инфоучка
Добавить комментарий

five × eight =

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: