Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

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

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

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

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 в 16:55.
digitalis вне форума   Ответить с цитированием
Старый 03.01.2017, 22:31   #3
GreenCode
 
Регистрация: 27.12.2016
Сообщений: 4
Репутация: 10
По умолчанию

Спасибо, но в делфи совсем не шарю. Пока ждал свой код подредактировал но не работает и не могу понять почему, помогите найти ошибку
Код:

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, 22:37   #4
Aleksandr H.
Профессионал
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Адрес: Wild West Ukraine
Сообщений: 1,765
Репутация: 661

skype: aleksandr.gryb
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Новый год продолжается, и форумцы в спячке
Че там за алго? Сортануть строки по возростанию и сравнить их?
__________________
Wix-Filters.A Filter For Every Application.
"спасибо" принимаются на webmoney: R676842461689, Z243088649038, U164738001305; AdvancedCash: U853633661253, E181662999107, R587360121187; ПриватБанк.UA
Aleksandr H. на форуме   Ответить с цитированием
Старый 03.01.2017, 22:47   #5
GreenCode
 
Регистрация: 27.12.2016
Сообщений: 4
Репутация: 10
По умолчанию

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

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 в 16:50. Причина: дополнение
digitalis вне форума   Ответить с цитированием
Старый 04.01.2017, 16:55   #7
digitalis
Форумчанин
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Адрес: Минск
Сообщений: 394
Репутация: 144
По умолчанию

Код:

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 Кб, 35 просмотров)
digitalis вне форума   Ответить с цитированием
Старый 06.01.2017, 11:50   #8
digitalis
Форумчанин
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Адрес: Минск
Сообщений: 394
Репутация: 144
По умолчанию

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

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



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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




16:12.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru