Сейчас буду немного писать беллетристику. Терминологически не точно, но смысл постараюсь объяснить.
1. Использовать глобальные переменные. То есть переменные из общего пространства имён для программы и подпрограммы. В таком случае программа и подпрограмма пользуются одними и теми же переменными, что хотят, то и записывают или читают. Свободно и без ограничений.
2. Передать данные из программы в подпрограмму можно в виде параметров. Этот подразделяется на два: передача по значению, и передача по ссылке.
2а) когда параметры передаются из программы в подпрограмму по значению, то подпрограмма создаёт внутри себя копии параметров, и использует их как свои локальные переменные. После завершения работы подпрограммы, такие копии уничтожаются, а исходные значения в вызывающей программе остаются как были, в неизменном виде. Поэтому такая передача данных - как билет в один конец: данные уходят в подпрограмму, а обратно таким не возвращаются.
2б) когда параметры передаются из программы в подпрограмму по ссылке, то вызывающая программа передаёт в подпрограмму указатели на соответствующие переменные. Они на самом деле "под капотом" тоже глобальные, как в но только их имена не используют общее пространство имён - как бы замаскированы. В таком случае, всё что подпрограмма делает с параметрами, приводит к изменению данных в вызывающей программе. Очень похоже на
2а) и 2б) - принципиально разные
2в) ещё бывает передачи параметров по имени, но такой в массовых языках программирования используется редко. В таком случае в подпрограмму передаётся именованый список параметров, то есть список из пар: имя параметра + значение параметра. Подпрограмма должна уметь такой список принять и обработать. В таком случае можно передавать списки параметров переменной длины, и произвольного состава.
3. В любом случае подпрограмма, если она оформлена в виде функции, может передать обратно в программу возвращаемое значение - результат вычисления, выполненного подпрограммой.
У каждого есть свои преимущества и недостатки, поэтому в разных случаях используются разные.
1) Подпрограмма (функция) может непосредственно вернуть значение в вызывающую программу, например: x:=cos(y);
2) Подпрограмма может изменить значение значение глобальных переменных, и их новое значение будет доступно в вызывающей программе;
3) Подпрограмме в качестве параметра может быть передан адрес объекта в памяти, и подпрограмма, изменив значение, передаст новое значение в вызывающую программу;
4) Подпрограмме в качестве параметра может быть передана ссылка на объект, и подпрограмма сможет изменить значение этого объекта.
Вроде всё... Хотя нет
5) Возможен обмен данными через файл - подпрограмма записывает данные в файл, вызывающая программа - читает эти значения (или наоборот). Это, конечно, крайне не эффективно и на практике никогда не применяется, но возможность такая есть.
1. Использовать глобальные переменные. То есть переменные из общего пространства имён для программы и подпрограммы. В таком случае программа и подпрограмма пользуются одними и теми же переменными, что хотят, то и записывают или читают. Свободно и без ограничений.
2. Передать данные из программы в подпрограмму можно в виде параметров. Этот подразделяется на два: передача по значению, и передача по ссылке.
2а) когда параметры передаются из программы в подпрограмму по значению, то подпрограмма создаёт внутри себя копии параметров, и использует их как свои локальные переменные. После завершения работы подпрограммы, такие копии уничтожаются, а исходные значения в вызывающей программе остаются как были, в неизменном виде. Поэтому такая передача данных - как билет в один конец: данные уходят в подпрограмму, а обратно таким не возвращаются.
2б) когда параметры передаются из программы в подпрограмму по ссылке, то вызывающая программа передаёт в подпрограмму указатели на соответствующие переменные. Они на самом деле "под капотом" тоже глобальные, как в но только их имена не используют общее пространство имён - как бы замаскированы. В таком случае, всё что подпрограмма делает с параметрами, приводит к изменению данных в вызывающей программе. Очень похоже на
2а) и 2б) - принципиально разные
2в) ещё бывает передачи параметров по имени, но такой в массовых языках программирования используется редко. В таком случае в подпрограмму передаётся именованый список параметров, то есть список из пар: имя параметра + значение параметра. Подпрограмма должна уметь такой список принять и обработать. В таком случае можно передавать списки параметров переменной длины, и произвольного состава.
3. В любом случае подпрограмма, если она оформлена в виде функции, может передать обратно в программу возвращаемое значение - результат вычисления, выполненного подпрограммой.
У каждого есть свои преимущества и недостатки, поэтому в разных случаях используются разные.
2) Подпрограмма может изменить значение значение глобальных переменных, и их новое значение будет доступно в вызывающей программе;
3) Подпрограмме в качестве параметра может быть передан адрес объекта в памяти, и подпрограмма, изменив значение, передаст новое значение в вызывающую программу;
4) Подпрограмме в качестве параметра может быть передана ссылка на объект, и подпрограмма сможет изменить значение этого объекта.
Вроде всё... Хотя нет
5) Возможен обмен данными через файл - подпрограмма записывает данные в файл, вызывающая программа - читает эти значения (или наоборот). Это, конечно, крайне не эффективно и на практике никогда не применяется, но возможность такая есть.