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

1.определить, что будет на экране после выполнения следующего фрагмента программ: var n, k: byte; begin n: =5; for k: =1 to n do begin n: =n+1; writeln(‘k=’, k,’n=’,n); end; end

👇
Ответ:
дима2872
дима2872
02.01.2021
Инвариантные фрагменты кода
Оптимизация инвариантных фрагментов кода тесно связана с проблемой оптимального программирования циклов. Внутри цикла могут встречаться выражения, фрагменты которых никак не зависят от управляющей переменной цикла. Их называют инвариантными фрагментами кода. Современные компиляторы часто определяют наличие таких фрагментов и выполняют их автоматическую оптимизацию. Такое возможно не всегда, и иногда производительность программы зависит целиком от того, как запрограммирован цикл. В качестве примера рассмотрим следующий фрагмент программы (язык Turbo Pascal):
for i := 1 to n do
begin
...
for k := 1 to p do
for m := 1 to q do
begin
a[k, m] := Sqrt(x * k * m - i) + Abs(u * i - x * m + k);
b[k, m] := Sin(x * k * i) + Abs(u * i * m + k);
end;
...
am := 0;
bm := 0;
for k := 1 to p do
for m := 1 to q do
begin
am := am + a[k, m] / c[k];
bm := bm + b[k, m] / c[k];
end;
end;
Здесь инвариантными фрагментами кода являются слагаемое Sin(x * k * i) в первом цикле по переменной m и операция деления на элемент массива c[k] во втором цикле по m. Значения синуса и элемента массива не изменяются в цикле по переменной m, следовательно, в первом случае можно вычислить значение синуса и присвоить его вс переменной, которая будет использоваться в выражении, находящемся внутри цикла. Во втором случае можно выполнить деление после завершения цикла по m. Таким образом, можно существенно сократить количество трудоёмких арифметических операций.
[править] Приоритеты оптимизации
4,6(68 оценок)
Открыть все ответы
Ответ:
Мила098
Мила098
02.01.2021
Сначала немного теории.
Тут у нас импликация(если..то...), комбинированная с конъюнкцией(и).
Таблица истинности импликации(стрелочки):
0 0 1
0 1 1
1 0 0
1 1 1
Общее правило: если a<=b, тогда правда
Таблица истинности конъюнкции(/\):
0 0 0
0 1 0
1 0 0
1 1 1
Общее правило: если есть одна ложь-всё ложь.
Про НЕ и гуманитарий поймёт.
Про данный пример:
Нам нужен вариант, где оба выражения являются правдой, т.к. между ними стоит И
Подробно рассмотрим первый вариант:
Ирина
Первая буква гласная-правда
Вторая буква гласная-ложь
Значит, результат импликации-ложь, в чём можно убедиться взглянув на таблицу истинности, но, так как НЕ так же присутствует в данном условии, это выражение возвращает правду.
Последняя буква гласная-правда
Так как оба выражения при конъюнкции правда, всё выражение является правдой и удовлетворяет условию.
4,6(87 оценок)
Ответ:
Ирина15123010
Ирина15123010
02.01.2021

Объяснение:

#include <iostream>

using namespace std;

int main()

{

setlocale(LC_ALL, "RUSSIAN");

const int n = 5;             // (1≤N≤1000)

int mass[n] = { 5, 4, 3, 2, 1 };

int k = 0;

cout << "Исходный массив: ";

for (int i = 0; i < n; ++i)

{

 cout << mass[i] << " ";

}

cout << endl;

for (int i = 1; i < n; i++) {

 for (int j = 0; j < n-1; j++) {

  if (mass[j] > mass[j + 1]) {

   int b = mass[j]; // создали дополнительную переменную

   mass[j] = mass[j + 1]; // меняем местами

   mass[j + 1] = b; // значения элементов

   k++;

  }

 }

}

cout << "Отсортированный массив: ";

for (int i = 0; i < n; ++i)

{

 cout << mass[i] << " ";

}  

cout << endl << "Kоличество обменов: " << k << endl;

system("pause");

return 0;

}

4,5(58 оценок)
Это интересно:
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ