• Как можно оптимизировать код?

    @Alertoso Автор вопроса
    kalapanga,
    Здесь записываю решение в файл(потом хочу переделать под типизированный)
    procedure TfrmMain.DrawSolution(Solution: TStack<Integer>);
    var
      I: Integer;
      CurrentTickCount: cardinal;
      SolutionArray: TArray<Integer>;
      HelpString: String;
    begin
      SolutionCount := SolutionCount + 1;
      lblSolutionCount.Caption := IntToStr(SolutionCount);
      grdChessBoard.Repaint;
      grdChessBoard.Canvas.Brush.Color := clBlack;
      SolutionArray := Solution.ToArray;
      for i := 1 to QueensCount do
        with grdChessBoard do
          if (i + SolutionArray[i - 1]) mod 2 = 0 then
            Canvas.StretchDraw(CellRect(i, SolutionArray[i - 1]), img1.Graphic)
          else
            Canvas.StretchDraw(CellRect(i, SolutionArray[i - 1]), img2.Graphic);
      Assignfile(Input, 'D:\Работы по ОАиП\Курсовая работа\Формы(без стека)\Placements.txt');
      Append(Input);
      writeln(Input,'Placement № ',IntToStr(SolutionCount));
      for i:=1 to QueensCount-1 do
      begin
        Write(Input,char(ord(96+SolutionArray[i - 1])),'-',QueensCount-i);
        if I <> QueensCount-1 then write(Input,',');
      end;
      writeln(Input);
      writeln(Input,HelpString);
      CloseFile(Input);
      CurrentTickCount := GetTickCount;
      Repeat
        Application.ProcessMessages
      Until (GetTickCount - CurrentTickCount) > ShowDelay
    end;


    А вот читать последнюю строку из файла где?
    Я хотел попробовать так, то есть найти последнюю строку, потом цифры поочерёдно записать в StackSolution, и там уже запустить процедуру с этого момента, но я так понял, кнопка на такое не способна, и там как параметр может быть только Sender: TObject)
    procedure TfrmMain.Button2Click(Sender: TObject; Solution: TStack<Integer>);
    var s: string;
      i: integer;
      SolutionArray: TArray<Integer>;
    begin
      Assignfile(Input, 'D:\Работы по ОАиП\Курсовая работа\Формы(без стека)\Placements.txt');
      Reset(Input);
      while (not EOF(Input)) do begin
        Readln(Input, s);
      end;
      CloseFile(Input);
      for I := 1 to QueensCount do
        if s[i] in ['0'..'9'] then SolutionArray[i - 1]:=StrToInt(s[i]);
      StopPressed := False;
      StackSolution;
    end;
  • Как можно оптимизировать код?

    @Alertoso Автор вопроса
    kalapanga, кстати, придумал расставлять скобки просто, чтобы расставить приоритеты, то есть если я ввожу 5*4+20, то сначала преобразуется в (5*4)+20, только потом начнётся расчёт, не знаю, насколько хорошая идея, но работает чётко, да, конечно, там определённые проверки на то, если знак умножения/деления в начале есть или в конце, но я бы не сказал, что код сильно стал больше, было 97 строк, стало 167, ну и кстати, добавил одну фичу, а именно: пользователь может сам расставить приоритет, например, (2+5)*10=70
  • Как можно оптимизировать код?

    @Alertoso Автор вопроса
    kalapanga, согласен, но, по крайней мере, я сделаль и получил удовольствие)
  • Как можно оптимизировать код?

    @Alertoso Автор вопроса
    kalapanga, всё-таки я попробую, сейчас только докручу учёт приоритета операций, к сожалению, там костыль вышел, но что поделать, в моей лабе всего лишь + и -, а это не интересно :)
  • Могу ли я лучше сделать?

    @Alertoso Автор вопроса
    Денис Загаевский, индексация там сбита, то есть не 1-2-3-4-5, а 5-4-3-2-1, поэтому пришлось сделать перед вставкой ResOfSub := 11(для частного случая(N=10), ну и N+1, если для общего), не считаю это красивым тоном, поэтому и обратился за помощью
  • Как можно оптимизировать код?

    @Alertoso Автор вопроса
    kalapanga, всё, разобрался в 8 лабе, осталось с тип. файлом побороться...
  • Как можно модифицировать этот код до целых чисел?

    @Alertoso Автор вопроса
    Hemul GM, уже всё сделал, затупил дико...
  • Как можно оптимизировать код?

    @Alertoso Автор вопроса
    kalapanga, а насчёт тип. файла я пытался, что-то не идёт вообще, надеюсь, на выходных ещё попробую...
  • Как использовать стек в данном алгоритме?

    @Alertoso Автор вопроса
    acwartz, да, уже всё сделано, осталось тип. файл подкрутить, вот с ним проблемы, а так и гуи готово
  • Как можно оптимизировать код?

    @Alertoso Автор вопроса
    kalapanga, здравствуйте, делаю лабу на рекурсию, что-то путаница возникла, необходимо вычислить значение выражения по формуле, 607737fb6dfad234275051.png
    60773808d7cfe386400339.png
    Задание 8, я так понимаю, что нужно читать цифры до знака, потом сам знак, потом второе число вызовом рекурсии, потом действие делаем, записываем в первое число и делаем то же самое, но я вообще без понятия как это сделать, есть только такой набросок на лк...
    Function CountFunc: Integer;
    Var
    	c,op: Char;
    	x,y: Integer;
    Begin
    	Read(c);
    	If (c>='0') and (c<='9') then
    		Result:=Ord(c)-Ord('0')
      else
    	Begin
    		x:=CountFunc;
    		read(op);
    		y:=CountFunc;
    		case op of
    			'+': Result:=x+y;
    			'-': Result:=x-y;
    			'*': Result:=x*y;
    		End;
    		Read(c);
    	End
    End;
    
    Begin
      writeln(CountFunc);
      readln;
    End.
  • Как можно оптимизировать код?

    @Alertoso Автор вопроса
    kalapanga, ну с текстовым там предельно всё ясно, насчёт типизированного файла, не знаю, но что мне преподаватель сказал сделать, так это история, идея такая: нажал пользователь Start, понеслась визуализация, потом он нажал стоп, и вот нужно добавить кнопку продолжить(я так понимаю, комбинации запишутся в тип. файл и благодаря этому я смогу продолжить), можете, пожалуйста, помочь с этой фичей?
  • Как можно оптимизировать код?

    @Alertoso Автор вопроса
    kalapanga, добрый день, в целом, сделано всё, только один момент остался, типизированный файл, я постараюсь сделать это, но вы можете, подсказать, что туда я могу записывать, помимо настроек(сам или программа расставляет, если сам, то с подсказками или без, если программа расставляет, то какой интервал демонстрации следующей расстановки, какой размер доски, вообще комбинации, которые вывела программа)?
  • Как можно оптимизировать код?

    @Alertoso Автор вопроса
    Alertoso, хотя у меня появилась идея просто сделать 1 процедуру и там уже подумать, так и сделаю
  • Как можно оптимизировать код?

    @Alertoso Автор вопроса
    Alertoso, в общем, есть идея после убирания нужны клеток просто пускать процедуру, если Mas[I,J]=1, то пускать процедуру для него заполнения клетками, но, по-моему, это дикий костыль...
  • Как можно оптимизировать код?

    @Alertoso Автор вопроса
    Alertoso, в общем, тут уже я бессилен, столкнулся с одной проблемой, насчёт подсказок, когда я хочу убрать 2 поставленного ферзя, например, он убирает не только закрашенные клетки для 2 ферзя, но и некоторые клетки для 1 ферзя, это можно как-то обойти?
  • Как можно оптимизировать код?

    @Alertoso Автор вопроса
    Alertoso, нашёл, следующим образом:
    (Self.FindComponent('Image' + inttostr(i)) as TImage).Visible:= false;
  • Как можно оптимизировать код?

    @Alertoso Автор вопроса
    kalapanga, важный вопрос, могу ли я иначе обратиться к картинке? То есть не вот так:
    Image8.Visible := false;
    А примерно как-то так:
    Image[QueensCount].Visible := false;
  • Как можно оптимизировать код?

    @Alertoso Автор вопроса
    kalapanga, это можно сделать всё в одном Image?
  • Как можно оптимизировать код?

    @Alertoso Автор вопроса
    Alertoso, делал через Label, но потом работать с ним, то есть удалять или вставлять вроде как нельзя(ну удалять да, но там надо всё удалять, слишком дикий костыль, я думаю)