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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2015, 15:22   #1
VikkyVi
Пользователь
 
Регистрация: 25.10.2015
Сообщений: 11
По умолчанию Многомерные массивы. Процедуры и функции.

Дана квадратная матрица порядка n(n=8). Если заданная матрица является магическим квадратом (суммы элементов во всех строках и столбцах одинаковы), то заменить элементы четных строк на значение найденной суммы.
Код:
Program Lab6;
Uses crt;
Const n=8;
Type vect=array [1..n] of integer;
     matr=array [1..n] of vect;
Procedure Input (var a:matr);
Var i,j: byte;
Begin
     for i:=1 to n do
         for j:=1 to n do 
          read (a[i,j]);
end;
procedure Output (const a: matr);
Var i,j: byte;
Begin
     for i:=1 to n do
       begin
         for j:=1 to n do 
          write(a[i,j],' ');
          writeln;
       end;
End;
function Mag (const a:matr; var t: boolean);
var sum, s, i, j: integer;
Begin
    t:=true;
     for i:=1 to n do 
     sum:=sum+a[1,i];
     for i:=1 to n do 
     begin
         s:=0;
         for j:=1 to n do 
         s:=s+a[i,j];
         if s<>sum then 
         t:=false; 
     end;
      for j:=1 to n do 
       begin
         s:=0;
         for i:=1 to n do 
         s:=s+a[i,j];
         if s<>sum then 
         t:=false; 
       end;
end; 
Function Summa (const a: matr; var s: integer);
Var j: byte;
Begin
 s:=0;
 for j:= 1 to n do
 s:=s+a[1,j];
 writeln ('sum=', s);
End;
procedure Obmen (var a: matr);
Var i,s,j: integer;
Begin
 Begin
  for i:= 1 to 4 do
  s:=summa(i*2);
   for j:= 1 to 8 do
   a[i*2,j]:=s;
 end;
End;
Var b:matr;
sum: integer;
f: boolean;
Begin
clrscr;
     randomize;
     Input(b);
     If Mag(b,f) then
     writeln('ne yavlyaetsa magicheskim kvadratom')
     else 
     begin
     writeln('yavlyaetsa magicheskim kvadratom');
     Summa(b,sum);
     Obmen(b);
     Output(b);
     end    
End.


Не получается поменять элементы четных строк на значения найденной суммы и не удается сделать так, что бы сумма находилась только тогда,когда квадрат магический.
VikkyVi вне форума Ответить с цитированием
Старый 02.11.2015, 15:35   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Начнем с такой поправки:
Код:
     If not Mag(b,f) then begin
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.11.2015, 15:58   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Stilet
Начнем с такой поправки:
Виталий, у него там вообще не функция!
начать надо с переделки процедуры на функцию:

Код:
function Mag(const a:matr): boolean;
var sum, s, i, j: integer;
  t : boolean;
Begin
    t:=true;
     for i:=1 to n do 
     sum:=sum+a[1,i];
     for i:=1 to n do 
     begin
         s:=0;
         for j:=1 to n do 
         s:=s+a[i,j];
         if s<>sum then 
         t:=false; 
     end;
      for j:=1 to n do 
       begin
         s:=0;
         for i:=1 to n do 
         s:=s+a[i,j];
         if s<>sum then 
         t:=false; 
       end;
  Mag := t;
end;
вызывать так:
Код:
     If not Mag(b) then begin


Цитата:
Код:
Function Summa (const a: matr; var s: integer);
Это тоже не функция! Переделайте!




_______________
p.s. и ещё. вообще-то, в настоящем магическом квадрате ещё и суммы главной и побочной диагонали совпадают с суммой строк/столбцов.
но, раз у Вас в условии задания это не написано, то Вы это и не проверяете...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.11.2015, 16:02   #4
VikkyVi
Пользователь
 
Регистрация: 25.10.2015
Сообщений: 11
По умолчанию

Исправила, но она все равно не идет
VikkyVi вне форума Ответить с цитированием
Старый 02.11.2015, 17:12   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
у него там вообще не функция!
Корнет - женщина
Цитата:
Исправила, но она все равно не идет
Код в студию, мадмуазель.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.11.2015, 17:19   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Корнет - женщина
приношу свои извинения.
Тогда:

У неё там вообще не функция!


Цитата:
Сообщение от Stilet Посмотреть сообщение
Код в студию, мадмуазель.
присоединяюсь.
Выкладывайте, что у Вас получилось.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.11.2015, 17:42   #7
Nika_
 
Регистрация: 27.10.2015
Сообщений: 8
По умолчанию

Вроде бы так пашет
Код:
Program Lab6;
Uses crt;
Const n=8;
Type vect=array [1..n] of integer;
     matr=array [1..n] of vect;
Procedure Input (var a:matr);
Var i,j: byte;
Begin
     for i:=1 to n do
         for j:=1 to n do 
          read (a[i,j]);
end;
procedure Output (const a: matr);
Var i,j: byte;
Begin
     for i:=1 to n do
       begin
         for j:=1 to n do 
          write(a[i,j],' ');
          writeln;
       end;
End;
function Mag (const a:matr): boolean;
var sum, s, i, j: integer;
t: boolean;
Begin
    t:=true;
     for i:=1 to n do 
     sum:=sum+a[1,i];
     for i:=1 to n do 
     begin
         s:=0;
         for j:=1 to n do 
         s:=s+a[i,j];
         if s<>sum then 
         t:=false; 
     end;
      for j:=1 to n do 
       begin
         s:=0;
         for i:=1 to n do 
         s:=s+a[i,j];
         if s<>sum then 
         t:=false; 
       end;
       Mag:=t;
end; 
Procedure Summa (const a: matr; var s:integer);
Var j: byte;
Begin
 s:=0;
 for j:= 1 to n do
 s:=s+a[1,j];
 writeln ('sum=', s);
End;
procedure Obmen (var a: matr; var s:integer);
Var i,j, sum: integer;
Begin
  for i:= 1 to n do
  begin
  if i mod 2=0 then
  begin 
   for j:= 1 to n do
   a[i,j]:=s;
  end;
  end;
End;
Var b:matr;
sum: integer;
f: boolean;
Begin
clrscr;
     randomize;
     Input(b);
     If not Mag(b) then
     writeln('ne yavlyaetsa magicheskim kvadratom')
     else 
     begin
     writeln('yavlyaetsa magicheskim kvadratom');
     Summa(b,sum);
     Obmen(b,sum);
     Output(b);
     end    
End.
Nika_ вне форума Ответить с цитированием
Старый 02.11.2015, 17:54   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Выкладывайте, что у Вас получилось.
Говорить молодой девушке "выкладываете"...
Ай-яй-яй, порутчик, да вы пошляк
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.11.2015, 18:39   #9
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Корнет - женщина
Проверяли-сЪ?
Коль родина в беде, нет силы дома быть!

111.jpg

Автор, ЗАМУЖ СРОЧНО!!!!!!!!!1111111111адынадын
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...

Последний раз редактировалось min@y™; 02.11.2015 в 18:46.
min@y™ вне форума Ответить с цитированием
Старый 02.11.2015, 23:12   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Nika_ Посмотреть сообщение
Вроде бы так пашет
Да, отлично! Поздравляю!


Цитата:
Сообщение от Nika_ Посмотреть сообщение
Код:
f: boolean;
переменная f нигде не используется, эту строчку можно выкинуть.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функции и многомерные массивы в С++ Alex_And Помощь студентам 1 31.03.2012 16:41
Двумерные массивы. Процедуры и функции bodya00728 Помощь студентам 1 17.11.2011 18:54
Двумерные массивы. Процедуры и функции as1212 Помощь студентам 9 12.11.2011 20:38
Delphi,массивы, процедуры и функции Annn Помощь студентам 1 19.06.2009 01:50
Массивы, процедуры/функции Вампирёк Помощь студентам 1 16.03.2009 10:15