Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2018, 20:46   #1
Illtry
Пользователь
 
Регистрация: 09.02.2018
Сообщений: 22
По умолчанию Многомерные массивы - Матрица Сильвестра

Здравствуйте. Вот мой код: uses
SysUtils;

var
i, n, m, j: integer ;
A, B: array of integer;
S: array of array of integer;


begin
write('n=');
readln(n);
setlength(a,n);
write('m=');
readln(m);
setlength(b,m);
for i:=0 to n do
readln(a[i]);
for i:=0 to m do
readln(b[i]);
SetLength(S, m+n, n+m);

for i:=0 to (n+m)-1 do
begin
if i in[0..m] then
begin
for j:=0 to (n+m)-1 do
begin
if j in[i..n+i] then s[i,j]:=a[n-j+i] else s[i,j]:=0;
write(s[i,j]:3);
end;
end
else if i in[m..m+n] then
begin
for j:=1 to n+m do
begin
if j in [i-m..i] then s[i,j]:=b[i-j] else s[i,j]:=0;
write(s[i,j]:3);
end;
end;
writeln;
end;
readln;

end.


Он работает, делфи запускает, я в вожу A[i] b B[i], но в одном месте при построении матрицы выдаётся число, которое не вводилось с клавиатуры. Возможно, дело в интервалах после in? Помогите разобраться, пожалуйста. Скрин работы проги прикладываю.
Изображения
Тип файла: jpg Новый точечный рисунок.jpg (9.4 Кб, 151 просмотров)
Illtry вне форума Ответить с цитированием
Старый 26.02.2018, 21:10   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

для начала
Код:
setlength(a,n);
...
for i:=0 to n-1 do
readln(a[i]);
аналогично и для B.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 27.02.2018, 21:09   #3
Illtry
Пользователь
 
Регистрация: 09.02.2018
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
для начала
Код:
setlength(a,n);
...
for i:=0 to n-1 do
readln(a[i]);
аналогично и для B.

Окей, с этим ясно. Только проблема всё ещё присутствует.
Illtry вне форума Ответить с цитированием
Старый 27.02.2018, 21:37   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Потому что дальше с индексами путаешься примерно в таком же стиле. Включай трассировку и в отладчике смотри где не то читаешь и не туда пишешь ))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 28.02.2018, 17:51   #5
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,609
По умолчанию

Код:
var 
i, j, k, l , n, m: integer;
a, b:array of integer;
s: array of array of integer;

begin
readln(n); 
setlength(a, n);
readln(m); 
setlength(b, m);
setlength(s, n+m, n+m);

for i:=0 to n-1 do 
readln(a[i]);

for i:=0 to m-1 do 
readln(b[i]);


for i:=0 to n-1 do 
begin

j := 0;
while j < i  do
begin
s[i,j] := 0;
j := j+1;
end; 

k := n-1;
while k >= 0  do
begin
s[i,j] := a[k];
j := j + 1;
k := k - 1;
end; 

while j < n + m   do
begin
s[i,j] := 0;
j := j + 1;
end; 

end; 

i := i + 1;


while i < n + m   do
begin

j:= n + m - 1;


while j - i > 0  do
begin
s[i,j] := 0;
j := j-1;
end; 

l := 0;
while l < m  do
begin
s[i,j] := b[l];
l := l + 1;
j := j - 1;
end; 

while j >= 0  do
begin
s[i,j] := 0;
j := j - 1;
end; 


i := i+1;
end; 




for i:=0 to n+m-1 do 
begin 
for j:=0 to  n+m-1  do 
begin 
write(s[i,j]);
write(' ');
end;
writeln
end;



end.
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 28.02.2018, 23:17   #6
Illtry
Пользователь
 
Регистрация: 09.02.2018
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Потому что дальше с индексами путаешься примерно в таком же стиле. Включай трассировку и в отладчике смотри где не то читаешь и не туда пишешь ))
Спасибо
Illtry вне форума Ответить с цитированием
Старый 28.02.2018, 23:18   #7
Illtry
Пользователь
 
Регистрация: 09.02.2018
Сообщений: 22
По умолчанию

Цитата:
Сообщение от challengerr Посмотреть сообщение
var
i, j, k, l , n, m: integer;
a, b:array of integer;
s: array of array of integer;

begin
readln(n);
setlength(a, n);
readln(m);
setlength(b, m);
setlength(s, n+m, n+m);
Спасибо
Вы кончено не хило так перекроили

Последний раз редактировалось Illtry; 28.02.2018 в 23:29.
Illtry вне форума Ответить с цитированием
Старый 01.03.2018, 12:14   #8
Illtry
Пользователь
 
Регистрация: 09.02.2018
Сообщений: 22
По умолчанию

Цитата:
Сообщение от challengerr Посмотреть сообщение
Код:
var 
i, j, k, l , n, m: integer;
a, b:array of integer;
s: array of array of integer;

begin
readln(n); 
setlength(a, n);
readln(m); 
setlength(b, m);
setlength(s, n+m, n+m);

for i:=0 to n-1 do 
readln(a[i]);

for i:=0 to m-1 do 
readln(b[i]);


for i:=0 to n-1 do 
begin

j := 0;
while j < i  do
begin
s[i,j] := 0;
j := j+1;
end; 

k := n-1;
while k >= 0  do
begin
s[i,j] := a[k];
j := j + 1;
k := k - 1;
end; 

while j < n + m   do
begin
s[i,j] := 0;
j := j + 1;
end; 

end; 

i := i + 1;


while i < n + m   do
begin

j:= n + m - 1;


while j - i > 0  do
begin
s[i,j] := 0;
j := j-1;
end; 

l := 0;
while l < m  do
begin
s[i,j] := b[l];
l := l + 1;
j := j - 1;
end; 

while j >= 0  do
begin
s[i,j] := 0;
j := j - 1;
end; 


i := i+1;
end; 




for i:=0 to n+m-1 do 
begin 
for j:=0 to  n+m-1  do 
begin 
write(s[i,j]);
write(' ');
end;
writeln
end;



end.
Дорогой человек, помогите ещё немного, очень вас прошу. В 3 строчке не должно быть нулей, там должно быть 5 4 3 0 0. У меня, хоть убей, не получается это исправить
Изображения
Тип файла: jpg Новый точечный рисунок.jpg (6.9 Кб, 140 просмотров)
Illtry вне форума Ответить с цитированием
Старый 01.03.2018, 13:14   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Матрица для n=2 и m=3 должна выглядеть так:
2 1 0
0 2 1
5 4 3
Вот пример формирования в стрингрид, переделай под себя:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var n,m,i,j: Integer;
    a,b: array of Integer;
begin
  n:=3;
  SetLength(a,n);
  for i:=0 to n-1 do a[i]:=i+1;

  m:=4;
  SetLength(b,m);
  for i:=0 to m-1 do b[i]:=n+i+1;

  StringGrid1.RowCount:=n+m-2;
  StringGrid1.ColCount:=n+m-2;
  StringGrid1.ClientWidth:=(StringGrid1.DefaultColWidth+StringGrid1.GridLineWidth)*StringGrid1.ColCount;
  StringGrid1.ClientHeight:=(StringGrid1.DefaultRowHeight+StringGrid1.GridLineWidth)*StringGrid1.RowCount;

  for i:=0 to StringGrid1.ColCount-1 do
    for j:=0 to StringGrid1.RowCount-1 do
      if (i<m-1) and (j in [i..i+n-1]) then StringGrid1.Cells[j,i]:=IntToStr(a[n-j+i-1])
      else if (i>=m-1) and (j in [i-m+1..i]) then StringGrid1.Cells[j,i]:=IntToStr(b[i-j])
      else StringGrid1.Cells[j,i]:='0';
end;
Изображения
Тип файла: jpg Безымянный.jpg (16.6 Кб, 71 просмотров)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.03.2018, 11:44   #10
Illtry
Пользователь
 
Регистрация: 09.02.2018
Сообщений: 22
По умолчанию

Спасибо
Illtry вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
многомерные массивы с# andrey1996 Помощь студентам 0 07.12.2014 22:06
многомерные массивы Krugan Помощь студентам 1 16.05.2014 19:59
Многомерные массивы zhoric Помощь студентам 6 31.03.2014 01:25
Многомерные массивы C++ Jillian Помощь студентам 0 14.05.2012 18:30