операторы Delphi. Операторы delphi оператор присваивания
Скачать 92.84 Kb.
|
ОПЕРАТОРЫ DELPHIОператор присваиванияВ результате выполнения оператора присваивания значение переменной меняется – ей присваивается новое значение. В общем виде оператор присваивания выглядит так: Имя : = Выражение, где Имя — переменная, значение которой изменяется в результате выполнения оператора присваивания; : = — символы инструкции присваивания; Выражение — выражение, значение которого присваивается переменной, имя которой указано слева от символа инструкции присваивания. Пример: Y:=a*b/10; S:=’Дом’; F1:= False; Результат вычисления выражения всегда приводится к типу имени переменной и только затем записывается в поле переменной. Каждый оператор Delphi заканчивается точкой с запятой (;), что позволяет в одной строке программы записывать несколько операторов. Оператор безусловной передачи управленияОператор безусловной передачи управления имеет вид: Goto метка; Метка – это идентификатор, описанный в разделе меток – Label. Например: Label M1; ……… Goto M1; ……….. M1:y:=sin(x); …………… Оператор Goto передает управление оператору с указанной меткой, в нашем случае M1. Оператор, следующий за Goto, обязательно должен иметь метку, иначе он никогда не получит управление. По возможности следует избегать использования оператора Goto, так как это приводит к созданию неэффективных программ. Перескок внутри программы приводит к тому, что нужно заново обновлять очередь команд, готовых к выполнению в процессоре, и перенастраивать его управляющие регистры. Чем меньше в программе операторов Goto, тем выше квалификация программиста. Условный оператор ifЭтот оператор разветвления if в общем случае имеет вид If условие then оператор1 else оператор2; В этой записи зарезервированные слова выделены жирным шрифтом, а то, что подчеркнуто, может отсутствовать. Работает он следующим образом: если условие имеет значение «истина», то выполняется оператор1, иначе – оператор2. Например: If a>b then y:=a-b else y:=b-a; В этом примере «y» всегда будет принимать положительные значения, независимо от значений a и b. Оператор разветвления CaseЭтот оператор в общем случае может иметь вид Case выражение of знач11..знач12:оператор1; знач21..знач22:оператор2; ……………………….. значK1..значK2:операторK else оператор0; end; В зависимости от значения выражения выполняется тот или иной оператор. Если значение выражения не попадает ни в один из интервалов, то выполняется оператор0. Пример: Var c:char; s:String; ……………………. Case c of ’0’..’9’:s:=’Цифра’; ’A’..’z’:s:=’Латинская буква’; ..’А’..’я’:s:=’Русская буква’ else s:=’Специальный символ’ end; Составной операторЭтот оператор еще называют операторными скобками, он начинается ключевым словом Begin и заканчивается словом End. Между этими словами можно записывать любое число операторов, но чисто внешне он воспринимается как один оператор. Пример: If a>b then Begin Y:=a-b; Z:=a*b; End else Begin Y:=b-a; Z:=a/b; End; В этом примере вместо одного оператора в инструкции if было использовано по два оператора присваивания. Для лучшей читаемости программы рекомендуется после каждого оператора Begin все последующие строки программы сдвигать на две позиции вправо, а после оператора End – на две позиции влево. Это позволит легко отследить вложенность блоков Begin – End. ОПЕРАТОРЫ ЦИКЛОВАлгоритм, в котором есть последовательность операций (группа инструкций), которая должна быть выполнена несколько раз, называется циклическим, а сама последовательность операций именуется циклом. Хотя циклы можно легко организовывать с помощью оператора if, в Delphi есть три специальных оператора для организации циклов. Но вначале рассмотрим, как можно организовать цикл с помощью оператора if, например для задачи из раздела 3.1. Мы приведем только метод обработки нажатия клавиши «Старт»: procedure TForm1.Button1Click(Sender: TObject); // Обработчик нажатия кнопки var x,y,h:extended;n,i,j:integer;// Определение внутренних переменных Label M1; begin a:=strtofloat(edit1.Text); // Перевод строк в вещественное значение b:=strtofloat(edit2.Text); n:=strtoint(edit3.Text); // Перевод строки в целое значение j:=strtoint(edit4.Text); h:=(b-a)/10; // Расчет шага по x x:=a; // Подготовка цикла по x M1:y:=0; // Подготовка цикла по i i:=1; M2:if i<>j then y:=y+sin(i*x)/(i-j); // Расчет суммы i:=i+1; // Наращивание переменной цикла i if i<=n then goto M2; // Проверка окончания цикла по i // Вывод результатов Memo1.lines.Add(’x=’+floattostr(x)+’ y=’+floattostr(y)); x:=x+h; // Наращивание переменной цикла по x if x<=b then goto M1; // Проверка окончания цикла по x end; Как видно из этого примера, можно легко организовывать циклы с помощью оператора if, однако нам пришлось использовать две метки M1 и M2, что говорит о плохом стиле программирования. Оператор цикла ForЭтот оператор в общем случае имеет вид ⎧ To ⎫ For пер.цикла:= нач.знач. ⎨ ⎬ кон.знач. Do оператор1; ⎩Downto⎭ Его следует понимать следующим образом. Для переменной цикла от начального значения до конечного значения выполнять оператор1. В фигурных скобках показаны два варианта наращивания переменной цикла: To – соответствует шагу увеличения 1, а Downto – шагу -1. Переменная цикла, начальное и конечное значения обязательно должны быть целыми величинами. Переменная цикла должна быть внутренней переменной подпрограммы. Схему работы этого оператора можно изобразить следующим образом: Правила использования оператора For: Если начальное значение переменной цикла больше конечного, то цикл не выполняется ни разу. Циклы можно вкладывать друг в друга, но не пересекать. Можно передавать управление из цикла вовне его, но извне передать управление внутрь цикла нельзя. Можно передать управление из цикла вовне его с последующим входом в этот же цикл. Внутри цикла нельзя самим изменять значения переменной цикла. После окончания цикла переменная цикла становится не определенной и ее значение уже нельзя использовать. Если внутри цикла встречается оператор Break, то происходит принудительный выход из этого цикла. Если внутри цикла встречается оператор Continue, то происходит переход к следующей итерации цикла. Рассмотрим предыдущий пример программы, только внутренний цикл оформим с помощь оператора For. Эта часть программы теперь будет выглядеть следующим образом: h:=(b-a)/10; // Расчет шага по x x:=a; // Подготовка цикла по x M1:y:=0; // Подготовка цикла по i For i:=1 to n Do if i<>j then y:=y+sin(i*x)/(i-j); // Расчет суммы // Вывод результатов Memo1.lines.Add(’x=’+floattostr(x)+’ y=’+floattostr(y)); x:=x+h; // Наращивание переменной цикла по x if x<=b then goto M1; // Проверка окончания цикла по x Как видим, число операторов программы уменьшилось на 3 и нет необходимости в метке M2. |