![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 09.01.2013
Сообщений: 4
|
![]()
Объясните программу в Delphi, программа готовая, но многое в ней не понимаю, вот код программы:
program HappyNum; {$APPTYPE CONSOLE} uses SysUtils, Windows, Classes, SyncObjs; type TMyThread = class(TThread) //этот объект позволяет создавать как бы несколько программ в одной (несколько процессов, или, потоков) public leftBorder, rightBorder : Integer; // переменные Constructor Create(CreateSuspended : Boolean; leftBorder : Integer; rightBorder : Integer); //Create(CreateSuspended: Boolean) - создает экземпляр класса. Параметр CreateSuspended указывает на то, нужно ли создавать приостановленную задачу (True), или запускать ее сразу (False); procedure Execute; override; // Позволяет вызвать процедуру которая не возращает параметры или возращает их единожды end; const OUT_FILE_NAME = 'listhappy.txt'; var fileId : TextFile; msg: String; count : Integer; Thread1, Thread2 : TMyThread; crit : TCriticalSection; function WinToRusCon(msg: String): String; var ruMsg : array[0..255] of Char; begin CharToOemBuff(PChar(msg), ruMsg, Length(msg) + 1); WinToRusCon := ruMsg; end; procedure WriteToFileAndUI(msg: String); begin Writeln(WinToRusCon(msg)); Writeln(fileId, msg); end; procedure PrepareFile(); begin AssignFile(fileId, OUT_FILE_NAME); if FileExists(OUT_FILE_NAME) then DeleteFile(PChar(OUT_FILE_NAME)); ReWrite(fileId); end; procedure CalculateHappyNumbers(leftBorder : Integer; rightBorder : Integer); var i, k1, k2, s1, s2 : Integer; begin for i := leftBorder to rightBorder do begin k1 := i div 1000; k2 := i mod 1000; s1 := (k1 div 100) + ((k1-(k1 div 100)*100) div 10 ) + k1 mod 10; s2 := (k2 div 100) + ((k2-(k2 div 100)*100) div 10 ) + k2 mod 10; if s1 = s2 then begin crit.Enter; count := count +1; FmtStr(msg, '%5u %6.6u %2u (Thread: %u)', [count, i, s1, Windows.GetCurrentThreadId]); WriteToFileAndUI(msg); crit.Leave; end; end; end; constructor TMyThread.Create(CreateSuspended : Boolean; leftBorder : Integer; rightBorder : Integer); begin inherited Create(CreateSuspended); self.leftBorder := leftBorder; self.rightBorder := rightBorder; end; procedure TMyThread.Execute; begin CalculateHappyNumbers(self.leftBord er, self.rightBorder); self.Terminate; self.Free; end; begin try PrepareFile(); crit := TCriticalSection.Create(); count := 0; Thread1 := TMyThread.Create(false, 0, 500000); Thread2 := TMyThread.Create(false, 500000, 999999); while not (Thread1.Terminated and Thread2.Terminated) do begin sleep(100); end; WriteToFileAndUI('Итого ' + IntToStr(count) + ' счастливых билетов'); finally CloseFile(FileID); readln; end; end. Заранее огромное спасибо!! |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,543
|
![]() Код:
программа — запись алгоритма на языке понятном транслятору
|
![]() |
![]() |
![]() |
#3 |
Регистрация: 09.01.2013
Сообщений: 4
|
![]()
спасибо огромное!!!
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Не запускается готовая программа | Алекссс | Общие вопросы Delphi | 7 | 05.06.2013 12:10 |
Это программа в Delphi по переводу из одной системы исчисления в другую(от2до10)Нужно объяснить КАЖДУЮ строчку что в ней делаеться | YekaterinaMel | Помощь студентам | 1 | 15.06.2012 17:14 |
Объясните задачу Delphi. Задача сделана только код я не понимаю!! | LudaBojar | Помощь студентам | 0 | 21.03.2011 20:30 |
Паскаль.Задание на строки,не понимаю как его сделать,если кто может,объясните... | Меффистоф | Помощь студентам | 4 | 25.08.2010 10:05 |
Объясните. Ну не понимаю я как сайты на си делаются? | newprog12 | Общие вопросы C/C++ | 16 | 25.01.2010 10:46 |