В
Все
М
Математика
А
Английский язык
Х
Химия
Э
Экономика
П
Право
И
Информатика
У
Українська мова
Қ
Қазақ тiлi
О
ОБЖ
Н
Немецкий язык
Б
Беларуская мова
У
Українська література
М
Музыка
П
Психология
А
Алгебра
Л
Литература
Б
Биология
М
МХК
О
Окружающий мир
О
Обществознание
И
История
Г
Геометрия
Ф
Французский язык
Ф
Физика
Д
Другие предметы
Р
Русский язык
Г
География
kburuncenco307
kburuncenco307
19.07.2022 17:10 •  Информатика

Сделать эту задачу нужно и процедурой и функцией


Сделать эту задачу нужно и процедурой и функцией

Показать ответ
Ответ:
#include "stdafx.h" 
#include "malloc.h" 
#include <iostream> 
using namespace std; 

int _tmain(int argc, _TCHAR* argv[]) 

// Вводим исходные данные. 
int m; 
int n; 
printf ("Введите количество столбцов? m = "); 
cin >> m; 
printf ("Введите количество строк? n = "); 
cin >> n; 

// Создаем матрицу. 
int* pMatrix = (int*) malloc (m * n * sizeof (int)); 

// Инициализируем другие переменные. 
int xMin = 0, // левая граница спирали 
xMax = m, // правая граница спирали (не включая ее, поэтому ниже будет использоваться xMax - 1) 
yMin = 0, // верхняя граница спирали 
yMax = n, // нижняя граница спирали (не включая ее, поэтому ниже будет использоваться yMax - 1) 
i = 0, // текущее число 
x, y; // расходный материал. 

// Бесконечный цикл, пока не заполним матрицу. 
while (1) 

// Заполняем верхний ряд слева направо. 
for (x = xMin; x < xMax; x++) 
pMatrix[x + yMin * m] = i++; 
// Заполнили весь верхний ряд. Подвигаем вниз верхнюю границу. 
yMin ++; 
// Если верхняя граница совпала с нижней, то заканчиваем цикл. 
if (yMin == yMax) 
break; 

// Заполняем правый ряд сверху вниз. 
for (y = yMin; y < yMax; y++) 
pMatrix[xMax - 1 + y * m] = i++; 
// Заполнили весь правый ряд. Подвигаем налево правую границу. 
xMax --; 
// Если правая граница совпала с левой, то заканчиваем цикл. 
if (xMax == xMin) 
break; 

// Заполняем нижний ряд справа налево. 
for (x = xMax - 1; x >= xMin; x--) 
pMatrix[x + (yMax - 1) * m] = i++; 
// Заполнили весь нижний ряд. Подвигаем вверх нижнюю границу. 
yMax --; 
// Если верхняя граница совпала с нижней, то заканчиваем цикл. 
if (yMin == yMax) 
break; 

// Заполняем левый ряд снизу вверх. 
for (y = yMax - 1; y >= yMin; y--) 
pMatrix[xMin + y * m] = i++; 
// Заполнили весь левый ряд. Подвигаем направо левую границу. 
xMin ++; 
// Если правая граница совпала с левой, то заканчиваем цикл. 
if (xMax == xMin) 
break; 
// если мы все еще здесь, значит идем на очередной виток спирали.. . 


// Есть предположение, что спираль заполнена. Напечатаем ее, посмотреть.. . 
for (y = 0; y < n; y++) 

// Печатаем строку. 
for (x = 0; x < m; x++) 
printf ("i, ", pMatrix[x + y * m]); 
// Переходим на другую строку. 
printf ("\r\n"); 


// Освобождаем память и выходим. 
free (pMatrix); 
pMatrix = 0; 
0,0(0 оценок)
Ответ:
Eennoottt
Eennoottt
16.10.2022 01:22

617 единиц

Объяснение:

Запишем все четыре слагаемых в виде степеней двойки:

1) 8^{208}=(2^{3})^{208}=2^{(3*208)}=2^{624}

в двоичном виде это единица и 624 нуля

2) -4^{300}=-(2^{2})^{300}=-2^{(2*300)}=-2^{600}

в двоичном виде это минус единица и 600 нулей

3) 2^{2754}

в двоичном виде это единица и 2754 нуля

4) -128=-2^{7}

в двоичном виде это -10000000 (минус единица и 7 нулей)

Берём двоичное слагаемое с наибольшим абсолютным значением:

1000...(всего 2754 нуля)

Начали с положительного, к нему прибавим ещё одно положительное:

1000...(всего 624 нуля)

Получим следующее число:

1...(2754 -1 -624 нулей)...1...(624 нуля)

Посчитаем нули (а единиц там только две):

1...(2129 нулей)...1...(624 нуля)

Теперь пошли отрицательные. Вычитаем следующее значение:

1000...(всего 600 нулей)

Чтобы вычесть, придётся занять у ближайшего старшего разряда с единицей (у той единицы, которая после 624 нулей). Она заменится на ноль, а после неё все нули заменятся на единицы, после которых будут идти 600 нулей в конце). Вот что получится:

1...(2129 +1 нулей)...(624 -600 единиц)...(600 нулей)

Посчитав, получим всего 25 единиц в числе:

1...(2130 нулей)...(24 единицы)...(600 нулей)

Далее, вычитаем следующее значение:

10000000 (единица и 7 нулей)

Действуем, так же, как вычитали только что (занимаем у последней из 24-ёх единиц) -она заменится на ноль, а после неё нули заменятся на единицы почти до конца (в конце будет семь нулей):

1...(2130 нулей)...(24 -1 единиц)...0...(600 -7 единиц)...(7 нулей)

Посчитав, получим такое число:

1...(2130 нулей)...(23 единицы)...0...(593 единицы)...(7 нулей)

И, количество единиц в этом числе равно:

1 + 23 + 593 = 617 единиц

Тот же результат я получил и в программе на Паскале (проверял в PascalABC.NET 3.4.2). Скрин этого можно посмотреть ниже (там же можно посмотреть, как полностью выглядит получившееся двоичное число).


Сколько единиц в двоичной записи числа 8^208  – 4^300  + 2^2754  – 128? ​
0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота