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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.09.2012, 23:28   #1
kalosha-stepa
Пользователь
 
Регистрация: 13.09.2012
Сообщений: 25
По умолчанию проверить массив симметричен или нет

ФОРМУЛИРОВКА:Проверить является ли массив n*n симметричным относительно одной из его диагоналей.
Надо подправить!
Код:
program z3;
Type masInt=array [1..10,1..10] of integer;
var a:masInt; n: integer; i,j:integer;

procedure Form (var n:integer;var a:masInt);
var i,j:integer;
begin
writeln('введи количество строк и столбцов');
readln(n);
writeln('введите сам массив');
  for i:=1 to n do
  for j:=1 to n do readln(a[i,j]);
end;

procedure Print (a: masInt; n: integer);
var i,j: integer;
begin
  for i:=1 to n do begin
  for j:=1 to n do write (a[i,j],' ');
writeln;
end; end;

procedure Dioganal (a: masInt;n: integer);
 var i,j: integer;
 begin
   if (i>j) and (a[i,j]<>a[j,i]) then writeln ('не симметрична')
   else writeln('симмитрична');
end;

Begin
Form(n,a);
Print(a,n);
Dioganal(a,n);
End.

Последний раз редактировалось Stilet; 14.09.2012 в 07:55.
kalosha-stepa вне форума Ответить с цитированием
Старый 14.09.2012, 07:17   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Ну так допишите цикл делов-то?
p51x вне форума Ответить с цитированием
Старый 14.09.2012, 08:04   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Когда-то я делал так:
Код:
  for i:=1 to n do begin
  for j:=1 to n do begin
   if (not c) and (not b) then break;
   if b and (j>i) and (a[i,j]<>a[n-i,n-j]) then b:=false;
   if c and ((n-j)<i) and (a[i,j]<>a[n-i,n-j]) then c:=false;
  end;
end;
Где b,c - Boolean;
Если b = False то массив несимметричен относительно побочной, если с - то относительно главной.

Ессно подразумевается что массив введен.
I'm learning to live...

Последний раз редактировалось Stilet; 14.09.2012 в 08:31.
Stilet вне форума Ответить с цитированием
Старый 19.09.2012, 08:03   #4
kalosha-stepa
Пользователь
 
Регистрация: 13.09.2012
Сообщений: 25
По умолчанию

а что делает break!!!
kalosha-stepa вне форума Ответить с цитированием
Старый 19.09.2012, 08:08   #5
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Бывает, что цель выполнения цикла достигается раньше, чем он будет прекращен по условию выхода. Так, например, в программе для определения простоты числа цикл будет выполняться n div 2-1 раз, хотя то, что число не является простым, может быть обнаружено на первых шагах цикла. Чтобы уменьшить количество шагов цикла, можно воспользоваться оператором goto, либо сформировать сложное условие выполнения (прекращения) цикла.

Однако существуют специальные операторы, использующиеся для прерывания хода выполнения цикла. Оператор break выполняет полный выход из цикла, т.е. все возможные итерации цикла прерываются. Оператор continue прерывает только текущую итерацию.
Ну есть же поиск и справка!
Poma][a вне форума Ответить с цитированием
Старый 19.09.2012, 08:13   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну в данном случае как сказал Рома
Цитата:
Чтобы уменьшить количество шагов цикла
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.09.2012, 22:01   #7
kalosha-stepa
Пользователь
 
Регистрация: 13.09.2012
Сообщений: 25
По умолчанию

Код:
program z3;
Type masInt=array [1..10,1..10] of integer;
var a:masInt; n: integer; i,j:integer; b,c: boolean;

procedure Form (var n:integer;var a:masInt);
var f: text;i, j: integer;
begin
  assign(f, '3.txt');
  reset(f);
  readln(f, n);
  for i := 1 to n do
  begin
    for j := 1 to n do read(f, a[i, j]);
    readln(f);
  end;
  close(f);
end;

procedure Print (a: masInt; n: integer);
var i,j: integer;
begin
  for i:=1 to n do begin
  for j:=1 to n do write (a[i,j],' ');
writeln;
end; end;

procedure Dioganal (a: masInt;n: integer);
 var i,j: integer;
 begin
 for i:=1 to n do
  for j:=1 to n do begin
    if (not c) and (not b) then break;
   if b and (j>i) and (a[i,j]<>a[n-i,n-j]) then b:=false;
   if c and ((n-j)<i) and (a[i,j]<>a[n-i,n-j]) then c:=false;
   
  end;
end;

Begin
Form(n,a);
Print(a,n);
Dioganal(a,n);
End.
Где-то ошибочка и не выводит а лишь массив выводит

Последний раз редактировалось Stilet; 19.09.2012 в 22:34.
kalosha-stepa вне форума Ответить с цитированием
Старый 19.09.2012, 22:13   #8
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Где-то ошибочка и не выводит а лишь массив выводит
Так у Вас кроме вывода самого массива (Print) больше никаких других выводов нигде не прописано. Так что нет никакой ошибки, просто забыли WriteLn вставить (подозреваю, что в процедуру Dioganal)

P.S. Правильно пишется диАгОналь
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как проверить загрузилась ли страница в WebBrowser1 или нет bakanaev Работа с сетью в Delphi 4 03.08.2012 10:13
Shelllistview...проверить папка или нет? Port 111 Общие вопросы Delphi 0 31.05.2012 17:57
Как проверить скрыто окно или нет? BuT@JL Общие вопросы Delphi 9 13.11.2009 15:19
Как проверить запущено приложение или нет? kiber0net0 Общие вопросы Delphi 2 18.09.2008 19:48