IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> формирование вектора чередованием элементов
18192123
сообщение 5.01.2007 15:55
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Дана квадратная матрица порядка n. Сформировать вектор х, где чередуются положительные и отрицательные элементы из матрицы (вектор х начинается с отрицательного элемента)

(задача решается только с использованием массивов, процедур)

Я думаю вначале нужно найти первый отрицательный элемент, тогда в векторе х положительные элементы будут занимать чётные позиции ( а как реализовать насчёт позициий - не знаю)

И ещё: число положительных и отрицательных не во всех случаях равно, эти варианты то же нужно учесть или этого можно избежать?

Подскажите пожалуйста!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 5.01.2007 16:51
Сообщение #2


Гость






Цитата
(Я так рассуждала - если, например количество положительных больше ,то оставшиеся из них просто будут приписывать в конец вектора....)
yes2.gif Именно это и будет происходить в случае, который я тебе описывал... Смотри, вот основной цикл:


i_neg := 1; { <--- Начальная позиция, с которой пишем отриц. элементы }
i_pos := 2; { <--- Начальная позиция, с которой пишем положит. элементы }
for i := 1 to n do
for j := 1 to n do
if mx[i, j] > 0 then begin
vec[i_pos] := mx[i, j];
{
Если i_pos < 2*neg, то i_pos увеличить на 2, иначе на 1,
ибо больше отриц. эл-тов уже нет
}
inc(i_pos, 1 + byte(i_pos < 2 * neg));
end
{ То же самое, только для отрицательных эл-тов }
else begin
vec[i_neg] := mx[i, j];
inc(i_neg, 1 + byte(i_neg < 2 * pos));
end;


У меня
neg - число отриц. эл-тов в матрице
pos - число положит. эл-тов (pos := N*N - neg)
 К началу страницы 
+ Ответить 
18192123
сообщение 5.01.2007 17:10
Сообщение #3


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(volvo @ 5.01.2007 16:51) *




+ byte(i_pos < 2 * neg);



именно эта конструкция позволяет увеличивать i_pos на два если i_pos < 2 * neg? Я правильно поняла?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 2:32
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"