Помогите сформировать вектор
|
|
Здравствуйте, помогите пожалуйста доделать задачу, или дайте ссылку на хороший материал по теме.
Дана квадратная матрица порядка n(n=10).Сформировать вектор x так, чтобы в нем чередовались положительные и отрицательные элементы из матрицы n. Первый элемент отрицательный.
При решение задачи нужно учесть вот это. Разбить задачу на подзадачи, таким образом, чтобы решение каждой подзадачи описывалось процедурой, а основная программа состояла бы из последовательности вызова процедур.
Code Program Lab_5; uses crt; const n=10; var a: array[1..n, 1..n] of integer; i,j,b,: integer; procedure matrix; begin randomize; for i:=1 to n do for j:=1 to n do a[i,j]:=random(19)-9; end; procedure write_matrix; begin for i:=1 to n do begin for j:=1 to n do write(a[i,j]:2,' '); writeln; writeln; end; end; begin clrscr; matrix; write_matrix; readln; end.
На данный момент готовы две процедуры. Одна создаёт матрицу 10x10 из положительных и отрицательных элементов. Вторая её красиво отображает.
Необходимо сформировать вектор, чтобы в нем чередовались положительные и отрицательные элементы из матрицы.
|
|
|
а в чём, собственно, проблема?
Нужна помощь? Сюда: vkontakte.ru/berestovskiy
|
|
|
В том, что только начинаю учить массивы.
Code Program Lab_5; uses crt; const n=10; var a: array[1..n, 1..n] of integer; pos,neg,x: array[1..100] of integer; i,j,k,z,y,t: integer; procedure matrix; begin randomize; for i:=1 to n do for j:=1 to n do a[i,j]:=random(19)-9; end; procedure write_matrix; begin for i:=1 to n do begin for j:=1 to n do write(a[i,j]:2,' '); writeln; writeln; end; end; procedure vector; begin k:=0; z:=0; for j:=1 to n do begin for i:=1 to n do begin if a[i,j] > 0 then begin k:=k+1; pos[k]:=a[i,j]; end; if a[i,j] < 0 then begin z:=z+1; neg[z]:=a[i,j]; end; end; end; t:=k+z; for i:=1 to t do begin if i mod 2 =0 then begin x[i]:=pos[i div 2]; end; if odd(i) then begin x[i]:=neg[i div 2+1]; end; end;
writeln('Положительный массив'); for i:=1 to k do begin write (pos[i]:3);end;writeln; writeln('Отрицательный массив); for i:=1 to z do begin write (neg[i]:3);end;writeln;
writeln('Вектор'); for i:=1 to t do begin if x[i]<> 0 then write (x[i]:3);end; end;
begin clrscr; matrix; write_matrix; vector; readln; end.
Немного поработал над кодом, теперь создаются сначала два массива, один с положительными элементами, другой с отрицательными. Так вот эти два массива создаются нормально, а когда я объединяю их в необходимый мне массив, то чередование происходит нормально, но после того как чередование закончилось выводится остаток(положительные или отрицательные элементы), и они почему-nо обрубаются?
№ 3 | Автор: Freedo |
2012-11-13, 13:06 | Изменено: Freedo - Вт, 2012-11-13, 13:07
|
Репутация: [ + 0 ]
|
|
|
Ладно, давай иначе: Какой должен быть результат программы?
Нужна помощь? Сюда: vkontakte.ru/berestovskiy
|
|
Нужна помощь? Сюда: vkontakte.ru/berestovskiy
|
|
|
Задание. Дана квадратная матрица порядка n(n=10).Сформировать вектор x так, чтобы в нем чередовались положительные и отрицательные элементы из матрицы n. Первый элемент отрицательный.
На основе матрицы создаются два массива, один отрицательный, другой положительный. Потом эти массивы объединяются в один, который и нужен нам по заданию. Элементы чередуются нормально, но либо положительные, либо отрицательные заканчиваются раньше других, и их остаток выводится к конце строки.
То есть, допустим у нас два массива.
1 2 3 4 5
-1 -2 -3 -4 -5 -6 -7 -8 -9
После их объединения должно получиться
-1 1 -2 2 -3 3 -4 4 -5 5 -6 -7 -8 -9
Пока элементов поровну, они чередуются, когда положительные элементы заканчиваются, отрицательные просто выводятся по порядку.
Но в данном случае мы получаем вот такой массив.
-1 1 -2 2 -3 3 -4 4 -5 5 -6 -7
Можно ли получить вектор содержащий
-1 1 -2 2 -3 3 -4 4 -5 5 -6 -7 -8 -9 или -1 1 -2 2 -3 3 -4 4 -5 5 а не то что получается здесь -1 1 -2 2 -3 3 -4 4 -5 5 -6 -7
|
|
|
Что-то я опять не понял)) Напиши как получается и как ты хочешь что-бы получалось..
Нужна помощь? Сюда: vkontakte.ru/berestovskiy
|
|
|
Допустим получили из матрицы два массива.
5 4 7 3 5 7 5 5 3 7 3 5 1 4 7 8 9 4 9
-3 -1 -5 -9 -3 -5
После объединения выводится
-3 5 -1 4 -5 7 -9 3 -3 5 -5 5 5 3 7 3
Должно выводится
-3 5 -1 4 -5 7 -9 3 -3 5 -5 5 5 3 7 3 5 1 4 7 8 9 4 9
Тоесть программа теряет какую-то часть хвоста. а хотелось бы что-бы остаток выводился целиком.
Объяснил как смог, надеюсь понятно получилось.
№ 7 | Автор: Freedo |
2012-11-13, 17:11 | Изменено: Freedo - Вт, 2012-11-13, 17:12
|
Репутация: [ + 0 ]
|
|
|
Смотри: 5 4 7 3 5 7 5 5 3 7 3 5 1 4 7 8 9 4 9 - это массив А1 размерностью n -3 -1 -5 -9 -3 -5 - это массив А2 размерностью m Новый массив А3 должен быть размерность n+m что-бы ничего не терялось..))
Нужна помощь? Сюда: vkontakte.ru/berestovskiy
|
|
|
|
ну так что не понятного?) приступай))
Нужна помощь? Сюда: vkontakte.ru/berestovskiy
|
|
|