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

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

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

> Двумерный массис, напечатать
denolend
сообщение 11.12.2011 19:43
Сообщение #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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 3)
Krjuger
сообщение 11.12.2011 21:03
Сообщение #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 - 11.12.2011 21:04
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
IUnknown
сообщение 11.12.2011 21:52
Сообщение #3


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  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 
 К началу страницы 
+ Ответить 
denolend
сообщение 11.12.2011 22:37
Сообщение #4





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

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


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

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

 



- Текстовая версия 29.07.2025 16:22
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"