Помощь - Поиск - Пользователи - Календарь
Полная версия: к какому then относится какой else
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
Torja
Помогите разобраться пожалуйста к какому then относится какой else? желательно стрелочками нарисуйте от then к else.

Program iff2;
var
a,b,c:integer;
begin
a:=1; b:=2; c:=0;
if a>b then
if a<b then
c:=1 else
c:=2;
writeln©;
if a<b then
if a>b then
c:=3
else
else
c:=4;
writeln©;
end.


{output
0
0}


ПС: есть ли возможность скопировать код из паскаля в .doc? Или из турбо паскаля 7.0 в фри паскаль иде не открывая фаил там.

ППС: в фри паскале я делаю Debug -> output, Window -> tile. но после последующего Ctrl+Ф9 -> output прыгает за окно кода программы обратно. Как мне зафиксировать аутпут?

PPPS: в турбо паскале если выдаёт ошибку я могу нажать Ф1 и увидеть объяснение ошибки. Как это сделать в фри паскале? Там кликая на ошибке Ф1,ктрл+Ф1, алт+Ф1 ничего не выводит.

Гость
Цитата
желательно стрелочками нарисуйте от then к else.
Ну вот еще... Ты б код форматировала, проблемы б не было:
Program iff2;
var
a, b, c: integer;
begin
a:=1; b:=2; c:=0;
if a>b then
if a<b then c:=1
else c:=2;
writeln( c );

if a<b then
if a>b then c:=3
else { ; }
else c:=4;
writeln( c );
end.


Цитата
есть ли возможность скопировать код из паскаля в .doc? Или из турбо паскаля 7.0 в фри паскаль иде не открывая фаил там.
В DOC - можешь просто скопировать в Clipboard + вставить в Word. Вариант скопировать отсюда в FPC - не устраивает? Значит из TP -> FPC в общем случае - нельзя (можно, но только если весь код помещается на одной странице, и его видно ВЕСЬ сразу, иначе придется это делать в несколько этапов)...

Цитата
в фри паскале я делаю Debug -> output, Window -> tile. но после последующего Ctrl+Ф9 -> output прыгает за окно кода программы обратно. Как мне зафиксировать аутпут?
Установить курсор на последний END и нажать на F4, а не запускать программу через Ctrl+F9
Torja
+++ а есть возможность автоматически в фри паскале и/или турбо паскале7.0 форматировать текст. Где галочку поставить? Или надо самой это делать...? thanks
-Volvo-
Цитата
а есть возможность автоматически в фри паскале и/или турбо паскале7.0 форматировать текст.
На этом форуме Romtek выкладывал утилиту под названием PTOP. По-моему, она же идет в дистрибутиве FPC (сейчас проверить не могу), посмотри в папке \bin. С ее помощью можно отформатировать текст программы. Инструкция по использованию доступна на оф. сайте (и в PDF-файлах помощи, идущих с FPC).
Lapp
Цитата(Torja @ 16.07.2009 0:36) *
+++ а есть возможность автоматически в фри паскале и/или турбо паскале7.0 форматировать текст. Где галочку поставить? Или надо самой это делать...? thanks
Уже написанный текст можно отформатировать утилитой, но пока пишешь - соблюдай правила сама. Некоторые настройки в FPS все же целесообразно сделать. Зайди в Options - Environment и поставь там одинаковые Tab size и Indent Size - я, например, использую 2, но можно и 4. Далее, когда кодишь:

1. если набрала begin (или repeat, или оператор case c of, или type, var, const, record ..) - сразу жмешь Enter и Tab;
2. перед тем, как написать end (или в конце блока описаний), нажимай Enter и Bcsp;

Вот пример:

const // enter, tab
n=4;

type // enter, tab
tMan = record // enter, tab
First,Last: String;
Age: integer
end;

var // enter, tab
Ivan: tMan;
Class: array[1..n]of tMan;
b: boolean;
i: integer;

begin // enter, tab
b:= true;
while b do begin // enter, tab
Class[1]:=Ivan;
for i:=1 to n do with Class[i] do if Age<7 then begin // enter, tab
WriteLn(First,' ',Last,' is too young);
Inc(Age) // enter, bcsp
end
else if Age>17 then begin // enter, tab
WriteLn(First,' ',Last,' is too old);
Dec(Age) // enter, bcsp
end
else b:=false // enter, bcsp
end;
WriteLn('Let''s dance!') // enter, bcsp
end.

Эти правила примерные, не жесткие. Можешь сама подумать, как именно для тебя будет удобнее. Например, оператор:
  if a>0 then i:=1 else i:=2

- не имеет смысла разбивать на несколько строк. Но если последовательно выполняющихся операторов несколько - все они должны быть на одном инденте. Оператор begin должен быть в конце строки (либо вообще один на строке), а end - только в начале. В этом случае легко отследить начало и конец блока, проверить соответствие begin'ов и end'ов. А также разобраться с then/else.

Если нужно подвинуть сразу несколько строк (пришлось, например, заключить группу строк в begin/end), то пометь их блоком и нажми Ctrl-K и I (вправо, от слова Indent) или Ctrl-K и U (влево, Unindent). Ьуквы I и U можно нажимать как при нажатом Ctrl, так и при отпущенном. Блок не обязательно должен начинаться и кончаться на строке - если хоть один символ помечен, вся строка будет двигаться.

В ТР принцип тот же, только меню немного иначе устроено..

Спрашивай, если неясно что-то.
-Volvo-
Цитата
1. если набрала begin (или repeat, или оператор case c of, или type, var, const, record ..) - сразу жмешь Enter и Tab;
2. перед тем, как написать end (или в конце блока описаний), нажимай Enter и Bcsp;
Я конечно понимаю, что все зависит только от личных предпочтений, но я делаю немного по-другому:
1) после набора begin сразу же нажимаю на Enter и строго под ним дописываю end, а уж потом возвращаюсь, и добираю код между begin-ом и end-ом
2) то же самое - и при if then else: сразу записываю обе эти ветки (если необходима ветка else, естественно), причем с begin/end обязательно. А потом - возвращаюсь и дописываю код между begin/end. Ошибиться просто нереально...

Это - что касается TP... В FPC есть дополнительное встроенное средство, позволяющее мне даже этого не писАть: Code Template (управление ими лежит где-то в Options -> Environment, но надо не забыть включить в IDE использование темплейтов, иначе Ctrl+J работать не будет). То есть, набирается ifthen или ifelse (смотря что нужно, и как я это назвал), и тут же нажимается Ctrl+J. И IDE сама подставляет назначенную на это ключевое слово последовательность операторов, да еще и ставит курсор туда, куда нужно (вернее, туда, куда я указал при назначении темплейта).

(P.S. Завтра вернусь домой - смогу расписать более подробно)
Archon
Обсуждалось же: Как оформлять тексты программ
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.