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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.09.2009, 15:11   #1
Zhamie
Пользователь
 
Регистрация: 20.07.2009
Сообщений: 17
Смущение Delphi. Проверка комбинаций

Доброе время суток!!!
Помогите пожалуйста с программкой для определения числа разных комбинации в последовательности.
Дано: последовательность (e[i]=(0 1 5 0 1 / 3 2 2 2 3 / 0 1 0 2 3 /1 1 1 1 1 / 0 3 3 3 5 / 1 2))
Нужно разделить на подпоследовательности определенной длины (t=5)(лишние отбрасываются) и посчитать число подпоследовательностей содержащих различных чисел (т.е с одной v1- 1 подпоследовательность(1 1 1 1 1), с двумя v2 - 1 подпоследовательность (3 2 2 2 3) и т.д).
Ниже следует мой код:

Код:
  k := 0;  l := 1;
  while l < t*(n div t) + 1 do
  begin
  for i := l to t*l-1 do
  for j := l-1 to i do
  if (e[i] <> e[j]) then
  k := k+1;
  l := l+t;
  end;

???
if k:=1 then v1:=v1+1
if k:=2 then v2:=v2+1

Последний раз редактировалось SuperVisor; 14.09.2009 в 16:10. Причина: Код в тэги.
Zhamie вне форума Ответить с цитированием
Старый 14.09.2009, 16:17   #2
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

Вопрос первый: какой язык?!
Вопрос второй: откуда берутся исходные данные?
Познавая других, мы познаем себя.
С'est la vie...
SuperVisor вне форума Ответить с цитированием
Старый 15.09.2009, 07:41   #3
Zhamie
Пользователь
 
Регистрация: 20.07.2009
Сообщений: 17
По умолчанию

1 - Delphi.
2 - Исходные данные считываются с файла (это уже сделано)
Zhamie вне форума Ответить с цитированием
Старый 15.09.2009, 08:23   #4
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

Замечательно... Данные в каком виде хранишь? Array of set?
Если не сложно - с кодом, так проще будет. А там дело за малым =))
Познавая других, мы познаем себя.
С'est la vie...
SuperVisor вне форума Ответить с цитированием
Старый 15.09.2009, 10:42   #5
Zhamie
Пользователь
 
Регистрация: 20.07.2009
Сообщений: 17
Радость

Надеюсь получится!!!
У меня каждое число в новой строке...

Код:
e:array of integer;

N:=Form1.Memo1.Lines.Count; //длина последовательности
      SetLength(e,N);

     // запись последовательности в массив

    for i:=0 to N-1 do
      begin
        e[i]:= StrToInt(Form1.Memo1.Lines.Strings[i]);
      end;


А это считывание с файла, если пригодиться:

  // запись файла в Memo
procedure TForm1.Button5Click(Sender: TObject);
  var f : TextFile;
      FileName :  String[255];
      buf : String[80];

  begin
    if not OpenDialog1.Execute
    then
      exit;
    Edit1.Text := OpenDialog1.FileName;
    FileName := OpenDialog1.FileName;
    Form1.Caption := FileName;
    AssignFile(f, FileName);
  try
    Reset(f);
  except
   on EInOutError do

    begin
      ShowMessage ('Ошибка доступа к файлу '+ FileName);
      exit;
    end;
  end;

  while not EOF(f) do
  begin
    readln(f, buf);
    Memo1.Lines.Add(buf);
  end;
  CloseFile(f);
  end;
Заранее спасибо!!!

Последний раз редактировалось SuperVisor; 15.09.2009 в 10:48.
Zhamie вне форума Ответить с цитированием
Старый 15.09.2009, 10:58   #6
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

Так-с, стоп!. А как мы узнаем, где кончается первая последовательность и начинается вторая???
Думаю, исходный файл лучше сделать в таком формате:
Код:
0 1 5 0 1
3 2 2 2 3
0 1 0 2 3
1 1 1 1 1
0 3 3 3 5
1 2
В нем каждая последовательность будет записана в строку. В твоем варианте мы просто получим массив чисел и ничего более. А если в новую строку мы запишем разделитель(любой), то у нас будет сбоить вот эта функция:
Код:
 e[i]:= StrToInt(Form1.Memo1.Lines.Strings[i]);
Познавая других, мы познаем себя.
С'est la vie...
SuperVisor вне форума Ответить с цитированием
Старый 15.09.2009, 11:07   #7
Zhamie
Пользователь
 
Регистрация: 20.07.2009
Сообщений: 17
По умолчанию

Но я в начале не буду знать длину подпоследовательности (t). Программа должна сама как бы разделить их. Ведь t не обязательно будет = 5
Zhamie вне форума Ответить с цитированием
Старый 15.09.2009, 11:39   #8
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

Вот тебе функция чтения того типа файла, что я тебе описал:

Код:
Type TArrayOf=array of integer;
Type PArrayOf=array of ^TArrayOf;

var
  Per: PArrayOf;

procedure TForm1.Button1Click(Sender: TObject);
var
  SL: TStringList;
  Str, Bf: String;
  i, n, c, q: integer;
  Curr: TArrayOf;
begin
  SL:=TStringList.Create;
  SL.LoadFromFile(ExtractFilePath(ParamStr(0))+'\file.txt');
  i:=0;

  For i:=0 to SL.Count-1 do
  begin
    Str:=trimleft(TrimRight(SL.Strings[i]));
    n:=0;

    SetLength(Per,i+1);
    SetLength(Curr,trunc(length(Str)/2)+2);

    while Str<>'' do
    begin
      q:=Pos(' ',Str);

      if q<>0 then
      begin
        Bf:=copy(Str,1,q-1);

        if TryStrToInt(Bf,C) then
        begin

          Curr[n]:=C;
          inc(n);
        end;

        Delete(Str,1,q);
      end

      else
      begin
        if TryStrToInt(Str,C) then
          Curr[n]:=C;
        Str:='';
      end;

    end;

    New(Per[i]);
    SetLength(Per[i]^,n+1);
    Per[i]^:=Copy(Curr,0,n+1);
  end;
end;
Чтобы узнать количество массивов пишем:
Код:
SizeOf(Per)
Чтобы узнать количество элементов в определенном массиве I - пишем:
Код:
SizeOf(Per[i]^)
Чтобы обратиться к переменной N из любого массива I пишем:
Код:
MyVar:=Per[i]^[n]
Познавая других, мы познаем себя.
С'est la vie...

Последний раз редактировалось SuperVisor; 15.09.2009 в 13:23.
SuperVisor вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сортировка данных (пересчет возможных вариантов комбинаций, перенос данных в таблицу) Vitalik85 Microsoft Office Excel 4 12.08.2009 00:30
Проверка Манжосов Денис :) Общие вопросы Delphi 4 17.10.2008 16:27
Проверка нажатия клавиш в компоненте Мемо|Delphi GAGARIN-NEW Помощь студентам 4 09.12.2007 19:59