Локальные и глобальные идентификаторы
Использование процедур и функций в Паскале тесно связано с некоторыми особенностями работы с идентификаторами (именами) в программе. В часности, не все имена всегда доступны для использования. Доступ к идентификатору в конкретный момент времени определяется тем, в каком блоке он описан.
Имена, описанные в заголовке или разделе описаний процедуры или функции называютлокальнымидля этого блока. Имена, описанные в блоке, соответствующем всей программе, называют глобальными. Следует помнить, что формальные параметры прцедур и функций всегда являются локальными переменными для соответствующих блоков.
Основные правила работы с глобальными и локальными именами можно сформулировать так:
· Локальные имена доступны (считаются известными, "видимыми") только внутри того блока, где они описаны. Сам этот блок, и все другие, вложенные в него, называютобластью видимостидля этих локальных имен.
· Имена, описанные в одном блоке, могут совпадать с именами из других, как содержащих данный блок, так и вложенных в него. Это объясняется тем, что переменные, описанные в разных блоках (даже если они имеют одинаковые имена), хранятся в разных областях оперативной памяти.
Глобальные имена хранятся в области памяти, называемой сегментом данных(статическим сегментом) программы. Они создаются на этапе компиляции и действительны на все время работы программы.
В отличие от них, локальные переменные хранятся в специальной области памяти, которая называется стек. Они являются временными, так как создаются в момент входа в подпрограмму и уничтожаются при выходе из нее.
Имя, описанное в блоке, "закрывает" совпадающие с ним имена из блоков, содержащие данный. Это означает, что если в двух блоках, один из которых содержится внутри другого, есть переменные с одинаковыми именами, то после входа во вложенный блок работа будет идти с локальной для данного блока переменной. Пременная с тем же имнем, описанная в объемлющем блоке, становится временно недоступной и это продолжается до момента выхода из вложенного блока.
Рекомендуется все имена, которые имеют в подпрограммах чисто внутреннее, вспомогательное назначение, делать локальными. Это предохраняет от изменений глобальные объекты с такими же именами.
Задания на лабораторную работу:
Вариант на лабораторную работу определяется следующим образом:
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 и вывести размер полученной матрицы и ее элементы.