Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Pascal] Двумерный массив


Автор: olgab 30.5.2009, 13:12
Дана матрица D(6*6) положительных и отрицательных целых чисел расположенных в шахматном порядке. Необходимо выбрать элементы стоящие по диагонали слева направо и справа налево. Сформировать два одномерных массива А(6) и В(6). Вывести на печать все массивы
Разработать алгоритм решения задачи, составить блок-схему, записать задачу на языке Pascal
Надеюсь на помощь

Автор: volvo877 30.5.2009, 13:21
Для домашних заданий, курсовых, существует "Центр Помощи"

Тема перенесена! 

Автор: neic 30.5.2009, 15:32
Цитата(olgab @  30.5.2009,  13:12 Найти цитируемый пост)
Разработать алгоритм решения задачи, составить блок-схему

Разве это не одно и тоже?
А вообще полностью лабу тебе ни кто делать не будет. Программу да, а лабу как-нить сам доделывай.

Код

PROGRAM MATRIX;
    USES CRT;
    VAR
            I,J,L,K              :INTEGER;
            D:ARRAY[1..6,1..6] OF INTEGER;
            A,B:ARRAY[1..36] OF INTEGER;
BEGIN
CLRSCR;
RANDOMIZE;

FOR I:=1 TO 6 DO
BEGIN
    FOR J:=1 TO 6 DO
    BEGIN
        D[I,J]:=RANDOM(50);
        WRITE (D[I,J],' ')
    END;
    WRITELN;
END;

WRITELN;

K:=0;
L:=0;
WRITELN;
READLN;
FOR I:=1 TO 6 DO
BEGIN
    FOR J:=1 TO 6 DO
    BEGIN
        IF J>= I THEN
        BEGIN
            K:=K+1;
            A[K]:=D[I,J];
        END;

        IF J<I THEN
        BEGIN
            L:=L+1;
            B[L]:=D[I,J];
                END;
    END;
END;

WRITELN;
WRITELN;
WRITELN ('MASSIV A:');

FOR I:=1 TO K DO
BEGIN
    WRITE(' ', A[I])
END;

WRITELN;
WRITELN;
WRITELN ('MASSIV B:');

FOR I:=1 TO L DO
BEGIN
    WRITE(' ', B[I])
END;
WRITELN;
WRITELN;
WRITELN ('PLEASE CLICK <ENTER> DOR EXIT');
READLN
END.


Пока делал обнаружил аномалию в паскале...

Если массивы ограничить до 18 элементов, то B[1]:=A[19], B[2]:=A[20]
Попробуйте сами, мож это у меня среда какая-та не такая.

Автор: volvo877 30.5.2009, 15:50
Цитата(neic @  30.5.2009,  15:32 Найти цитируемый пост)
Пока делал обнаружил аномалию в паскале...

Если массивы ограничить до 18 элементов, то B[1]:=A[19], B[2]:=A[20]

Если включить наконец режим {$R+} или Options -> Compiler -> [X] Range Check (и никогда его не выключать, если не хочешь искать ошибки в программах часами), то Паскаль тебе просто не даст обратиться к A[19], потому что нельзя.

А вообще, чего ж непонятного? Память под переменные выделяется в порядке их объявления, то есть, массив B идет непосредственно за массивом A, естественно, что как только ты выходишь "за рамки" массива A, ты переходишь во владения B... Точно так же B[0] будет равно A[18]...

P.S. У тебя чего, CapsLock заело? Не выключается? Зачем все время писать программы в верхнем регистре?

Автор: neic 30.5.2009, 22:50
volvo877
Мне так приятнее, нагляднее получается =)

Цитата(volvo877 @  30.5.2009,  15:50 Найти цитируемый пост)
Если включить наконец режим {$R+} или Options -> Compiler -> [X] Range Check (и никогда его не выключать, если не хочешь искать ошибки в программах часами), то Паскаль тебе просто не даст обратиться к A[19], потому что нельзя.

Понятно. Буду знать ;)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)