Локальные и глобальные идентификаторы

 

Использование процедур и функций в Паскале тесно связано с некоторыми особенностями работы с идентификаторами (именами) в программе. В часности, не все имена всегда доступны для использования. Доступ к идентификатору в конкретный момент времени определяется тем, в каком блоке он описан.

Имена, описанные в заголовке или разделе описаний процедуры или функции называютлокальнымидля этого блока. Имена, описанные в блоке, соответствующем всей программе, называют глобальными. Следует помнить, что формальные параметры прцедур и функций всегда являются локальными переменными для соответствующих блоков.

Основные правила работы с глобальными и локальными именами можно сформулировать так:

· Локальные имена доступны (считаются известными, "видимыми") только внутри того блока, где они описаны. Сам этот блок, и все другие, вложенные в него, называютобластью видимостидля этих локальных имен.

· Имена, описанные в одном блоке, могут совпадать с именами из других, как содержащих данный блок, так и вложенных в него. Это объясняется тем, что переменные, описанные в разных блоках (даже если они имеют одинаковые имена), хранятся в разных областях оперативной памяти.

Глобальные имена хранятся в области памяти, называемой сегментом данных(статическим сегментом) программы. Они создаются на этапе компиляции и действительны на все время работы программы.

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

Имя, описанное в блоке, "закрывает" совпадающие с ним имена из блоков, содержащие данный. Это означает, что если в двух блоках, один из которых содержится внутри другого, есть переменные с одинаковыми именами, то после входа во вложенный блок работа будет идти с локальной для данного блока переменной. Пременная с тем же имнем, описанная в объемлющем блоке, становится временно недоступной и это продолжается до момента выхода из вложенного блока.

Рекомендуется все имена, которые имеют в подпрограммах чисто внутреннее, вспомогательное назначение, делать локальными. Это предохраняет от изменений глобальные объекты с такими же именами.

 

Задания на лабораторную работу:

Вариант на лабораторную работу определяется следующим образом:

N = (Номер в журнале у старосты) mod 16

Вариант 1.

Окружность характеризуется координатами центра (X, Y) и радиусом. Задан массив из N окружностей. Упорядочить массив по возрастанию длин заданных окружностей.

Дана строка. Удалить в ней повторяющиеся символы.

Описать функцию DecToBin(N) строкового типа, возвращающую строковое представление целого неотрицательного числа N в двоичной системе счисления. Результирующая строка состоит из символов «0»–«1» и не содержит ведущих нулей (за исключением представления числа 0). Используя эту функцию, получить двоичные представления пяти данных чисел.

 

Реализовать функцию SortArray, осуществляющую сортировку элементов массива, расположенных на четных позициях, по возрастанию, а на нечетных - по убыванию. Массив и его размер передаются в качестве параметров. Используя разработанную функцию обработать N массивов, введенных пользователем.

 

Вариант 2.

 

Круг характеризуется координатами центра (X, Y) и радиусом. Задан массив из N кругов. Упорядочить массив по возрастанию площадей кругов.

 

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

 

Описать процедуру ArrayToMatrRow(A, K, M, N, B), формирующую по вещественному массиву A размера K матрицу B размера M × N (матрица заполняется элементами массива A по строкам). «Лишние» элементы массива игнорируются; если элементов массива недостаточно, то оставшиеся элементы матрицы полагаются равными 0. Двумерный массив B является выходным параметром. С помощью этой процедуры на основе данного массива A размера K и целых чисел M и N сформировать матрицу B размера M × N.

 

Реализовать функцию Exchange, меняющую местами слова с номерами k1 и k2 в строке. Строка и номера слов передаются в качестве параметров. В случае успешного завершения функция возвращает 0, а если слов с номерами k1 и k2 в строке нет, то - 1. Используя разработанную функцию преобразовать N строк, введенных пользователем.

 

Вариант 3.

Квадрат характеризуется координатами левого верхнего угла (X1, Y1) и правого нижнего. Задан массив из N квадратов. Упорядочить массив по возрастанию площадей заданных квадратов.

 

Дан текст, состоящий из строчных латинских букв. Определить количество тех символов, которые встречаются не менее 2 раз.

Описать процедуру UpCaseRus(S), преобразующую все строчные русские буквы строки S в прописные (остальные символы строки S не изменяются). Строка S является входным и выходным параметром. Используя процедуру UpCaseRus, преобразовать пять данных строк.

 

Реализовать функцию вставки строки в вещественную матрицу. В параметрах функции передается матрица, ее размеры, номер вставляемой строки и массив, который содержит значения новой строки. Используя разработанную функцию, обработать матрицу, введенную пользователем, вставив в нее N строк. Пользователь вводит новую строку и указывает, на какую позицию ее вставлять.

 

Вариант 4.

Сообщение характеризуется текстом (строка длиной 255 символов), датой отправки, номером абонента отправившего сообщение и номером адресата, которому предназначено сообщение.

Дан массив из N сообщений. Упорядочить массив сообщений по возрастанию по дате отправки.

 

Подсчитать общее количество цифр и знаков '+', '-', и '*', входящих в строку s.

 

Описать процедуру TrimRightC(S, C), удаляющую в строке S конечные символы, совпадающие с символом C. Строка S является входным и выходным параметром. Дан символ C и пять строк. Используя процедуру TrimRightC, преобразовать данные строки.

 

Реализовать функцию перемены местами двух строк в целочисленной матрице. В параметрах функции передаются: матрица, ее размеры и номера строк. Функция возвращает код ошибки (0 - все нормально, 1 - некорректно указан номер первого столбца, 2 - некорректно указан номер первого столбца). Используя разработанную функцию осуществить перемену местами N пар строк матрицы. Номера строк вводятся пользователем. Изначальная матрица заполняется автоматически, используя функцию Random.

 

Вариант 5.

 

Студент характеризуется фамилией, именем и отчеством (строка — 100 символов), курсом (число от 1 до 5) и средним баллом. Дан массив из N студентов. Упорядочить заданный массив по возрастанию по среднему баллу внутри курса.

 

Подсчитать количество различных (значащих) цифр в десятичной записи натурального числа n и напечатать в возрастающем порядке все цифры, не входящие в десятичную запись натурального числа n.

 

Описать процедуру SwapCol(A, M, N, K1, K2), осуществляющую перемену местами столбцов вещественной матрицы A размера M × N с номерами K1 и K2. Матрица A является входным и выходным параметром; если K1 или K2 больше N, то матрица не изменяется. Используя эту процедуру, поменять для данной матрицы A размера M × N столбцы с данными номерами K1 и K2.

 

Реализовать функцию удаления строки из целочисленной матрицы. В параметрах функции передаются: матрица, ее размеры и номер удаляемой строки. Используя разработанную функцию осуществить удаление N строк матрицы. Номера строк вводятся пользователем. Изначальная матрица заполняется автоматически, используя функцию Random.

 

Вариант 6.

 

Книга характеризуется названием (строка — 255 символов), автором (строка — 100 символов), количеством страниц (целое число в диапозоне [1..2500]) и годом издания. Задан массив из N книг. Упорядочить массив в порядке возрастания количества страниц.

 

Сформировать множества А и В, базовый тип которых 0..50, по заданному числу элементов для каждого множества. Найти число и сумму элементов, принадлежащих одновременно и А и В; выведите на экран все элементы множества А, не принадлежащие В.

 

Описать процедуру SortArray(A, N), выполняющую сортировку по возрастанию вещественного массива A размера N. Массив A является входным и выходным параметром. С помощью этой процедуры отсортировать массивы A, B, C размера NA, NB, NC соответственно.

 

Реализовать функцию SortWord, осуществляющую сортировку слов в строке в алфавитном порядке. Строка передается в параметрах функции и содержит не более 30 слов. Используя разработанную функцию обработать N строк, введенных пользователем.

 

Вариант 7.

 

Окружность характеризуется координатами центра (X, Y) и радиусом. Задан массив из N окружностей. Упорядочить массив по возрастанию длин заданных окружностей.

 

Даны две строки. Найти символы первой строки, которых нет во второй.

 

Описать процедуру Chessboard(M, N, A), формирующую по целым положительным числам M и N матрицу A размера M × N, которая содержит числа 0 и 1, расположенные в «шахматном» порядке, причем A1,1 = 0. Двумерный целочисленный массив A является выходным параметром. С помощью этой процедуры по данным целым числам M и N сформировать матрицу A размера M × N.

 

Реализовать функцию SortArray, осуществляющую сортировку элементов массива, расположенных между максимумом и минимумом массива по возрастанию, если сначала расположен минимум, а затем максимум, и по убыванию - если наоборот. Массив и его размер передаются в качестве параметров. Используя разработанную функцию обработать N массивов, введенных пользователем.

 

Вариант 8.

 

Книга характеризуется названием (строка — 255 символов), автором (строка — 100 символов), количеством страниц (целое число в диапозоне [1..2500]) и годом издания. Задан массив из N книг. Упорядочить массив в порядке возрастания количества страниц в пределах года издания.

 

Даны два слова. Проверить можно ли составить из букв первого слова второе.

 

Описать процедуру Split1(A, NA, B, NB, C, NC), формирующую по вещественному массиву A размера NA два вещественных массива B и C размера NB и NC соответственно; при этом массив B содержит все элементы массива A с нечетными порядковыми номерами (1, 3, …), а массив C — все элементы массива A с четными номерами (2, 4, …). Массивы B и C и числа NB и NC являются выходными параметрами. Применить эту процедуру к данному массиву A размера NA и вывести размер и содержимое полученных массивов B и C.

 

Реализовать функцию DelWord, осуществляющую удаление из строки всех слов, длина которых менее сила k. Строка и число k передаются в параметрах. Используя разработанную функцию обработать N строк, введенных пользователем. Число k указывается для каждой строки отдельно.

 

Вариант 9.

 

Окружность характеризуется координатами центра (X, Y) и радиусом. Задан массив из N окружностей. Упорядочить массив по возрастанию длин заданных окружностей.

 

Дано число. Распечатать в убывающем порядке все цифры, входящие в заданное число.

 

Описать функцию SumRow(A, M, N, K) вещественного типа, вычисляющую сумму элементов вещественной матрицы A размера M × N, расположенных в K-й строке (если K > M, то функция возвращает 0). Для данной матрицы A размера M × N и трех данных K найти SumRow(A, M, N, K).

 

Реализовать функцию удаления столбца из целочисленной матрицы. В параметрах функции передаются: матрица, ее размеры и номер удаляемого столбца. Используя разработанную функцию осуществить удаление N столбцов матрицы. Номера столбцов вводятся пользователем. Изначальная матрица заполняется автоматически, используя функцию Random.

 

Вариант 10.

 

Книга характеризуется названием (строка — 255 символов), автором (строка — 100 символов), количеством страниц (целое число в диапозоне [1..2500]) и годом издания. Задан массив из N книг. Упорядочить массив в порядке возрастания количества страниц в пределах одного автора.

 

Дана строка. Удалить из строки все слова, содержащие хотя бы одну цифру.

 

Описать функцию IsIdent(S) целого типа, проверяющую, является ли строка S допустимым идентификатором, т. е. непустой строкой, которая содержит только латинские буквы, цифры и символ подчеркивания «_» и не начинается с цифры. Если S является допустимым идентификатором, то функция возвращает 0. Если S является пустой строкой, то возвращается −1, если S начинается с цифры, то возвращается −2. Если S содержит недопустимые символы, то возвращается номер первого недопустимого символа. Проверить с помощью функции IsIdent пять данных строк.

 

Реализовать функцию сортировки столбцов целочисленной матрицы размера N×M в порядке возрастания сумм их элементов.

Вариант 11.

 

Окружность характеризуется координатами центра (X, Y) и радиусом. Задан массив из N окружностей. Упорядочить массив по возрастанию длин заданных окружностей.

 

Дана строка, содержащая русские строчные буквы. Вывести на экран в убывающем в алфавитном порядке все буквы, содержащиеся в заданной строке.

 

Описать функцию PosSub(S0, S, K, N) целого типа, возвращающую номер позиции, начиная с которой в строке S содержится первое вхождение строки S0, причем анализируются только N символов строки S, начиная с ее K-го символа (таким образом, PosSub обеспечивает поиск в подстроке). Если K превосходит длину строки S, то возвращается 0, если длина строки меньше K + N, то анализируются все символы строки, начиная с ее K-го символа. Если в требуемой подстроке строки S вхождения S0 отсутствуют, то функция возвращает 0. Вывести значения функции PosSub для данных строк S0, S и каждой из трех пар положительных целых чисел: (K1, N1), (K2, N2), (K3, N3).

 

Реализовать функцию Trim(S), удаляющую в строке начальные и конечные пробелы. Обработать заданной функцией N строк, введённых пользователем.

 

Вариант 12.

 

Сообщение характеризуется текстом (строка длиной 255 символов), датой отправки, номером абонента отправившего сообщение и номером адресата, которому предназначено сообщение.

Дан массив из N сообщений. Упорядочить массив сообщений по убыванию по дате отправки в пределах одного абонента-адресата.

 

Дана строка, содержащая английские строчные буквы. Вывести на экран в убывающем в алфавитном порядке все буквы, содержащиеся в заданной строке.

 

Описать функцию WordK(S, K) строкового типа, возвращающую K-е слово строки S (словом считается набор символов, не содержащий пробелов и ограниченный пробелами или началом/концом строки). Если количество слов в строке меньше K, то функция возвращает пустую строку. Используя эту функцию, выделить из данной строки S слова с данными номерами K1, K2, K3.

 

Описать функцию InvStr(S, K, N) строкового типа, возвращающую инвертированную подстроку строки S, содержащую в обратном порядке N символов строки S, начиная с ee K-го символа. Если K превосходит длину строки S, то возвращается пустая строка; если длина строки меньше K + N, то инвертируются все символы строки, начиная с ee K-го символа. Вывести значения функции InvStr для данной строки S и каждой из трех пар положительных целых чисел: (K1, N1), (K2, N2), (K3, N3).

 

Вариант 13.

 

Студент характеризуется фамилией, именем и отчеством (строка — 100 символов), курсом (число от 1 до 5) и средним баллом. Дан массив из N студентов. Упорядочить заданный массив по убыванию по среднему баллу внутри курса.

 

Задано некоторое положительное число N. Вывести все простые числа расположенные в диапазоне [2..N].

 

Описать функцию DecToHex(N) строкового типа, возвращающую строковое представление целого неотрицательного числа N в 16-ричной системе счисления. Результирующая строка состоит из символов «0»–«9», «A»–«F» и не содержит ведущих нулей (за исключением представления числа 0). Используя эту функцию, получить 16-ричные представления пяти данных чисел.

 

Описать процедуру SwapRow(A, M, N, K1, K2), осуществляющую перемену местами строк вещественной матрицы A размера M × N с номерами K1 и K2. Матрица A является входным и выходным параметром; если K1 или K2 больше M, то матрица не изменяется. Используя эту процедуру, поменять для данной матрицы A размера M × N строки с данными номерами K1 и K2.

 

Вариант 14.

Студент характеризуется фамилией, именем и отчеством (строка — 100 символов), курсом (число от 1 до 5) и средним баллом. Дан массив из N студентов. Упорядочить заданный массив по возрастанию по среднему баллу внутри курса.

 

Даны две строки, содержащие русские буквы. Вывести все согласные буквы, не входящие ни в одну из строк.

 

Описать функцию InvStr(S, K, N) строкового типа, возвращающую инвертированную подстроку строки S, содержащую в обратном порядке N символов строки S, начиная с ee K-го символа. Если K превосходит длину строки S, то возвращается пустая строка; если длина строки меньше K + N, то инвертируются все символы строки, начиная с ee K-го символа. Вывести значения функции InvStr для данной строки S и каждой из трех пар положительных целых чисел: (K1, N1), (K2, N2), (K3, N3).

 

Описать процедуру Hill(A, N), меняющую порядок элементов вещественного массива A размера N на следующий: наименьший элемент массива располагается на первом месте, наименьший из оставшихся элементов — на последнем, следующий по величине располагается на втором месте, следующий — на предпоследнем и т. д. (в результате график значений элементов будет напоминать холм). Массив A является входным и выходным параметром. С помощью этой процедуры преобразовать массивы A, B, C размера NA, NB, NC соответственно.

 

Вариант 15.

 

Студент характеризуется номером зачётной книжки (строка — 10 символов), фамилией, именем и отчеством (строка — 100 символов), курсом (число от 1 до 5) и средним баллом. Дан массив из N студентов. Упорядочить заданный массив по возрастанию по ФИО студента внутри курса.

 

Даны две строки, содержащие русские буквы. Вывести все гласные буквы, входящие в первую и вторую строки.

 

Описать процедуру SortCols(A, M, N), выполняющую сортировку по возрастанию столбцов целочисленной матрицы A размера M × N (столбцы сравниваются лексикографически: если первые элементы столбцов различны, то меньшим считается столбец, содержащий меньший первый элемент; если первые элементы столбцов равны, то анализируются их вторые элементы и т. д.). Двумерный массив A является входным и выходным параметром. Используя процедуру SortCols, отсортировать столбцы данной матрицы A размера M × N.

 

Описать процедуру RemoveCols(A, M, N, K1, K2), удаляющую из вещественной матрицы A размера M × N столбцы с номерами от K1 до K2 включительно (предполагается, что 1 < K1 ≤ K2). Если K1 > N, то матрица не изменяется; если K2 > N, то удаляются столбцы матрицы с номерами от K1 до N. Двумерный массив A и числа M, N являются входными и выходными параметрами. Используя процедуру RemoveCols, удалить из данной матрицы A размера M × N столбцы с номерами от K1 до K2 и вывести размер полученной матрицы и ее элементы.