Занятие 1. Pascal abc.net: Основные особенности при работе с переменными

Работа с переменными: особенности

Принцип локальности

В обычном Паскале описание переменных обычно находится до тела программы:

{описание переменных}
begin
  ...
end.

Если программный код достаточно большой, то такой вариант инициализации переменных весьма неудобен. В Pascal abc.net переменные могут описываться внутри тела программы — между begin и end и инициализироваться при описании.

В этом состоит принцип локальности: переменная описывается непосредственно перед началом своего использования.

Внутриблочные переменные позволяют сильно уменьшить количество глобальных переменных в разделе описания.

Т.е. чем ближе к месту использования описывается некоторый программный объект, тем читабельней код и модифицируемей программа.

Пример: поиск факториала числа

Раньше:

var n,i,p:integer;
begin
 read(n);
 ...
 p:=1;
 for i:=1 to n do
  p:=p*i;
...

Pascal abc.net:

begin
var n:integer;
read(n);

ИЛИ

begin
var n:=ReadInteger('введите n: ');
var p:=1; // канонический способ - тип определяется по правой части
 
for var i:=1 to n do
  p:=p*i; // можно заменить на компактную форму p*=i;
print (p); // write() заменяем на print()
end.

Теперь этот фрагмент кода можно вырезать и перенести в функцию или в модуль. В этом и заключается модифицируемость.

Ввод данных:

var n:=ReadInteger();
var n:=ReadReal();

Канонический способ:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var 
  a: integer;
  b: real;
 
begin
  a := 1;
  writeln('a := 1; a = ',a);
  a += 2; // Увеличение на 2
  writeln('a += 2; a = ',a);
  a *= 3; // Умножение на 3
  writeln('a *= 3; a = ',a);
  writeln;
  b := 6;
  writeln('b := 6; b = ',b);
  r /= 2;
  writeln('b /= 2; b = ',b);
end.

Задача abc_net 1. Найдите расстояние между двумя точками с заданными координатами (x1,y1) и (x2,y2) на плоскости. Расстояние вычисляется по формуле:
pascal abc расстояние между точками
  
Проверьте правильность вашей программы на следующих значениях:

d((0, 0); (6, 0)) = 6;
	d((0, -4); (0, 1)) = 5;
	d((-1, 1); (2, 5)) = 5.

Базовые типы и методы внутри стандартных типов

Для обращения к методам используется точечная нотация:

arr.MaxValue;

Целочисленные:

var i:integer;
i. ... // выпадает список методов для целочисленных
 
i.MaxValue;
i.MinValue;
i.ToString;

Вещественные:

begin
var a:=1.0;
var b:=0.0; 
 
print (a.MinValue); // -1.79769313486232E+308
 
print (a/b); // в прежних компиляторах выдается RunTime Error - исключение
// в abc.net  результатом будет бесконечность
 
print(Sqrt(-1)); // результат NAN - не число

Исключение — управляемая ошибка, которую можно перехватывать и погашать.

Стандартные функции

Обмен значениями переменных происходит без использования буферной переменной:

swap(a,b);

Поиск максимального и минимального значения:

min(a,b);
max(a,b);

Задача abc_net 2. В танцевальном клубе участвуют 10 представительниц женского пола. Найдите средний возраст танцовщиц. Решить задачу без использования массива, используя принцип локальности, компактную форму записи и методы внутри стандартных типов.

Операции целочисленного деления и остатка

Операция div предназначена для вычисления целой части от результата деления целых чисел (неполное частное). Пример:

16 div  2 = 8
22 div  7 = 3
66 div 10 = 6

  • То есть, число N div K показывает, сколько полных раз K «помещается внутри» N.
  • Операция mod предназначена для вычисления остатка от деления одного целого числа на другое. Если числа делятся нацело, то остаток равен нулю.
    Пример:

    16 mod  2 = 0
    22 mod  7 = 1
    66 mod 10 = 6

  • Число N mod K показывает, что «остаётся от N» после того, как из него «убрали» максимальное число фрагментов размером K.
  • Работа с отдельными цифрами числа

  • Если мы работаем в 10-й системе счисления, то любое число можно разобрать на цифры, используя степени 10 и операции div и mod.
  • Стандартный вид числа:
  • 123 = 1∗100 + 2∗10 +3

    Таким образом, можно понять, как получить из общего числа отдельные его цифры:

  • для получения сотен из трёхзначного числа, нужно вычислить частное от деления на 100;
  • для получения десятков, нужно вычислить остаток от деления на 100, а затем частное от деления на 10 (возможен другой вариант)
  • для получения единиц, нужно взять остаток от деления на 10.

  • Задача abc_net 3. Дано двузначное целое число. Требуется вывести сумму и произведение его цифр.
    Пример:

    35 => 8, 15
    90 => 9, 0
    -11 => 2, 1  // сумма и произведение цифр положительны
    

    Приведите лог работы программы с одним из введенных чисел в форме комментария.


    Задача abc_net 4. Дано трёхзначное целое число. Выполните в нем циклический сдвиг разрядов влево (разряд единиц становится разрядом десятков, разряд десятков — разрядом сотен, а разряд сотен — разрядом единиц).
    Пример:

    234 >>>  342
    -602 >>> -26
    

    Поделитесь уроком с коллегами и друзьями:

    Добавить комментарий

    Ваш e-mail не будет опубликован. Обязательные поля помечены *

    *
    *

    Вставить формулу как
    Блок
    Строка
    Дополнительные настройки
    Цвет формулы
    Цвет текста
    #333333
    Используйте LaTeX для набора формулы
    Предпросмотр
    \({}\)
    Формула не набрана
    Вставить