Поиск элементов массива
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Ребята,помогите,пожалуйста,бедному студенту,нужно написать программу поиска первого и последнего подходящих элементов массива.Я только учусь программированию и не понимаю как это написать(((((((((((((
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Что значит подходящих? Можно более точную формулировку задания?
По поводу самостоятельной реализации задачи. Что именно не получается? Циклы изучал? Условия изучал? Массивы изучал? "Только учусь программированию и не понимаю, как это писать" - это вовсе не отмазки и не повод для того, чтобы не открыть методичку и не прочитать две страницы элементарного текста. Сделай это и затем приходи с уточнённым заданием, и будем выяснять, как это написать.
По поводу самостоятельной реализации задачи. Что именно не получается? Циклы изучал? Условия изучал? Массивы изучал? "Только учусь программированию и не понимаю, как это писать" - это вовсе не отмазки и не повод для того, чтобы не открыть методичку и не прочитать две страницы элементарного текста. Сделай это и затем приходи с уточнённым заданием, и будем выяснять, как это написать.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Мне нужно найти первый или последний подходящий(например,положительный)элементы массива.Все изучал,и циклы и условия,и методичка сейчас передо мной лежит,а как написать ее(Эту программу) именно в Си я не понимаю
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Ага, то есть проблема в том, как алгоритмически определить первый и последний элемент, верно? Хорошо, давай подумаем над твоей проблемой. Примеры кода буду приводить на выдуманном алгоритмическом языке, чтобы не давать готового решения. Всё ради тебя, чтобы ты учился, а не бездумного копировал код и предъявлял преподавателю.
Смотри, если мы пойдём в лобовую и напишем первое, что нам придёт в голову:
То в этом случае условие, котороые проверяется в условном операторе, будет отрабатывать для каждого элемента массива и, если у нас есть несколько элементов массива, которые удовлетворяют этому условию, присвоение будет вызываться для каждого из них, и каждый раз переменная Значение будет перетираться. Поэтому после окончания цикла в переменной Значение у нас будет сохранёно значение последнего элемента массива, удовлетворяющего условию. И так, половина дела сделана - последний элемент определён.
Теперь вопрос в том, как определить первый. Очевидно, что нам нужно разрешить первое присваивание в цикле, но запретить все последующие. То есть нам нужна отдельная переменная, которая будет помнить о том, происходило ли уже присваивание или нет. Для этих целей идеально подходит тип bool из C++, который может принимать лишь два значения true (истина) или false (ложь). Положим true - присваивание уже выполнялось, false - ещё не выполнялось. Модифицируем наш код.
Давай проанализируем, что получилось. Когда условие выполнится первый раз, то переменная УсловиеВыполнено у нас ещё false, поэтому выражение (не УсловиеВыполнено) у нас будет true, поэтому мы зайдём внутрь уловия и поместим значение в ПервыйЭлемент. Затем переменная-флажок УсловиеВыполнено будет высталвена в true, так что все последующие разы мы перетирать значение переменной ПервыйЭлемент не будем. Переменная же ПоследнийЭлемент будет, как и в первом примере, присваиваться бузусловно, так что после окончания работы цикла действительно будет хранить последний элемент массива, удовлетворяющий нашему условию. В общем, всё очень похоже на правду.
Пробуй реализовать предоставленный алгоритм и задавай вопросы, если что-то не будет получаться.
Смотри, если мы пойдём в лобовую и напишем первое, что нам придёт в голову:
Код: Выделить всё
ТипЭлементаМассива Значение;
Цикл (по массиву)
{
Если (какое-то условие) To
{
Значение = ТекущийЭлементМассива;
}
}
Напечатать "Значение =", Значение;
Теперь вопрос в том, как определить первый. Очевидно, что нам нужно разрешить первое присваивание в цикле, но запретить все последующие. То есть нам нужна отдельная переменная, которая будет помнить о том, происходило ли уже присваивание или нет. Для этих целей идеально подходит тип bool из C++, который может принимать лишь два значения true (истина) или false (ложь). Положим true - присваивание уже выполнялось, false - ещё не выполнялось. Модифицируем наш код.
Код: Выделить всё
bool УсловиеВыполнено = false;
ТипЭлементаМассива ПерыйЭлемент, ПоследнийЭлемент;
Цикл (по массиву)
{
Если (какое-то условие)
{
Если (не УсловиеВыполнено)
{
ПервыйЭлемент = ТекущийЭлементМассива;
УсловиеВыполнено = true;
}
ПоследнийЭлемент = ТекущийЭлементМассива;
}
}
Если (УсловиеВыполнено)
{
Напечатать "Первый элемент = ", ПервыйЭлемент;
Напечатать "Последний элемент = ", ПоследнийЭлемент;
}
Иначе
{
Напечатать "Условие не выполнено ни для одного элемента массива";
}
Пробуй реализовать предоставленный алгоритм и задавай вопросы, если что-то не будет получаться.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Вместо того, чтобы постоянно присваивать значение переменной, которое там и так есть - можно выполнить оптимизацию и не тратить лишнее процессорное время:
Код: Выделить всё
Если (какое-то условие)
{
Если (не УсловиеВыполнено)
{
ПервыйЭлемент = ТекущийЭлементМассива;
УсловиеВыполнено = true;
}
Последний = ТекущийЭлементМассива;
}
It's a long way to the top if you wanna rock'n'roll
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Да, это я уже поправил. Ещё до того, как увидел твоё сообщение 

Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Спасибо вам большое,я разобралась,построила алгоритм,проверила,вроде все работает)))