Показать сообщение отдельно
  #2  
Старый 19.06.2009, 00:07
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

1. Обычная задача на массив.
Код:
var
  Places : Array[1..30,1..25] Of Integer;

function FreeInRow(ARow : Integer) : Integer;
var
  I : Integer;
begin
  Result := 25;
  For I := 1 To 25 Do
    Result := Result - Places[ARow,I];
end;

function FreeTotal : Integer;
var
  I : Integer;
begin
  Result := 0;
  For I := 1 To 30 Do
    Result := Result + FreeInRow(I);
end;

function BusyInRow(ARow : Integer) : Integer;
begin
  Result := 25 - FreeInRow(ARow);
end;

function BusyTotal : Integer;
begin
  Result := 25 * 30 - FreeTotal;
end;

function UnwantedRow : Integer;
var
  I : Integer;
  N : Integer;
begin
  N := 0;
  Result := 0;
  For I := 1 To 30 Do
    If N > FreeInRow(I) Then 
      Begin
         Result := I;
         N := FreeInRow(I);
      End;
end;

function MaxFreeLineInRow(ARow : Integer) : Integer;
var
  I : Integer;
  F : Integer;
begin
  Result := 0;
  F := 0;
  I := 1;
  While I <= 25 Do
     Begin
        Case Places[ARow,I] Of
           0 : Inc(F);
           1 :
              Begin
                 If Result < F Then Result := F;
                 F := 0;
              End;
        End;
        Inc(I);
    End;
end;

function GetMaxLineRow : Integer;
var
  I : Integer;
  N : Integer;
begin
  Result := 0;
  N := 0;
  For I := 1 To 30 Do
    If N <  MaxFreeLineInRow(I) Then
      Begin
         N := MaxFreeLineInRow(I);
         Result := I;
      End;
end;

function GetMaxLineNumber : Integer;
var
  I : Integer;
  N : Integer;
begin
  Result := 0;
  For I := 1 To 30 Do
    If Result <  MaxFreeLineInRow(I) Then
      Begin
         Result := MaxFreeLineInRow(I);
      End;
end;

Набора этих функций достаточно что бы решить первую задачу полностью.

Извини, над другими просто лень думать...
Ответить с цитированием