М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
you58
you58
07.01.2023 01:12 •  Информатика

Написать программу на паскале вычисления значения переменных: y=sin³(x²+a)²-(√x/b)
z=(x²/a)+cos(x+b)³
Значения а=1,1 b=0,004 х=0,2

👇
Открыть все ответы
Ответ:
fariza1974
fariza1974
07.01.2023
Программа работает неверно: даже на примере из условия вместо 2600 выводится 55*245 = 13475. В программе происходит что-то странное, например, сравниваются элементы последовательности и 8 (зачем?)



Подумаем, как можно было бы решать задачу.
- Наивный сохранить все числа в массив и пробежаться по нему в двойном цикле, в псевдокоде это выглядит примерно так:
max = 0
for i = 1 to n do
  for j = 1 to n do
    if |i - j| >= 8 and max < a[i] * a[j] then
      max = a[i] * a[j]
Это нехорошо и по времени (время выполнения порядка n^2), и по памяти (количество памяти растет с ростом n пропорционально n).
- Немного ускоряем: у нас пары i, j и j, i ничем не отличаются, так что будем считать, что j < i. Учитывая условие, что |i - j| >= 8, получаем, что j <= i - 8. Переписываем:
max = 0
for i = 9 to n do
  for j = 1 to i - 8 do
    if max < a[i] * a[j] then
      max = a[i] * a[j]
Это решение работает в 2 раза быстрее, но этого недостаточно. Памяти тоже слишком много.
- Продолжаем ускорять. Пусть i зафиксировано. Мы пытаемся сравнить a[i] * a[j] с max для всех j от 1 до i - 8. Очевидно, произведение будет максимально, если a[j] - максимум среди a[1], a[2], ..., a[i - 8]. Возможное решение: создадим массив из максимумов среди первых k чисел, и будем сравнивать уже с максимумом.
maximums[1..n]
maximums[1] = a[1]
for i = 2 to n do 
  maximums[i] = max(maximums[i - 1], a[i])
max = 0
for i = 9 to n do
  if max < a[i] * maximums[i - 8] then
    max = a[i] * maximums[i - 8]
Это решение уже работает быстро, но остались проблемы с большим расходом памяти.
- Последний рывок. Заметим, что для того, чтобы разобраться с числом под номером i, нам совсем не нужен массив a, а из массива maximums достаточно знать только maximums[i - 8], ..., maximums[i - 1] - 8 чисел. Так что большие массивы не нужны, их можно убрать. Тогда программа будет эффективна и по времени, и по памяти.

У меня максимумы хранятся в массиве maxs[0..7], все номера берутся по модулю 8. В вашей программе это может быть реализовано иначе.
Pascal:
var
  i, n, t, max: integer;
  maxs: array[0..7] of integer;
begin
  read(n);
  read(t);
  max := 0;
  maxs[1] := t;
  for i := 2 to n do
  begin
    read(t);
    if (i > 8) and (max < t * maxs[i mod 8]) then
      max := t * maxs[i mod 8];
    if t > maxs[(i + 7) mod 8] then
      maxs[i mod 8] := t
    else
      maxs[i mod 8] := maxs[(i + 7) mod 8];
  end;
  write(max);
end.
4,5(85 оценок)
Ответ:
ТыУмНыЙ
ТыУмНыЙ
07.01.2023
Var
   a,b,c,k:byte;
Begin
k:=0;
For a:= 1 to 9 do
    For b:= 0 to 9 do
        For c:= 0 to 9 do
            if ((a<b)and(b<c))or((a>b)and(b>c)) then
               Begin
               k:=k+1;
               Write(a,b,c,' ')
               End;
WriteLn;
WriteLn('k = ',k);
End.

123 124 125 126 127 128 129 134 135 136 137 138 139 145 146 147 148 149 156 157 158 159 167 168 169 178 179 189 210 234 235 236 237 238 239 245 246 247 248 249 256 257 258 259 267 268 269 278 279 289 310 320 321 345 346 347 348 349 356 357 358 359 367 368 369 378 379 389 410 420 421 430 431 432 456 457 458 459 467 468 469 478 479 489 510 520 521 530 531 532 540 541 542 543 567 568 569 578 579 589 610 620 621 630 631 632 640 641 642 643 650 651 652 653 654 678 679 689 710 720 721 730 731 732 740 741 742 743 750 751 752 753 754 760 761 762 763 764 765 789 810 820 821 830 831 832 840 841 842 843 850 851 852 853 854 860 861 862 863 864 865 870 871 872 873 874 875 876 910 920 921 930 931 932 940 941 942 943 950 951 952 953 954 960 961 962 963 964 965 970 971 972 973 974 975 976 980 981 982 983 984 985 986 987
k = 204
4,6(56 оценок)
Это интересно:
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ