Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.01.2017, 11:25   #1
users1
Пользователь
 
Регистрация: 12.01.2017
Сообщений: 19
По умолчанию Есть рандомная матрица надо создать матрицу суммы элементов, которые находятся выше и правее элемента

Привет всем. Нужна помощь
Есть рандомная матрица надо создать матрицу суммы элементов, которые находятся выше и правее элемента
Например есть такая матрица
А
1 2 3
4 5 6
7 8 9
получить матрицу
Б
6 5 3
21 16 9
45 33 18
Помогите пожалуйста

Последний раз редактировалось users1; 19.01.2017 в 11:30.
users1 вне форума Ответить с цитированием
Старый 19.01.2017, 11:27   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ну и покажи кодом где легко, а где тупишь ))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 19.01.2017, 11:28   #3
users1
Пользователь
 
Регистрация: 12.01.2017
Сообщений: 19
По умолчанию

Вот это у меня есть осталось только шаг с суммированием
Код:
program p2;

uses
  crt;

const
  KOL_STROK = 1000;
  KOL_STOLB = 1000;

var
  vvodStrok, vvodStolb: word;
  masDan: array[1..KOL_STROK, 1..KOL_STOLB] of real;
  masPol: array[1..KOL_STROK, 1..KOL_STOLB] of real;
  sum: real;
  vvodProv: char;
  i, j: byte;

begin
  repeat
    writeln('Введите количество строк в матрице от 1 до 1000');
    readln(vvodStrok);
  until (0 < vvodStrok) and (vvodStrok <= 1000);
  repeat
    writeln('Введите количество столбцов в матрице от 1 до 1000');
    readln(vvodStolb);
  until (0 < vvodStolb) and (vvodStolb <= 1000);
  
  writeln('Выберите способ заполнения ввода A- автоматически, R- ручной');
  readln(vvodProv);
  
  if(vvodProv = 'A') then
  begin
    for i := 1 to vvodStrok do
    begin
      for j := 1 to vvodStolb do
      begin
        masDan[i, j] := random;
        write(masDan[i, j]:5:2, ' ');
      end;
      writeln();
    end;
  end
  else if (vvodProv = 'R') then
  begin
    writeln('вводите значения');
    for i := 1 to vvodStrok do
    begin
      for j := 1 to vvodStolb do
      begin
        read(masPol[i, j]);
      end;
      writeln();
    end;

  //суммирование
  
  
  
  //ввывод новой матрицы
  writeln();
  for i := 1 to vvodStrok do
  begin
    for j := 1 to vvodStolb do
    begin
      write(masPol[i, j]:5:2, ' ');
    end;  
    writeln();
  end;  
  
end.

Последний раз редактировалось Аватар; 19.01.2017 в 11:40.
users1 вне форума Ответить с цитированием
Старый 19.01.2017, 12:05   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Код:
program p2;

{uses
  crt;}

const
  KOL_STROK = 1000;
  KOL_STOLB = 1000;

var
  vvodStrok, vvodStolb: word;
  masDan: array[1..KOL_STROK, 1..KOL_STOLB] of real;
  masPol: array[1..KOL_STROK, 1..KOL_STOLB] of real;
  sum: real;
  vvodProv: char;
  i, j, k, m: byte;

begin
  repeat
    writeln('Введите количество строк в матрице от 1 до 1000');
    readln(vvodStrok);
  until (0 < vvodStrok) and (vvodStrok <= 1000);
  repeat
    writeln('Введите количество столбцов в матрице от 1 до 1000');
    readln(vvodStolb);
  until (0 < vvodStolb) and (vvodStolb <= 1000);
  
  repeat
    writeln('Выберите способ заполнения ввода A- автоматически, R- ручной');
    readln(vvodProv);
  until vvodProv in ['A', 'R'];
  
  if(vvodProv = 'A') then
  begin
    for i := 1 to vvodStrok do
    begin
      for j := 1 to vvodStolb do
      begin
        masDan[i, j] := random;
        write(masDan[i, j]:5:2, ' ');
       end;
      writeln();
    end;
  end
  else if (vvodProv = 'R') then
  begin
    writeln('вводите значения');
    for i := 1 to vvodStrok do
    begin
      for j := 1 to vvodStolb do
      begin
        // read(masDan[i, j]); // закомментировал для отладки!
        masDan[i,j]:= (i-1)*3+j;
        Write(masDan[i,j]:3);
      end;
      writeln();
    end;
  end;  

  //суммирование
  for i := 1 to vvodStrok do
    for j := 1 to vvodStolb do 
    begin
      masPol[i,j] := 0;
      for k:=1 to i do
        for m:=j to vvodStrok do
           masPol[i,j] := masPol[i,j] + masDan[k,m];
     end;  
  
  
  //вывод новой матрицы
  writeln();
  for i := 1 to vvodStrok do
  begin
    for j := 1 to vvodStolb do
    begin
      write(masPol[i, j]:5:2, ' ');
    end;  
    writeln();
  end;  
  
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.01.2017, 12:40   #5
users1
Пользователь
 
Регистрация: 12.01.2017
Сообщений: 19
По умолчанию

Спасибо, я не думал что для суммы отдельные циклы нужны
users1 вне форума Ответить с цитированием
Старый 19.01.2017, 13:27   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

пожалуйста.
ну а как же без них?
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычислить и напечатать произведение первых 7 элементов и сумм следующих элементов, которые находятся на первых позициях. doker___ C++ Builder 0 19.06.2013 15:54
Procedure вывода элементов матрицы, которые находятся между диагоналями (дописать в программу) Pascal ABC программирование Паскаль, Turbo Pascal, PascalABC.NET 4 06.06.2013 10:04
Как найти сумму элементов матрицы, которые находятся выше главной диагонали????? ВДПУ Помощь студентам 3 27.05.2012 11:55
Вычислить сумму тех элементов преобразованного массива, которые находятся в диапазоне [–1, 16] Mirel Паскаль, Turbo Pascal, PascalABC.NET 2 04.04.2010 10:58