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

Объясните (ОЧЕНЬ подробно следующий код о соортировке массива слиянием, написанный на языке программирования C#:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp4
{
class Program
{
static void Main(string[ ] args)
{
int[ ] arr = { 3, 5, 1, 5, 1, 7, 2 };
foreach (int a in arr)
Console.Write(a + " "); Console.ReadKey();
CycleMergeSort(ref arr);
Console.WriteLine();
foreach (int a in arr)
Console.Write(a + " "); Console.ReadKey();
}

static void CycleMergeSort(ref int[ ] arr)
{
for (int size = 1; size < arr.Length; size *= 2)
for (int i = 0; i < arr.Length; i += size * 2)
MergeSorted(ref arr, i, size);
}

static void MergeSorted(ref int[ ] arr, int startIndex, int leftLength) // leftLength - длина объединяемого массива
{
int rightLength = arr.Length - startIndex - leftLength;
if (leftLength < rightLength)
rightLength = leftLength;
if (rightLength <= 0)
return;
int[ ] result = new int[leftLength + rightLength];
for (int l = 0, r = 0; l < leftLength || r < rightLength;)
{
if (r == rightLength || l != leftLength && arr[startIndex + l] < arr[startIndex + leftLength + r])
{
result[l + r] = arr[startIndex + l];
l++;
}
else
{
result[l + r] = arr[startIndex + leftLength + r];
r++;
}
}
for (int i = 0; i < leftLength + rightLength; i++)
arr[i + startIndex] = result[i];
}
}
}

👇
Открыть все ответы
Ответ:
DarKerThanBlaCK34
DarKerThanBlaCK34
21.05.2023

55:5=11

365:11≈33(34) берём "34", чтобы перехлестнуть 365.

Так как 11-ый член является замыкающим (перехлёстывающим 365), тогда смотрим по ближайшим:

34*10=340 (340+34=374) - подходит, но это не максимум!

365 mod 10= 36, а это значит, что последующий член будет больше 365, а именно 395.

В задании сказано, что d должно быть максимальным, а "34" - это допустимое, но не максимально число, удовлетворяющее условию, даже минимальное (по результату).

Проверка:

34*11=374, значит, когда на экране выведется s:=340, n:=50, то, зайдя по следующему циклу, получится, что s:= 374, n:=55. На следующий цикл программа не пойдёт.

ответ: d=34. 

4,5(52 оценок)
Ответ:
про739
про739
21.05.2023

procedure CalcArray (const Ax: array of Integer; var S: Integer; var M: Real); // var в параметрах означает, что переменная используется для возврата значения

var

i, c: Integer;

begin

S := 0;

c := 0;

for i := 0 to High (Ax) do begin

S := S + Ax [i]; // здесь накапливаем сумму элементов

c := c + 1;

end;

M := S / c; // когда найдена сумму, рассчитываем среднеарифметическое

end;

var

A: array [0..4] of Integer; // размерность массивов можно делать любой, но начинаться с 0

B: array [0..14] of Integer;

C: array [0..9] of Integer;

i, s: Integer;

m: Real;

begin

SetConsoleCP (1251);

SetConsoleOutputCP (1251);

Randomize; // инициализация датчика случайных чисел

WriteLn ('Массив 1:');

for i := Low (A) to High (A) do begin

A [i] := Random (10); // заполняем элементы массива случайными значениями

Write (IntToStr (A [i]) + ' '); // выводим их для просмотра

end;

CalcArray (A, s, m); // вызов процедуры

WriteLn; // показываем возвращаемые из функции переменные

WriteLn ('Сумма элементов = ' + IntToStr (s));

WriteLn ('Среднеарифметическое = ' + FloatToStr (m));

WriteLn; // аналогично поступаем с другими массивами

WriteLn ('Массив 2:');

for i := Low (B) to High (B) do begin

B [i] := Random (10);

Write (IntToStr (B [i]) + ' ');

end;

CalcArray (B, s, m);

WriteLn;

WriteLn ('Сумма элементов = ' + IntToStr (s));

WriteLn ('Среднеарифметическое = ' + FloatToStr (m));

WriteLn;

WriteLn ('Массив 3:');

for i := Low (C) to High (C) do begin

C [i] := Random (10);

Write (IntToStr (C [i]) + ' ');

end;

CalcArray (C, s, m);

WriteLn;

WriteLn ('Сумма элементов = ' + IntToStr (s));

WriteLn ('Среднеарифметическое = ' + FloatToStr (m));

end.

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