IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Двумерный массис, напечатать
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 3
Пол: Мужской
Реальное имя: denis

Репутация: -  0  +


Задача : Напечатать диагонали таблицы m*n двигаясь от леого нижнего угла к правому верхнему.
я вроде как придумал алгоритм ,но программа почему-то не работает. Подскажите что добавить или исправить плз.
код:
program napechatat;
uses crt;
Const n=3;
m=3;
var a:array[1..m,1..n] of integer;

i,j,s,ostatok:integer;
begin
clrscr;
randomize;
s:=0;
j:=0;
i:=0;
for i:=1 to n do
begin
for j:=1 to m do
begin
s:=s+1;
a[i,j]:=s;
write(a[i,j]:4);
end;
writeln;
end;
writeln;
s:=0;
for j:=1 to n do
begin
for i:=1 to s+1 do
begin
write(a[m-i+j,j]:4);
s:=s+1;
end;
writeln;
end;
writeln;


end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +



for i:=1 to s+1 do
begin
write(a[m-i+j,j]:4);
s:=s+1;
end;


В теле цикла нельзя менять пределы прохода цикла,вы уходите в бесконечность.А вообще помимо прямого прохода цикла есть и обратный for i:=m downto 1 do вы пройдете с mого элемента до первого.....я думаю правильней его использовать.А вообще задание не совсем корректно,как можно напечатать диагональ неквадратной матрицы???Затем бессмысленно писать randomize; ,если вы его не используете при заполнении матрицы.

Сообщение отредактировано: Krjuger -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Цитата
А вообще задание не совсем корректно,как можно напечатать диагональ неквадратной матрицы???
Опять ты за свое? Я ж тебе уже где-то говорил, что диагональ - это то, что начинается в одном из углов (в зависимости от того - какая именно диагональ), и продолжается не до другого угла, а пока не закончатся строки/стобцы матрицы (что раньше закончится - то и прекращает процесс прохода по диагонали). Просто в случае квадратной матрицы эти 2 условия выполняются одновременно, и диагональ проходит от одного угла до другого. Так что напечатать можно все, что угодно. Для этого даже не надо десяток циклов, достаточно:

const
n = 5;
m = 6;
arr : array[1 .. n, 1 .. m] of integer =
( ( 1, 2, 3, 4, 5, 50),
( 6, 7, 8, 9, 10, 51),
(11, 12, 13, 14, 15, 52),
(16, 17, 18, 19, 20, 53),
(21, 22, 23, 24, 25, 53) );
var
i, j, k : integer;

begin
for i := n downto -(m-2) do
begin
k := 1;
for j := i to n do
begin
if (j > 0) and (k < succ(m)) then write(arr[j, k]:5);
inc(k);
end;
writeln;
end;
end.
, что выводит:

21
16 22
11 17 23
6 12 18 24
1 7 13 19 25
2 8 14 20 53
3 9 15 53
4 10 52
5 51
50

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4





Группа: Пользователи
Сообщений: 3
Пол: Мужской
Реальное имя: denis

Репутация: -  0  +


спасибо большое!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 2.05.2024 7:52
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name