Новые сообщения · Правила  
  • Страница 1 из 1
  • 1
Модератор форума: Berestovskiy  
Помогите сформировать вектор
Здравствуйте, помогите пожалуйста доделать задачу, или дайте ссылку на хороший материал по теме.

Дана квадратная матрица порядка 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 из положительных и отрицательных элементов. Вторая её красиво отображает.

Необходимо сформировать вектор, чтобы в нем чередовались положительные и отрицательные элементы из матрицы.
1 | Автор: Freedo | 2012-11-13, 10:34   |  Репутация: [ + 0 ]
а в чём, собственно, проблема?

Нужна помощь? Сюда: vkontakte.ru/berestovskiy
2 | Автор: Berestovskiy | 2012-11-13, 11:43   |  Репутация: [ + 211 ]
В том, что только начинаю учить массивы.

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
4 | Автор: Berestovskiy | 2012-11-13, 15:06   |  Репутация: [ + 211 ]


Нужна помощь? Сюда: vkontakte.ru/berestovskiy
4 | Автор: Berestovskiy | 2012-11-13, 15:06   |  Репутация: [ + 211 ]
Задание. Дана квадратная матрица порядка 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
5 | Автор: Freedo | 2012-11-13, 16:18   |  Репутация: [ + 0 ]
Что-то я опять не понял))
Напиши как получается и как ты хочешь что-бы получалось..


Нужна помощь? Сюда: vkontakte.ru/berestovskiy
6 | Автор: Berestovskiy | 2012-11-13, 17:04   |  Репутация: [ + 211 ]
Допустим получили из матрицы два массива.

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
8 | Автор: Berestovskiy | 2012-11-13, 18:06   |  Репутация: [ + 211 ]
Да
9 | Автор: Freedo | 2012-11-13, 19:24   |  Репутация: [ + 0 ]
ну так что не понятного?) приступай))

Нужна помощь? Сюда: vkontakte.ru/berestovskiy
10 | Автор: Berestovskiy | 2012-11-13, 19:41   |  Репутация: [ + 211 ]
  • Страница 1 из 1
  • 1
Поиск: