Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 06.10.2016
Сообщений: 16

Из одномерного массива составить двумерный

06.10.2016, 16:14. Показов 1554. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Изначально был дан рандомно формирующийся двумерный массив "А" . Из него нужно было образовать 2 одномерных массива: один с положительными элементами массива "А", другой с отрицательными.
С эти проблем нет - код приложен.

Объясните пож-та, как дальше из полученных двух одномерных массивов создать новых два двумерных массива?, которые будут содержать уже элементы именно одномерных массивов. Т.е. 1 двумерный массив - только отрицательные эл-ты, другой только положительные.

Нужно чтобы все шло по цепочке: рандомный двумерный -> из него 2 одномерных -> из них 2 новых двумерных.

Вот мой код (сильно не ругайтесь я еще совсем новичок)
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Program Primer_x;
const n=4;
const m=4;
var a: array[1..n,1..m] of integer;
var b:array [1..200] of integer;
var c:array [1..200] of integer;
i, j, x, y, sum: integer;
 
begin
 
x:=1;
y:=1;
 
    for i:=1 to n do begin
     for j:=1 to m do begin
       a[i,j]:=-100+random(201);
       write(a[i,j]:4,' ');
         if (a[i,j]<0) and (a[i,j]<>0)then begin b[x]:=a[i,j]; inc(x); end
         else if (a[i,j]>0) and (a[i,j]<>0) then begin c[y]:=a[i,j]; inc(y); end;
     end;
     writeln;
  end;
writeln;
 
writeln ('Массив из отрицательных чисел: ');
write ('[ ');
for i:=1 to x-1 do write (b[i]:3,' ');
writeln (']'); 
writeln;
 
writeln ('Массив из положительных чисел: ');
write ('[ ');
for i:=1 to y-1 do write (c[i]:3,' ');
writeln (']'); 
writeln;
end.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.10.2016, 16:14
Ответы с готовыми решениями:

Преобразование одномерного массива в двумерный
У меня есть одномерный массив из 15 целых чисел A=12 43 45 87 98 52 72 4 90 15 17 31 7 54 77. Нужно из него сделать двумерный из 3 строк...

из одномерного массива сформировать двумерный
из одномерного массива (1 2 3 4 5) сформировать двумерный (1 2 3 4 5) (2 3 4 5 1) (3 4 5 1 2) и так до конца. Не пойму как это...

Помогите Составить программу заполнения одномерного массива.
Составить программу заполнения одномерного массива случайными числами в диапазоне от 0 до 12 с выводом результирующего массива на экран и...

12
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
06.10.2016, 16:25
Цитата Сообщение от LandStalker Посмотреть сообщение
из полученных двух одномерных массивов создать новых два двумерных массива?,
А как определить размер новых двухмерных массивов?
1
0 / 0 / 0
Регистрация: 06.10.2016
Сообщений: 16
06.10.2016, 17:48  [ТС]
Не знаю, он не может формироваться в зависимости от того, сколько эл-тов нужно вместить?
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
06.10.2016, 18:08
Да даже и тогда, пусть их будет 24, массив может быть 2х12, 3х8, 4х6. А если их 11?

Добавлено через 59 секунд
Не узнал точное задание поскольку сам и не думал его делать, вот и пудришь тут мозги.
1
0 / 0 / 0
Регистрация: 06.10.2016
Сообщений: 16
06.10.2016, 18:28  [ТС]
То что я написал и есть точное задание, и мозги я не пудрю)) Никаких данных больше нет. Я сам написал весь код и застопорился на создании двумерных массивов. Размерность я не знаю т.к. нужно чтобы массив подстраивался под то кол-во эл-тов (положит и отрицат числа), которое попадет в одномерные массивы. Это возможно?
Я читал много тем на форуме. но везде отсутствуют объяснения, в результате не получается понять чужие коды. Как я уже писал выше, я совсем недавно начал заниматься с паскалем, и мне его никто толком не объясняет, поэтому и написал сюда. Если какие-либо мои формулировки кажутся забавными - то прошу прощения, это не из-за того что мне лень что-либо делать. а потому-что я реально не знаю или не представляю как именно "это" должно работать.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
06.10.2016, 18:59
Цитата Сообщение от LandStalker Посмотреть сообщение
совсем недавно начал заниматься с паскалем
паскаль тут не причем, вопрос не про него, а про то, как определить, что же должно в итоге получиться -- как именно следует определять размер двух новых двумерных массивов.
1
0 / 0 / 0
Регистрация: 06.10.2016
Сообщений: 16
06.10.2016, 19:03  [ТС]
Особого значения не имеет, пусть будет 4х4.
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
06.10.2016, 19:06
А если элементов 11 или 17?
1
0 / 0 / 0
Регистрация: 06.10.2016
Сообщений: 16
06.10.2016, 19:11  [ТС]
Изначальный двумерный массив, с которого все начинается 4х4, поэтому больше 16 не будет. А если 11, то недостающие эл-ты будут нулями (так?) - не страшно.
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
06.10.2016, 19:46
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
const n=4;
var a,d,e: array[1..n,1..n] of integer;
    b,c:array [1..n*n] of integer;
    i, j, x, y, k: integer;
begin
randomize;
writeln('Исходная матрица');
x:=0;
y:=0;
for i:=1 to n do
 begin
  for j:=1 to n do
   begin
    a[i,j]:=-100+random(201);
    write(a[i,j]:4);
    if a[i,j]<0 then
     begin
      inc(x);
      b[x]:=a[i,j];
     end
    else if a[i,j]>0 then
     begin
      inc(y);
      c[y]:=a[i,j];
     end;
    end;
   writeln;
 end;
writeln ('Массив из отрицательных чисел: ');
for i:=1 to x do write (b[i]:4);
writeln;
writeln ('Массив из положительных чисел: ');
for i:=1 to y do write (c[i]:4);
writeln;
if x<n*n then k:=n*n-x;
for i:=1 to k do
 begin
  inc(x);
  b[x]:=0;
 end;
for k:=1 to x do
 begin
  i:=(k-1)div n+1;{вычислим номер строки и столбца}
  j:=(k-1)mod n+1;
  d[i,j]:=b[k];{запишем элемент из массива в матрицу}
 end;
writeln('Матрица отрицательных элементов');
for i:=1 to n do
 begin
  for j:=1  to n do
  write(d[i,j]:4);
  writeln;
 end;
if y<n*n then k:=n*n-y;
for i:=1 to k do
 begin
  inc(y);
  b[y]:=0;
 end;
for k:=1 to y do
 begin
  i:=(k-1)div n+1;{вычислим номер строки и столбца}
  j:=(k-1)mod n+1;
  e[i,j]:=c[k];{запишем элемент из массива в матрицу}
 end;
writeln('Матрица положительных элементов');
for i:=1 to n do
 begin
  for j:=1  to n do
  write(e[i,j]:4);
  writeln;
 end;
end.
1
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
06.10.2016, 19:50
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
const m=4; n=4;
var
  a, b, c: array [1..m,1..n] of Integer;
  p, q: array [1..m*n] of Integer;
  np, nq, i, j: Integer;
begin
  Randomize; {np:=0; nq:=0;}
  for i:=1 to m do for j:=1 to n do a[i,j]:=-99+Random(199);
  WriteLn('A =');
  for i:=1 to m do begin
    for j:=1 to n do Write(' ',a[i,j]:3); WriteLn;
  end;
  for i:=1 to m do for j:=1 to n do
    if a[i,j]>0 then begin
      Inc(np); p[np]:=a[i,j];
    end else if a[i,j]<0 then begin
      Inc(nq); q[nq]:=a[i,j];
    end;
  WriteLn('P ='); for j:=1 to np do Write(' ',p[j]:3); WriteLn;
  WriteLn('Q ='); for j:=1 to nq do Write(' ',q[j]:3); WriteLn;
  for j:=1 to np do b[1+(j-1) div n,1+(j-1) mod n]:=p[j];
  for j:=1 to nq do c[1+(j-1) div n,1+(j-1) mod n]:=q[j];
  WriteLn('B =');
  for i:=1 to m do begin
    for j:=1 to n do Write(' ',b[i,j]:3); WriteLn;
  end;
  WriteLn('C =');
  for i:=1 to m do begin
    for j:=1 to n do Write(' ',c[i,j]:3); WriteLn;
  end;
end.
1
0 / 0 / 0
Регистрация: 06.10.2016
Сообщений: 16
06.10.2016, 22:51  [ТС]
Ого! Спасибо огромное!, буду разбираться.

Добавлено через 2 часа 26 минут
bormant, прошу прощения за назойливость, но вы не могли бы пож-та объяснить логику вот этих строчек
Цитата Сообщение от bormant Посмотреть сообщение
Pascal
1
2
for j:=1 to np do b[1+(j-1) div n,1+(j-1) mod n]:=p[j]; 
for j:=1 to nq do c[1+(j-1) div n,1+(j-1) mod n]:=q[j];
И еще хотел спросить: зачем в начале писать randomize? (в том смысле что и без этой надписи задаются рандомные числа в массивы, соответственно я подумал что у нее есть еще какие-либо функции).

Еще раз больше спасибо за помощь!
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
06.10.2016, 23:13
В матрицах b и c по n элементов в строке.
В массиве p np элементов, первые n для 1 строки, вторые n для второй и т.д.
Соответственно, для j от 1 до np, 1+(j-1) div n даст номер строки, 1+(j-1) mod n даст номер столбца.
Аналогично для q и nq.

Если бы индексация была с 0 до n-1, формулы были бы чуть проще: j div n и j mod n (без коррекции -1/+1).
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.10.2016, 23:13
Помогаю со студенческими работами здесь

Составить блок-схему сортировки одномерного массива по возрастанию
Помогите: &quot;Составить блок-схему сортировки одномерного массива по возрастанию&quot;.

Составить подпрограмму умножения элементов одномерного массива A[m] на число q
Составить подпрограмму умножения элементов одномерного массива A на число q(каждый элемент массива умножается на число q). Используя...

Составить программу циклической перестановки элементов одномерного массива
Составить программу циклической перестановки элементов одномерного массива а(n) при которой i элемент становится i+1 , а последний 1.

Составить программу заполнения одномерного массива случайными числами в диапазоне от 0 до 12
Составить программу заполнения одномерного массива случайными числами в диапазоне от 0 до 12 с выводом результирующего массива на экран и...

Для одномерного массива составить блок схему алгоритма - Алгоритмы
Доброго времени суток, прошу помощи в составлении алгоритма.. Задан одномерный массив {xi} (i=1,2,...,n). Значение элементов...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru