Почему программа не отображает матрицу?

В вашей программе имеется функция MatrixGen, которая должна выводить матрицу, но вместо этого она выводит нули. Какова может быть причина данной ошибки? <br/><br/><pre><code>{Учебная программа по генерации и выводу массива}
program arraytest;
uses crt;

type TArr = array [1..15] of integer;
     TArr2 = array [1..15] of integer;
var i,j: byte;
    A,B: TArr2;


procedure ArrGeneration;                //Процедура генерации массива
var A: TArr;
begin
     for i:=1 to 15 do
         begin
              Randomize;
              A[i]:=Random(40);
              Writeln(A[i]);
         end;
end;

function MatrixGen(var A1, B1: TArr2): integer;
begin
     for i:=1 to 6 do
         for j:=1 to 6 do
             begin
                  Randomize;
                  //A1[i]:=i+1;
                  //B1[i]:=i+1;
                  Write(A[i]);
                  Write(B[i]);
             end;
             
end;

begin
     clrscr;
     ArrGeneration;
     MatrixGen(A, B);
end.</code></pre>
  • 14 сентября 2024 г. 17:13
Ответы на вопрос 1
В вашей программе есть несколько ошибок и недочетов, которые могут привести к тому, что матрица не будет отображаться корректно. Вот основные причины:

1. **Неправильное использование локальных и глобальных переменных**: В процедуре `ArrGeneration` вы создаете локальный массив `A`, который не имеет отношения к глобальному массиву `A`. Из-за этого, когда вы выводите значения массивов в функции `MatrixGen`, они содержат "мусор" или нули.

2. **Вывод неверного массива в функции `MatrixGen`**: Вместо `Write(A[i]);` и `Write(B[i]);` в функции `MatrixGen` должны быть использованы `A1` и `B1`, которые являются параметрами функции и передаются из главной программы.

3. **Неинициализированные значения**: Поскольку вы не заполните массивы `A` и `B`, когда пытаетесь их вывести в `MatrixGen`, они содержат неопределенные значения.

Вот исправленный код:

```pascal
{Учебная программа по генерации и выводу массива}
program arraytest;
uses crt;

type 
    TArr = array [1..15] of integer;
    TArr2 = array [1..6] of integer; // Изменено на 6, чтобы соответствовать MatrixGen
var 
    i, j: byte;
    A: TArr;
    B: TArr2;

procedure ArrGeneration; // Процедура генерации массива
begin
    Randomize; // Вызываем Randomize один раз перед генерацией
    for i := 1 to 15 do
    begin
        A[i] := Random(40);
        Writeln(A[i]);
    end;
end;

function MatrixGen(var A1, B1: TArr2): integer;
begin
    Randomize; // Вызываем Randomize здесь тоже, но лучше один раз в начале программы
    for i := 1 to 6 do
    begin
        A1[i] := Random(40); // Заполняем массив A1
        B1[i] := Random(40); // Заполняем массив B1
        Write(A1[i], ' '); // Выводим значения
        Write(B1[i], ' '); // Выводим значения
        Writeln; // Переход на новую строку для лучшего оформления
    end;
end;

begin
    clrscr;
    ArrGeneration; // Генерация и вывод A
    MatrixGen(A, B); // Генерация и вывод матрицы
end.
```

### Основные изменения:

1. Удален локальный массив в `ArrGeneration`, использован глобальный массив `A`.
2. В функции `MatrixGen` использование `A1` и `B1` вместо несуществующих `A` и `B`.
3. Позволяет видеть значения массивов A и B после генерации, вызвав `Writeln` для лучшей читаемости.

Теперь программа должна корректно генерировать и выводить массивы и матрицу.
Похожие вопросы