Занятие 2. Pascal abc.net: Кортежи

Работа с кортежами

Объявление и инициализация кортежей

  • Кортеж — набор из нескольких значений, возможно, разного типа.
  • Кортежи состоят как минимум из двух элементов и максимум из семи.
  • Значения кортежей доступны только на чтение.

Объявление кортежей может иметь вид:

var t: (string,integer);

Пример работы с кортежами:

var st:=('Ivanov',35);
print(st[0]); // Ivanov
print(st[1]); // 35
print(st);  // (Ivanov,35) 
st[1]:= 100; ///ошибка - нельзя изменять

Менять значения нельзя; создали, вывели и всё.

Манипуляции с кортежами

Кортежное присваивание или распаковка кортежа в переменные

Нельзя менять значения кортежей, но можно кортежи распаковывать.

Пример: распаковать значения кортежа в переменные

var st:=('Ivanov',35);
var name:string;
var age:integer;
(name,age):=st; // ~ name:=st[0]; age:=st[1];

Обмен

var a,b:integer;
(a, b):=(1,2);
(a,b):=(b,a);

ИЛИ

var a,b:integer;
(a, b):=(1,2);
swap(a,b);

Циклический сдвиг:

(a, b, c):=(c, b, a);

Использование кортежей в алгоритмах

Для понимания материала необходимо рассмотреть тему «Процедуры и функции»

Пример: распечатать числа ряда Фибоначчи

Выполнение:

1
2
3
4
5
6
7
8
9
begin
var a,b:integer;
 (a, b):=(1,1);
 print(a,b);
 for var i:=3 to 10 do begin
  (a,b):=(b, a+b);
  print(b);
 end;
end.

кортежи в алгоритмах

Пример: вычислять корень квадратный из x. Использовать модуль и кортеж

Формула для вычисления квадратного корня:
a0=x
a n+1= 1/2 (an+x/an)

Порядок выполнения:
Для модуля создается отдельный файл, например, MyUnit.pas, в котором прописывается код функции:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Unit MyInit;
interface
function MySQL(x:real):real;
implementation
function MySQL(x:real):real;
begin
var a,b:real;
 (a, b):=(x, real.MaxValue);
 var n:=0;
 while abs(b-a)>n do
   (a,b):=((a+x/a)/2,a);
 result:=b;
end;
end.

В файле с основной программой:

1
2
3
4
Uses MyUnit;
begin
print(MySQL(4.0))
end.

Решение задач

Пример: Опишите в модуле функцию вычисления площади и периметра прямоугольника, заданного своими сторонами.
function SP(a,b: real) :(real,real);
в разделе реализации используйте краткую форму.

Выполнение:
Листинг модуля pr1.pas:

1
2
3
4
5
6
7
8
9
unit pr1;
interface
function SP(a,b: real) :(real,real);
implementation
function SP(a,b: real) :(real,real);
  begin
    result:=(a*b,2*(a+b));
  end;
 end.

Листинг основной программы:

1
2
3
4
5
6
uses pr1;
begin
  var S,P: real;
  (S,P) := SP(2,3);  
  print(S,P);
end.

Задание 1: Описать функцию Fib(N), которая принимает целое положительное значение N ≥ 1 и возвращает N-ое число Фибоначчи

Фрагмент программы:

1
2
3
4
5
6
7
8
9
10
11
12
13
function Fib(var n:integer):integer;
begin
var f1:=1;
var f2:=1;
for ...
  (f1,f2):=...;
result:=...;
end;
begin
  var n:=readinteger;
  ...
  print(...);
end.

Видеоразбор задания:


Задание 2: предыдущий пример выполнить в модуле

Пример: Дано целое число N > 3. Последовательность целых чисел Ak определяется следующим образом:
A1=1, A2=2, A3=3, Ak=Ak−1+Ak−2−2⋅Ak−3, k=4,5,… Вывести N-ое число

Выполнение:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function MakeSeq1(var n:integer):integer;
begin
var a1:=1;
var a2:=2;
var a3:=3;
for var i:=3 to n do
  (a1,a2,a3):=(a2,a3,a3+a2-2*a1);
  result:=a3;
end;
begin
  var n:=readinteger;
  dec(n);
  var a:=MakeSeq1(n);
  print(a);
end.

Задание 3: Дано целое число N > 2. Последовательность вещественных чисел Ak определяется следующим образом:
A1=2,Ak=2+1/Ak−1, k=2,3,… Вывести N-ое число.

Фрагмент программы:

1
2
3
4
5
6
7
8
9
10
11
12
13
function MakeSeq(var n:integer):real;
begin
var a1:=2.0;
var a2:real;
for ...
  (a1,a2):=...;
result:=...;
end;
begin
  ...
  ...
  print(a);
end.

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

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

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

*
*

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