В одномерном массиве, состоящем из n вещественных элементов , вычислить номер максимального элемента массива; произведение элементов массива расположенных между первым и вторым нулевыми элементами.
vunderkid:
какой язык использовать
вундеркиндский))
Ответы
Ответ дал:
0
// 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
// Внимание! Если программа не работает, обновите версию!
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
Использование готовых классов сводит написание алгоритмов к изучению использования функций...
Смешно. А ничего, что все базовые типы, процедуры ввода-вывода и т.д. в PascalABC.NET - это тоже "готовые классы"?
И второе. Никому не интересно стократное (ибо в каждой задаче) написание одних и тех же алгоритмов поиска максимума, минимума, индекса, сортировки и т.д. Посему это и включено в язык. Заметьте: не во внешнюю подключаемую библиотеку, как в Питоне, например, а именно в ядро. С тем, чтобы не нарушать требований ЕГЭ и олимпиад использовать лишь СТАНДАРТНЫЕ базовые библиотеки.
А алгоритм решения задачи - что же, он прекрасно виден. Что им как ищется, что откуда берется.
Ответ дал:
0
Sub Mass_Task()
'Заполнение массива
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
'Заполнение массива
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
Приложения:
Я вам и не указываю ничего.
"Займитесь своим делом" - это не Ваши слова?
Откуда Вам знать, может это и мое дело тоже?
Если модераторы не знают чем архивариусы должны заниматься, то наверное это ваша личная проблема.
Судя по всему ваше дело - соблюдать субординацию и не соваться
"Нормальный" такой вывод через всплывающее окно! Первым выводится некое произведение, чтобы его проверить, надо на бумажке записать. Ну да ладно, это одно число. Далее окно схлопывается, выводится сам массив. Хорошо, проверили все. Теперь окно снова схлопнулось и появилось сообщение о максимальном элементе. Вот только посмотреть уже негде... массив-то исчез с экрана!
Почему Вы не думаете, когда конструируете вывод ?
Внимательность тренируйте. Она очень часто бывает требуема.
Вы считаете это содержательным ответом?
Я считаю с помощью калькулятора и ещё раз говорю что ответ недоступен для изменения и форматирования.
Вас заинтересует
1 год назад
2 года назад
3 года назад
3 года назад
9 лет назад
9 лет назад