Вступление
Привет, Хабровчане.
Весной обычно проводится целая куча олимпиад. Программирование не исключение. Защищать честь моего учебного заведения (я учусь в техникуме, опыта мало, поэтому простите мой нубокод) доверили мне и моему одногруппнику.
У нас правила проведения такие: за месяц до олимпиады выдаются 10 заданий, а перед олимпиадой будет рандомно выбрано одно задание и роздано участникам. Я живу на Юге Украины, а Украина – страна специфическая, даже в программировании. При выполнении задания нужно написать программу на языке Delphi/C++/C# (один из них), сделать приятный и удобный интерфейс (красиво, информативно, обязательно должна присутствовать автоочистка, переход к следующему текстовому полю при нажатии на Enter и т.д.), переписать код программы на листик и нарисовать блок-схему (!) к программе. Да-да, блок схему к ООП программе.
Ладно, суть данного поста не в описании системы образовании в Украине. Я хочу привести код своих программ, являющихся решением заданий. Для чего я это делаю? Мне с одногруппником пришлось очень много перерыть в нете, поспрашивать на форумах и мучать знакомых ПРОграммистов, чтобы решить некоторые задания, так как ответа на поверхности интернета нет.
Не относитесь ко мне строго. Я очень люблю язык Java, а Delphi, который мы «изучали» более года назад, я забыл совсем и чуть ли не изучал с нуля.
Я буду приводить задания на украинском, переводить на русский (будут неточности – пишите, исправлю), приводить код и немного его объяснять. Также будет скриншот программы, правда, сделанной в RAD Studio XE3. Данный пост не более чем небольшой help.
Задание 1
Скласти на мові C++ в системі програмування C++Builder, або на мові C# в системі програмування Visual C# Express або на мові Object Pascal в системі програмування Delphi програму «Ступені», яка обчислює залишок від цілочисельного ділення числа mn на d. Програма має отримувати від користувача числа m, n, d з полів вводу та виводити залишок в поле виводу. Обмеження: m<30000, n<30000, d<120.
Составить на языке C + + в системе программирования C + + Builder, или на языке C # в системе программирования Visual C # Express или на языке Object Pascal в системе программирования Delphi программу «Ступени», которая вычисляет остаток от целочисленного деления числа mn на d. Программа должна получать от пользователя числа m, n, d с полей ввода и выводить остаток в поле вывода. Ограничения: m <30000, n <30000, d <120.
procedure TForm2.Button1Click(Sender: TObject); var m,n,d: integer; mCode,nCode,dCode: integer; i,buffer:integer; begin // Проверяем правильность вводимых переменных val(mEdit.Text,m,mCode); val(nEdit.Text,n,nCode); val(dEdit.Text,d,dCode); if (mCode<>0) OR (nCode<>0) OR (dCode<>0) then begin ResLabel.Caption := 'В одном из полей вы ввели неправильное значение! Пожалуйста, проверте правильность вводимых значений!'; exit; end; // Возводим в степень buffer := m; for i := 2 to n do buffer := buffer * m; // Результат ResLAbel.Caption := 'Результат равен ' + IntToStr(buffer div d); end;
Хочу отметить, что Dephi нам предоставляли 5-ой версии, а C++Builder 6-ой. Также стоит обратить внимание на некорректность ограничений. Подсчитать число 30000 в 30000 степени – это бред. Организаторы уже не первый год выставляют эту задачу, очень многие делали им замечание, что задание некорректно, но они проигнорировали.
Согласитесь, задание плевое. Единственное, при вводе максимальных значений она будет выдавать результат ноль. Можно разработать алгоритм возведения степеней таких чисел, но это и долго, и бессмысленно для данных целей.
Задание 2
Скласти на мові C++ в системі програмування C++Builder, або на мові C# в системі програмування Visual C# Express або на мові Object Pascal в системі програмування Delphi програму «Корабель», яка має демонструвати принципи мультиплікації (пересування об’єкту на фоні картинки). Зображення фону та об’єкту мають завантажуватися з файлу.
Составить на языке C + + в системе программирования C + + Builder, или на языке C # в системе программирования Visual C # Express или на языке Object Pascal в системе программирования Delphi программу «Корабль», которая должна демонстрировать принципы мультипликации (передвижение объекта на фоне картинки). Изображение фона и объекта должны загружаться из файла.
//Загрузка фона procedure TForm1.Button1Click(Sender: TObject); begin if OpenPictureDialog1.Execute then begin Background.Picture.LoadFromFile(OpenPictureDialog1.FileName); Background2.Picture.LoadFromFile(OpenPictureDialog1.FileName); end else begin ShowMessage('Error!!! You dont choose picture!'); end; end; //Загрузка изображения кораблика procedure TForm1.Button2Click(Sender: TObject); begin if OpenPictureDialog1.Execute then begin Ship.Picture.LoadFromFile(OpenPictureDialog1.FileName); end else begin ShowMessage('Error!!! You dont choose picture!'); end; end; // Стартуем procedure TForm1.Button3Click(Sender: TObject); begin Panel1.Hide; end; //Проверка, загружены ли картинки procedure TForm1.Button4Click(Sender: TObject); begin Label13.Caption := ''; if Background.Picture.Graphic=nil then Label13.Caption := 'Не загружен фон! '; if Ship.Picture.Graphic=nil then Label13.Caption := Label13.Caption + 'Не загружен кораблик!'; if NOT ((Background.Picture.Graphic=nil) OR (Ship.Picture.Graphic=nil)) then Button3.Enabled := true; end; //Выход procedure TForm1.Button5Click(Sender: TObject); begin Application.Terminate; end; //Инициализация при запуске procedure TForm1.FormCreate(Sender: TObject); begin Timer.Enabled := false; distance := 0; Self.DoubleBuffered := true; Background2.Left := Background.Left + Background.Width; end; // Управление procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin if Key = #27 then begin speed:=0; Button3.Caption :='Продолжить'; Panel1.Show; end; if Key = 'e' then if (speed + 5) < 30 then speed := speed + 5; if Key = 'q' then if (speed - 5) >= 0 then speed := speed - 5; if Key = 'w' then if (Ship.Top - 30) > 15 then Ship.Top := Ship.Top - 30; if Key = 's' then if (Ship.Top + 30) < ((Background.Height - Ship.Height) - 15 ) then Ship.Top := Ship.Top + 30; if Key = 'a' then if (Ship.Left - 5) > 5 then Ship.Left := Ship.Left - 5; if Key = 'd' then if (Ship.Left + 5) < Form1.Background.Width then Ship.Left := Ship.Left + 5; end; //Таймер, который двигает фоновую картинку procedure TForm1.TimerTimer(Sender: TObject); begin Background.Left := Background.Left - speed; Background2.Left := Background2.Left - speed; distance := distance + abs(speed); SpeedLabel.Caption := FloatToStr(speed/5); DistanceLabel.Caption := IntToStr(distance/5); if Background.Left < -1201 then Background.Left := Background2.Left + 1200; if Background2.Left < -1201 then Background2.Left := BAckground.Left + 1200; end;
Задание очень интересное, развивать его можно множествами способов. Учитывая, что время ограничено, а надо переписывать код и рисовать блок схему, я сделал ее достаточно простой.
Задание 3
Скласти на мові C++ в системі програмування C++Builder, або на мові C# в системі програмування Visual C# Express або на мові Object Pascal в системі програмування Delphi програму «Вгадай число». Програма випадковим чином обирає ціле число в деякому діапазоні, а користувач намагається вгадати його та вводить своє число з клавіатури. Якщо число вгадане, програма виводить повідомлення про це і завершує свою роботу. Інакше спроба вгадати число повторюється ще 2 рази. При цьому користувачу видається повідомлення: “задане число більше чи менше введеного”.
Составить на языке C + + в системе программирования C + + Builder, или на языке C # в системе программирования Visual C # Express или на языке Object Pascal в системе программирования Delphi программу «Угадай число». Программа случайным образом выбирает целое число в некотором диапазоне, а пользователь пытается угадать его и вводит свое число с клавиатуры. Если число угадано, программа выводит сообщение об этом и завершает свою работу. Иначе попытка угадать число повторяется еще 2 раза. При этом пользователю выдается сообщение: «заданное число больше или меньше введенного».
procedure TForm2.Button1Click(Sender: TObject); var m,mCode: integer; begin // Проверяем правильность значения val(Edit1.Text, m, mCode); if mCode <>0 then ResLabel.Caption := 'Неправильно введено значение! Проверьте правильность введенного значения!' else // проверяем ответ if m = answer then begin ResLabel.Caption := 'Ура! Вы угадали!!! Приложение закроеться через 5 сек.'; timer.Enabled := true end else if attempt<>1 then // если попытки еще есть if m > answer then begin dec(attempt); ResLabel.Caption := 'Увы! Введенное значение больше моего числа. У тебя еще:'+ IntToStr(attempt) +' попыток' end else begin dec(attempt); ResLabel.Caption := 'Увы! Введенное тобой значение меньше моего числа. У тебя еще:'+ IntToStr(attempt) +' попыток'; end else begin //попытки закончились ResLabel.Caption := 'Увы! Попытки закончились! Пока! (приложение закроеться через 5 сек.)'; Timer.Enabled := true; end; end;
Также довольно простая программа, комментарии все объясняют. Не будем на ней останавливаться.
Задание 4
Скласти на мові C++ в системі програмування C++Builder, або на мові C# в системі програмування Visual C# Express або на мові Object Pascal в системі програмування Delphi програму «Аутентифікація», яка має створювати вікно перевірки паролю та логіну користувачів та виводити відповідне повідомлення підтвердження або помилки. Перелік існуючих користувачів та їх паролів має зберігатись у файлі. Реалізувати можливість додавання нового користувача.
Составить на языке C + + в системе программирования C + + Builder, или на языке C # в системе программирования Visual C # Express или на языке Object Pascal в системе программирования Delphi программу «Аутентификация», которая должна создавать окно проверки пароля и логина пользователей выводить соответствующее сообщение подтверждения или ошибки. Перечень существующих пользователей и их паролей должна храниться в файле. Реализовать возможность добавления нового пользователя.
//Проверка, если ли такой логин/пароль в файле function isCorrect(res: String): boolean; var tempStr: String; mfile: TextFile; begin AssignFile(mfile,'catalog.txt'); Reset(mfile); while not eof(mfile) do begin ReadLn(mfile, tempStr); if tempStr = res then begin isCorrect := true; closeFile(mfile); exit; end; end; isCorrect := false; closeFile(mfile); end; //Регистрация пользователя procedure TForm1.Button1Click(Sender: TObject); var res: String; mfile: TextFile; begin // Алгоритм такой: формируется строка логин - разделитель - пароль и сверяется со всеми строками в файле res := trim(LoginEdit.Text) + '|' + trim(PasswordEdit.Text); if isCorrect(res) then begin MessageLabel.Font.Color := clRed; MessageLabel.Caption := 'User already exists'; exit; end; AssignFile(mfile,'catalog.txt'); append(mfile); WriteLn(mfile, res); closeFile(mfile); MessageLabel.Font.Color := clLime; MessageLabel.Caption := 'User created!'; end; //Проверка логина/пароля procedure TForm1.Button2Click(Sender: TObject); var mfile: TextFile; res: String; tempStr: String; begin res := trim(LoginEdit.Text) + '|' + trim(PasswordEdit.Text); if isCorrect(res) then begin MessageLabel.Font.Color := clLime; MessageLabel.Caption := 'Enter is successfull!'; end else begin MessageLabel.Font.Color := clRed; MessageLabel.Caption := 'User or password is invalid!'; end; LoginEdit.SetFocus; end;
Задание простое, но реализовать «красиво» я его не смог (лень * лень + «любовь» в Delphi). Реализовал наобум.
Примечание: на скриншотах зарегистрированный юзер с пустым именем и пустым паролем (:))
Задание 5
Скласти на мові C++ в системі програмування C++Builder, або на мові C# в системі програмування Visual C# Express або на мові Object Pascal в системі програмування Delphi програму «Шифр Хасегава», яка виконує шифрування та дешифрування за алгоритмом Хасегава. При шифруванні кожному символу початкового відкритого повідомлення привласнюється його порядковий номер в алфавіті, після чого обирається ключ і його символи підписуються під символами початкового відкритого повідомлення з послідовним повторюванням ключу. Символам ключу також привласнюються порядкові номери за алфавітом, після чого вони складаються з відповідними символами повідомлення і отримані номери переводяться в символи початкового алфавіту. Відповідно, при перевищенні порядковим номером символу довжини алфавіту треба відняти довжину алфавіту. При дешифруванні виконати зворотні операції.
Составить на языке C + + в системе программирования C + + Builder, или на языке C # в системе программирования Visual C # Express или на языке Object Pascal в системе программирования Delphi программу «Шифр Хасегава», которая выполняет шифрование и дешифрование по алгоритму Хасегава. При шифровании каждому символу начального открытого сообщения присваивается его порядковый номер в алфавите, после чего избирается ключ и его символы подписываются под символами исходного открытого сообщения с последовательным повторением ключу. Символам ключу также присваиваются порядковые номера по алфавиту, после чего они состоят с соответствующими символами сообщения и полученные номера переводятся в символы исходного алфавита. Соответственно, при превышении порядковым номером символа длины алфавита надо вычесть длину алфавита. При дешифрировании выполнить обратные операции.
// Шифрация function encrypt(const text, key: string): string; var i, p1, p2, len: integer; s: string; begin s := text; len := length(key); for i := 1 to length(text) do begin p1 := pos(text[i], alp); if p1 = 0 then continue; p2 := pos(key[(i - 1) mod len + 1], alp); s[i] := alp[(p1 + p2 - 1) mod alplen + 1]; end; result := s; end; //Дешифрация function decrypt(const text, key: string): string; var i, p1, p2, len: integer; s: string; begin s := text; len := length(key); for i := 1 to length(text) do begin p1 := pos(text[i], alp); if p1 = 0 then continue; p2 := pos(key[(i - 1) mod len + 1], alp); s[i] := alp[(p1 - p2 - 1 + alplen) mod alplen + 1]; end; result := s; end;
Очень интересное задание. Его решение нашел мой одногруппник: ему помог программист на форуме. Без него мы не смогли б найти решения. Загвоздка в том, что на самом деле это разновидность шифра Вижинера, хотя позже мы нашли источник, где описывается именно шифр Хосегавы.
Задание 6
Скласти на мові C++ в системі програмування C++Builder, або на мові C# в системі програмування Visual C# Express або на мові Object Pascal в системі програмування Delphi програму «Гра». Група з n учнів одягала футболки з позначеними на спині послідовними номерами від 1 до n. Учні становилися в коло по порядку номерів та читали лічилку, що закінчувалась словами “…пішов геть” (починаючи з №1 в порядку збільшення номерів). Той, на кого падало останнє слово “геть”, покидав коло. Лічилка продовжувалась далі з наступного учня, поки не залишався один учасник. Знаючи, що в лічилці m слів, Вовочка завжди встигав обирати футболку з таким номером, щоб виграти. Програма має отримувати від користувача числа m та n і виводити номер, який має бути в переможця. Обмеження: m<30000, n<30000.
Составить на языке C + + в системе программирования C + + Builder, или на языке C # в системе программирования Visual C # Express или на языке Object Pascal в системе программирования Delphi программу «Игра». Группа из n учеников надевала футболки с обозначенными на спине последовательными номерами от 1 до n. Ученики становились в круг по порядку номеров и читали считалку, что заканчивалась словами "… ушел" (начиная с № 1 в порядке возрастания номеров). Тот, на кого падало последнее слово «прочь», покидал круг. Считалка продолжалась дальше со следующего ученика, пока не оставался один участник. Зная, что в считалке m слов, Вовочка всегда успевал выбирать футболку с таким номером, чтобы выиграть. Программа должна получать от пользователя числа m и n и выводить номер, который должен быть у победителя. Ограничения: m <30000, n <30000.
function TForm1.find(W,P:integer): integer; var pointer: integer; arrP: array of integer; tempArr: array of integer; I,j: Integer; m: integer; Str:string; begin SetLength(arrP,P); for I := 0 to P-1 do // инициализируем массив числами от 1 до P arrP[i] := i+1; pointer := 0; while Length(arrP) <> 1 do begin pointer := (pointer + W - 1) mod length(arrP); arrP[pointer] := 0; // полученное число ставим нулем m := 0; SetLength(tempArr, Length(arrP)-1); // создаем новый временный массив, который будет на 1 меньше (без выбывшего игрока) for i := 0 to length(tempArr)-1 do begin if arrP[i] = 0 then m :=1; tempArr[i] := arrP[i+m]; end; SetLength(arrP,Length(tempArr)); for I := 0 to Length(tempArr) do arrP[i] := tempArr[i]; end; find:= arrP[0]; end;
Интересное задание. На форумах можно найти решения, но я изобрел велосипед заново. Криво, «не красиво», но работает:).
Задание 7
Скласти на мові C++ в системі програмування C++Builder, або на мові C# в системі програмування Visual C# Express або на мові Object Pascal в системі програмування Delphi програму «Кидання кубика». Передбачається, що кубик, грані якого помічені цифрами від 1 до 6, кидають N разів. Програма повинна обчислити вірогідність того, що сума чисел, що випали, буде дорівнювати Q. Розрахована вірогідність у вигляді дійсного числа має відрізнятись від істинного значення не більше ніж на 0,01 істинного значення. Числа N та Q мають вводитись користувачем з полів вводу.
Составить на языке C + + в системе программирования C + + Builder, или на языке C # в системе программирования Visual C # Express или на языке Object Pascal в системе программирования Delphi программу «Бросание кубика». Предполагается, что кубик, грани которого помечены цифрами от 1 до 6, бросают N раз. Программа должна вычислить вероятность того, что сумма чисел, выпавших будет равна Q. Рассчитаная вероятность в виде действительного числа должна отличаться от истинного значения не более чем на 0,01 истинного значения. Числа N и Q имеют вводиться пользователем с полей ввода.
const maxSumm = 500 + 2; maxN = 200 + 2; function TForm1.getRes(n:integer;sum:integer):double; var arr: array [0..MaxSumm, 0..maxN] of double; currN: Integer; currSumm: Integer; prev: integer; begin for CurrN := 0 to MaxN do for CurrSumm := 0 to MaxSumm do arr[sum,n] := 0; arr[0,0] :=1; for currN := 1 to n do for currSumm := 1 to sum do for prev := 1 to 6 do if currSumm - prev >= 0 then arr[CurrSumm,currN] := arr[CurrSumm,currN] + (arr[CurrSumm - prev,currN-1] / 6.0); getRes := arr[sum,n]; end;
А это глупое задание. Первоначально я хотел изобрести целую систему, для подсчета количества «подходящих» событий, а потом делить полученное число на число всех событий. Хотел реализовать это по принципу счетчика ( ставим все кубики на положение 1 и крайний кубик начинаем «крутить», увеличивая его число; когда число переходит 6-ку, то значение кубика сбрасывается на 1, а значение соседнего кубика увеличивается на 1 и так далее; если сумма чисел подходит – увеличиваем переменную-счетчик; на выходе получили бы количество всех подходящих событий), но потом передумал (лень-матушка надоумила не заниматься глупостями) и пошел лазать по Интернету. На одном сайте, посвященному олимпиадным задачам, нашел человека, который решил данную задачу и попросил его поделиться кодом. Код был на С++, он без проблем работал. На Delphi появились проблемы: двумерный массив имел очень ограниченный размер. Поэтому я делал его размер 500*200 (более большие значения приводили к тихому закрытию программы без каких либо ошибок и сообщений).
Задание 8
Скласти на мові C++ в системі програмування C++Builder, або на мові C# в системі програмування Visual C# Express або на мові Object Pascal в системі програмування Delphi програму «Депозит», яка повинна обчислювати дохід по вкладу коштів на депозит в банку. Програма повинна забезпечувати розрахунок простих та складних відсотків. Прості відсотки нараховуються в кінці терміну вкладу, складні – щомісячно та додаються до первинної суми вкладу і в наступному місяці відсотки нараховуються на нову суму.
Составить на языке С++ в среде разработки C++Builder, или на языке C# в бреде разработки Visual C# Express, или на языке Object Pascal в среде разработки Delphi программу «Депозит», которая должна рассчитывать доход по вкладу денежных средств на депозит в банк. Программа должна обеспечивать расчет простых и сложных процентов. Простые проценты расчитываются в конце срока вклада, сложные – помесячно и добавляются к первичной сумме, а в следующем месяце проценты начисляются на новую сумму
procedure TForm1.Button1Click(Sender: TObject); var summ: real; summCode, period, periodCode, percent, percentCode: integer; flag: boolean; temp: real; begin val(PeriodEdit.Text, period, periodCode); val(SummEdit.Text, summ, summCode); val(PerCentEdit.Text, percent, percentCode); Memo.Lines.Clear; flag := false; if periodCode<>0 then begin Memo.Lines.Add('Вы некорректно ввели период вклада! Период вклада нужно вводить целым числом'); flag:= true; end; if summCode<>0 then begin Memo.Lines.Add('Вы некорректно ввели сумму вклада! Сумма вклада нужно вводить целым числом'); flag:= true; end; if percentCode<>0 then begin Memo.Lines.Add('Вы некорректно ввели процентную ставку! Процентную ставку нужно вводить целым числом'); flag:= true; end; if flag then exit; if RBsimp.Checked then temp := summ + (summ*(percent/100) * period) // простые проценты else temp := summ * exp(period * ln( 1 + percent/100)); // сложные проценты Memo.Lines.Add('Начальня сумма вклада: ' + FloatToStr(summ)); Memo.Lines.Add('Итоговая сумма вклада: ' + FloatToStr(temp)); Memo.Lines.Add('Прибыль: ' + FloatToStr(temp - summ)); PeriodEdit.SetFocus; end;
Программа простая, особых комментариев не требует.
Задание 9
Скласти на мові C++ в системі програмування C++Builder, або на мові C# в системі програмування Visual C# Express або на мові Object Pascal в системі програмування Delphi програму «Кількість символів», яка повинна визначати розподіл кількості символів у введеному користувачем в поле Edit рядку та виводити результат у вигляді таблиці виду “символ” – “його кількість”. Прийняти до уваги, що відповідні великі та маленькі літери в рядку мають сприйматись як однакові. Програму необхідно спроектувати таким чином, щоб кнопка Підрахунок була доступною лише в тому випадку, якщо користувач увів аналізуємий рядок.
Составить на языке C + + в системе программирования C + + Builder, или на языке C # в системе программирования Visual C # Express или на языке Object Pascal в системе программирования Delphi программу «Количество символов», которая должна определять распределение количества символов во введенном пользователем в поле Edit строке и выводить результат в виде таблицы вида «символ» — «его количество». Принять во внимание, что соответствующие большие и маленькие буквы в строке должны восприниматься как одинаковые. Программу необходимо спроектировать таким образом, чтобы кнопка Подсчет была доступна только в том случае, если пользователь ввел анализируемую строку.
// Проверка, есть ли в таблице данный символ function TForm1.isPresent(ch: char): boolean; var i: integer; begin isPresent := false; for i := 0 to StringGrid1.RowCount do if ch = StringGrid1.Cells[0, i] then isPresent := true; end; // Подсчет символов procedure TForm1.Button1Click(Sender: TObject); var str: String; tempRes: integer; i, j, strLength, pointer: integer; tempChar: char; begin str := AnsiUpperCase(Edit1.Text); strLength := Length(str); pointer := 1; for i := 1 to strLength do begin tempRes := 1; tempChar := str[i]; if not isPresent(tempChar) then begin for j := i + 1 to strLength do begin if tempChar = str[j] then inc(tempRes); end; StringGrid1.Cells[0, pointer] := tempChar; StringGrid1.Cells[1, pointer] := IntToStr(tempRes); StringGrid1.RowCount := StringGrid1.RowCount + 1; inc(pointer); end; end; end;
Программу можно реализовать кучей способов, я выбрал простой способ без излишеств.
Задание 10
Скласти на мові C++ в системі програмування C++Builder, або на мові C# в системі програмування Visual C# Express або на мові Object Pascal в системі програмування Delphi програму «Година», яка має визначати, скільки повних годин (h) та повних хвилин (m) пройшло від початку доби до того моменту (в першій половині дня), коли часова стрілка повернулась на f градусів (0≤f≤360, f – дійсне число).
Составить на языке C + + в системе программирования C + + Builder, или на языке C # в системе программирования Visual C # Express или на языке Object Pascal в системе программирования Delphi программу «Час», которая должна определять, сколько полных часов (h) и полных минут (m) прошло от начала суток до того момента (в первой половине дня), когда временная стрелка вернулась на f градусов (0 ≤ f ≤ 360, f — действительное число).
procedure TForm2.Button1Click(Sender: TObject); var fCode:integer; f:real; time,h,m,s: integer; begin //Проверка данных val(Edit.Text, f, fCode); if (fCode<>0) OR (f > 360) OR (f < 0) then ResLabel.Caption := 'Вы ввели некорректное значение! Проверьте правильность введеных данных!' else //Подсчет begin time := trunc(f*120); h := time div 3600; time := time - 3600*h; m := time div 60; time := time - m*60; ResLabel.Caption := 'Итого: ' + IntToStr(h) + ' часов, ' + IntToStr(m) + ' минут, ' + IntToStr(time) + ' секунд.'; end; end;
Простая программа, комментариев не требует.
…
Надеюсь, когда люди столкнуться с проблемой решения кого-то из этих заданий – они найдут этот пост и он им поможет. Извините за такое большое количество букв, но этот пост предназначался чисто для того, чтобы помочь людям.
Если есть орфографические ошибки, ошибки в коде, у вас есть предложение по исправлению или оптимизации кода – пишите, исправлю.
Спасибо за внимание.
by Morris Decker
ссылка на оригинал статьи http://habrahabr.ru/post/178229/
Добавить комментарий