Чи правильно записаний оператор присвоєння у паскалі. Оператор присвоєння. Оператори введення, виведення, присвоєння

Тип уроку:

  • навчальний. Учні знайомляться з новим оператором Паскаль;
  • повторення теми « Внутрішня пам'ятькомп'ютера»;
  • що закріплює набуті знання.

Тема урока:«Програмування мовою Паскаль. Оператор присвоєння».

Цілі:

  • Ввести поняття «Оператор присвоєння».
  • Розрізняти операції, допустимі для цілих чи речових чисел.
  • Правильно складати та обчислювати вирази з використанням оператора присвоєння.
  • Писати програми для найпростіших завдань.

Тривалість уроку: 1 годину 30 хвилин.

ХІД УРОКУ

Перший урок

1. Повторення теми попереднього уроку "Типи даних". Приклади використання однакових за звучанням слів, але мають різні смислові значення.

Вчитель та учні працюють у формі «питання-відповідь» (10 хвилин).

2. Вчитель пояснює нову тему, використовуючи мультимедійний урок-презентацію «Програмування мовою Паскаль. Оператор присвоєння». Дається визначення поняття «оператор присвоєння», наводиться загальна та структурна форма оператора. Перш ніж розглянути роботу оператора присвоювання, згадуємо та повторюємо тему «Оперативна пам'ять, властивості Оперативна пам'ять».

Супроводжується показом презентації. Додаток 1 (15 хвилин).

3. Учні працюють самостійно, читаючи та конспектуючи нову тему (урок-презентація попередньо записаний на комп'ютери учнів, питання конспектування визначені вчителем). Тут же учні можуть познайомитися з текстами програм, у яких використовується оператор присвоювання Додаток 2(20 хвилин).

Другий урок

4. Учні працюють біля дошки, виконуючи вправи (12-15 хвилин).
1. Вчитель проводить контроль знань у формі тесту. Програма-тест попередньо записується на комп'ютери. Оцінка виставляється програмою. Додаток 5(10 хвилин).
5. Учні виконують невелику самостійну роботу за картками, або пишуть та налагоджують програму на АЯП Паскаль, в якій використовується оператор(и) присвоєння (вчитель називає номери карток із завданнями). За роботу учні отримують оцінку. Додаток 3 . Додаток 4(15 хвилин).
Домашнє завдання.Учням пропонується написати текст простої програми на АЯП Паскаль, в якій використовується оператор(и) присвоєння (для тих учнів, які не встигли виконати завдання у класі).

Висновки:

  • Через блок 1 повторення теми попереднього уроку.
  • Через блоки 2, 3 та 4 дається та закріплюється нова тема «Оператор присвоювання».
  • Через блоки 5 та 6 виконується контроль знань.

Програмування мовою Паскаль

Урок №1 (2 години). Змінні та константи. Оператор присвоєння

  1. Перевірка домашнього завдання.
  2. Нова тема.
  3. Домашнє завдання.

Перевірка домашнього завдання.

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;

Список літератури:

  • В.Б. Попов"TURBO PASCAL для школярів I", "Фінанси та статистика", Москва, 1996 р.
  • А.А. Чорно в Конспекти уроків інформатики в 9 - 11 класах, Вчитель, Волгоград, 2004.
  • Д.М. Златопольський“Я йду на урок інформатики. Завдання із програмування, 7 – 11 класи», «Перше вересня», Москва, 2001.

Оператор- Припис про виконання конкретних дій. У мові програмування Паскаль міститься 11 операторів.

Оператор присвоєння в Паскалі

Оператор присвоєння, оператор оператора Турбо Паскаль, що найчастіше використовується.

Формат запису: X: = A;
де: X- Ім'я змінної;
A -вираз ;
:= - знак присвоєння.

Робота оператора:У виконання оператора обчислюється значення, у правій частині висловлювання і присвоюється імені змінної.

Тип змінної та тип виразу повинні збігатися, крім випадку, коли вираз відноситься до цілого типу, а змінна до речовинного. При цьому відбувається перетворення обчисленого значення виразу до речового типу.

Приклад 9.1.Записати програму обчислення функцій:

y= cosa+lnb; n=k+1; r = ord (# 65).

Var
a, b, y: real;
k, n: integer;
r: char;
t, v, u: Boolean;
* * *
y:= cos(a)+ln(b);
n:=k+1;
r:=ord(#65);
t:=(v and u)or(v and not u);
* * *
End.

Оператор переходу у Паскалі

У Турбо Паскалі прийнято природний порядок виконання операторів, тобто. в порядку їхнього прямування в тексті програми. Оператор переходу перериває природний порядок виконання операторів і передає управління оператору, позначеному міткою, зазначеною в операторі переходу.

Формат запису: GoTo m;

де: GoTo- перейти до;
m -мітка.

Робота оператора:Оператор переходу передає керування оператору, позначеному міткою m.
Застосування оператора переходу в ТР є небажаним, оскільки він порушує структурну цілісність програми. Таку програму складно читати, налагоджувати та модифікувати. На використання оператора переходу в ТР накладено обмеження, що не дозволяють його безсистемне використання.

За допомогою оператора переходу можна передавати управління всередині одного рівня або переходити з внутрішнього рівня до зовнішнього. Переходи із зовнішнього рівня у внутрішній заборонені. Наприклад, із програми в тіло підпрограми або всередину оператора циклу чи умовного оператора.


Оператор присвоєння - найпростіший і найпоширеніший оператор.

Формат оператора присвоєння

Оператор присвоювання є запис, що містить символ = (знак рівності), ліворуч від якого вказано ім'я змінної, а праворуч - вираз. Оператор присвоєння закінчується знаком; (крапка з комою).

Змінна = Вираз ; // Оператор присвоєння

Оператор присвоєння можна відрізнити у тексті програми наявності знаку рівності. Як вираз може бути вказана константа, змінна, виклик функції або власне вираз.

Правило виконання оператора присвоєння

Оператор присвоювання, як і будь-який інший оператор, виконується. Це означає, що запис, що становить оператор присвоєння, виконується відповідно до правила. При виконанні оператора привласнення обчислюється значення у правій частині, а потім це значення присвоюється змінною зліва від знаку рівності. В результаті виконання оператора присвоєння змінна в лівій частині завжди набуває нового значення; це значення може відрізнятись або збігатися з попереднім значенням цієї змінної. Обчислення виразу у правій частині оператора присвоювання здійснюється відповідно до порядку обчислення виразів (див. Операції та вирази).

Приклади операторів присвоєння

В операторі привласнення допускається оголошення типу змінної зліва від знака рівності:

int In = 3;
double Do = 2.0;
bool Bo = true;
color Co = 0 x008000; // Змінної Co присвоєно значення константи
string St = "sss"; // Змінної St присвоєно значення константи
datetime Da = D "01.01.2004"; // Змінною Da присвоєно значення константи

Раніше оголошені змінні використовуються в операторі надання без вказівки типу.

In = 7; // Змінною In присвоєно значення константи
Do = 23.5; // Змінною Do присвоєно значення константи
Bo = 0; // Змінної Bo присвоєно значення константи

В операторі надання не допускається оголошення типу змінної у правій частині від знака рівності:

In = int In_2; // Оголошення типу змінних у правій частині заборонено
Do = double Do_2; // Оголошення типу змінних у правій частині заборонено

В операторі присвоєння не допускається повторне оголошення типу змінних.

Int In; // Оголошення типу змінної In
int In = In_2; // Не допускається повторне оголошення змінної (In)

Приклади використання у правій частині користувацьких та стандартних функцій:

In = My_Function(); // In присвоєно значення пользоват. функції
Do = Gipo (Do1, Do1); // Do присвоєно значення пользоват. функції
Bo = IsConnected (); // Bo присвоєно значення стандартн. функції
St = ObjectName (0); // St надано значення стандартн. функції
Da = TimeCurrent(); // Da присвоєно значення стандартн. функції

Приклади використання у правій частині виразів:

In = (My_Function () + In2) / 2; // Змінної In присвоєно
// .. значення виразу
Do = MathAbs (Do1 + Gipo (Do2, 5) + 2.5); // Змінною Do присвоєно
// .. значення виразу

При обчисленнях оператора присвоювання застосовуються правила приведення типів даних (див. Приведення типів).

Приклади операторів надання короткої форми

У MQL4 використовується також коротка форма запису операторів присвоєння. Це форма операторів присвоєння, в якій використовуються операції присвоєння, відмінні від операції присвоєння = (Знак рівності) (див. Операції та вирази). На оператори короткої форми поширюються самі правила та обмеження. Коротка форма операторів надання використовується в коді для наочності. Програміст на власний розсуд може використовувати ту чи іншу форму оператора присвоювання. Будь-який оператор надання короткої форми може бути легко переписаний у повноформатний, при цьому результат виконання оператора не зміниться.

In / = 33;
In = In / 33;

St + = "_exp7"; // Коротка форма запису оператора присвоєння
St = St + "_exp7"; // Повна форма запису оператора присвоєння

Ми розглянули найпростіші програми, написані на Паскалі серед 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:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 var M, N: type integer;

Опис:

")" onmouseout="toolTip()">integer
; begin writeln ( "Введіть числа M та N:" <-- вводим 12 } write (" N = " ) ; readln (N) ; { <-- вводим 34 } M := N; { <== M присваивается N, поэтому M = 34 } N := M; { <== N присваивается M, поэтому N = 34 } end.

Запустіть програму виконання; при запиті M введіть 12, для N вкажіть 34 та натисніть Enter. Якщо все зроблено правильно, то Ви маєте побачити:

Введіть числа M та N:
M = 12
N = 34
Результат:
M = 34 N = 34

Як видно з останнього рядка, це не те, що ми хотіли – змінити значення M та N місцями.

Щоб досягти правильного результату, треба зафіксувати початкове значення змінної M, наприклад, s:= M ("запам'ятати" М, записавши його значення змінну s). В результаті присвоюватимемо числу N не значення змінної M, яка вже змінилася, а використовувати рівну їй величину s:


Відповідно до останніх змін, попередня програма набуде вигляду:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 var M, N, s: type integer;

Опис:
Представляє 32-бітове ціле число зі знаком.

Діапазон значень: -2 147 483 648 .. 2 147 483 647")" onmouseout="toolTip()">integer
; begin writeln ( "Введіть числа M та N:"); write ("M ="); readln (M); (<-- вводим 12 } write (" N = " ) ; readln (N) ; { <-- вводим 34 } s := M; { <== запоминаем M, равное 12 } M := N; (M = 34, оскільки N = 34) N: = s; (N = 12, тому що s = 12) writeln ("Результат:"); writeln ("M =", M, "N =", N); readln end.

Перепишіть цю програму PascalABC.Net і запустіть (кнопка F9 на клавіатурі). Якщо відповідь буде такою:

Введіть числа M та N:
M = 12
N = 34
Результат:
M = 34 N = 12

то програма працює правильно. Як очевидно з останнього рядка, значення чисел M і N змінилися місцями.

Присвоєння- механізм зв'язування у програмуванні, що дозволяє динамічно змінювати зв'язки імен об'єктів даних (як правило, змінних) з їх значеннями. Строго кажучи, зміна значень є побічним ефектом операції надання, і в багатьох сучасних мовах програмування сама операція також повертає деякий результат (як правило, копію присвоєного значення). Фізично результат операції присвоєння полягає у проведенні запису і перезапису осередків пам'яті чи регістрів процесора.

Привласнення є однією з центральних конструкцій в імперативних мовах програмування, ефективно і просто реалізується на фон-нейманівській архітектурі, яка є основою сучасних комп'ютерів.

В об'єктно-орієнтованих мовах програмування семантика присвоєння суттєво відрізняється. Наприклад, у мові Kotlin при присвоєнні відбувається копіювання об'єкта, а в мові Rust – переміщення (move-семантика) об'єкта і стара зв'язка стає недійсною.

Set<целевая_переменная> <выражение>

Цей запис еквівалентний виклику функції. Аналогічно, у коболі старого стилю:

MULTIPLY 2 BY 2 GIVING FOUR.

Алгоритм роботи

  • Обчислити лівостороннє значення першого операнда. На цьому етапі стає відомим місцезнаходження цільового об'єкта, приймача нового значення.
  • Обчислити правостороннє значення другого операнда. Цей етап може бути як завгодно великим і включати інші оператори (у тому числі присвоєння).
  • Присвоїти обчислене правостороннє значення лівосторонньому значенню. По-перше, при конфлікті типів має бути здійснено їх приведення (або видано повідомлення про помилку через його неможливість). По-друге, власне привласнення значення в сучасних мовах програмування може бути підмінено і включати не тільки перенесення значень осередків пам'яті (наприклад, в «властивості» об'єктів, навантаження операторів).
  • Повернути обчислене правостороннє значення як результат виконання операції. Потрібно не у всіх мовах (наприклад, не потрібно у Паскалі).

Позначення

Вибір символу надання є приводом для суперечок розробників мов. Існує думка, що використання символу = для присвоєння заплутує програмістів, а також ставить складне для вирішення питання про вибір символу для оператора порівняння.

Загальновідомим поганим прикладом є вибір знака рівності для позначення присвоєння, що сягає мови Fortran в 1957 році і сліпо повторюваний досі масою розробників мов. Ця погана ідея скидає вікову традицію використання знака "=" для позначення порівняння на рівність, предикату, що приймає значення "істина" або "брехня". Але у Fortran цей символ став позначати привласнення, примус до рівності. У цьому випадку операнди перебувають у нерівному положенні: лівий операнд, змінна, має бути зроблений рівним правому операнду, виразу. Тому x = y не означає те саме, що y = x.

Оригінальний текст (англ.)

На notorious example for bad idea був вибір за еквівалентний sign to denote assignment. Це goes back to Fortran в 1957 році і має блискуче been copied по armies of language designers. Why is it a bad idea? Тому, що це загрожує центром останньої традиції до літ “=” помітити згоду на еквівалент, а попередження, яке є його true or false. Але Fortran зробить це до міркування, спрямованість на еквівалент. У цьому випадку, оператори є на неодноразовому footing: Left operand (a variable) is to be made equal to the right operand (an expression). x = y does not mean the same thing as y = x.

Реалізацією цієї позиції Вірта вважатимуться те, що у мові Паскаль , автором якого є, оператором присвоювання є:= , тоді як порівняння використовується просто = .

Вибір символу оператора рівності в мові при використанні = як привласнення вирішується:

  • Введення нового символу мови для оператора перевірки рівності.
А = В = С

змінної А надається булевське значення висловлювання відносини У = З. Така запис призводить до зниження читабельності і рідко використовується.

Семантичні особливості

Не завжди «інтуїтивний» (для програмістів імперативних мов) спосіб інтерпретації присвоєння є єдино вірним і можливим.

За синтаксисом в імперативних мовах не завжди можливо зрозуміти, як реалізується семантика присвоєння, якщо це явно не визначено в мові.

A = b = a a = 1000

Після цього b матиме значення - просто оскільки фактично його значення - і є значення a . Число посилань на той самий об'єкт даних називається його потужністю, а сам об'єкт гине (знищується або віддається збирачеві сміття), коли його потужність досягає нуля. Мови програмування нижчого рівня (наприклад, Сі) дозволяють програмісту явно керувати тим, чи використовується семантика покажчиків чи семантика копіювання.

Підміна операції

Багато мов надають можливість заміни змісту присвоєння: або через механізм властивостей, або через навантаження оператора присвоєння. Підміна може знадобитися для виконання перевірок на допустимість значення або будь-яких інших додаткових операцій. Перевантаження оператора присвоєння часто використовується для забезпечення «глибокого копіювання», тобто копіювання значень, а не посилань, які копіюються в багатьох мовах за замовчуванням.

Такі механізми дозволяють забезпечити зручність при роботі, так для програміста немає різниці між використанням вбудованого оператора та перевантаженого. З цієї причини можливі проблеми, оскільки дії перевантаженого оператора може бути абсолютно відмінні від дій оператора за промовчанням, а виклик функції не очевидний і може бути прийнятий за вбудовану операцію.

Розширені конструкції

Конструкції присвоєння у різних мовах програмування

Оскільки операція присвоєння широко використовується, розробники мов програмування намагаються розробити нові конструкції для спрощеного запису типових операцій (додати в мову так званий «синтаксичний цукор»). Крім цього, в низькорівневих мовах програмування часто критерієм включення операції є можливість компіляції в ефективний код, що виконується. Особливо відомий цією властивістю мову Сі.

Численні цільові об'єкти

Однією з альтернатив простого оператора є можливість присвоєння значення виразу кільком об'єктам. Наприклад, у мові ПЛ/1 оператор

SUM, TOTAL = 0

одночасно надає нульове значення змінним SUM і TOTAL. У мові Ада присвоєння також є оператором, а не виразом, тому запис множинного присвоєння має вигляд:

SUM, TOTAL: Integer: = 0;

Аналогічне присвоєння у мові Python має наступний синтаксис:

Sum = total = 0

На відміну від ПЛ/1, Ади та Python, де множинне присвоєння вважається лише скороченою формою запису, у мовах Сі, Лісп та інших даний синтаксис має сувору основу: просто оператор присвоєння повертає присвоєне їм значення (див. вище). Таким чином, останній приклад – це насправді:

Sum = (total = 0)

Рядок такого виду спрацює в Сі (якщо додати крапку з комою в кінці), але викликає помилку в Python.

Паралельне привласнення

Останній варіант працює тільки з типами, що підтримують бітові операції (наприклад, для double компілятор мови не дозволить обміняти значення змінних у такий спосіб).

a ||= 10

Дана конструкція присвоює змінної a значення тільки в тому випадку, якщо значення ще не присвоєно або false .

Складові оператори

Складовий оператор надання дозволяє скорочено задавати часто використовувану форму присвоєння. За допомогою цього способу можна скоротити запис присвоєння, при якому цільова змінна використовується як перший операнда в правій частині виразу, наприклад.