Ага, то есть проблема в том, как алгоритмически определить первый и последний элемент, верно? Хорошо, давай подумаем над твоей проблемой. Примеры кода буду приводить на выдуманном алгоритмическом языке, чтобы не давать готового решения. Всё ради тебя, чтобы ты учился, а не бездумного копировал код и предъявлял преподавателю.
Смотри, если мы пойдём в лобовую и напишем первое, что нам придёт в голову:
Код: Выделить всё
ТипЭлементаМассива Значение;
Цикл (по массиву)
{
Если (какое-то условие) To
{
Значение = ТекущийЭлементМассива;
}
}
Напечатать "Значение =", Значение;
То в этом случае условие, котороые проверяется в условном операторе, будет отрабатывать для каждого элемента массива и, если у нас есть несколько элементов массива, которые удовлетворяют этому условию, присвоение будет вызываться для каждого из них, и каждый раз переменная Значение будет перетираться. Поэтому после окончания цикла в переменной Значение у нас будет сохранёно значение последнего элемента массива, удовлетворяющего условию. И так, половина дела сделана - последний элемент определён.
Теперь вопрос в том, как определить первый. Очевидно, что нам нужно разрешить первое присваивание в цикле, но запретить все последующие. То есть нам нужна отдельная переменная, которая будет помнить о том, происходило ли уже присваивание или нет. Для этих целей идеально подходит тип bool из C++, который может принимать лишь два значения true (истина) или false (ложь). Положим true - присваивание уже выполнялось, false - ещё не выполнялось. Модифицируем наш код.
Код: Выделить всё
bool УсловиеВыполнено = false;
ТипЭлементаМассива ПерыйЭлемент, ПоследнийЭлемент;
Цикл (по массиву)
{
Если (какое-то условие)
{
Если (не УсловиеВыполнено)
{
ПервыйЭлемент = ТекущийЭлементМассива;
УсловиеВыполнено = true;
}
ПоследнийЭлемент = ТекущийЭлементМассива;
}
}
Если (УсловиеВыполнено)
{
Напечатать "Первый элемент = ", ПервыйЭлемент;
Напечатать "Последний элемент = ", ПоследнийЭлемент;
}
Иначе
{
Напечатать "Условие не выполнено ни для одного элемента массива";
}
Давай проанализируем, что получилось. Когда условие выполнится первый раз, то переменная УсловиеВыполнено у нас ещё false, поэтому выражение (не УсловиеВыполнено) у нас будет true, поэтому мы зайдём внутрь уловия и поместим значение в ПервыйЭлемент. Затем переменная-флажок УсловиеВыполнено будет высталвена в true, так что все последующие разы мы перетирать значение переменной ПервыйЭлемент не будем. Переменная же ПоследнийЭлемент будет, как и в первом примере, присваиваться бузусловно, так что после окончания работы цикла действительно будет хранить последний элемент массива, удовлетворяющий нашему условию. В общем, всё очень похоже на правду.
Пробуй реализовать предоставленный алгоритм и задавай вопросы, если что-то не будет получаться.