Помощь - Поиск - Пользователи - Календарь
Полная версия: Сокращение программ
Форум «Всё о Паскале» > Разработка ПО, алгоритмы, общие вопросы > Общие вопросы разработки программ
Барс
Звиняйте, но сначала спрошу как вставлять текст программы из окна фрипаскаля, а затем задам вопрос по теме.
IUnknown
В среде разработки FPC есть в меню Edit пункты Copy to Windows/Paste to windows, по-моему, их назначение предельно понятно. Выделяешь любым способом нужный текст в редакторе FPC (или "стрелка вниз с зажатым Shift-ом", или "установка курсора в начало выделяемого блока, Ctrl+K+B, установка курсора в конец, Ctrl+K+K", или просто "выделение мышью") и в меню выбираешь пункт Copy to Windows. Выделенный текст копируется в clipboard, вставляешь его на форум через Ctrl+V.
Барс
А клипборд - это где? Спасибо за разжовывание.
TarasBer
> А клипборд - это где?

Это общий буфер обмена в винде, где сидят данные между их копированием и вставкой.
Только странно, что в ФПЦ не сделали просто по CTRL+C или CTRL+INSERT.
IUnknown
Цитата
странно, что в ФПЦ не сделали просто по CTRL+C или CTRL+INSERT.
Привычка.

Еще со времен Турбо-Паскаля комбинации Ctrl+Insert/Shift+Insert были зарезервированы под копирование/вставку. Но работают они с внутренним буфером обмена, внутри IDE, скажем, для переноса текста в другое окно редактора. Обратная совместимость, ага. Привыкли пользователи к этой комбинации. И сочетание Ctrl+C тоже занято: переход ровно на страницу вниз. И к нему тоже привыкли. А сколько раз я в том же Дельфи пытался перевести режим из Overwrite в Insert и наоборот через Ctrl+V (как это было в Турбо-Паскале) - и не сосчитать.

Хорошо хоть вообще сделали такую функцию, как копирование в виндовый ящик. До версии FPC 2.0 это надо было делать так же, как и в других досовских программах, т.е., через... ну, ты знаешь.
TarasBer
> Но работают они с внутренним буфером обмена, внутри IDE, скажем, для переноса текста в другое окно редактора.

А в чём проблема сделать с внешним буфером обмена? Переносить текст между окнами редактора это не помешает.
Барс
Наконец-то до компа добрался.
Вопрос такой. Хотелось бы узнать побольше о методах сокращения программ. Наверняка, опытные программисты могут многое посоветовать (напр.: вместо какой-то толпы операторов, можно обойтись одним и т.д.). Хочется изначально научиться коротко писать проги. В принципе, это даже можно оформить как инструкцию для новичков.
Для примера выкладываю своё решение одной задачи. Чую, что можно сократить (кажется, что есть лишние прверки условий). А как сократить-незнаю.

(Условный оператор) 
Из трех данных чисел выбрать наименьшее.

Program u;
uses Crt;
var
a,b,c:real;
begin
ClrScr;
write('Введите 1-е число a='); readln(a);
write('Введите 2-е число b='); readln(b);
write('Введите 3-е число c='); readln©;
if a>b then
begin
if b>c then
writeln('c - наименьшее число')
else writeln('b - наименьшее число');
end;

if b>c then
begin
if c>a then
writeln('a - наименьшее число')
else writeln('c - наименьшее число');
end;

if c>a then
begin
if a>b then
writeln('b - наименьшее число')
else writeln('a - наименьшее число');
end;

end.


sheka
идеал:
if a < b then 
if a < c then a-мин
else c-мин
else
if b < c then b-мин
else c-мин

Если лень проверки писать так как надо (иногда очень громоздко и визуально неудобно):
Больше либо равно - принципиально. Подумай почему.
if (a<=b)and(a<=c) then a
else if (b<=a)and(b<=c) then b
else if (c<=a)and(c<=b) then c;

Если надо выводить несколько минимальных
if (a<=b)and(a<=c) then a;
if (b<=a)and(b<=c) then b;
if (c<=a)and(c<=b) then c;

Ну а еще можно использовать ф-ию
function min(const a, b: real);
begin
if a < b then min := a else min := b;
end;
begin
min(min(a,b),c);
end;


Не проверял.
Барс
Спасибо. Сокращение в 2 раза, причём всё так просто. Теперь буду долго вдумываться в свои решения прежде чем задавать вопрос.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.