Оператором называется предложение языка программирования, задающее полное описание некоторого действия, которое необходимо выполнить. Основная часть программы на языке Турбо Паскаль представляет собой последовательность операторов. Разделителем операторов служит точка с запятой. Все операторы языка Турбо Паскаль можно разделить на две группы: простые и структурные.
Операторы, не содержащие никаких других операторов, называются простыми . К ним относятся операторы присваивания, безусловного перехода, вызова процедуры и пустой оператор.
Оператор присваивания (:=) предписывает выполнить выражение, заданное в его правой части, и присвоить результат переменной, идентификатор которой расположен в левой части. Переменная и выражение должны быть совместимы по типу.
Оператор присваивания выполняется следующим образом: сначала вычисляется выражение в правой части присваивания, а затем его значение присваивается переменной, указанной в левой части оператора.
Например, для оператора
Rezult:=A div В;
сначала выполняется целочисленное деление значения переменной А на значение переменной В , а затем результат присваивается переменной Rezult .
Примеры применения оператора присваивания:
А := 8;
S:= A * В ;
Ostatok:= A mod B;
Ratio:= A / B;
Оператор безусловного перехода (go to) означает "перейти к" и применяется в случаях, когда после выполнения некоторого оператора надо выполнить не следующий по порядку, а какой-либо другой, отмеченный меткой оператор.
Напомним, что метка объявляется в разделе описания меток и может содержать как цифровые, так и буквенные символы.
При использовании оператора go to необходимо помнить, что областью действия метки является только тот блок, в котором она описана. Передача управления в другой блок запрещена.
Правила использования оператора безусловного перехода. Использование безусловных передач управления в программе считается теоретически избыточным и подвергается серьезной критике, так как способствует созданию малопонятных и трудно модифицируемых программ, которые вызывают большие сложности при отладке и сопровождении. Поэтому рекомендуется минимальное использование оператора go to с соблюдением следующих правил:
Следует стремиться применять операторы перехода (если кажется невозможным обойтись без них) для передачи управления только вниз (вперед) по тексту программы; при необходимости передачи управления назад следует использовать операторы цикла;
Расстояние между меткой и оператором перехода на нее не должно превышать одной страницы текста (или высоты экрана дисплея).
Пример применения оператора безусловного перехода:
label Metka; {в раздале описания меток описали метку с именем Metka }
begin {основная программа}
{операторы основной программы}
{операторы основной программы помеченные меткой}
Изучить теоретические сведения по теме: “Написание программы на Паскале с использованием операторов присваивания и безусловного перехода ”.
Получить индивидуальное задание у преподавателя и разработать программу в соответствии с поставленной задачей.
Показать работающую программу преподавателю.
Ответить на контрольные вопросы.
Контрольные вопросы
Основные элементы программирования.
Основные характеристики программы. Понятия языка, оверлеев, глобальных и локальных блоков.
Операторы языка программирования Паскаль. Оператор присваивания. Формат, примеры.
Оператор безусловного перехода. Формат, примеры. Основные правила использования
Лабораторная работа № 7
Написание программы на Паскале с использованием условных операторов и оператора выбора Case
Цель работы : формирование знаний и умений по работе с операторами языка. Приобретение навыков написания программ с использованием операторов присваивания и безусловного перехода.
Краткие теоретические сведения
Условные операторы
Условные операторы предназначены для выбора к исполнению одного из возможных действий (операторов) в зависимости от некоторого условия (при этом одно из действий может быть пустым, т. е. отсутствовать). В качестве условий выбора используется значение логического выражения.
В Турбо Паскале имеются два условных оператора: if и case.
Оператор условия if
Оператор условия if является одним из самых популярных средств, изменяющих естественный порядок выполнения операторов программы.
Он может принимать одну из следующих форм:
if <условие> then <оператор1>
else <оператор2>;
if <условие> then <оператор>;
В переводе с английского языка данные форматы можно определить как:
ЕСЛИ<условие> ТО<оператор1> ИНАЧЕ<оператор2>
ЕСЛИ<условие> ТО<оператор>
Оператор условия if выполняется следующим образом. Сначала вычисляется выражение, записанное в условии. В результате его вычисления получается значение булевского типа.
В первом случае, если значение выражения есть True (истина), выполняется <оператор1>, указанный после слова then (в переводе –“то”). Если результат вычисления выражения в условии есть False (ложь), то выполняется <оператор2> .
Во втором случае, если результат выражения True , выполняется <оператор>, если False - оператор, следующий сразу за оператором if . Операторы if могут быть вложенными .
Пример фрагмента программы с оператором условия if:
if Ch="N" then Parol:= True
else Parol:= False;
if Parol = True then
if X = 100 then Write("Пароль и код правильные")
Writeln("Ошибка в коде");
В данном примере с клавиатуры считывается значение переменной символьного типа Ch . Затем проверяется условие С h =" N " . Если оно выполняется, то переменной Parol булевского типа присваивается значение True , если условие не выполняется, False . Затем с клавиатуры считывается значение кода X . Далее оператор if проверяет условие Parol = True. Если оно имеет значение True , то выполняется проверка введенного пароля оператором if X=100 . Если условие Х=100 имеет значение True , то выводится сообщение "Пароль и код правильные", и управление в программе передается на оператор, следующий за словом end , если оно имеет значение False , выполняется составной оператор, стоящий после, слова else , который выводит на экран видеомонитора сообщение "Ошибка в коде", и вызывает стандартную процедуру Halt(1) для остановки программы.
Особенность применения оператора if . При использовании вложенных условных операторов может возникнуть синтаксическая неоднозначность, например:
if условие1 then if условие2 then <оператор1> else <оператор2>
Возникающая двусмысленность, к какому оператору if принадлежит часть else <оператор2>, разрешается тем, что служебное слово else всегда ассоциируется (связывается) с ближайшим по тексту служебным словом if, которое еще не связано со служебным словом else .
В связи с этим следует проявлять аккуратность при записи вложенных операторов условия.
Пример 1 . Составить программу, которая вычисляет частное двух целых чисел. В связи с тем, что делить на нуль нельзя, организовать контроль ввода данных.
Для контроля вводимых значений делителя используем оператор условного перехода if ... then ... else.
Текст программы может выглядеть следующим образом:
program Primer1;
А, В: integer;
Write("Введите значение делимого А: ");
Write("Введите значение делителя В: ");
if B=0 {Контроль ввода числа B }
then Writeln("Ha нуль делить нельзя") {Условие выполнено}
{Условие не выполнено}
Rezult:= А / В;
Writeln("Частное чисел ",А," и " ,В, " = ", Rezult);
Мы рассмотрели простейшие программы, написанные на Паскале в среде PascalABC.Net. Там мы производили арифметические действия над числами, а потом выводили их с помощью оператора write(или writeln). Но мы не использовали очень часто встречающегося в программировании оператора – присваивания. Так что это такое – присваивание?
Рассмотрим некоторые переменные M и N, имеющие определенные значения, скажем, M = 12, N = 34. Под каждую из этих величин компьютер выделяет отдельный участок памяти, представляющий собой некоторое количество ячеек, или битов (1 ячейка = 1 бит). Несколько чисел (или другой тип данных) не могут храниться в одном и том же месте памяти по той же причине, по которой два литра воды нельзя вместить в одну литровую банку.
Очень часто возникает необходимость сделать так, чтобы значение переменной M, равное 12, было удалено, а вместо этого стало равно значению переменной N, то есть 34. Что делает компьютер? Он находит место памяти, куда «спрятано» значение величины N, копирует его (число 34), возвращается к месту хранения M (равному 12), удаляет его значение и вставляет новое, то есть 34. В результате M = 12 превратилось в M = 34.
Присваивание – это запись данных в участок памяти компьютера, отведенной для значения величины M, тех данных, которые хранятся в другом участке памяти компьютера, где записано значение величины N.
Присваивание записывается как M:= N , означающее, что значение N переходит к M. Встает естественный вопрос: а что случилось с величиной N? Ничего, она просто как бы «поделилась» значением с переменной M, а сама не изменилась. Иногда новички в программировании думают, что переменные M и N меняются значениями, но это не так. Для иллюстрации этого явления рассмотрим задачу:
Задача. Дано числа: M = 12, N = 34. Поменять их значения местами.
Нам надо числу M присвоить 34, а числу N присвоить 12 (наоборот). Очень часто начинающие программисты пишут так:
В первой строчке кода M присваивается N, то есть M:= 34. Во второй строчке N присваивается M, но последняя переменная уже не равна 12, так как изменила свое значение в предыдущей строке на 34. Поэтому обе переменные окажутся равными 34. Для демонстрации напишем полностью код, который Вы должны переписать в среду программирования PascalABC.Net:
|
Запустите программу на выполнение; при запросе M введите 12, для N укажите 34 и нажмите Enter. Если всё сделано правильно, то Вы должны увидеть:
Введите числа M и N:
M = 12
N = 34
Результат:
M = 34 N = 34
Как видно из последней строчки, это не то, что мы хотели – поменять значения M и N местами.
Чтобы добиться правильного результата, надо зафиксировать первоначальное значение переменной M, например, s:= M ("запомнить" М, записав его значение в переменную s). В результате будем присваивать числу N не значение переменной M, которая уже изменилась, а использовать равную ей величину s:
В соответствии с последними изменениями, предыдущая программа примет вид:
|
Перепишите эту программу в PascalABC.Net и запустите (кнопка F9 на клавиатуре). Если ответ будет таким:
Введите числа M и N:
M = 12
N = 34
Результат:
M = 34 N = 12
то программа работает правильно. Как видно из последней строчки, значения чисел M и N поменялись местами.
Этот оператор является одним из простейших, и наиболее используемым оператором языка. Он предназначен для определения нового значения переменной или значения, возвращаемого функцией. Общий вид оператора:
<имя> := <выражение>
Частным случаем выражения может быть константа или переменная.
Тип имени и выражения должны совпадать. Допускается только одно исключение: выражение целого типа, а переменная – вещественного.
При выполнении оператора вычисляется выражение, и полученный результат записывается в ячейку памяти, выделенную под переменную. Присваивание допускается для всех простых типов, для структурированных типов присваивание выполняется поэлементно. Нельзя использовать присваивание для файловых типов.
Ввод-вывод данных
Для ввода информации с клавиатуры и вывода ее на экран (стандартные устройства ввода-вывода) используются 4 оператора обращения к процедурам. Для ввода используются:
Read (<список параметров ввода>);
ReadLn (<список параметров ввода>);
В списке параметров указываются вводимые переменные. Во втором случае после ввода указанного количества параметров происходит переход на новую строку. Но, так как ввод с клавиатуры всегда должен заканчиваться переходом на новую строку, то именно для устройства ввода – клавиатуры, – эти операторы можно считать равнозначными. При вводе числовых значений их необходимо разделять хотя бы одним пробелом или переходом на новую строку.
Например, если в программе встретится оператор
то выполнение программы приостановится (будет индицироваться экран данных, стандартно черного цвета), пока не будет введена строка
0.28 32.5 1.0
Для вывода так же используются два оператора
Write (<список параметров вывода>);
WriteLn (<список параметров вывода>);
В списке параметров указываются выражения, в частности переменные и константы, например строковые:
WriteLn ("Сумма=",S," Произведение=",a*b);
Аналогично с вводом, после выполнения второго оператора осуществляется переход на новую строку. Оператор Write обычно используется при необходимости формирования одной строки с помощью нескольких операторов.
При выводе вещественные числа имеют 15 цифр мантиссы и 4 цифры порядка, а целые занимают место, равное количеству значащих цифр. Так, при выполнении операторов
Writeln (i,j,k);
на экране данных появится информация:
7.50000000000000Е-0001
Первая строка – это введенные с клавиатуры данные. Гораздо нагляднее использовать форматированный вывод . Здесь параметр выглядит следующим образом:
<выражение>:<количество выделяемых позиций>
При этом данное прижимается к правому краю. Вещественные числа в таком формате все равно будут выводится в экспоненциальной форме (с плавающей точкой). Только для вещественных чисел, чтобы использовать формат с фиксированной точкой , используется следующий общий вид:
< выражение>:<общее количество выделяемых позиций>:<количество позиций дробной части>
Внимание! Не путать общее количество выделяемых позиций с количеством позиций целой части вещественного числа!
Аналогично предыдущему примеру:
Writeln (i:4,j:4,k:4);
Writeln (x:7:3);
на экран будет выведена информация в более удобном для восприятия виде:
Необходимо обратить внимание: первая цифра при задании формата числа является общим количеством выделяемых позиций, в которых необходимо учитывать место под знак числа и десятичную точку.
Формат с двумя числами предназначен только для вещественных чисел в форме с фиксированной точкой.
Составной оператор
Все операторы Паскаля условно можно разбить на простые и структурные. Структурные включают в свой состав другие операторы. В частности, в условном операторе, операторе выбора и двух операторах цикла может быть записан только один внутренний оператор. Это ограничение можно обойти, если использовать операторные скобки или составной оператор. Он имеет следующий вид:
<оператор 1 >;
<оператор 2 >;
<оператор n >
Пример: вся программа состоит из одного составного оператора.
Пустой оператор
Пустой оператор никак не обозначается и не вызывает действий – это просто лишняя точка с запятой в программе. Предназначен он в качестве носителя метки, если ее необходимо поставить перед словом END в конце составного оператора или программы. Поэтому любой оператор может заканчиваться одной или несколькими точками с запятой.
Для сокращённой записи выражений в языке программирования С++ есть специальные операции, которые называются операциями присваивания. Рассмотрим фрагмент кода, с использованием операции присваивания.
Int value = 256; value = value + 256; // обычное выражение с использованием двух операций: = и + value += 256; // сокращённое эквивалентное выражение с использованием операции присваивания
В строке 2 переменной value присваивается значение 512, полученное в результате суммы значения содержащегося в переменной value с числом 256. В строке 3 выражение выполняет аналогичную операцию, что и в строке 2 , но выражение записано в упрощённом виде. В этом выражении присутствует операция присваивания со знаком плюс += . Таким образом, операция += суммирует значение переменной value co значением, которое находится правее: 256, и присваивает результат суммы этой же переменной. Как видно из примера оператор в строке 3 короче оператора в строке 2 , хоть и выполняет аналогичную операцию. Так что, если некоторую переменную нужно изменить, то рекомендуется использовать операции присваивания.
В С++ существует пять операций присваивания, не считая основную операцию присваивания: = .
Договоримся называть операции присваивания через дефис, чтобы было понятно о какой именно операции идёт речь. В таблице 1 наглядно показаны примеры использования операторов присваивания в языке программирования С++.
Операция | Обозначение | Пример | Экв.пример | Пояснение |
---|---|---|---|---|
операция присваивания-сложения | += | var += 16 | var = var + 16 | Прибавляем к значению переменной var число 16, результат суммирования сохраняется в переменной var |
операция присваивания-вычитания | -= | var -= 16 | var = var — 16 | Вычитаем из переменной var число 16, результат вычитания сохраняется в переменной var |
операция присваивания-умножения | *= | var *= 16 | var = var * 16 | Умножаем значение переменной var в 16 раз, результат умножения присваивается переменной var |
операция присваивания-деления | /= | var /= 16 | var = var / 16 | Делим значение переменной var на 16, результат деления присваивается переменной var |
операция присваивания-остатка от деления | %= | var %= 16 | var = var % 16 | Находим остаток от деления и сохраняем его в переменной var |
Разработаем программу, которая будет использовать операции присваивания.
// assignment.cpp: определяет точку входа для консольного приложения.
#include "stdafx.h"
#include
Для начала в строке 9 была объявлена переменная value , и инициализирована значением 256. В строках 11, 13, 15, 17, прописаны операции присваивания – сложения, вычитания, умножения и деления соответственно. После выполнения каждой операции присваивания оператор cout печатает результат. Результат работы программы (см. Рисунок 1).
Value = 256 value += 256; >> 512 value -= 256; >> 256 value *= 2; >> 512 value /= 8; >> 64 Для продолжения нажмите любую клавишу. . .
Рисунок 1 – Операции присваивания в С++
На рисунке 1 наглядно показаны примеры выполнения операций присваивания, а также показан результат выполнения соответствующей операции присваивания.
Тип урока:
Тема урока: «Программирование на языке Паскаль. Оператор присваивания».
Цели:
Длительность урока: 1 час 30 минут.
ХОД УРОКА
Первый урок |
1. Повторение темы предыдущего урока «Типы
данных». Примеры использования одинаковых по
звучанию слов, но имеющих разные смысловые
значения. Учитель и обучающиеся работают в форме «вопрос-ответ» (10 минут). |
2. Учитель объясняет новую тему, используя
мультимедийный урок-презентацию
«Программирование на языке Паскаль. Оператор
присваивания». Дается определение понятия
«оператор присваивания», приводится общая и
структурная форма оператора. Прежде, чем
рассмотреть работу оператора присваивания,
вспоминаем и повторяем тему «Оперативная память,
свойства Оперативной памяти». Сопровождается показом презентации. Приложение 1 (15 минут). |
3. Обучающиеся работают самостоятельно, читая и конспектируя новую тему (урок-презентация предварительно записан на компьютеры обучающихся, вопросы для конспектирования определены учителем). Здесь же ученики могут познакомиться с текстами программ, в которых используется оператор присваивания Приложение 2 (20 минут). |
Второй урок |
4. Обучающиеся работают у доски, выполняя упражнения (12-15 минут). |
1. Учитель проводит контроль знаний в форме теста. Программа-тест предварительно записывается на компьютеры обучающихся. Оценка выставляется программой. Приложение 5 (10 минут). |
5. Ученики выполняют небольшую самостоятельную работу по карточкам, либо пишут и отлаживают программу на АЯП Паскаль, в которой используется оператор(ы) присваивания (учитель называет номера карточек с заданиями). За работу учащиеся получают оценку. Приложение 3 . Приложение 4 (15 минут). |
Домашнее задание. Ученикам предлагается написать текст простой программы на АЯП Паскаль, в которой используется оператор(ы) присваивания (для тех учеников, которые не успели выполнить задание в классе). |
Выводы:
Урок № 1 (2 часа). Переменные и константы. Оператор присваивания
Проверка домашнего задания.
2. Новая тема: «Переменныые и константы. Опреатор присваивания»
Переменная –
это имя области
памяти (размер области зависит от типа данных), в
которой хранится значение, присвоенное
переменной. Переменную можно сравнить с ящиком, в
котором находится значение (лучшее сравнение с
многоквартирным домом, т. к. из ящика можно
извлечь что-то и это будет последним, т. е. ящик
остаётся пустым, а переменная, даже если ею
воспользовались, остаётся в области памяти.).
Константа –
фиксированные
одиночные числовые или текстовые значения,
которые не могут изменяться в ходе выполнеия
программы.
Оператор присваивания.
Один из
наиболее часто используемых операторов оператор
присваивания.
Общий вид оператора
присваивания:
имя переменной:= выражение ;
Выражение может быть и конкретным значением (т.е. число целое или вещественное, например, 22 или 2.5, символьная величина: "ABC", логическая величина: TRUE или FALSE), и некоторым выражением (величины + операции над ними), результат которого будет присвоен переменной в левой части.
ПРИМЕРЫ:
PAG:= 10;
(конкретное значение в виде
числа);
X:= X + 1;
(выражение);
C:= B;
(имя переменной);
G:= ‘ПРИВЕТ‘; (конкретное значение
символьное);
X:= (-A + SIN(Y) – 4 * B * X) / (2 * C);
(математическое
выражение);
Y:= TRUE;
(конкретая логическая величина).
В математике выражениеа = в означает,
что вычисленные значения для а и в должны быть
равными.
В программировании А:= В понимается так, что
значение, хранимое в области памяти с именем
В, помещается в область памяти
с именем А. Поэтому обратное выражение
В:= А даёт другой результат.
Пример: в А и в В помещаются значения 5 и 9
соответственно.
А: = 5;
В: = 9
а) Результат операции А:= В;
б) Результат операции В:= А;
Далее ещё одно существенное различие между
знаком равенства и оператором присваивания: А
= А + 1;
В математике такое выражение просто
бессмысленно, поскольку тождество ложно. Не
существует таких числовых значений А, для
которых оно было бы справедливо. В
программировании это означает, что к значению,
хранимому в ячейке А, прибавляется 1, и вновь
получаемое значение заменяет старое в ячейке А.
Например, если до выполнения этого оператора А
имело значение 5, то после выполнения будет равно
6.
Следующее отличие: математическое выражение А + 9 – В = Х вполне обосновано и может означать, что при подстановке некоторых чисел вместо А и В в левую часть выражения вы получите Ч. В то же время в программировании это выражение лишено смысла, поскольку левая часть выражения должна содержать имя области памяти, которой присваивается значение, вычисляемое в правой части. Если же вы попытаетесь вставить такое выражение в свою программу, то получите сообщение об ошибке, поскольку имя переменной А + 9 – В не поймёт .
записать в общепринятой форме:
(– b + sqrt(sqr(b) – 4 * a * c))/(2 * a);
a/b * (c + d) – (a – b)/b/c + 1E – 8;
Список литературы: