
- •1. Линейные программы. Структура программ Паскаль.
- •1. Способы изображения алгоритмов.
- •3:Writeln(‘Среда’); 4:writeln(‘Четверг’);
- •5:Writeln(‘Пятница’);
- •6:Writeln(‘Суббота’); 7:writeln(‘Воскресенье’);
- •Билет №9 (1 вопрос)
- •Массив – однородная совокупность элементов
- •Индекс массива
- •Вычисление индекса массива Паскаля
- •Основные действия с массивами Паскаля
- •Ввод массива Паскаля
- •Вывод массива Паскаля
- •10 Билет.
- •№16 1.Передача параметров по адресу в подпрограмме. Назначение параметров
- •Процедуры и функции при работе со строками.
- •Процедура Val
Вычисление индекса массива Паскаля
Индекс массива в Паскале не обязательно задавать в явном виде. В качестве индекса массива можно использовать переменную или выражение, соответствующее индексному типу. Иначе говоря, индексы можно вычислять.
Этот механизм – весьма мощное средство программирования. Но он порождает распространенную ошибку: результат вычислений может оказаться за пределами интервала допустимых значений индекса, то есть будет произведена попытка обратиться к элементу, которого не существует. Эта типичная ошибка называется «выход за пределы массива».
Основные действия с массивами Паскаля
Как известно, определение типа данных означает ограничение области допустимых значений, внутреннее представление в ЭВМ, а также набор допустимых операций над данными этого типа. Мы определили тип данных как массив Паскаля. Какие же операции определены над этим типом данных? Единственное действие, которое можно выполнять над массивами целиком, причем только при условии, что массивы однотипны, – это присваивание. Если в программе описаны две переменные одного типа, например,
Var
a , b :array[1..10]ofreal ;
то можно переменной a присвоить значение переменной b ( a := b ). При этом каждому элементу массива a будет присвоено соответствующее значение из массива b. Все остальные действия над массивами Паскаля производятся поэлементно (это важно!).
Ввод массива Паскаля
Для того чтобы ввести значения элементов массива, необходимо последовательно изменять значение индекса, начиная с первого до последнего, и вводить соответствующий элемент. Для реализации этих действий удобно использовать цикл с заданным числом повторений, т.е. простой арифметический цикл, где параметром цикла будет выступать переменная – индекс массива Паскаля. Значения элементов могут быть введены с клавиатуры или определены с помощью оператора присваивания.
Пример фрагмента программы ввода массива Паскаля
Var
A :array [1..10] of integer ;
I :byte ; {переменная I вводится как индекс массива}
Begin
For i:=1to10do
Readln (a[i]); { ввод i- го элемента производится с клавиатуры }
Рассмотрим теперь случай, когда массив Паскаля заполняется автоматически случайными числами, для этого будем использовать функцию random( N ).
Пример фрагмента программы заполнения массива Паскаля случайными числами
Var
A: array [1..10] of integer;
I :byte ; {переменная I вводится как индекс массива}
Begin
For i :=1to10do
A [ i ]:= random (10); { i -му элементу массива присваивается «случайное» целое число в диапазоне от 0 до 10}
Вывод массива Паскаля
Вывод массива в Паскале осуществляется также поэлементно, в цикле, где параметром выступает индекс массива, принимая последовательно все значения от первого до последнего.
10 Билет.
Те́кстовый файл — компьютерный файл, содержащий текстовые данные, как правило, организованные в виде строк.
Текстовым файлам противопоставляются двоичные файлы, в которых содержатся данные, не рассчитанные на интерпретацию в качестве текста (например, файлы, хранящие закодированные звук или изображение).
В отличие от термина «текстовый формат», характеризующего содержимое данных, термин «текстовый файл» относится к файлу и характеризует его как контейнер, хранящий такие данные.
Преимущества:Универсальность — текстовый файл может быть прочитан (так или иначе) на любой системе или ОС, особенно если речь идёт об однобайтных кодировках вроде ASCII, которые не подвержены проблеме, характерной для других форматов файлов — для них не важна разница в порядке байтов или длине машинного слова на разных платформах.Устойчивость — каждое слово и символ в таком файле самодостаточны и, если случится повреждение байтов в таком файле, то обычно легче восстановить данные и продолжить обработку остального содержимого, в то время как у сжатых или двоичных файлов повреждение нескольких байтов может привести к невозможности восстановить всё содержимое файла. Многие системы управления версиями рассчитаны на текстовые файлы и с двоичными файлами могут работать только как с единым целым.Формат текстового файла крайне прост и его можно изменять текстовым редактором — программой, входящей в комплект практически любой ОС.
Недостатки:У больших несжатых текстовых файлов низкая информационная энтропия — эти файлы занимают больше места, нежели минимально необходимо. Хотя этаизбыточность и определяет повышенную устойчивость к сбоям в каналах передачи данных и при получении данных с носителей, например, с магнитной ленты.Некоторые операции с текстовыми файлами неэффективны. Например, если в файле встретится число, вычислительная система до начала операций с ним должна будет перевести его в свой внутренний формат, применив сравнительно сложную процедуру конвертации числа; чтобы перейти на 1000-ю строку, требуется считать 999 строк, идущих до неё; сложно заменить одну строку другой и т. д. Поэтому при работе с большими объёмами данных текстовые файлы применяют только как промежуточный формат, обеспечивающий интероперабельность
Форматы, основанные на текстовых файлахВ силу своей простоты текстовые файлы нередко используются для хранения служебной информации (например, логов). Текстовый формат служит основой для многих более специализированных форматов (например, .ini, SGML, HTML, XML, TeX, исходных текстов языков программирования).
В текстовом файле текст может храниться как в неформатированном, так и форматированном или размеченном виде (например, Rich Text Format, HTML), где к каждому символу может быть применено форматирование (шрифт, начертание, размер и т. п.).
Расширения имён файлов
В DOS и Windows для файлов с неформатированным текстом обычно используется расширение .txt. Тем не менее, текстовыми могут являться файлы с любым другим расширением или без оного. Например, исходные коды программ обычно хранятся в файлах с расширениями, соответствующими языку программирования, на котором написаны программы (.bas, .pas, .c).
Форматированный тест (текст с разметкой) обычно хранится в файлах с расширением, соответствующим формату или языку разметки — .rtf, .htm, .html.
Кодировки
8-битный текст
Основная статья: Кодовая страница
Исторически для кодирования текстовых файлов применялись 7-битный набор символов ASCII, а также 8-битные EBCDIC и различные расширения ASCII. В 8-битных кодовых страницах общепринято использовать в первой половине кодовой таблицы символы, соответствующие ASCII.
Преимуществом 8-битного представления текста является программная простота и независимость от проблемы порядка байтов или длины машинного слова на разных платформах. Недостаток — большое количество различных стандартов, что может приводить к несовместимости.
Unicode в текстовых файлах
Применение Unicode в текстовых файлах хотя в основном решает «проблему кодировок» и стандартизирует употребление управляющих символов, но создаёт свои проблемы. В большинстве современных систем неделимой единицей информации в потоке данных является байт (8 бит), которых для кодирования одного символа из Юникода требуется несколько. В качестве решения применяются несовместимые между собой системы UTF-8 и две версии UTF-16 (UTF-16LE и UTF-16BE с противоположным порядком байтов). Иногда в начало файла добавляют специальный символ-маркер (U+FEFF[1]), позволяющий распознать формат однозначно. UTF-8 имеет преимущество обратной совместимости с ASCII, однако программная обработка текста в UTF-8 усложняется непостоянным размером символа. Также, тексты в Юникоде отличаются ещё большей избыточностью, нежели 8-битные.
Управляющие символы
Различные операционные системы придерживаются своего представления перевода строки и конца файла. В UNIX перевод строки состоит из одного символа LF (код 10), в Mac OS — из символа CR (код 13), а в DOS и Windows перевод строки кодируется последовательностью двух символов: CR и LF.
Помимо названных, в текстовых файлах применяются такие символы, как табуляция (код 9) и перевод страницы (код 12).
11 билет.Двумерный массив - это одномерный массив, элементами которого являются одномерные массивы. Другими словами, это набор однотипных данных, имеющий общее имя, доступ к элементам которого осуществляется по двум индексам. Наглядно двумерный массив удобно представлять в виде таблицы, в которой n строк и m столбцов, а под ячейкой таблицы, стоящей в i-й строке и j-м столбце понимают некоторый элемент массива a[i][j].
Действительно, если разобраться с тем, что такое a[i] при фиксированном значении i, то увидим, что это одномерный массив, состоящий из m элементов, к которым можно обращаться по индексу: a[i][1], a[i][2], ... , a[i][m]. Схематически это вся i-я строка строка таблицы. Аналогично, если мы рассмотрим одномерный массив строк, то сможем заметить, что это так же двумерный массив, где каждый отдельный элемент - это символ типа char, а a[i] - это одномерный массив, представляющий отдельную строку исходного одномерного массива строк. Двумерный массив это по сути матрица, т.е. таблица с данными. Теперь посмотрим как это выглядит визуально, как создать двумерный массив.
12билет
В простейшем случае (в ассемблерах) подпрограмма представляет собой последовательность команд (операторов), отдельную от основной части программы и имеющую в конце специальную команду выхода из подпрограммы. Обычно подпрограмма также имеет имя, по которому её можно вызвать, хотя ряд языков программирования допускает использование и неименованных подпрограмм. В языках высокого уровня описание подпрограммы обычно состоит по меньшей мере из двух частей: заголовка и тела. Заголовок подпрограммы описывает её имя и, возможно, параметры, то есть содержит информацию, необходимую для вызова подпрограммы. Тело — набор операторов, который будет выполнен всякий раз, когда подпрограмма будет вызвана.
Вызов подпрограммы выполняется с помощью команды вызова, включающей в себя имя подпрограммы. В большинстве современных языков программирования команда вызова представляет собой просто имя вызываемой подпрограммы, за которым могут следовать фактические параметры
Билет 13Глобальные и локальные переменные подпрограмм.
В IBM PC-совместимых компьютерах память условно разделена на так называемые сегменты. Адрес каждого байта составляется из номера сегмента и смещения относительно его начала.Длина адресов сегмента и смещения - 16 бит, поэтому размер сегмента не может превышать 216 байт (64K). При вычислении адреса байта в оперативной памяти адрес сегмента сдвигается на 4 двоичных разряда влево, и к нему прибавляется смещение .Таким образом, длина адреса составляет 20 бит, и с помощью него можно адресовать память объемом 220 байт (1 мегабайт).Компилятор Паскаля формирует сегмент кода, в котором хранится программа в виде машинных команд, сегмент данных, в котором выделяется память под глобальные переменные программы, и сегмент стека, предназначенный для размещения локальных переменных во время выполнения программы (рис. 2).
|
Рис. 2 |
Глобальными называются переменные, описанные в главной программе. Переменные, которые не были инициализированы явным образом, перед началом выполнения программы обнуляются. Время жизни глобальных переменных - с начала программы и до ее завершения. Глобальные переменные доступны в любом месте программы или подпрограммы, кроме тех подпрограмм, в которых описаны локальные переменные с такими же именами.Внутри подпрограмм описываются локальные переменные. Они располагаются в сегменте стека, причем распределение памяти происходит в момент вызова подпрограммы, а ее освобождение - по завершении подпрограммы. Значения локальных переменных между двумя вызовами одной и той же подпрограммы не сохраняются и эти переменные предварительно не обнуляются. Локальные переменные могут использоваться только в подпрограмме, в которой они описаны, и всех вложенных в нее.В подавляющем большинстве случаев для обмена данными между вызывающей и вызываемой подпрограммами предпочтительнее использовать механизм параметров. Если все данные передаются подпрограммам через списки параметров, для локализации места ошибки достаточно просмотреть заголовки подпрограмм, а затем - тексты только тех из них, в которые передается интересующая нас переменная.
Билет14 Способы передачи параметров
по значению - при вызове подпрограммы выделяется память для формального параметра. Вычисляется значение фактического параметра и результат записывается в указанную память. Далее подпрограмма уже работает с этой копией (используется для входных параметров; т.к. мы работаем с копией, то сам фактический параметр изменить уже нельзя, что гарантирует защиту от побочного эффекта). По окончании работы подпрограммы память освобождается.
для результата - память для переменной выделяется, но туда ничего не записывается, по окнончанию работы подпрограммы происходит запись из нее в фактический параметр (используется для передачи выходных параметров, т.е. результата).
значение-результат - используются оба механизма (может использоваться для входных, входно-выходных и выходных параметров, но может возникнуть побочный эффект).
по ссылке (адресу) - память не выделяется, подпрограмма работает с памятью выделенной фактическому параметру (может быть использовано для входных, входно-выходных и выходных параметров)
Текст, макроподстановка – везде, где встречается обработка формального параметра происходит автоматическая замена формального параметра на текст фактического. При этом в зависимости от текста фактического параметра не всегда может произойти корректная работа компилятора. Пример: пусть xзаменяется на a+b, тогда выражение вида x:=x+1 заменяется на выражение a+b:=a+b+1, а это ошибка, т.к. не понятно значение какой переменной необходимо менять.
В Паскале реализованы не все из указанных выше способов передачи параметров. В этом языке программирования способ передачи определяется по описанию заголовка подпрограммы. Если перед именем переменной следует зарезервированное слово var, то считается, что переменная передается по ссылке, а если этого слова нет - то по значению.
Билет15Передача параметров подпрограме по значению.Формальные параметры, не помеченные меткой var называются параметрами-значениями. Каждый такой параметр представлен в заголовке подпрограммы идентификатором и является, по существу локальной (т.е. внутренней) переменной этой подпрограммы.В момент вызова подпрограммы, в параметры-значения копируются значения соответствующих им фактических параметров (которые могут быть представлены в вызывающем модуле любыми выражениями соответствующего типа).Так, если в нашем примере, A=7, B=9, то в сразу же после вызова Max(A+10,B,Mx) формальным параметрам X и Y автоматически будут присвоены входные значения, соответственно, 17 и 9, с которыми подпрограмма и начнёт свою работу.Другими словами, формальные параметры-значеия – это локальные переменные подпрограммы, которые в момент её старта инициализируются копиямизначений соответствующих им фактических параметров вызова данной подпргораммы. Дальше работа с параметрами-значениями в теле подпрограммы идёт как обычная работа с её локальными переменными.Из этого определения, в частности, следует, что никакие изменения текущих значений формального параметра-значения в теле подпрограммы не могут влиять на значения соответствующего фактического параметра. Т.е. в этом случае фактические параметры, даже если они – переменные, гарантированно защищены от изменений со стороны подпрограммы. Действительно, как изменения в копии могут повлиять на оригинал? Никак.Данный способ информационной связи фактических-формальных параметров называется передачей параметров по значению.