UlianaLaruonova
26.04.2020 11:16

Буфер состоит из 31 ячейки памяти. в память последовательно записываются пронумерованные блоки данных из 10 ячеек каждый. алгоритм записи реализован следующим образом:

определяется, есть ли хотя бы одна последовательность из 10 идущих подряд пустых ячеек. если таких последовательностей нет, то выполнение алгоритма завершается.

если есть одна или несколько таких последовательностей, то из всех вариантов таких последовательностей с равной вероятностью выбирается одна, и в нее записывается очередной блок данных. после этого осуществляется переход к шагу 1.

запустив многократно этот алгоритм, петя понял, что после завершения алгоритма есть только два возможных варианта: в буфере оказываются записанными 2 или 3 блока данных.

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

для ускорения работы с буфером петя решил проиндексировать отдельно все возможные состояния буфера после завершения алгоритма, при которых в буфере оказались записанными ровно 2 блока (индекс типа a) и отдельно все возможные состояния буфера после завершения алгоритма, при которых в буфере оказались записанными ровно 3 блока (индекс типа b). каждый индекс – целое число, уникально идентифицирующее соответствующее состояние. для хранения каждого индекса типа a петя решил выделить в памяти минимально возможное, одинаковое для всех индексов типа a количество бит x. для хранения каждого индекса типа b петя решил выделить в памяти минимально возможное, одинаковое для всех индексов типа b количество бит y. найдите x и y и запишите в ответе через пробел два целых числа – сначала значение x, затем значение y.

Нажмите на рекламу ниже и сразу увидите ответ
Популярные вопросы:
Ответ:
SoFiA5454555
06.02.2020 10:49
1.1. Количество нечетных чисел в заданном промежутке можно легко найти, зная что нечетные числа следуют через одно, чередуясь с четными. Конечно, можно написать в программе цикл и перебрать все нечетные элементы, каждый раз добавляя по +1 в счетчик количества, но гораздо проще воспользоваться знаниями из математики. Легко видеть, что нечетные числа образуют арифметическую прогрессию с разностью d=-2, начальный член a1=7, а конечный член an=-3.
Вспомним формулу для n-го члена арифметической прогрессии и получим из нее n.
\displaystyle a_n=a_1+d(n-1) \to n= \frac{a_n-a_1}{d}+1
В соответствии с условиями нашей задачи это будет верно, если a1 и an - нечетные. Если a1 четное, то его надо уменьшить на 1. Аналогично, если an четное, его надо увеличить на 1. Таким образом, мы получаем алгоритм, пригодный для быстрого определения количества нечетных чисел на любом интервале с целочисленными границами.
Ниже приводится соответствующая программа.

program p11;
var
  a,b,n:integer;
begin
  Write('Введите границы интервала: '); Readln(a,b);
  { защита от неверного порядка ввода }
  if a<b then begin n:=a; a:=b; b:=n end;
  { если надо, корректируем границы на нечет }
  if (a mod 2)=0 then a:=a-1;
  if (b mod 2)=0 then b:=b+1;
  { сам расчет }
  n:=(a-b) div 2 + 1;
  Writeln('Количество нечетных чисел на интервале равно ',n)
end.

Тестовое решение:
Введите границы интервала: -3 7
Количество нечетных чисел на интервале равно 6

1.2 В противоположность предложенному решению, где сначала надо было думать, можно использовать "метод грубой силы" (программисты называют его "брутфорс" - от английского bruteforce), т.е. программировать ни о чем не думая.
Ниже - пример такого решения. Оно более короткое, но при больших интервалах время решения окажется на несколько порядков больше.

program p12;
var
  a,b,i,k:integer;
begin
  Write('Введите границы интервала: '); Readln(a,b);
  { защита от неверного порядка ввода }
  if a<b then begin k:=a; a:=b; b:=k end;
  k:=0;
  for i:=a downto b do
    if (i mod 2)<>0 then k:=k+1;
  Writeln('Количество нечетных чисел на интервале равно ',k)
end.

Тестовое решение:
Введите границы интервала: -3 7
Количество нечетных чисел на интервале равно 6

2.1. Тут задача на первый взгляд стандартная и вроде бы думать нечего - в цикле накапливаем сумму:

program p21;
var
  i:integer;
  x,s:real;
begin
  Write('Введите значение x: '); Readln(x);
  s:=0; i:=2;
  while i<=20 do begin s:=s+i*x; i:=i+2 end;
  Writeln('Cумма членов последовательности равна ',s)
end.

Тестовое решение:
Введите значение x: 2.15
Cумма членов последовательности равна 236.5

2.2. Но и тут есть место для размышлений. Опять вспоминаем математику.
\displaystyle s=\Sigma_{i=2}^{20}(x\times i), \ i=2k, \ k \in &#10;\mathbb N \\ s=x\times \Sigma_{k=1}^{10}(2\times &#10;k)=2x\times\Sigma_{k=1}^{10}k
Но полученная сумма - это сумма арифметической прогрессии с начальным членом, равным единице,  конечным членом, равным 10 и разностью 1. Формула такой суммы известна и мы продолжаем преобразования.
\displaystyle s=2x\times \frac{a_1+a_n}{2}\times n=n\times &#10;x\times(a_1+a_n); \\ a_1=1; \ a_n=10; \ n=a_n-a_1+1=10-1+1=10; \\ &#10;s=10\times x\times11=110\times x
Теперь можно и программу написать.

program p22;
var
  x:real;
begin
  Write('Введите значение x: '); Readln(x);
  Writeln('Cумма членов последовательности равна ',110*x)
end.

Тестовое решение:
Введите значение x: 2.15
Cумма членов последовательности равна 236.5

Пары приведенных решений призваны показать, что первое пришедшее в голову решение обычно всегда не лучшее. А еще - что для качественного программирования надо учить математику.
0,0(0 оценок)
Ответ:
мозг2017а
06.02.2020 10:49

{ Задача по информатике решить в паскале Имеется продуктовая база в которой можно
закупить партию товара по условиям минимальная стоимость , близость поставки ,
прочность товара Если товар удолетворяет - закупаем
Если ее удолетворяет - не закупаем
Мы вводим данные близость поставки, прочность товара, и минимальная стоимость
если все три условия выполняются ввыводим закупаем а
если не выполняются выводи не закупается}
type
    WareData = record
        MinPrice: integer;
        Distance: integer;
        Strength: real;
    end;

var
    Base, Client: WareData;

begin
    Base.MinPrice := 4;
    Base.Distance := 57;
    Base.Strength := 0.25;
    
    read(Client.MinPrice, Client.Distance, Client.Strength);
    if (Client.MinPrice >= Base.MinPrice)
        and (Client.Distance >= Base.Distance)
        and (Client.Strength <= Base.Strength) then
        writeln('Берем')
    else
        writeln('Не устраивает');
end.

0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота