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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2016, 19:45   #1
GreenCode
 
Регистрация: 27.12.2016
Сообщений: 4
По умолчанию Pascal abc: Вводится массив 4*6. Найти две строки, в которых элементы одинаковы но могут стоять в разной последовательности.

Вводится массив 4*6. Найти две строки, в которых элементы одинаковы но могут стоять в разной последовательности.
Используя основы языка.
GreenCode вне форума Ответить с цитированием
Старый 03.01.2017, 15:34   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию

Новый год продолжается, и форумцы в спячке Чтоб выйти из запоя, решил накропать для разминки пальцев и бошки. На Паскале лень, потому на Дельфи. Тем более, что спросившему это уже до фонаря, а если нет - сам перепрет в Паскаль

Изящное решение не получается, потому тупо. Можно, конечно, вспомогательный массив, в который отсортированные строчки исходного, но ну его.
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, Math, ExtCtrls;

type

  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormClick(Sender: TObject);
    procedure FormActivate(Sender: TObject);

  private
    { Private declarations }
  public

  end ;
const a24 : array [1..24] of integer =
    ( 1,2,3,4,5,6,9,9,9,9,9,9,6,1,5,2,4,3,0,0,0,0,0,7 ) ;
var
  Form1: TForm1  ;
  ar : array[1..4,1..6] of integer ; n6 : integer ;
implementation

{$R *.dfm}


procedure TForm1.FormClick(Sender: TObject);

  var i,j : integer ; stro : string ;

  function cmpstr (n1,n2 : integer) : boolean ;
  var k,k1 : integer ; tmp : array [1..6] of boolean ;
  begin
     for k := 1 to 6 do tmp[k] := True ; n6 := 0 ;
     for k := 1 to 6 do
       for k1 := 1 to 6 do
         if (ar[n1,k]=ar[n2,k1]) and tmp[k1] then
            begin  Inc (n6) ; tmp[k1] := False ; Break end ;
     if n6=6 then Result := True else Result := False ;
   end ;
//=======================
begin
   for i := 1 to 3 do
     for j := i+1 to 4 do
       begin
         if cmpstr(i,j) then stro := ' + ' else stro := '   ' ;
         stro := stro + Format(' n6=%2d %2d %2d',[n6,i,j]) ;
         Memo1.Lines.Add(stro)
       end ;  
end ;

procedure TForm1.FormActivate(Sender: TObject);
// Это  просто  заполнение массива  тестовым
// набором данных.
var i,j,k : integer ; stro: string ;
begin
  k := 1 ;
  for i := 1 to 4 do
    for j := 1 to 6 do
       begin ar[i,j] := a24[k] ; Inc (k) end ;
  for i := 1 to 4 do
    begin
      stro := '' ;
      for j := 1 to 6 do
        stro := stro + Format(' %2d',[ar[i,j]]) ;
      Memo1.Lines.Add(stro)
    end ;
end ;

end.

Последний раз редактировалось digitalis; 03.01.2017 в 15:55.
digitalis вне форума Ответить с цитированием
Старый 03.01.2017, 21:31   #3
GreenCode
 
Регистрация: 27.12.2016
Сообщений: 4
По умолчанию

Спасибо, но в делфи совсем не шарю. Пока ждал свой код подредактировал но не работает и не могу понять почему, помогите найти ошибку
Код:
program ab111;
type aa1=array[1..3,1..3] of integer;

bb1=set of integer;

var
a1:aa1;
b1,b2,b3:bb1;

x,y,i,j,n:integer;
begin
b1:=[];
b2:=[];
b3:=[];
for i:=1 to 3 do 
for j:=1 to 3 do 
begin 
readln (a1[i,j]);
end;

repeat;
for j:=1 to 3 do
begin
for i:=1 to 3 do
begin
b1:=b1+[a1[i,j]];
end;
for y:=1 to 3 do
begin
b2:=b1;
for x:=1 to 3 do
begin
if a1[x,y] in b2 then
b2:=b2-[a1[x,y]];
end;
if (b2=b3)=true then
begin
n:=n+1;
b2:=b1;
end
else
begin
b2:=b1;
end;
end;
end;
until (n>1)=true;


write(b1);
end.
GreenCode вне форума Ответить с цитированием
Старый 03.01.2017, 21:37   #4
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Новый год продолжается, и форумцы в спячке
Че там за алго? Сортануть строки по возростанию и сравнить их?
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 03.01.2017, 21:47   #5
GreenCode
 
Регистрация: 27.12.2016
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
Че там за алго? Сортануть строки по возростанию и сравнить их?
Можно и так
GreenCode вне форума Ответить с цитированием
Старый 04.01.2017, 11:21   #6
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию

1. Посмотрев хотя бы пару тем форума, следовало бы заметить, как оформляются ( форматируются ) программы: с отступами, позволяющими выявить структуру проги и легко ее понять. У тебя же строем, как в казарме, и читать неохота.
2. Дельфи - это Object Pascal, если не касаться ввода-вывода, то на 98% совпадает с "обычныи" Плескалем, и функция cmpstr переносится туда 1:1. Напишешь сам ввод-вывод, 2 вложенных цикла
Код:
   for i := 1 to 3 do
     for j := i+1 to 4 do
       begin
         if cmpstr(i,j) then // удачно,  строки  i-тая и j-тая совпали
и вуаля - задача решена. Если и с этим будет напряг, вот накормлю котов и перепишу.
3. Конечно, можно и через сортировку, но это лишняя загрузка. У меня введен вспомогательный булев массив tmp, чтобы не рассматривать повторно уже совпавший элемент. Так короче, я думаю. Проверено. Фурчит.

Ну и в качестве мелкой придирки : в цикле один оператор - begin и end не нужен. Компилятору-то пофиг, а для чтение загромождает .

Код:
for i:=1 to 3 do
begin
b1:=b1+[a1[i,j]];
end;

Последний раз редактировалось digitalis; 04.01.2017 в 15:50. Причина: дополнение
digitalis вне форума Ответить с цитированием
Старый 04.01.2017, 15:55   #7
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию

Код:
program  abc ;

var ar : array [1..4,1..6] of integer ; i,j,n6 : integer ;

function cmpstr (n1,n2 : integer) : boolean ;
  var k,k1 : integer ; tmp : array [1..6] of boolean ;
  begin
     for k := 1 to 6 do tmp[k] := True ;
     n6 := 0 ;
     for k := 1 to 6 do
       for k1 := 1 to 6 do
         if ( (ar[n1,k]=ar[n2,k1]) and tmp[k1] ) then
            begin  Inc (n6) ; tmp[k1] := False ; Break end ;
     if n6=6 then cmpstr := True else cmpstr := False ;
   end ;

begin

   for i := 1 to 4 do
     for j := 1 to 6 do  Read (ar[i,j]) ;
   Writeln ('---') ;
   for i := 1 to 4 do
     begin 
       for j := 1 to 6 do  Write (' ',ar[i,j]) ;
       Writeln ('  -');
     end ;

   for i := 1 to 3 do
     for j := i+1 to 4 do
         if cmpstr(i,j) then Writeln  ( 'Matching rows i=',i,' j=',j) ;
   Writeln ('---') ;
end.
Результат работы :
Изображения
Тип файла: jpg 123456.JPG (10.7 Кб, 64 просмотров)
digitalis вне форума Ответить с цитированием
Старый 06.01.2017, 10:50   #8
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию

А в ответ - тишина ...
digitalis вне форума Ответить с цитированием
Старый 06.01.2017, 20:04   #9
GreenCode
 
Регистрация: 27.12.2016
Сообщений: 4
По умолчанию

Огромное спасибо.
К замечаниям прислушаюсь
GreenCode вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли среди чисел массива найти две разных пары чисел, суммы которых одинаковы? (Pascal) Soms Помощь студентам 3 16.03.2016 01:34
Найти m-й член последовательности / Pascal ABC Veronika_13 Помощь студентам 1 07.07.2014 19:28
Найти и закрасить строки матрицы, все элементы которых различны Kate1414 Общие вопросы Delphi 1 11.06.2014 13:18
Дан массив X(N,M).Найти номера столбцов массива,все элементы которых четны. Из полученных значений сформировать одномерный массив. darwin1 Паскаль, Turbo Pascal, PascalABC.NET 3 16.03.2014 13:31
Создать матрицу A[1..N,1..M]. Найти две строки, в которых элементы одинаковы, но могут стоять в различной Bapr Помощь студентам 7 11.12.2009 17:44