Клер11330
29.03.2021 20:41

с информатикой Определить значение переменной S в результате работы следующего алгоритма.
1. алг
нач
цел s,k
s:=1
нц для k от 0 до 4
s:=s*3
кц
вывод s
кон
2. алг
нач
цел s,k
s:=3
нц для k от 0 до 9
s:=s+3
кц
вывод s
кон
3. алг
нач
цел s,k
s:=2
нц для k от 1 до 5
s:=s*2
кц
вывод s
кон​

Нажмите на рекламу ниже и сразу увидите ответ
Популярные вопросы:
Ответ:
serg6205
15.05.2023 18:16
Program test;
var  a: array of integer;  b: array of integer;  c: array of integer;  aa, bb, cc: integer;
begin  writeln('Введите размер массива a');  readln(aa);  writeln('Введите размер массива b');  readln(bb);  a := new integer[aa];  b := new integer[bb];  c := new integer[aa + bb];  cc := 0;  aa := 0;  bb := 0;  writeln('Заполнение массива a');  while(aa < Length(a)) do   begin    readln(a[aa]);    aa := aa + 1;  end;  writeln('Заполнение массива b');  while(bb < Length(b)) do   begin    readln(b[bb]);    bb := bb + 1;  end;  while(cc < Length(c)) do   begin    if(cc < Length(a)) then begin      c[cc] := a[cc]    end else begin      c[cc] := b[cc - Length(a)];    end;    cc := cc + 1;  end;  writeln('Полученный массив');  cc:=0;  while(cc < Length(c)) do   begin    writeln(c[cc]);    cc:=cc+1;  end;end.
0,0(0 оценок)
Ответ:
raxmatullin174
28.11.2021 19:36
Чтобы разъяснить происходящее, были сделаны следующие шаги.
1. Константы 3.1 и 0.8 переведены в машинное представление а затем назад в десятичное с максимальной для паскалевских данных вещественного типа real (он же double) точностью (вложения 1 и 2).
2. В системе компьютерной алгебры, позволяющей работать с произвольной точностью (выбрана точность в 30 значащих цифр) для полученных констант выполнены соответствующие заданному фрагменту программы вычисления (вложение 3)
3. Результат 0.499999999999999955591079014996 был переведен в машинное представление. Затем в машинное представление была переведена константа 0.5, которая, как видно во вложении 4, представляется в компьютере точно. Поэтому проверка на точное равенство с 0.5 дает не тот результат, который Вы ожидали.
4. Можно было также воспользоваться программой на паскале.
begin
  var x:=3.1;
  var y:=0.8;
  var p:=2;
  var a:=Frac(x); // =0,1
  var b:=Frac(y)-0.5; // =0,3
  var kp:=sqrt(sqr(0.5-a)+b*b); // =0,5
  if abs(kp-0
  Writeln(kp-0.5)
end.

Результат: -5.55111512312578E-17
Это как раз то, что так портит Вам всю картину.

По поводу Вашего условия if kp>=0.5 then p=p+1;
Ошибка имеет порядок 0.6·10⁻¹⁶ и наверно ничего страшного не будет, если оператор (с запасом) подправить на if kp>=(0.5-1e-15) then p:=p+1;

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