Что такое кортежи и для чего они нужны? объясните понятным языком на примере pascalabc.net
191
428
Ответы на вопрос:
Кортеж (tuple) - последовательный набор данных фиксированной длины. данные в кортеже могут быть разного типа, их количество обычно невелико (в pascal abc.net 3 - максимум 7). важно, что кортеж создается на этапе компиляции, поэтому его структура неизменна. данные в кортеже нельзя редактировать - они доступны только на чтение. внешне кортеж выглядит как список. например, список аргументов у функции или процедуры. и запись (record) в паскале - тоже своего рода кортеж. кортежи могут быть весьма полезны. например, в паскале обычно функция возвращает некоторое значение. а если надо, к примеру, два? процедуру делать? кортеж решает эту проблему. ниже пример работающей программы на pascalabc.net 3.3. напомню, что идентификаторы в программе могут содержать символы unicode из любых алфавитных наборов, поэтому имена переменных написаны кириллицей. function divmod(a,b: integer): =(a div b,a mod b); begin var (делимое,делитель): =readinteger2('делимое и делитель: '); var (частное,остаток): =divmod(делимое,делитель); writeln('частное = ',частное,', остаток = ',остаток) end. пример делимое и делитель: 356432 242 частное = 1472, остаток = 208 пример демонстрирует возможности, которые открывают кортежи. функция divmod возвращает кортеж из двух элементов. кортежу она состоит из единственного оператора и это позволило записать её в одну строку. содержимое кортежа определяется заданными выражениями, их тип - типом результата (integer). readinteger2 - это функция, возвращающая кортеж из двух элементов типа integer, принятых с клавиатуры. левая часть оператора присваивания var (делимое,делитель): = реализует так называемое кортежное присваивание. (делимое,делитель) - это запись кортежа, поскольку перечисление находится в круглых скобках. но именно в таком употреблении это одновременно две различные переменные, которым будет присвоено значение элементов кортежа. кортеж в правой части "распаковывается" так, что значение первого элемента кортежа попадает в первую переменную, а второе - во вторую. в результате оказалось достаточно одного оператора, заменяющего три: var делимое,делитель: integer; write('делимое и делитель: '); read(делимое,делитель); еще одно кортежное присваивание var (частное,остаток): =divmod(делимое,делитель); создает две переменные типа integer и распаковывает в них кортеж, возвращаемый функцией divmod. и только процедура вывода writeln() написана без кортежа. чтобы показать, как можно использовать элементы кортежа без распаковки, пример запишем иначе. function divmod(a,b: integer): =(a div b,a mod b); begin var (делимое,делитель): =readinteger2('делимое и делитель: '); var t: =divmod(делимое,делитель); writeln('частное = ',t[0],', остаток = ',t[1]) end. здесь t - кортеж типа (integer,integer). присваивание одного кортежа другому делается обычным способом. в обращении к элементам кортежа мы пользуемся синтаксисом, принятым для элементов массива, индексированных от нуля. понятно, что в кратком ответе невозможно описать все, что языку программирования кортежи. закончить хочу примером того, как кортеж позволят обменять местами значения двух переменных: (a,b): =(b,a); и, поскольку вы раньше задавали вопрос о лямбдах -вот она: begin var divmod: (integer,integer)-> (integer,integer): =(a,b)-> (a div b,a mod b); var (делимое,делитель): =readinteger2('делимое и делитель: '); var t: =divmod(делимое,делитель); writeln('частное = ',t[0],', остаток = ',t[1]) end.
Реши свою проблему, спроси otvet5GPT
-
Быстро
Мгновенный ответ на твой вопрос -
Точно
Бот обладает знаниями во всех сферах -
Бесплатно
Задай вопрос и получи ответ бесплатно
Популярно: Информатика
-
ahmedovadidi09030.08.2021 03:48
-
watchdogs327.11.2022 23:50
-
rmshturkop01n7324.12.2020 05:17
-
PolinaChery0422.10.2022 03:35
-
dhwaaо23.12.2022 05:03
-
vladoosmartich29.12.2020 10:49
-
Алька310520.11.2021 14:40
-
рыжик5901.02.2020 04:16
-
kksa200109.03.2022 12:39
-
Superpuper22891107.10.2021 22:24
Есть вопросы?
-
Как otvet5GPT работает?
otvet5GPT использует большую языковую модель вместе с базой данных GPT для обеспечения высококачественных образовательных результатов. otvet5GPT действует как доступный академический ресурс вне класса. -
Сколько это стоит?
Проект находиться на стадии тестирования и все услуги бесплатны. -
Могу ли я использовать otvet5GPT в школе?
Конечно! Нейросеть может помочь вам делать конспекты лекций, придумывать идеи в классе и многое другое! -
В чем отличия от ChatGPT?
otvet5GPT черпает академические источники из собственной базы данных и предназначен специально для студентов. otvet5GPT также адаптируется к вашему стилю письма, предоставляя ряд образовательных инструментов, предназначенных для улучшения обучения.