Добавление двух многомерных массивов вместе в паскаль - PullRequest
0 голосов
/ 13 мая 2018

Я пытаюсь добавить два многомерных массива разных размеров.

Я надеюсь, вы понимаете мой код, переменные на португальском языке.

Program NOTA_ALUNO; 
Var   
  A,B,C: Array[1..100,1..100] Of Integer;
  contadorHorizontal,contadorVertical: Integer; 
  valoresVertical_A,valoresHorizontal_A,mm,nn: Integer; 
  valoresVertical_B,valoresHorizontal_B: Integer; 
Begin   
  Writeln('digite as dimensões das matrizes:'); 
  Readln(valoresHorizontal_A,valoresVertical_A);  
  Writeln('digite os elementos da matriz A:');   
  For contadorHorizontal := 1 To valoresHorizontal_A Do
  Begin
    For contadorVertical := 1 To valoresVertical_A Do
    Begin
      Read(A[contadorHorizontal,contadorVertical]);
    End;
    Readln;
  End;   
  Writeln('digite as dimensões das matrizes:'); 
  Readln(valoresHorizontal_B,valoresVertical_B);  
  Writeln('digite os elementos da matriz B:');   
  For contadorHorizontal := 1 To valoresHorizontal_B Do
  Begin
    For contadorVertical := 1 To valoresVertical_B Do
    Begin
      Read(B[contadorHorizontal,contadorVertical]);
    End;
    Readln;
  End;  

И вот что я сделал. Если значения оси x массива A больше, чем массив B, я бы взял номер массива B, добавил бы один и заполнил недостающие пробелы нулями. Но это не работает:

  If (valoresHorizontal_A > valoresHorizontal_B) Then
    nn := valoresHorizontal_B+1;   
  For contadorHorizontal := nn To valoresHorizontal_A Do
  Begin
    B[contadorHorizontal,contadorVertical] := 0;
  End;  

  {calcular a soma de A + B} 
  For contadorHorizontal := 1 To valoresHorizontal_A Do
  Begin
    For contadorVertical := 1 To valoresVertical_A Do
    Begin
      C[contadorHorizontal,contadorVertical] := 
        A[contadorHorizontal,contadorVertical] +
        B[contadorHorizontal,contadorVertical];
    End;
  End;  
  {imprimir o resultado}   
  Writeln('O resultado da soma de A+B:');   
  For contadorHorizontal := 1 To valoresHorizontal_A Do
  Begin
    For contadorVertical := 1 To valoresVertical_A Do
    Begin
      Write(C[contadorHorizontal,contadorVertical],'  '); 
      {deixar espaço entre números}
    End;
    Writeln; { quebra linha }
  End;   
  Readln; 
End.

1 Ответ

0 голосов
/ 14 мая 2018

Что может решить вашу проблему, так это заполнить массивы нулями в начале, прежде чем вы введете свои значения. Как это:

  For contadorHorizontal := 1 To 100 Do
  Begin
    For contadorVertical := 1 To 100 Do
    Begin
      A[contadorHorizontal,contadorVertical] := 0;
      B[contadorHorizontal,contadorVertical] := 0;
    End;
  End; 

И удаление этого раздела:

  If (valoresHorizontal_A > valoresHorizontal_B) Then
    nn := valoresHorizontal_B+1;   
  For contadorHorizontal := nn To valoresHorizontal_A Do
  Begin
    B[contadorHorizontal,contadorVertical] := 0;
  End; 
...