1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Что такое командная строка - знаешь? Говоря на пальцах, это то, что есть в любом нормальном файловом менеджере, там можно написать myProgram.exe, а можно написать myProgram.exe a b c d, через пробел (если же написать "myProgram.exe a" b c d, то часть, заключённая в кавычки, будет пониматься как один параметр, несмотря на то, что в ней содержится пробел). Это означает, что ты вызываешь программу myProgram.exe с параметрами a, b, c, d. То, что написано в свойствая ярлыка в строке "Объект" - это тоже команда, как правило, она там без параметров. Когда ты открываешь файл "a.txt", на самом деле вызывается команда notepad.exe a.txt, то есть в качестве параметра идёт имя открываемого файла. Поэтому все приличные программы знают, когда надо при запуске показать пустое окно, а когда - сразу открыть файл.
Программа получает информацию о них через функции ParamCount (в данном примере, с myProgram.exe a b c d - 4), и через ParamStr(N) (N от 0 до 4). Твоя программа может принимать до 3 параметров, надо отдельно разобрать случаи разного их количества, чтобы сформировать, что программа должна делать. Типа так:
var Decode: boolean; InFile, OutFile: string;
... Decode := False; InFile := ''; OutFile := ''; if ParamCount >= 1 then begin if ParamStr(1) = '-c' then Decode := False else if ParamStr(1) = '-d' then Decode := True else InFile := ParamStr(1); end; if ParamCout >= 2 then begin if InFile = '' then InFile := ParamStr(2) else OutFile := ParamStr(2); end; if ParamCount >= 3 then begin if OutFile = '' then OutFile := ParamStr(3); end;
Ну например, программа возводит одно число в степень другого, числа задаются как параметры.
program Test;
var a, b: extended; Code: integer;
begin
if ParamCount < 2 then begin WriteLn('Must be >= 2 parameters!'); Exit; end; Val(Paramstr(1), a, Code); if Code <> 0 then begin WriteLn(Paramstr(1) , ' is not a number!'); Exit; end; Val(Paramstr(2), b, Code); if Code <> 0 then begin WriteLn(Paramstr(2) , ' is not a number!'); Exit; end;
if a > 0 then WriteLn(exp(ln(a) * b)) else if a = 0 then WriteLn(0) else if (Frac(b) = 0) and (Frac(b/2) = 0) then WriteLn(exp(ln(-a) * b)) else if (Frac(b) = 0) then WriteLn(-exp(ln(-a) * b)) else WriteLn('Invalid argument');
end.
Пример: в командной строке переходите в директорию с этой программой (например, cd c:\progra~1\delphi\projects\test\), потом в командной строке пишете test 2 2, она выводит 4.000000E+0000