Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 09.03.2015
Сообщений: 3
1

Заполнить двумерный массив А символами из одномерного массива В

11.03.2015, 21:27. Показов 1280. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
помогите решить в паскале! Заполнить двумерный массив А(MхN) элементов символами из одномерного массива В (длиной не более 256 элементов) "змейкой" от конца к началу – сперва N-ю строку справа налево, затем N–1-ю слева направо и т.д. Массив В предварительно заполняется из входного текстового файла. Оба массива распечатать. строк 16, столбцов 16. Тип обраб. данных Символьн.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.03.2015, 21:27
Ответы с готовыми решениями:

Заполнить двумерный массив А элементов символами из одномерного массива В "змейкой"
Заполнить двумерный массив А(MхN) элементов символами из одномерного массива В (длиной не более 256...

Двумерный массив заполнить данными одномерного массива
-Дан двумерный массив из m строк и n столбцов. Заполнить его значениями элементов одномерного...

Заполнить двумерный массив случайными символами
заполнить двумерный массив случайными символами

Рандомно заполнить двумерный массив одинаковыми символами
Всем привет. Начал изучение С++ на практике, первый язык програмирования, много каши в голове,...

11
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
13.03.2015, 22:17 2
Макс777
Как-то так:
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
const
  m=16;
  n=16;
  b_max=256;
var
  a:array[1..m,1..n]of char;
  b:array[1..b_max]of char;
  c,d,e,f,g:integer;
  z:text;
begin
  {считываем файл в массив В}
  assign(z,'max.txt');
  reset(z);
  d:=1;
  while(not eof(z))and(d<=b_max)do
    begin
      read(z,b[d]);
      inc(d)
    end;
  close(z);
  {начинаем работу}
  e:=m;
  f:=n;
  c:=1;
  g:=-1;
  while e>0 do
    begin
      while(f>0)and(f<=n)do
        begin
          a[e,f]:=b[c];
          inc(c);
          if c>=d then c:=1;
          inc(f,g);
        end;
      g:=-g;
      inc(f,g);
      dec(e);
    end;
  {выводим результат массив А}
  writeln('Result A:');
  for e:=1 to m do
    begin
      for f:=1 to n do
        write(a[e,f]);
      writeln;
    end;
  {выводим результат массив В}
  writeln;
  writeln('Result B:');
  for e:=1 to d do
    if e=30 then writeln(b[e])
            else write(b[e]);
  readln;
end.
0
Эксперт Pascal/Delphi
2386 / 1298 / 1492
Регистрация: 29.08.2014
Сообщений: 4,661
14.03.2015, 19:43 3
Цитата Сообщение от Constantin Cat Посмотреть сообщение
if e=30 then writeln(b[e])
* * * * * * else write(b[e]);
а зачем перенос первой строки на 31 символе?

Добавлено через 20 минут
также змейка нарушена
если строку запихать длиной 256 символов имеем выход за пределы диапазона.
0
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
14.03.2015, 19:47 4
Joy
я в файле записал два раза символьную раскладку клавиатуры, т.к. не факт, что длина файла равна размеру матрицы.
qwertyuiopasdfghjklzxcvbnmqwertyuiopasdfghjklzxcvbnm
Добавлено через 2 минуты
Сним должно боротся:
(d<=b_max)
0
Эксперт Pascal/Delphi
2386 / 1298 / 1492
Регистрация: 29.08.2014
Сообщений: 4,661
14.03.2015, 19:55 5
Result A:
123456789ABCDEF1
FEDCBA987654321
123456789ABCDEF
FEDCBA987654321
123456789ABCDEF
FEDCBA987654321
123456789ABCDEF
FEDCBA987654321
123456789ABCDEF
FEDCBA987654321
123456789ABCDEF
FEDCBA987654321
123456789ABCDEF
FEDCBA987654321
123456789ABCDEF
FEDCBA987654321

Result B:
123456789ABCDEF 123456789ABCDE
F 123456789ABCDEF 123456789ABCDEF 123456789ABCDEF 123456789ABCDEF 123456789ABCDE
F 123456789ABCDEF 123456789ABCDEF 123456789ABCDEF 123456789ABCDEF 123456789ABCDE
F 123456789ABCDEF 123456789ABCDEF 123456789ABCDEF 123456789ABCDEF2

последний символ массива B -2 у вас в первой строке в позиции 16 стоит 1

Добавлено через 4 минуты
Цитата Сообщение от Constantin Cat Посмотреть сообщение
d:=1;
* while(not eof(z))and(d<=b_max)do
* * begin
* * * read(z,b[d]);
* * * inc(d)
* * end;
если 256 символов в итоге в d будет 257! и тут будет выход за пределы диапазона:
Цитата Сообщение от Constantin Cat Посмотреть сообщение
for e:=1 to d do
* * if e=30 then writeln(b[e])
* * * * * * else write(b[e]);
Добавлено через 48 секунд
есть смысл исправить на :
Pascal
1
2
3
4
5
6
d:=0;
  while(not eof(z))and(d<b_max)do
    begin
      inc(d);
      read(z,b[d]);
    end;
1
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
14.03.2015, 19:58 6
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
const
  m=16;
  n=16;
  b_max=256;
var
  a:array[1..m,1..n]of char;
  b:array[1..b_max]of char;
  c,d,e,f,g:integer;
  z:text;
begin
  {считываем файл в массив В}
  assign(z,'max.txt');
  reset(z);
  d:=0;
  while(not eof(z))and(d<b_max)do
    begin
      inc(d);
      read(z,b[d]);
    end;
  close(z);
  {начинаем работу}
  e:=m;
  f:=n;
  c:=1;
  g:=-1;
  while e>0 do
    begin
      while(f>0)and(f<=n)do
        begin
          a[e,f]:=b[c];
          inc(c);
          if c>d then c:=1;
          inc(f,g);
        end;
      g:=-g;
      inc(f,g);
      dec(e);
    end;
  {выводим результат массив А}
  writeln('Result A:');
  for e:=1 to m do
    begin
      for f:=1 to n do
        write(a[e,f]);
      writeln;
    end;
  {выводим результат массив В}
  writeln;
  writeln('Result B:');
  for e:=1 to d do
    if (e mod 32)=0 then writeln(b[e])
            else write(b[e]);
  readln;
end.
0
Эксперт Pascal/Delphi
2386 / 1298 / 1492
Регистрация: 29.08.2014
Сообщений: 4,661
14.03.2015, 19:58 7
аналогично:
Цитата Сообщение от Constantin Cat Посмотреть сообщение
c:=1;
* g:=-1;
* while e>0 do
* * begin
* * * while(f>0)and(f<=n)do
* * * * begin
* * * * * a[e,f]:=b[c];
* * * * * inc(c);
* * * * * if c>=d then c:=1;
* * * * * inc(f,g);
* * * * end;
заменить на :
Pascal
1
2
3
4
5
6
7
8
9
10
11
  c:=0;
  g:=-1;
  while e>0 do
    begin
      while(f>0)and(f<=n)do
        begin
          inc(c);
          a[e,f]:=b[c];
          if c>=d then c:=0;
          inc(f,g);
        end;
1
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
14.03.2015, 20:06 8
Joy
Спасибо, что обратили внимание уже исправил.

Добавлено через 2 минуты
Цитата Сообщение от Joy Посмотреть сообщение
аналогично
тут я не понял?

Добавлено через 1 минуту
Вроде нормально работает:

Result A:
uiopasdfghjklzxc
ytrewqmnbvcxzlkj
qwertyuiopasdfgh
mnbvcxzlkjhgfdsa
xcvbnmqwertyuiop
zlkjhgfdsapoiuyt
ghjklzxcvbnmqwer
fdsapoiuytrewqmn
opasdfghjklzxcvb
iuytrewqmnbvcxzl
ertyuiopasdfghjk
wqmnbvcxzlkjhgfd
vbnmqwertyuiopas
cxzlkjhgfdsapoiu
jklzxcvbnmqwerty
hgfdsapoiuytrewq

Result B:
qwertyuiopasdfghjklzxcvbnmqwerty
uiopasdfghjklzxcvbnmqwertyuiopas
dfghjklzxcvbnmqwertyuiopasdfghjk
lzxcvbnmqwertyuiopasdfghjklzxcvb
nmqwertyuiopasdfghjklzxcvbnmqwer
tyuiopasdfghjklzxcvbnmqwertyuiop
asdfghjklzxcvbnmqwertyuiopasdfgh
jklzxcvbnmqwertyuiopasdfghjklzxc
0
Эксперт Pascal/Delphi
2386 / 1298 / 1492
Регистрация: 29.08.2014
Сообщений: 4,661
14.03.2015, 20:18 9
последний символ во входном массиве установите например в 1 вместо с и посмотрите на последний символ первой строки

Добавлено через 6 минут
Pascal
1
2
3
         a[e,f]:=b[c];  // с=255
          inc(c); // с=256
          if c>=d then c:=1;
-- вы до 256 знака не доходите! до этого, когда d уходило за пределы символов массива B ошибки друг друга скрадывали, а теперь исправив d нужно и тут править.
0
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
14.03.2015, 20:33 10
Посмотрите пост №6 строку 32.
0
Эксперт Pascal/Delphi
2386 / 1298 / 1492
Регистрация: 29.08.2014
Сообщений: 4,661
14.03.2015, 20:44 11
сорри - слона то я и не приметил
0
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
14.03.2015, 21:09 12
незнаю как, но я хотел написать в личку
0
14.03.2015, 21:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.03.2015, 21:09
Помогаю со студенческими работами здесь

Заполнить массив по спирали из одномерного массива
Есть одномерный массив - (1,2,3,...). Нужно на основании этих чисел заполнить двумерный массив...

Из одномерного массива сформировать двумерный массив
2)Из предыдущего одномерного сформировать двумерный массив . Вывести среднее арифметическое для...

Чтение одномерного массива в двумерный массив
Всем здравия. Рассказывать суть программы не буду (смысла в этом не вижу), сама беда не в коде, а в...

Двумерный массив. Формирование одномерного массива.
Сформулировать вектор, каждыйц елемент которого представляет собой суму елементов строк матрыци. ...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru