Водномерном массиве, состоящем из n вещественных элементов , вычислить номер максимального элемента массива; произведение элементов массива расположенных между первым и вторым нулевыми элементами.
// PascalABC.NET 3.2, сборка 1492 от 03.07.2017 // Внимание! Если программа не работает, обновите версию!
begin var a:=ArrRandom(ReadInteger('n='),-5,5).Select(m->m/10).ToArray; a.Println; Writeln('Номер максимального элемента ',a.IndexMax+1); var s:=a.IndexesOf(x->x=0).Take(2); if s.Count<2 then Writeln('Массив не содержит двух нулей') else if s.First+1=s.Last then Writeln('Нулевые элементы соседствуют') else Writeln('Произведение элементов между первой парой нулей ', a[s.First+1:s.Last].Aggregate(1.0,(x,y)->x*y)) end.
Пример n= 15 0.1 -0.4 0 -0.3 0.1 0.2 0 -0.5 -0.5 0.2 -0.3 -0.3 0.5 0.4 0.5 Номер максимального элемента 13 Произведение элементов между первой парой нулей -0.006
N = 20 Dim mas(20) S = "" Randomize For i = 1 To N mas(i) = Round(Rnd(100) * 100) If mas(i) > 90 Then mas(i) = 0 End If S = S + Str(mas(i)) + "," Next i
'Поиск номера максимального элемента maxindex = 1 'предполагаем что максимальное число в первом элементе массива 'поиск номеров первого и последующего нулей indF0 = -1: indL0 = -1
For i = 1 To N
If mas(i) > mas(maxindex) Then maxindex = i End If If mas(i) = 0 Then If indF0 = -1 Then indF0 = i Else If indL0 = -1 Then indL0 = i End If End If End If Next i 'вычисление произведения
multiplication = 1
If (indL0 = -1) Or (indF0 = -1) Or (indF0 + 1 = indL0) Then MsgBox "Нулей или чисел между нулями нет" Else For i = indF0 + 1 To indL0 - 1 multiplication = multiplication * mas(i) Next i MsgBox "произведение чисел находящихся между первым и следующим нулями" + Str(multiplication) End If
MsgBox "последовательность чисел " + S + " номер максимального элемента " + Str(maxindex)
End Sub
Sub test() Mass_Task End Sub
'-Пример-------------------------------------------------------------------- Произведение 3532800 Последовательность 6,58,83,12,84,87,34,68,16,17,0,60,40,64,23,0,0,49,58,42 Номер максимального элемента 6
Векторное представление заключается в описании элементов изображения математическими кривыми с указанием их цветов и заполняемости (например, круг и окружность – разные фигуры). Красный эллипс на белом фоне будет описан всего двумя математическими формулами – прямоугольника и эллипса соответствующих цветов, размеров и местоположения. Очевидно, такое описание займет значительно меньше места, чем в первом случае. Еще одно преимущество – качественное масштабирование в любую сторону. Увеличение или уменьшение объектов производится увеличением или уменьшением соответствующих коэффициентов в математических формулах. К сожалению векторный формат становится невыгодным при передаче изображений с большим количеством оттенков или мелких деталей (например, фотографий). Ведь каждый мельчайший блик в этом случае будет представляться не совокупностью одноцветных точек, а сложнейшей математической формулой или совокупностью графических примитивов, каждый из которых, является формулой. Это приводит к утяжелению файла. Кроме того, перевод изображения из растрового в векторный формат (например, программой Adobe Strime Line или Corel OCR-TRACE) приводит к наследованию последним невозможности корректного масштабирования в большую сторону. От увеличения линейных размеров количество деталей или оттенков на единицу площади больше не становится. Это ограничение накладывается разрешением вводных устройств (сканеров, цифровых фотокамер и др.).
Var mas:array[1..1000, 1..1000] of integer; N,M,i,j,k:integer;
Begin Writeln('Введите размер матрицы N*M'); Write('N = '); readln(N); Write('M = '); readln(M);
if (M>1000) or (N>1000) or (M<1) or (N<1) then Writeln('Ошибка, указанные значения выходят за пределы матрицы') else Begin Writeln('Введите элементы матрицы');
k:=0; for i:=1 to N do for j:=1 to M do Begin readln(mas[i,j]); if (mas[i,j] mod 2 = 0) then k:=k+1; end;
Writeln(); Writeln('Исходная матрица');
for i:=1 to N do Begin for j:=1 to M do Begin Write(mas[i,j], ' ') end; Writeln(); end;
Writeln(); Writeln('Количество четных элементов = ',k); end;
// Внимание! Если программа не работает, обновите версию!
begin
var a:=ArrRandom(ReadInteger('n='),-5,5).Select(m->m/10).ToArray;
a.Println;
Writeln('Номер максимального элемента ',a.IndexMax+1);
var s:=a.IndexesOf(x->x=0).Take(2);
if s.Count<2 then Writeln('Массив не содержит двух нулей')
else if s.First+1=s.Last then Writeln('Нулевые элементы соседствуют')
else
Writeln('Произведение элементов между первой парой нулей ',
a[s.First+1:s.Last].Aggregate(1.0,(x,y)->x*y))
end.
Пример
n= 15
0.1 -0.4 0 -0.3 0.1 0.2 0 -0.5 -0.5 0.2 -0.3 -0.3 0.5 0.4 0.5
Номер максимального элемента 13
Произведение элементов между первой парой нулей -0.006