формирование вектора чередованием элементов |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
формирование вектора чередованием элементов |
18192123 |
Сообщение
#1
|
Профи Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: 2 |
Дана квадратная матрица порядка n. Сформировать вектор х, где чередуются положительные и отрицательные элементы из матрицы (вектор х начинается с отрицательного элемента)
(задача решается только с использованием массивов, процедур) Я думаю вначале нужно найти первый отрицательный элемент, тогда в векторе х положительные элементы будут занимать чётные позиции ( а как реализовать насчёт позициий - не знаю) И ещё: число положительных и отрицательных не во всех случаях равно, эти варианты то же нужно учесть или этого можно избежать? Подскажите пожалуйста!!! |
volvo |
Сообщение
#2
|
Гость |
Ну, начать-то наверное, надо с того, что посчитать количество отрицательных элементов матрицы... Тогда ты сможешь сделать один простой цикл (пройти по матрице, в случае положительного элемента увеличивая индекс положительных, четный, на 2 или 1 в зависимости от количества отрицательных элементов в матрице; аналогично - для отрицательных индексов...)
Объяснить - гораздо сложнее чем сделать, но все же попробуй понять, что тут написано, и реализовать это... Вся программа (с выводом результата) заняла у меня всего 30 строк... |
18192123 |
Сообщение
#3
|
Профи Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: 2 |
в случае положительного элемента увеличивая индекс положительных, четный, на 2 или 1 в зависимости от количества отрицательных элементов в матрице вот основного я как раз и не смогла понять.... почему на 1 или 2? (Я так рассуждала - если, например количество положительных больше ,то оставшиеся из них просто будут приписывать в конец вектора....) |
volvo |
Сообщение
#4
|
Гость |
Цитата (Я так рассуждала - если, например количество положительных больше ,то оставшиеся из них просто будут приписывать в конец вектора....) Именно это и будет происходить в случае, который я тебе описывал... Смотри, вот основной цикл:
У меня neg - число отриц. эл-тов в матрице pos - число положит. эл-тов (pos := N*N - neg) |
18192123 |
Сообщение
#5
|
Профи Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: 2 |
|
volvo |
Сообщение
#6
|
Гость |
Поскольку если i_pos < 2 * neg есть True, а значение Byte(True) = 1, и Byte(False) = 0, то вот такая конструкция:
inc(i_pos, 1 + byte(i_pos < 2 * neg)); аналогична: if i_pos < 2 * neg then inc(i_pos, 1 + 1) else inc(i_pos, 1 + 0) (а если результат одинаков - зачем набирать больше текста? ) |
18192123 |
Сообщение
#7
|
Профи Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: 2 |
Большое спасибо! Насчёт заполнения вектора - я всё поняла (урааа!!! )
Но у меня возник очень глупый вопрос: а как вывести элементы сформированного вектора? ( ведь когда заполняем вектор отрицательными элементами использовали vec[i_neg], а с положительными vec[i_pos] |
volvo |
Сообщение
#8
|
Гость |
Ну, и что? Это ведь ты для заполнения использовала эти индексы... А после заполнения просто проходи от 1 до N*N и распечатывай все подряд...
|
18192123 |
Сообщение
#9
|
Профи Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: 2 |
|
Текстовая версия | 18.09.2024 12:27 |