Все переменные, действующие в программе, должны быть перечислены в разделе описаний, причём любая переменная должна иметь имя (идентификатор). При запуске программы транслятор, разбирая блок var раздела описаний, формирует особые таблицы, в каковые заносит информацию о том, сколько памяти должно быть выделено каждой переменной, и реально выделяет соответствующее место в памяти, которое именуют сегментом (областью) данных. При наличии в программе функций и процедур транслятор для входящих в них переменных заблаговременно выделяет некий второй количество памяти, именуемый стеком.
Память, выделенная переменным при активизации раздела описаний программы, сохраняется за ними на всё время работы программы. Исходя из этого такие переменные именуют статическими. Все заявленные переменные размещаются в одной постоянной области оперативной памяти (сегменте данных).
Динамической памятью именуют оперативную память ЭВМ, предоставляемую программе при её работе, за вычетом сегмента данных (в большинстве случаев 64 кбайт), стека (в большинстве случаев 19 кбайт) и количества, занимаемого самой программой. Динамически распределяемую область оперативной памяти именуют кучей (heap).
Соответственно переменные, уничтожением и созданием которых может очевидно руководить программист, именуют динамическими. Динамические переменные, место и количество размещения которых в памяти заблаговременно неизвестно, нереально обозначить идентификаторами. Исходя из этого единственным средством доступа к динамическим переменным являются ссылки и указатели на место их текущего размещения в памяти.
Отличие между статическими и динамическими переменными первым делом содержится в обращении к ним. К статическим переменным обращаются по имени (идентификатору), к динамическим – по адресу.
Ссылочный тип данных и адресация
Динамические переменные в разделе описаний программы в явном виде не показывают, т.к. у них нет имени. Доступ к динамическим переменным осуществляется посредством переменных особого типа данных, именуемых ссылочными, а сами ссылочные переменные именуют ссылками либо указателями. Указатели смогут быть типизированными и нетипизированными.
Типизированные указатели задают адреса области памяти, в которой сохраняются либо будут храниться эти базисного, другими словами заблаговременно обрисованного стандартного либо определённого программистом типа. Нетипизированные указатели задают адреса области памяти, в которой сохраняются либо будут храниться эти любого, заблаговременно малоизвестного типа.
Минимальной единицей памяти, которая возможно выделена под переменную либо инструкцию программы, есть байт. Любой байт оперативной памяти имеет собственный порядковый номер, именуемый адресом.
Разные эти смогут занимать в памяти один либо пара байт. Участок памяти, в котором хранится одно значение данных (один элемент данных), именуют ячейкой памяти. Адресом ячейки есть адрес её самого первого байта. Нумерация адресов начинается с нуля.
Структура объявления ссылочного типа данных выглядит следующим образом:
type
= ^;
var
[, , …] : ;
[, , …] : ^ ;
Тут д.п. – динамическая переменная. Базисным именуют обычный либо заблаговременно обрисованный тип данных.
К примеру, в разделе описаний программы (фрагмент приведен ниже)её строчки обрисовывают ссылочные типы и ссылочные переменные – указатели.
const
max = 150;
type
R = ^integer ;
T = ^real ;
A_mas = ^massiv;
massiv = array [1..max] of word;
var
a, b : R;
c :^real;
d, f, g : T;
h, k : pointer;
m, n : A_mas;
Тут R, T и A_mas – имена типов ссылочных (динамических) переменных целого (R) и вещественного (T) типа и типов массива (A_mas);
a и b – типизированные указатели (ссылочные переменные) на динамические переменные типа R, т.е. целого типа;
c, d, f и g – типизированные указатели на динамические переменные вещественного типа. Указатель c задан лишь в разделе переменных, а указатели d, f и g – через имя типа T;
m и n – типизированные указатели на динамические эти типа массива. Наряду с этим направляться обратить внимание на то, что тип указателя massiv выяснен до определения базисного типа array.
Перечисленные указатели именуют типизированными, поскольку они связаны с адресами значений конкретных базисных типов.
Указатели h и k являются нетипизированными, поскольку обрисованы словом pointer, и смогут ссылаться на эти любого типа.
В объявлениях ссылочных типов по окончании знака ^ может находиться лишь простое имя типа, к примеру, real, integer, string, но не string [15] либо array[1..7] ofinteger.
При сложных имён типов применяют переопределение типов, другими словами сперва определяют одним словом тип, являющийся сложным, к примеру, массивом, а после этого данный тип применяют с знаком ^.
удаление и Создание динамических переменных
Для работы с динамическими переменными в модуле System языка Турбо Паскаль предусмотрено пара функций и процедур.
При типизированных указателей динамические переменные создают посредством процедуры new(p), которая выделяет в динамической памяти столько байтов, сколько требуется для хранения переменной заданного указателем р типа, а указателю р присваивается адрес первого байта выделенной в памяти ячейки.
При нетипизированных указателей динамические переменные создают посредством процедуры getmem(p, size), которая выделяет в динамической памяти столько байтов, сколько указано переменной size, а указателю р присваивается адрес первого байта выделенной в памяти ячейки.
Для освобождения динамически выделенной для типизированных указателей памяти возможно применять процедуру dispose(p), которая очищает память, указанную ссылкой р.
При нетипизированных указателей для очистки динамической памяти предусмотрена процедура freemem(p, size), которая освобождает size байтов, начиная с адреса р.
По окончании очищения (освобождения) указатели сохраняют собственные значения, но наряду с этим показывают уже на несуществующие динамические переменные. Исходя из этого рекомендуется всем высвободившимся указателям присвоить значение nil.
При выделении динамической памяти нужными являются функции memavail и maxavail, первая из которых возвращает неспециализированный размер свободной динамической памяти в байтах, а вторая – размер громаднейшего постоянного участка свободной памяти.
К примеру,
var
p: ^real;
. . . . .
if maxavailsizeof (real) then new(p);
. . . . .
Динамические массивы
Разглядим работу с динамическими массивами на примере программы перемножения прямоугольных матриц, размер которых заблаговременно не известен, но возможно выяснен динамически.
Размеры перемножаемых матриц должны быть согласованы, то есть количество столбцов первого сомножителя должно равняться количеству строчков второго.
Так как размер переменных заблаговременно не известен, то процедуры new и dispose применить запрещено.
Для данной задачи подходят стандартные процедуры getmem и freemem.
Процедура getmem (vard: pointer; m: word) создаёт динамическую переменную указанного размера и присваивает значение адреса ссылочной переменной d. В случае, если в памяти ЭВМ не достаточно места для размещения переменной, то появляется сообщение об неточности.
Процедура freemem (vard: pointer; m: word) как и процедура dispose освобождает память, отведённую под динамическую переменную, совершает эту память дешёвой для другого применения. Совершенно верно кроме этого затем указателю d непременно необходимо присвоить значение nil.
Пример 1.
program Mult_Matr;
uses Crt;
type
Index_Of_Row= array [1..100] of ^VectColumn;
VectColumn= array [1..100] of integer;{тут Index_Of_Row – имятипассылочныхпеременных, имеющихбазовыйтипдинамическогомассива, VectColumn – имятипассылочнойпеременнойтипа массивцелыхчисел}
matrix= record {matrix – переменная типа запись}
N_rows, N_column: word; {Номер строчка (последовательности), номер столбца}
index: ^Index_Of_Row; {index – ссылка (указатель) на вектор-столбец VectColumn, протяженность которого равна числу строчков матрицы Index_Of_Row. Любой элемент столбца VectColumn сам есть указателем на вектор-строчок}
end;
var
A, B, C:matrix; {А и В – исходные матрицы, С – матрица – итог перемножения матриц А и В}
IndexSize, ElemSize, I, K:word; (* Размеры элемента и индекса матрицы, I, K – счётчики. Ссылка на элемент матрицы А имеет форму: A.index^[I]^[K] *)
M, N:longint; (* Размеры матрицы *)
procedureCreateMatrix( var A: matrix;r c: word ); {Процедурасозданияматрицы}
var
j, k: word;
begin
with A do
Begin
N_rows:= r; N_column:= c;
j:= N_rows * SizeOf (Pointer);
inc ( IndexSize, j );
GetMem (index^[j], k);
for k := 1 to N_column do
index^[j]^[k] := -5 + random (11);
end;
end;
Begin
………………..
End.
Порядок исполнения работы
1. Создайте метод ответа задачи в соответствии со своим вариантом.
2. Откройте текстовый процессор TurboPascal.
3. Разработайте программу ответа задачи по созданному ранее методу. В программе предусмотреть вывод справочной информации (информация об авторе, назначение и наименование программы), возможность многократных вычислений.
4. Отладьте программу.
5. Сохраните результаты работы программы.
Содержание отчета
Отчет оформляется лично и содержит:
— титульный лист;
— наименование, цель и содержание работы;
— текст и алгоритм программы
— изображения экранов монитора с результатами работы программы;
— выводы по итогам работы.
Варианты заданий
I. Создайте метод и программувыполняющую действия над одномерными массивами в соответствии с заданным вариантом. В программе предусмотреть вывод справочной информации (назначение программы, вид делаемого действия, создатель), возможность повторного исполнения программы. Размер массива – произвольный.
1. Массив А вводится с клавиатуры. Отыскать сумму его элементов.
2. Отыскать произведение элементов, кратных 3 в массиве, заданном датчиком случайных чисел на промежутке [-28, 27].
3. Массив А вводится с клавиатуры. Отыскать среднее арифметическое его элементов с нечетными номерами.
4. Массив А вводится с клавиатуры. Отыскать сумму его элементов с четными номерами, произведение отрицательных элементов, количество нечетных элементов.
5. Отыскать громаднейший его номер и элемент в последовательности, элементы которой вводятся с клавиатуры.
6. Отыскать средне арифметическое элементов последовательности, превосходящих некое число С. Массив задан датчиком случайных чисел на промежутке [-44, 35]. Значение С вводится с экрана.
7. Массив А вводится с клавиатуры. Вывести лишь нечетные элементы.
8. Упорядочить данную последовательность по убыванию. Элементы вводятся с клавиатуры.
9. Упорядочить данную последовательность по убыванию. Массив задан датчиком случайных чисел на промежутке [-54, 33].
10. Массив А вводится с клавиатуры. Организовать новый массив В, складывающийся из хороших элементов массива А.
11. Массив задан датчиком случайных чисел на промежутке [-31, 45]. Организовать новый массив В, складывающийся из нечетных элементов массива А.
12. Массив А вводится с клавиатуры. Организовать новый массив В, складывающийся из хороших элементов массива А и отыскать в нем громаднейший элемент.
13. Массив задан датчиком случайных чисел на промежутке [-37, 66]. Отыскать мельчайший нечетный элемент.
14. Организовать и вывести на экран последовательность из n элементов, заданных датчиком случайных чисел на промежутке [-23, 34].
15. Отыскать произведение элементов одномерного массива, складывающегося из n элементов. Элементывводятсясклавиатуры.
16. Отыскать сумму элементов одномерного массива. Элементы вводятся с клавиатуры.
17. Задан массив А, складывающийся из n чисел. Отыскать среднее арифметическое его элементов. Элементывводятсясклавиатуры.
18. Отыскать сумму элементов массива с четными номерами, содержащего N элементов. Элементывводятсясклавиатуры.
19. Организовать и вывести на экран массив, элементы которого заданы датчиком случайных чисел на промежутке [-19, 26]. Отыскать произведение элементов с нечетными номерами.
20. Организовать и вывести на экран массив, элементы которого заданы датчиком случайных чисел на промежутке [-56, 47]. Отыскать произведение элементов с четными номерами, каковые превосходят некое число t.
21. Отыскать мельчайший элемент одномерного массива, складывающегося из n элементов. Элементывводятсясклавиатуры.
22. Отыскать номер мельчайшего элемента в массиве, заданного датчиком случайных чисел на промежутке [-20, 25].
23. В заданном одномерном массиве, складывающемся из n целых чисел, подсчитать количество нулей.
24. В заданном одномерном массиве, складывающемся из n целых чисел, подсчитать количество четных элементов.
25. Отыщите среднее арифметическое элементов массива, складывающегося из 10 чисел, каковые превышают по величине число С. Элементы вводятся с клавиатуры.
26. Отыскать произведение элементов целочисленного одномерного массива с четными номерами, складывающегося из n элементов. Элементывводятсясклавиатуры.
27. В заданном одномерном массиве поменять местами соседние элементы.
28. Массив А вводится с клавиатуры. Организовать новый массив В, складывающийся из четных элементов массива А. Элементы вводятся с клавиатуры.
Создайте метод и программу,делающую действия над двумерными массивами в соответствии с заданным вариантом. В программе предусмотреть вывод справочной информации (назначение программы, вид делаемого действия, создатель), возможность повторного исполнения программы. Вывод-вывод матриц организовать с применением процедур либо функций. Размерность матриц заблаговременно не известна, определяется пользователем на протяжении работы программы.
1. Поэлементное умножение двух произвольных столбцов матрицы с записью результатов умножения в столбец указанный пользователем.
2. Вычисление суммы, среднего и произведения арифметического всех элементов матрицы.
3. Упорядочить диагонали 2-мерного массива.
4. Отыскать и поменять местами большой и минимальный элементы матрицы.
5. Отыскать и поменять местами большой и минимальный элементы произвольной строки матрицы.
6. Отыскать и поменять местами большой и минимальный элементы матрицы.
7. Отыскать и поменять местами большой и минимальный элементы произвольной строки матрицы.
8. Отыскать и поменять местами большой и минимальный элементы произвольного столбца матрицы.
9. Поменять все элементы матрицы на заданную пользователем величину.
10. Суммирование двумерных матриц.
11. Умножение двумерных матриц.
12. Транспонирование матрицы.
13. Нахождение большого и минимального элемента матрицы.
14. Нахождение большого и минимального элемента произвольной строки матрицы.
15. Нахождение большого и минимального элемента произвольного столбца матрицы.
16. Нахождение большого и минимального элемента матрицы находящегося на основной диагонали матрица. Размерность матрицы 6х6.
17. Поэлементное умножение двух произвольных срок матрицы с записью результатов умножения в строчок указанную пользователем.
18. Поэлементное умножение двух произвольных столбцов матрицы с записью результатов умножения в столбец указанный пользователем.
19. Вычисление суммы, среднего и произведения арифметического всех элементов матрицы.
20. Сортировка произвольной строки матрицы по возрастанию.
21. Сортировка произвольной строки матрицы по убыванию.
22. Сортировка произвольного столбца матрицы по возрастанию.
23. Сортировка произвольного столбца матрицы по убыванию.
24. Замена двух произвольных строчков матрицы.
25. Замена двух произвольных столбцов матрицы.
26. Возвести в квадрат все элементы 2-мерного массива.
27. Подсчёт кол-во строчков в 2-мерном массиве, содержащих элемент не превышающий заданное значение.
28. Перемешать 2-мерный массив.
29. Нахождение большого и минимального элемента матрицы находящегося на основной диагонали матрица. Размерность матрицы 6х6.
30. Перемешать строки 2-мерного массива.
31. Поэлементное умножение двух произвольных срок матрицы с записью результатов умножения в строчок указанную пользователем.
32. Перемешать столбцы 2-мерного массива.
6 Контрольные вопросы
1. Укажите изюминке статических переменных.
2. Укажите изюминке динамических переменных.
3. Укажите различия между статическими и динамическими переменными.
4. Дайте определение динамической памяти. Каков количество динамической памяти ЭВМ?
5. Сообщите, что такое ячейка памяти и как к ней выполняется адресация.
6. Укажите правила объявления ссылочного типа данных.
7. Поясните удаления и механизм создания динамических переменных.
8. Поясните, что такое динамический массив и в чем его отличие от простых массивов.
9. Разработайте фрагмент программы для инициализации одномерного динамического массива.
10. Укажите изюминке создания многомерных динамических массивов.
Рекомендуемая литература
1. Степанов А.Н. Информатика. Базисный курс. Учебник для Институтов. — Издательство Питер, 2007. – 768с.
2. Острейковский, В.А. Информатика : учебник для институтов / В.А.Острейковский .— 3-е изд.,стер. — М. : Высш.шк., 2005 .— 511с. : ил. — Библиогр.в конце кн. — ISBN 5-06-003533-6 /в пер./ : 128.74.
ЛАБОРАТОРНАЯ РАБОТА 15
Строковый тип данных. Работа со строчками в TurboPascal (4 часа)
Цель работы
Ознакомление с понятиями динамическая память, динамическая переменная, указатель. Получение практических отладки программ и навыков написания в среде TurboPascal для работы с динамическими массивами.
2 Краткая теоретическая справка
Строковый тип данных
Для обработки текста в Турбо Паскале был введён строковый тип данных string (строчок). Строковый тип обобщает понятие символьных массивов, разрешая динамически изменять длину строчка. Различают строковые переменные и строковые константы.
Строковый тип данных подобен одномерному массиву знаков, задаваемому в виде array [0 .. N] ofchar.
Строковый тип разрешённых может быть заявлен в разделах констант, типов и переменных:
const
Strcon = ‘ Strcon – это строковая константа’;
type
S1 = string [N];
S2 = string;
var
S3, S4: string [M];
S5: string;
S6, S7: S1;
S8: S2;
Строковую константу объявляют в разделе констант. Строковая константа – последовательность любых знаков, не считая знака возврата каретки, заключённая в апострофы. В случае, если в строковой константе видится апостроф, то он удваивается.
Строковую константу возможно записать как последовательность ASCII- кодов знаков, перед каждым из которых обязан находиться знак сеточки #. К примеру, строки #139#165#170#230#168#239 и ‘Лекция’ эквиваленты.
Допускается в одной строковой константе совмещать оба вида записи, меняя их любым образом. Это разрешает применять в строчке все виды знаков, включая управляющие. К примеру, допустима запись
#7’Допущена неточность !’#13’Надавите клавишу ввода Enter’,
что свидетельствует подачу звукового сигнала (#7) для привлечения внимания оператора, вывод текста допущена неточность!, переход на новую строчок (#13) и вывод текста на ней Надавите клавишу ввода Enter.
Выражения в квадратных скобках по окончании слова stringуказывают большую длину строчка и смогут быть любыми константами порядкового типа, принимающими заданные значения в промежутке от 1 до 255 включительно, т.е. N ? 255 и M ? 255. В случае, если значение константы не указано, то протяженность строчка принимается максимальной и равной 255 байтам (элементам).
Операции над строчками
Значение строковой переменной возможно присвоено оператором присваивания или прочтено из некоего файла, к примеру, текстового, соответствующей процедурой присваивания либо чтения:
S3 := ‘Тульский национальный университет’
S5 := S3;
readln(F, S5) ; {Чтение из файла F}
При вводе строковых переменных вводимые знаки размещаются В первую очередь строкового массива. В случае, если количество введённых знаков меньше заданной длины строчка, то оставшиеся байты заполняются пробелами. В случае, если заданная протяженность строчка меньше, чем протяженность присваиваемого значения, то лишние знаки отбрасываются.
Строчок в Паскале трактуется в один момент как простое (скалярное) значение, так и как массив знаков. Исходя из этого кое-какие операции смогут выполняться над строчком полностью (к примеру, вывод и ввод), а кое-какие над каждым знаком по отдельности.
К конкретному знаку строчка возможно обратиться как к элементу массива, указав в квадратных скобках по окончании имени строчка порядковый номер элемента строчка.
В отличие от массивов переменные строкового типа смогут принимать участие как операнды в руководствах ввода-вывода, к примеру, в виде readln (S3) либо в виде write (S3).
Самый первый байт в строчке имеет индекс 0 и содержит текущую длину строчка. Исходя из этого по операторуwrite (S3 [0]) на экран монитора будет выведен знак, обрисовывающий длину строчка S3.Количество знаков в строчке при её вводе определяется машинально, наряду с этим кроме этого машинально заполняется нулевой байт.
К строчкам возможно использовать операцию объединения (сцепления) строчков, именуемую конкатенацией и обозначаемую знаком +. К примеру, по окончании исполнения оператора
S6 := ‘a’ + ‘b’ + ‘c’;
строчок S6 будет содержать текст abc, а по окончании исполнения оператора
S6 := S6 + ‘d’ + ‘e’ + ‘f’;
– текст abcdef.
Все остальные действия над строчками реализуются посредством четырёх стандартных строковых функций Concat, Length, Copy, Posи четырёх строковых процедур Delete, Insert, Strи Val,находящихся в модуле System.
Строковая функция Concat(St1, St2 [, St3, .., StN]) – конкатенация – имеет тип stringи возвращает строчок, взятую в следствии слияния (сцепления) строчков-параметров St1, St2, .., StN. К примеру, функция
Concat(‘abc’, ‘def’);
эквивалентна действию оператора S6 := S6 + ‘d’ + ‘e’ + ‘f’;
Строковая функция Length(St) – протяженность – имеет тип byteи возвращает текущую длину строчка St. Функцию Lengthудобнее применять вместо выражения St [0], т.к. оно не даёт никаких преимуществ, а лишь затрудняет чтение текста программы.
Строковая функция Copy(St,m, n) – копирование – имеет тип stringи возвращает подстроку длиной n знаков из строчка St, начиная с знака номера m. Параметры m и n должны имеет тип integer, параметр St – тип string.
Строковая функция Pos(SubSt, St) – позиция – имеет тип byteи предназначена для поиска в строчке St первого участка текста, совпадающего с текстом строчка (подстроки) SubSt. В случае, если таковой участок отыскан, то функция возьмёт номер позиции, с которой начинается совпадение текстов. В случае, если совпадения нет, то функция возьмёт значение ноль.
Строковая процедура Delete(St,m, n) – удаление – удаляет n знаков из строчка St, начиная с позиции m. Параметры m и n должны имеет тип integerили byte, параметр St – тип string.
Строковая процедураInsert(SubS, S,n) – вставка – вставляет подстроку SubS в строчок S, начиная с позиции n. Параметр n должен иметь типinteger либо byte.
Строковая процедураStr (X [: width [: decimals]], St) преобразует число Х любого вещественного либо целого типов в строчок знаков St. Такое же преобразование делает процедура Writeln перед выводом. В случае, если количество полей width под строковое представление значения Х не задано, то целое число будет занимать фактическое количество позиций, а вещественное будет записано в показательной форме в виде порядка и мантиссы числа и займёт 22 позиции (16 – мантисса, 8 – порядок). В случае, если количество полей width под строковое представление значения Х задано, то целое число будет занимать width позиций. В случае, если Х – вещественное число, то оно будет представлено в десятичной форме и кроме этого заниматьwidth позиций, включая decimals позиций по окончании десятичной точки.
Строковая процедураVal(St, x, y) преобразует строковое изображение числа St в число x целого либо вещественного типа. Параметр y содержит показатель неточности преобразования. В случае, если преобразование прошло удачно, то в x помещается итог преобразования, а переменная y будет равна 0. В другом случае параметр y будет содержать номер позиции строчка St, где найден ошибочный знак, а содержимое x не изменится.
В Паскале различают ведущие и ведомые пробелы. Пробел в начале строчка перед знаком именуют ведущим, а в конце строчка по окончании конечного знака – ведомым.
При обращении к процедуре Valведомые пробелы недопустимы. Исходя из этого, к примеру, обращение
Val(‘ 125’, x, y);
будет успешным, x станет равным 125, y – 0, а обращение
Val(‘125 ‘, x, y);
будет ошибочным: значение x станет равным 125, т.е. не изменится, а y станет равным 4, т.е. укажет на неточность в четвёртой позиции.
В случае, если имеет место обращение
Val(‘3,1416’, x, y);
то x станет равным3,1416, т.е. не изменится, а y станет равным 2, т.к. имеет место неточность: вместо десятичной точки поставлена запятая. В случае, если же написано
Val(‘3.1416’, x, y);
то х будет равен 3.1416, а y станет равным нулю.
Помимо этого, к строчкам возможно использовать функцию Upcase(Ch) типа char, которая преобразует латинскую букву Chв заглавную. В случае, если значение знака Ch не есть латинской буквой, то функция Upcaseего не поменяет.
К строчкам кроме этого применимы операции отношения =, , =. Сравнение строчков происходит посимвольно слева направо. Наряду с этим один знак считается больше другого, в случае, если его код в таблице ASCII больше.
Когда в одной из строчков в первый раз обнаружится больший знак, то эту строчок вычисляют большей и на этом их сравнение заканчивают.
Строчки считаются равными, в случае, если имеют однообразную длину и у них совпадают соответствующие знаки.
В случае, если протяженность одной строки больше, чем у второй, то строчок большей длины считается большей.
К примеру, приведённые потом соотношения являются верными:
‘A’ ‘1’, ‘abcd’ ‘abc’, ‘abc ‘ = ‘abc’, ‘c’ ‘bbb’.
Каждая большая буква в любой момент меньше соответствующей ей строчной, т.к. в кодовой таблице ASCII сперва находятся все большие буквы, а после этого строчные, т.е. большие буквы имеют меньшие номера.
Порядок исполнения работы
1. Создайте метод ответа задачи в соответствии со своим вариантом.
2. Откройте текстовый процессор TurboPascal.
3. Разработайте программу ответа задачи по созданному ранее методу. В программе предусмотреть вывод справочной информации (информация об авторе, назначение и наименование программы), возможность многократных вычислений.
4. Отладьте программу.
5. Сохраните результаты работы программы.
Содержание отчета
Отчет оформляется лично и содержит:
— титульный лист;
— наименование, цель и содержание работы;
— текст и алгоритм программы
— изображения экранов монитора с результатами работы программы;
— выводы по итогам работы.
Варианты заданий
Создайте метод и программу,делающую действия над строковыми переменными в соответствии с заданным вариантом. В программе предусмотреть вывод справочной информации (назначение программы, вид делаемого действия, создатель), возможность повторного исполнения программы. Содержимое строчка определяется пользователем при работе программы.
1. Проверка корректности вводимых с клавиатуры целых чисел.
2. Поиск в текстовой строчке заданного пользователем фрагмента.
3. Разворот строчка.
4. Автозамена в текстовой строчке. Искомый и замещающий текст определяется пользователем.
5. Определение количества задаваемых пользователем знаков в текстовой строчке.
6. Сортировка знаков по возрастанию.
7. Замена строчных букв прописными в начале предложения в текстовой строчке.
8. Проверка корректности вводимых с клавиатуры вещественных чисел.
9. Формирование текста из вводимых пользователем слов (предложений).
10. Сортировка знаков в строчке по убыванию.
11. Замена слов в тексте. Номера перставляемых слов определяет пользователь в ходе работы программы.
12. Организовать строчок, содержащую последовательность из знаков. Задаётся их количество и символ.
13. Организовать строчок, содержащую последовательность из знаков. Задаётся их количество и символ.
14. Преобразовать число в римское число.
15. Замена первого и окончательного слов в предложениях местами.
16. Во введённой строке засунуть по одному пробелу между печатными знаками а пробелы между словами сделать складывающимися из 2-х пробелов (пример “Привет мир” — “П р и в е т м и р”)
17. Преобразовать строчок в морзянку (азбука морзе берётся из интернета).
18. Замена латинских букв кириллицей при вводе текста в соответствии с их размещением на клавиатуре ЭВМ.
19. Нахождение самого долгого и самого маленького слов в предложении, вывод их на экран.
20. Нахождение долгого и маленького слов в предложении, вывод на экран порядковых номеров данных слов.
21. Организовать строчок, содержащую сперва все знаки на нечётных позициях, а после этого на чётных.
22. Определение количества слов в предложениях, вводимых пользователем с клавиатуры.
23. Определение количества знаков в произвольно слове текстовой строки.
24. количества количества символов и Определение слов в словах произвольной текстовой строки.
25. Перемешать знаки в строчке.
26. Вывод всех слов текстовой строки номера, которых являются четными.
27. Вывод всех слов текстовой строки номера, которых являются нечетными.
28. Определение есть ли слово перевертышем, к примеру «казак».
29. Сравнение двух строковых переменных, определяемых пользователем.
30. Копирование фрагмента строчка с записью в другую строчок.
6 Контрольные вопросы
1. Поясните, что такое строковая переменная.
2. Допустимо ли представить строковую переменную в виде массива?
3. Укажите как нумеруются элементы строковой переменной.
4. Какое предельное количество элементов может входить в строковую переменную?
5. Укажите правила инициализации строковых переменных с применением раздела определения типов.
6. Укажите правила инициализации строковых переменных с применением раздела описания переменных.
7. Перечислите вероятные варианты инициализации строковых переменных.
8. Укажите варианты определения длины строковой переменной (кол-ва знаков в переменной).
9. Перечислите главные операции над строчками.
10. Укажите синтаксис и назначение функции Copy.
11. Укажите синтаксис и назначение процедуры Insert.
12. Укажите синтаксис и назначение функции Pos.
13. Укажите синтаксис и назначение процедуры Val.
14. Сообщите итог исполнения операторов S:=’компь’+’ютер’; write(S).
Рекомендуемая литература
1. Степанов А.Н. Информатика. Базисный курс. Учебник для Институтов. — Издательство Питер, 2007. – 768с.
2. Острейковский, В.А. Информатика : учебник для институтов / В.А.Острейковский .— 3-е изд.,стер. — М. : Высш.шк., 2005 .— 511с. : ил. — Библиогр.в конце кн. — ISBN 5-06-003533-6 /в пер./ : 128.74.
ЛАБОРАТОРНАЯ РАБОТА 16
Работа с внешними файлами в Turbo Pascal: запись и чтение (4 часа)
Цель работы
Получение практических отладки программ и навыков написания в среде TurboPascal для работы с файлами.
2 Краткая теоретическая справка
Понятие файла
Файлили файловый тип данных представляет собой именованную последовательность однотипных компонентов, расположенных на внешнем носителе либо HDD (SSD) компьютера.
В Турбо Паскале различают три категории файлов, работа с которыми отличается друг от друга: 1) текстовые файлы, 2) файлы и типизированные 3) файлы без типа.
Текстовые файлы в Турбо Паскале являются совокупностью строчков различной длины. В конце каждой строки ставится особый показатель EOLN (endofline), а в конце файла – EOF (endoffile). К элементам файла (знакам) вероятен лишь последовательный доступ.
Типизированные файлы отличаются от текстовых тем, что протяженность любого компонента файла строго постоянна. Исходя из этого имеется возможность организации прямого доступа к каждому компоненту, указав его порядковый номер. Первый компонент файла имеет номер 0.
Нетипизированные файлы характеризуются тем, что для них не указан тип компонентов. Это разрешает совмещать такие файлы с любыми вторыми файлами и организовать скоростной обмен данными между внешним оперативной памятью и носителем файла.
Описание категории файлов возможно выполнить как с применением разделов объявления типов и переменных, так и лишь раздела объявления переменных. К примеру,
1-й вариант:
type
= fileof; {типизированные файлы}
= text; {текстовый файл (типизированный файл текстового типа)}
= file; ? нетипизированный файл.
var
[,, …, ]: ; либо
2-й вариант:
var
:text; {текстовый файл либо файл текстового типа}
:fileof; {типизированные файлы}
:file; {нетипизированный файл, либо char}
Тут – любой тип данных Турбо Паскаля, не считая файловых.