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

2. В программе My7_2 реализован процесс, относительно которого выдвинута так называемая гипотеза Сиракуз. Это
процесс последовательного преобразования натурального
числа n в 1. Запустив программу, проверяем ее работу при не-
скольких значениях n и видим, что предусмотренный резуль-
тат каждый раз достигается. Отсюда мы делаем предположе-
ние, что работа программы завершится, то есть результат
будет получен при любом значении n. Однако с достовернос-
тью это неизвестно, доказательство факта завершения работы
программы (алгоритма) при любом значении n до сих пор ни-
кем не получено7
. Другими словами, есть алгоритм (програм-
ма), но его конечность, завершаемость работы во времени —
открытый вопрос, требующий своего обоснования. Мораль:
проверка циклов типа While требует особо тщательной рабо-
ты, ибо подобные циклы «потенциально бесконечны во време-
ни».
Program My7_2;
Var n:Integer;
Begin
WriteLn('Введите натуральное число:');
ReadLn(n);
Write(n);
While n<>1 Do Begin
If n Mod 2=0 Then n:=n Div 2
Else n:=(3*n+1) Div 2;
Write(' - ',n);
End;
ReadLn;
End.
Последовательно запуская программу, оцените среднюю
длину получаемых цепочек чисел при изменении n от 2 до 20.
Как избавиться от этой ручной работы по многократному
запуску программы?
Рассматривая полученные цепочки чисел, нетрудно заме-
тить, что фрагменты этих цепочек часто повторяются. Напри-
мер, 8421, 5168421. Как использовать этот
факт при подсчете средней длины цепочек для чисел (n) из
большого интервала, например типа Integer? Потребуется ли в
этом случае что-либо изменять в приведенном фрагменте про-
граммы?

👇
Открыть все ответы
Ответ:
imrangaraev
imrangaraev
22.12.2021

#include <iostream>

#include <vector>

using namespace std;

void insertionSort(vector<int> &a_){

   vector<int> t;

   int n = a_.size();

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

       int u = i;

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

           if(a_[j] < a_[u])

               u = j;

       swap(a_[i], a_[u]);

       if(!(a_[i] & 1))

           t.push_back(a_[i]);

   }

   a_ = t;

}

void solve(){

   vector<int> a = {-2, 4, 10, -1, 1, 6, 3, 7, 8, 5};

   insertionSort(a);

   cout << "a = {";

   for(int i = 0; i < a.size() - 1; i++)

       cout << a[i] << ", ";

   cout << a.back() << "}";

}

int main(){

   solve();

}

4,8(36 оценок)
Ответ:
reyuatnrf
reyuatnrf
22.12.2021

Объяснение кода №1;

var s, n: integer;  //Объявление переменных

begin  //Начало программы

s:=100  //Значение переменной S равняется 100

n:=300  //Значение переменной n равняется 300

while s+n <= 600 do  

//Цикл while выполняется до тех пор, пока истинно условие s + n <= 600, т. е. сумма s и n определяет, сколько раз выполнится цикл.

begin

//Следовательно, два действия s := s + 40 и n := n − 20 можно объединить, так как цикл зависит от двух переменных. Таким образом, на каждом повторе (умными словами итерации) добавляется 20.

s:= s+40

n:=n-20

end

//Решим уравнение: 400 + x > 600.

Цикл остановится, когда x будет больше 200. Поскольку каждый раз добавляется по 20, будет 11 повтор.

По итогу, получится на 11-ой итерации: 100 + 40 * 11 = 540.

Объяснение кода №2;

//Объяснения немного короче напишу

var s, n: integer;

begin

s:=500

n:=200

//Цикл while выполняется до тех пор, пока истинно условие s div n >= 2, т. е. целочисленное деление s на n определяет, сколько раз выполнится цикл.

while s div n >= 2 do begin

s:= s+5

n:= n+5

end

//Следовательно, каждый раз к обеим переменным прибавляется по 5. Целочисленное деление s на n будет меньше 2 тогда, когда s примет значение 605, а n — значение 305.

Совет: Если ты вдруг 10 или 11 класс, и не понимаешь данные штуки, можешь не вникать уже в них, поздно. Изучай си, си++ в универе пригодится :)

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