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.
Поделитесь своими знаниями, ответьте на вопрос:
Объясните (ОЧЕНЬ подробно следующий код о соортировке массива слиянием, написанный на языке программирования 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]; } }}
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.