Logo GenDocs.ru

Поиск по сайту:  


Загрузка...

Ответы к госэкзамену по программированию (Pascal) для ССУЗов - файл 1.doc


Ответы к госэкзамену по программированию (Pascal) для ССУЗов
скачать (143.5 kb.)

Доступные файлы (1):

1.doc144kb.30.11.2011 13:12скачать

содержание
Загрузка...

1.doc

Реклама MarketGid:
Загрузка...



Программирование
  1. Алгоритм, понятие, свойства, форма записи, виды. Понятие языка программирования. Классификация языков программирования


Алгоритм – это точное предписание о выполнении некоторого процесса обработки данных, который через разумное конечное число шагов приводит к решению поставленной задачи данного типа для любых вариантов исходных данных.

Данные – это информация представленная в формализованном виде (числа, таблицы, рисунки).

Свойства алгоритма:

1. Детерминированность (определенность). Данное свойство означает, что метод решения задачи должен быть дан в алгоритме способом, не допускающим различное толкование человеком и ЭВМ.

2. Массовость – означает, что алгоритм должен быть пригоден для любых вариантов исходных данных.

3. Результативность – означает, что в итоге выполнения алгоритма должен быть получен результат за конечное число шагов.

Каждый алгоритм имеет вход и выход.

Вход алгоритма – это совокупность его исходных данных.

Множество допустимых значений переменной на входе алгоритма – область определения алгоритма.

Выход алгоритма – совокупность результатов его работы.

Формы записи алгоритмов:

- Словесная (записи на естественном языке)

- Графическая (изображение в виде блок-схемы)

- С использованием специального алгоритмического языка;

- Табличная (в форме таблиц)

- Программная (тексты на языках программирования)

Виды алгоритмов.

1. Алгоритмы линейной структуры состоят из последовательности каких-либо действий, т.е. ввод значений, вычисление с введенными данными и вывод результата.

2. Алгоритмы разветвляющей структуры. Существуют задачи, в которых требуется организовать выбор выполнения последовательности действий в зависимости от каких-либо условий. Если на ветвях одного ветвления содержатся другие ветвления, то такой алгоритм имеет структуру вложенных ветвлений.

Язык программирования – фиксированная система обозначений и правил для достижения определенных целей.

Языки делятся в зависимости от близости или удаленности от языка машинных команд:

- языки высокого уровня – инструкции для ЭВМ записываюся простыми командами на аппаратном уровне, который отображает структуру ЭВМ, продуцируют быстрые и компактные продукты, но сложные для изучения и работы (отчасти C/C++, ассемблер).. Такие языки еще называют Машино – ориентированными.

- языки низкого уровня – инструкции для ЭВМ записываются в наглядно, легко воспринимаемом виде, имеют понятный синтаксис, близкий к человеческому общению, и удобные в работе, но создают довольно громоздкие и медленные программы (таковы, к примеру, семейства языков Basic, Java, Delphi, отчасти языки C/C++)

Проблемно-ориентированные языки – предназначены для решения узкого класса задач.

Процедурно-ориентированные языки – используют специалисты, знающие математич. модель решения задач и методы решения.

  1. ^

    Арифметические операции, функции, выражения. Арифметический оператор присваивания "TURBO- PASCAL 7.0. Типы данных.


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

^ Арифметические операции

Операция Действие Тип операндов Тип результата

Бинарные

+ Сложение Целый, вещественный Целый, вещественный

- Вычитание Целый, вещественный Целый, вещественный

* Умножение Целый, вещественный Целый, вещественный

/ Деление Целый, вещественный Вещественный

DIV Целочисленное деление Целый Целый

MOD Остаток от деления Целый Целый

Унарные

+ Сохранение знака Целый, вещественный Целый, вещественный

- Отрицание знака Целый, вещественный Целый, вещественный

^ Арифметические функции

Обращение Тип аргумента Тип результата Функция

Abs(x) Целый, вещественный Целый, вещественный Модуль аргумента

Frac(x) Целый, вещественный Вещественный Дробная часть х

Int(x) Целый, вещественный Вещественный Целая часть х

Random Вещ-ый Псевдослуч. число [0,1]

Random(x) Целый Целый Псевдослуч. число [0,х]

Round(x) Вещественный Целый Окр-ие до ближ-его целого

Sqr(x) Целый, вещественный Вещественный Квадрат х

Sqrt(x) Целый, вещественный Вещественный Корень квадр. из х

Запоминание переменной своего значения или, иначе говоря, запись в ячейки памяти данных, выполняется с помощью оператора присваивания, например A:=2. В Паскале знак присваивания представлен комбинацией двух символов: ":" и "=". Знак присваивания не следует путать с операцией сравнения "=".

В случае ошибочной записи оператора присваивания, например в выражении i:=i+1 (переменная i увеличивает свое значение на 1) он будет выглядеть как сравнение i=i+1, заведомо ложное. Выполнение оператора присваивания сводится к вычислению значения выражения, стоящего от символа присваивания справа, с последующей записью полученного результата в переменную, стоящей от символа слева: X:=2*Pi*R; A:=SQRT(A*A+B*B).

Не допускается записывать в целочисленную переменную (типа integer) вещественное значение (типа Real).

Типы данных

1.указательные;

2.структурные (записи; файлы; массивы; строки; множества;)

3.простые:вещественные; порядковые(целые; логические; символьные; перечисляемые; интервальные.)

Идентификатор

Длина, байт

Диапазон значений

^ ЦЕЛЫЕ ТИПЫ

INTEGER

2

-3276 … 32767

BYTE

1

0 … 255

WORD

2

0 … 65535

^ ВЕЩЕСТВЕННЫЕ ТИПЫ

REAL

6

2,9·10-39 … 1,7·1038

SINGLE

4

1,5·10-45 … 3,4·1038

^ ЛОГИЧЕСКИЙ ТИП

BOOTLEAN

1

True, False

СИМВОЛЬНЫЙ ТИП

CHAR

1

Все символы кода ASC


  1. ^

    Условный оператор, оператор выбора и безусловного перехода в TURBO- PASCAL 7.0


Условный оператор позволяет проверить некоторое условие и в зависимости от результатов проверки выполнить то или иное действие. Таким образом, условный оператор - это средство ветвления вычислительного процесса.

Структура условного оператора имеет следующий вид:

IF <условие> THEN <оператор1> ELSE <оператор2>;

где IF, THEN, ELSE - зарезервированные слова (если, то, иначе); <условие> - произвольное выражение логического типа; <оператор1>, <оператор2> - любые операторы языка Турбо Паскаль.

Условный оператор работает по следующему алгоритму. Вначале вычисляется условное выражение <условие>. Если результат есть TRUE (истина), то выполняется <оператор1>, а <оператор2> пропускается; если результат есть FALSE (ложь), наоборот, <оператор1> пропускается, а выполняется <оператор2>.

Например:

var

х, у, max: Integer;

begin

.......

if x > max then

у := max else

y := x;

При выполнении этого фрагмента переменная Y получит значение переменной X, если только это значение не превышает МАХ, в противном случае Y станет равно МАХ.

Часть ELSE <оператор2> условного оператора может быть опущена. Тогда при значении TRUE условного выражения выполняется <оператор1>, в противном случае этот оператор пропускается:
var

х, у, max: Integer; 

begin

.......

if x > max then

max := x; 

Y := x;

В этом примере переменная Y всегда будет иметь значение переменной X, а в МАХ запоминается максимальное значение X.

Поскольку любой из операторов <оператор1> и <оператор2> может быть любого типа, в том числе и условным, а в то же время не каждый из «вложенных» условных операторов может иметь часть ELSE <оператор2>, то возникает неоднозначность трактовки условий. Эта неоднозначность в Турбо Паскале решается следующим образом: любая встретившаяся часть ELSE соответствует ближайшей к ней «сверху» части THEN условного оператора.
Оператор выбора

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

В общем случае оператор имеет вид:

CASE <селектор> OF

<список меток 1>: <оператор 1>;

.

<список меток N>: <оператор N>;

END;

где CASE – выбор OF – из END – конец

Селектор – выражение любого скалярного типа, кроме вещественного;

Оператор – любой оператор языка, в том числе и составной;

Список меток – список разделенных запятыми значений выражения селектора

или одного его значения.

Эти константы должны иметь тот же тип, что и селектор, и называются метками варианта.

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

В наше время широко используют структурное программирование, при котором операторы программы выполняются последовательно друг за другом сверху вниз. Однако, бывает случаи, когда есть смысл изменить порядок, например, выход из программы при делении на 0 с выводом сообщения об этом. Для этого существует оператор безусловного перехода GO TO.

GO to_метка;

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

Правила использования:

1)все метки д.б. описаны в разделе меток:

label метка;

label метка1 метка2, …;

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

3)Рекомендуют применять операторы перехода только вниз (вперед) по тексту

4)Рекомендуемое расстояние между меткой и оператором перехода на нее делать не более 1 страницы текста или высоты экрана дисплея

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

Пример: выйти из пр-мы, если аргумент принял 0-ое значение (может быть деление на 0), и выдать сообщение об этом.

Label 1,2;

………

If (z=0) then GO TO 1;

Else begin y:=a/z; GO TO 2;

End;

……….

1: writeln(‘деление на 0’);

2: end.
  1. ^

    Циклы, виды. Операторы цикла в TURBO- PASCAL 7.0


Общее понятие циклов.

При решении многих задач вычислительный процесс имеет циклический характер. Это означает, что часть операторов многократно выполняется при различных значениях переменных. Применение циклов в программе позволяет эффективно использовать ЭВМ, приводит к уменьшению длины программы и сокращению времени на ее составление и отладку.

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

Вход в цикл возможен только через его начало.

Переменные оператора цикла должны быть определены до входа в циклическую часть. Необходимо предусмотреть выход из цикла. Если этого не будет сделано, то циклические вычисления будут повторяться бесконечно, в этом случае говорят, что произошло зацикливание программы.
^ Цикл с предварительным условием.

Используется, как правило, в тех случаях, когда заранее неизвестно число повторений цикла.

Форма записи:

WHILE <условие> DO

BEGIN

операторы циклической части

END;

Оператор цикла действует следующим образом:

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

Цикл с постусловием используется в тех случаях, когда неизвестно число повторений цикла.

Оператор цикла имеет вид:

REPEAT

операторы цикла

UNTIL (логическое выражение);

REPEAT – повторять, UNTIL – до тех пор.

Операторные скобки в данном цикле не ставятся.

Оператор цикла с постусловием действует следующим образом:

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

^ Оператор цикла с параметром.

Используется в тех случаях, когда заранее известно сколько раз должна повторяться циклическая часть.

Оператор цикла имеет вид:

FOR <параметр цикла>:=<выраж1> TO <выр2> DO

операторы циклической части

END;

FOR – для и DO – выполнять – служебные слова; m1, m2 – начальные и конечные параметры цикла.

Циклическая часть выполняется повторно для каждого значения параметра цикла (от его начального значения m1 до конечного значения m2, включительно). В качестве параметра цикла может быть только переменная, а m1, m2 – могут быть выражением, за исключением типа REAL. Шаг изменения равен ±1. Если значение параметра цикла возрастает, то шаг равен +1, а m1<m2. Если значение параметра цикла убывает, то шаг равен -1, и вместо DO пишем DOWNTO, m1>m2.

  1. ^

    Итерационные циклы.


Итерационные циклы.

Большое место среди циклов с неизвестным числом повторений занимают циклы, когда в процессе повторений тело цикла образует последовательность значений у1, у2, … уn, сходящаяся к некоторому пределу а



Каждое новое значение yn в такой последовательности определяется с учетом предыдущего (yn-1) и является, по сравнению с ним более точным приближением к искомому результату предела а.

Циклы, реализующие такую последовательность приближений (итераций), называются итерационными, а соотношение элементов последовательности – рекуррентными.

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

Итерац. циклы используются для подсчета суммы конечного числа элементов ряда. Эти суммы вычисляются с задаваемой погрешностью E.

Существует 3 типа итерационных циклов:

1. Вычисляются с использованием рекуррентных соотношений, например: xn/n!

2. Простой итерационный цикл, например: cos nx /n

3. Смешанный итерационный цикл, например: (-1)n (cos nx / n!)
  1. ^

    Массивы, виды, описание, использование в программе. Приемы программирования квадратных матриц.


Одномерные массивы.

Массив – это упорядоченная совокупность однотипных переменных, которые хранятся в последовательных ячейках и имеют общее имя. Ячейка называется элементом массива. Все элементы пронумерованы по порядку. Номер элемента – это индекс.

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

Количество индексов, необходимое при обращении к элементу массива определяет n-мерность массива.

Одномерные массивы – массивы, которые содержат один индекс.

Действия над массивами:

1. Описание одномерных массивов:

- в разделе переменных:

VAR <имя массива>: ARRAY [кол-во элементов] OF <тип элементов>;

Н-р: VAR a: ARRAY [1..15] OF REAL;

- в разделе типов – применяется, если обрабатываются несколько однотипных массивов:

TYPE <имя типа> =ARRAY [кол-во элементов] OF <тип элементов>;

VAR <имя массива> : <имя типа массива>;

Н-р: TYPE vec =ARRAY [1..10] OF REAL;

VAR a, b: vec;

2. Заполнение элементов массива числами, введенными с клавиатуры.

3. Заполнение элементов массива с помощью генератора случайных чисел:

- random() – интервал от 0 до 1

- random(40) – интервал от 0 до 39

Двумерные массивы ( a[i,j], где i-номер строки, j-номер столбца.)

Массивы, при обращении к элементу которых, используется два индекса, называются двумерными массивами.
Описание одномерных массивов:

- в разделе описания переменных:

VAR <имя массива>: ARRAY [кол-во элементов] OF <тип элементов>;

Н-р: VAR a: ARRAY [1..15, 1..5] OF REAL;

- в разделе типов задают тип и в разделе описаний его используют:

TYPE <имя типа> =ARRAY [кол-во элементов] OF <тип элементов>;;

VAR <имя массива> : <имя типа>;

Н-р: TYPE vec =ARRAY [1..10,2..10] OF REAL;

VAR a, b: vec;

Ввод элементов массива:

…….

VAR a: ARRAY [1..15, 1..5] OF REAL;

m, n, i, j: integer;

begin

writeln(‘vvedi m, n’);

read(m,n);

for i:=1 to m do

for j:=1 to n do

read(a[i,j]);

……

Соотношения индексов в матрице:

Если i=j, то элементы расположены на главной диагонали;

Если i<j, то элементы матрицы расположены над главной диагональю;

Если i>j, то элементы матрицы расположены под главной диагональю;

Если i+j=n+1, то элементы расположены на побочной диагонали;

Если i+j<n+1, то элементы матрицы расположены над побочной диагональю;

Если i+j>n+1, то элементы матрицы расположены под побочной диагональю.

  1. ^

    Логические величины, выражения, операнды и операции. Логический оператор присваивания. Логические выражения в управляющих операторах.


Типы логических операций показаны в Таблице:

frame1

Примечание: Операция not является унарной операцией.

Если операндом операции not является операнд целого типа, то результат будет также целого типа.

Если оба операнда в операциях or, and или xor целого типа, то тип результата будет таким же, как тип обоих операндов.

В логическом операторе присваивания слева от знака присваивания указывается переменная логического типа (boolean), а справа дается логическое выражение, имеющее значение True (правда) или False (ложь):

D:=True;

B:=(A>C) AND (D<>0).
  1. ^

    Множества, описание множества, конструктор множества, операции над множествами.


Множество - это совокупность однотипных элементов, рассматриваемых как единое целое. Количество элементов, входящих в множество, может меняться в пределах от 0 до 256 (множество, не содержащее элементов, называется пустым). Множества отличаются от массивов непостоянством количества своих элементов, а также элементы множества не пронумерованы и неупорядочены. Действия могут выполняться только над множеством в целом.

Тип элементов множества называется базовым типом. Базовый тип м.б. любым порядковым (целым, логическим, символьным, интервальным, перечисляемым). Элементы множества задаются в [] (например: [3,4,5], [1..10], [‘a’,’c’], [ ]-пустое множество). Порядок записи элементов множества не имеет значения: [1,2,3]=[3,1,2]

Описание множеств:

- в разделе переменных:

VAR <идентификатор>: set of <базовый тип>;

Н-р: VAR a: set of OF REAL;

VAR b: set of ‘a’..’z’;

- в разделе типов:

TYPE <имя типа> = set of <базовый тип>;

VAR <идентиф.множества> : <идентиф.типа>;

Н-р: TYPE vec = set of integer;

VAR a, b: vec;

Нельзя пользоваться операциями ввода/вывода для множественных переменных. Множественная переменная может получить конкретное значение в результате выполнения оператора присваивания (<множеств.переменная>:=<множеств.выражение>; например: a:=[1,2,3])
Операции над множествами:

1.объединение множеств; результат содержит элементы первого множества, дополненные недостающими  элементами из второго множества ([1,2,5,4,6]+[2,4,7,8]=[1,2,4,5,6,7,8])

2.пересечение множеств; результат содержит элементы, общие для обоих множеств ([1,2,4,7]+[3,8,2,6]=[2])

3.разность множеств; результат содержит элементы из первого множества, которые не принадлежат второму ([1,2,5]+[2,5,6]=[1])

4.операции отношения

Множества можно сравнить между собой. Результат – истина или ложь. Можно применять все операции, кроме < и >.

A=B – множества совпадают.

A<>B – множества не совпадают.

A<=B –все элементы множества А принадлежат множеству В.

A>=B –все элементы множества B принадлежат множеству A.

5.операция вхождения устанавливает связь между множеством и скалярной величиной, тип которой совпадает с базовым типом множества (x IN M, где x-скалярная величина, M-множество), например: 4 IN M

Вывод множеств

1.можно из множества сформировать строку, а потом ее вывести

For c:=’a’ to ‘z’ do

If (c in M) then writeln(c);

2. вывод по символам
  1. ^

    Понятие файла и файловой переменной, внешние файлы в TURBO- PASCAL 7.0 (определение, общие принципы работы: создание и обработки)


Введение файлового типа в язык Паскаль вызвано необходимостью обеспечить возможность работы с периферийными (внешними) устройствами ЭВМ, предназначенными для ввода, вывода и хранения данных.

Файл – совокупность данных, записанная во внешней памяти под определенным именем.

Файловый тип переменной – структурированный тип, представляет собой совокупность однотипных элементов, количество которых заранее не определено.

Турбо Паскаль поддерживает три файловых типа:

- типизированные файлы – файлы, состоящие из компонентов одного типа, число которых заранее не определено;

- безтиповые файлы – файлы, где информация записывается и считывается блоками определенного размера, в них могут храниться данные любого вида и структуры;

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

Понятие файла в Паскале употребляют в двух смыслах:

1.как поименованная область данных на внешнем носители (внешний файл)

2.как переменная файлового типа (внутренний файл)

В программе между этими объектами устанавливают связь и все, что в процессе выполнения программы происходит с внутр. файлом, дублируется во внешний. Над элементами файла можно делать только 2 операции: читать с файла, записывать в файл.

Обработка типизированных файлов

1. Переменную файлового типа описывают одним из двух способов:

- Var <имя файл.переменной>:file of <тип элементов>;

Тип может быть любым, кроме файлового.

- type <имя типа>=file of <тип элементов>;

Var <имя файла>: <имя типа>; Стандартные процедуры и функции

Assign(f, x) - связывает файловую переменную f с физическим файлом, полное имя которого задано в строке x. Установленная связь будет действовать до конца работы программы, или до тех пор, пока не будет сделано переназначение.

После связи файловой переменной с дисковым именем файла нужно открыть файл.

Reset(f) открывает для чтения файл, с которым связана файловая переменная f. После успешного выполнения процедуры Reset файл готов к чтению из него первого элемента.

Если f - типизированный файл, то процедурой reset он открывается для чтения и записи одновременно.

Rewrite(f) открывает для записи файл и очищает его.

Close(f) закрывает открытый до этого файл с файловой переменной f. EOF(f) возвращает значение TRUE, когда при чтении достигнут конец файла.

Rename(f, NewName)позволяет переименовать физический файл на диске, связанный с файловой переменной f. Переименование возможно после закрытия файла.

Erase(f)уничтожает физический файл на диске, который был связан с файловой переменной f. Файл к моменту вызова процедуры Erase должен быть закрыт.

Чтение из текстового файла:

Read(f, список переменных); ReadLn(f, список переменных);

Процедуры читают информацию из файла f в переменные. Способ чтения зависит от типа переменных, стоящих в списке. Отличие ReadLn от Read в том, что в нем после прочтения данных пропускаются все оставшиеся символы в данной строке, включая метку конца строки. Если список переменных отсутствует, то процедура ReadLn(f) пропускает строку при чтении текстового файла.

Запись в текстовый файл:

Write(f, список переменных); WriteLn(f, список переменных);

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

    Комбинированный тип данных. Работа с файлами записей. Прямой доступ к записям


Разбор на примере

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

Пример

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

В данном случае фамилия может быть представлена строкой из 15 символов, оценка - это целое число, а средний балл должен быть представлен вещественным (действительным) числом. В Паскале для описания комбинаций объектов разных типов используются записи.

Запись - это структурированный тип, содержащий набор объектов разных типов. Составляющие запись объекты называются ее полями. В записи каждое поле имеет свое собственное имя. Чтобы описать запись, необходимо указать ее имя, имена объектов, составляющих запись и их типы. Общий вид такой:

Type "имя записи" = Record

"поле 1" : "тип 1";...

"поле n" : "тип n"

End;

Данные для решения рассматриваемой задачи можно описать как запись следующим образом:

Type

pupil = Record

fam: String[15]; {поле фамилии ученика}

b1, b2, b3, b4, b5 : 2...5; {поля баллов по дисциплинам}

sb : Real {поле среднего балла}

End;

Переменная типа puple будет иметь смысл структуры, содержащий информацию, характеризующую одного ученика. Организация этой структуры показана на рис.1.

Чтобы хранить в памяти ЭВМ информацию о всех 25 учениках класса, необходимо ввести массив klass, представляющий массив записей:

Var klass : Array[1.25] Of pupil;

Примечания

1.Имена полей, составляющих запись, не должны повторяться.

2.Каждое поле записи может иметь любой тип (кроме файлового),в частности, оно может быть снова записью.

Доступ к полям записи

Его можно осуществить двумя способами.

1.Указанием имени переменной и имени поля. Например, klass[2].fam, klass[3].sb, klass[1].b4. Поэтому ввод фамилий и оценок учащихся, то есть элементов массива klass, можно задать так:

For i: = 1 To 25 Do

Begin

Readln(klass[i].fam); Readln(klass[i].b1);

Readln(klass[i].b2); Readln(klass[i].b3);

Readln(klass[i].b4); Readln(klass[i].b5);

End;

2.Использованием оператора присоединения, который позволяет осуществлять доступ к полям записи, таким образом, как если бы они были простыми переменными. Его общий вид:

 ^ With <имя записи> Do <оператор>.

Внутри оператора к компонентам записи можно обращаться только с помощью имени соответствующего поля.

Пример

For i : = 1 To 25 Do

With klass [i] Do

Begin

Readln (fam);

ReadLn (b1,b2,b3,b4,b5);

End;
  1. ^

    строковый тип данных в TURBO- PASCAL 7.0. Стандартные функции по работе со строками.


Тип STRING (строка) в Турбо Паскале широко используется для обработки текстов. Он во многом похож на одномерный массив символов, однако, в отличие от последнего, количество символов в строке-переменной может меняться от 0 до N, где N - максимальное количество символов в строке. Значение N определяется объявлением типа STRING [N] и может быть любой константой порядкового типа, но не больше 255 . Турбо Паскаль разрешает не указывать N, в этом случае длина строки принимается максимально возможной, а именно N=255 .

Строка в Турбо Паскале трактуется как цепочка символов. К любому символу в строке можно обратиться точно так же, как к элементу одномерного массива ARRAY [0..N] OF CHAR.

LENGTH(st) - текущая длина строки.

CONCAT(S1 [S1, ... , SN] ) - функция типа STRING; возвращает строку, представляющую собой сцепление строк-параметров S1, S2, ..., SN.

COPY(ST, POS, n) - функция типа STRING; копирует из строки ST n символов, начиная с символа с номером POS.

DELETE (ST, POS, n) - процедура удаляет n символов из строки ST, начиная с символа с номером POS.

INSERT (S, ST, POS) - процедура; вставляет подстроку S в строку ST, начиная с символа с номером POS.

LENGTH (ST) - функция типа INTEGER; возвращает длину строки ST.

POS (S, ST) - функция типа INTEGER; отыскивает в строке ST первое вхождение подстроки S и возвращает номер позиции, с которой она начинается; если подстрока не найдена, возвращается ноль.

STR(X [; WIDTH [: DECIMALS] ], ST) - процедура; преобразует число X любого вещественного или целого типов в строку символов ST

VAL(ST, X, CODE) - процедура; преобразует строку символов ^ ST во внутреннее представление целой или вещественной переменной X, которое определяется типом этой переменной; параметр CODE содержит ноль, если преобразование прошло успешно, и тогда в X помещается результат преобразований, в противном случае он содержит номер позиции в строке ST, где обнаружен ошибочный символ, и в этом случае содержимое Х не меняется. Примеры:

var х : Real;  у : Integer;  st,st1: String[15]; 

begin

st := concat('12','345'); {строка st содержит 12345} 

st1 := copy(st,3,Length(st)-2); {st1 содержит 345}

insert('-',st1,2); {строка st1 содержит 3-45} 

delete(st,pos('2',at),3); {строка st содержит 15} 

str(pi:6:2,st); {строка st содержит 3.14} 

val(''3,1415' ,x,y) ; {у содержит 2, х остался без изменения}

end.

Операции отношения =, о, >, <, >=, <= выполняются над двумя строками посимвольно, слева направо с учетом внутренней кодировки символов (см. табл.4.1 и прил.2). Если одна строка меньше другой по длине, недостающие символы короткой строки заменяются значением СНR(0) .
  1. ^

    Процедуры пользователя (описание, вызов, структура),


В языке Паскаль имеется два вида подпрограмм - процедуры и функции.

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

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

Описание и вызов процедур

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

^ Формат описания процедуры имеет вид:

procedure имя процедуры (формальные параметры);

раздел описаний процедуры

begin

исполняемая часть процедуры

end;

Формальные параметры в заголовке процедур записываются в виде:

var имя праметра: имя типа

и отделяются друг от друга точкой с запятой. Ключевое слово var может отсутствовать. Если параметры однотипны, то их имена можно перечислять через запятую, указывая общее для них имя типа. При описании параметров можно использовать только стандартные имена типов, либо имена типов, определенные с помощью команды type.Список формальных параметров может отсутствовать.

Вызов процедуры производится оператором, имеющим следующий формат:

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

При вызове процедур необходимо соблюдать следущие правила:

- количество фактических параметров должно совпадать с количеством формальных;

- соответствующие фактические и формальные параметры должны совпадать по порядку следования и по типу.

Заметим, что имена формальных и фактических параметров могут совпадать. Это не приводит к проблемам, так как соответствующие им переменные все равно будут различны из-за того, что хранятся в разных областях памяти. Кроме того, все формальные параметры являются временными переменными - они создаются в момент вызова подпрограммы и уничтожаются в момент выхода из нее.

Существует два вида переменных:

- Локальные – описываются в подпрограммах, используются только в той подпрограмме, где были описаны. В основной программе они не известны.

- Глобальные – описываются в основной программе до раздела процедур и функций. Область их действий распространяется на основную программу и на все подпрограммы.

Рассмотрим использование процедуры на примере программы поиска максимума из двух целых чисел.

var x,y,m,n: integer;

procedure MaxNumber(a,b: integer; var max: integer);

begin

if a>b then max:=a else max:=b;

end;

begin

write('Введите x,y '); readln(x,y);

MaxNumber(x,y,m); MaxNumber(2,x+y,n);

writeln('m=',m,'n=',n);

end.
  1. ^

    Функции пользователя (описание, вызов, структура). Рекурсивные подпрограммы.


В языке Паскаль имеется два вида подпрограмм - процедуры и функции.

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

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

Описание и вызов функций

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

Формат описания функции:

function имя функции (формальные параметры):тип результата;

раздел описаний функции

begin

исполняемая часть функции

end;

Формальные параметры в заголовке функций записываются в виде:

var имя праметра: имя типа

и отделяются друг от друга точкой с запятой. Ключевое слово var может отсутствовать (об этом далее). Если параметры однотипны, то их имена можно перечислять через запятую, указывая общее для них имя типа. При описании параметров можно использовать только стандартные имена типов, либо имена типов, определенные с помощью команды type.Список формальных параметров может отсутствовать.

Вызов функции в Турбо Паскаль может производиться способом как при процедурах, кроме того имеется возможность осуществить вызов внутри какого-либо выражения. В частности имя функции может стоять в правой части оператора присваивания, в разделе условий оператора if и т.д.

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

имя функции := результат;

При вызове функций необходимо соблюдать следущие правила:

- количество фактических параметров должно совпадать с количеством формальных;

- соответствующие фактические и формальные параметры должны совпадать по порядку следования и по типу.

Заметим, что имена формальных и фактических параметров могут совпадать. Пример: программа поиска максимума из двух целых чисел.

var x,y,m,n: integer;

function MaxNumber(a,b: integer): integer;

var max: integer;

begin if a>b then max:=a else max:=b;

MaxNumber := max;

end;

begin write('Введите x,y '); readln(x,y);

m := MaxNumber(x,y); n := MaxNumber(2,x+y);

writeln('m=',m,'n=',n);

end.

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

Для того, чтобы такое обращение не было бесконечным, в тексте программы должно быть условие, при выполнении которого дальнейшего обращения к программе не происходит.

Любой рекурсивный алгоритм можно заменить алгоритмом, который использует цикл. Подпрограммы с рекурсией менее эффективны, но короче и нагляднее.
  1. ^

    Понятие текстового файла, определение, общие принципы работы, создание и обработка.


Текстовый файл трактуется в Турбо Паскале как совокупность строк переменной длины. Доступ к каждой строке возможен лишь последовательно, начиная с первой. При создании текстового файла в конце каждой записи (строки) ставится специальный признак EOLN (End Of LiNe — конец строки), а в конце всего файла — признак EOF (End Of File — конец файла).

Для доступа к записям применяются процедуры READ, READLN, WRITE, WRITELN. Они отличаются возможностью обращения к ним с переменным количеством фактических параметров, в качестве которых могут использоваться символы, строки и числа. Первым параметром в любой из перечисленных процедур может стоять файловая переменная. В этом случае осуществляется обращение к дисковому файлу или логическому устройству, связанному с переменной процедурой ASSIGN.

Процедура READ. Обеспечивает ввод символов, строк и чисел. Формат обращения: READ (<ф.п.>,<сп.ввода>) или READ (<сп.ввода>)

Здесь <сп.ввода> — список ввода: последовательность из одной или более переменных типа CHAR, STRING, а также любого целого или вещественного типа.

Процедура READLN. Обеспечивает ввод символов, строк и чисел. Эта процедура идентична процедуре READ за исключением того, что после считывания последней переменной оставшаяся часть строки до маркера EOLN пропускается, поэтому следующее обращение к READLN или READ начинается с первого символа новой строки. Кроме того, эту процедуру можно вызвать без параметра <сп.ввода> (см. процедуру READ), что приведет к пропуску всех символов текущей строки вплоть до EOLN.

Процедура WRITE. Обеспечивает вывод информации в текстовый файл или передачу ее на логическое устройство. Формат обращения:

WRITE (<ф.п.>, <сп.вывода>) или WRITE (<сп.вывода>)

Здесь <сп,вывода> — список вывода: последовательность из одного или более выражений типа CHAR, STRING, BOOLEAN, а также любого целого или вещественного типа. Файловая переменная <ф.п.>, если она указана, должна быть предварительно описана как переменная типа TEXT и связана с именем файла или логическим устройством процедурой ASSIGN.

Процедура WRITELN. Эта процедура полностью идентична процедуре WRITE, но в этом случае в файл передается маркер EOLN, что при выводе на экран приведет к переводу курсора в начало следующей строки.

Логическая функция EOLN. Возвращает TRUE, если во входном текстовом файле достигнут маркер конца строки, формат обращения:

EOLN (<ф.п.>)

^ Логическая функция SEEKEOLN. Пропускает все пробелы и знаки табуляции до маркера конца строки EOLN или до первого значащего символа и возвращает TRUE, если маркер обнаружен. Формат обращения:

SEEKEOLN (<ф.п.>)

^ Логическая функция SEEKEOF. Пропускает все пробелы, знаки табуляции и маркеры конца строки EOLN до маркера конца файла или до первого значащего символа и возвращает TRUE, если маркер обнаружен. Формат обращения:

SEEKEOF (<ф.п.>)

  1. ^

    внешние подпрограммы и модули в системе Turbo pascal: определение, назначение, структура


Стандартный язык Pascal не располагает средствами разработки и поддержки библиотек программиста (в отличие, скажем, от языка Fortran и других языков программирования высокого уровня), которые компилируются отдельно и в дальнейшем могут быть использованы как самим разработчиком, так и другими. Если программист имеет достаточно большие наработки, и те или иные подпрограммы могут быть использованы при написании новых приложений, то приходится эти подпрограммы целиком включать в новый текст.

В Turbo Pascal это ограничение преодолевается за счет, во-первых, введения внешних процедур, во-вторых, разработки и использования модулей. В настоящей публикации на примерах рассмотрим работу с теми и другими программными единицами.
Начнем с внешних подпрограмм.

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

Покажем это на примере задач целочисленной арифметики, где аргументы, результаты и промежуточные величины являются целыми (Integer, Word, LongInt и т.д.). Вот несколько таких задач.

1. Дано натуральное число n. Найти сумму первой и последней цифры этого числа.

2. Дано натуральное число n. Переставить местами первую и последнюю цифры этого числа.

3. Дано натуральное число n. Дописать к нему цифру k в конец и в начало (если это возможно, т.е. результат не выйдет за диапазон допустимых значений), или сообщить о невозможности выполнения операции.

4. Найти наибольшую цифру в записи данного натурального числа.

5. Дано натуральное число n. Переставить его цифры так, чтобы образовалось максимальное число, записанное теми же цифрами.

При решении каждой из этих задач может быть использована функция, возвращающая количество цифр в записи натурального числа.
Вот возможный вариант такой функции:
Function Digits(N : LongInt) : Byte;

Var Kol : Byte;

Begin

Kol := 0;

While N <> 0 Do Begin Kol := Kol + 1; N := N Div 10 End;

Digits := Kol

End;
Сохраним этот текст в файле с расширением .inc (это расширение внешних подпрограмм в Turbo Pascal), например, digits.inc.

Еще необходима функция возведения натурального числа в натуральную степень.
Function Power(A, N : LongInt) : LongInt; {файл power.inc}

Var I, St : LongInt;

Begin

St := 1;

For I := 1 To N Do St := St * A;

Power := St

End;
Попробуем использовать функции при решении задачи номер один.
Program Example1;

Var N, S : LongInt;

{$I digits.inc} {подключаем внешнюю функцию digits.inc, возвращающую количество цифр в записи числа}

{$I power.inc} {внешняя функция, выполняющая возведение числа A в степень N}

Begin

Write('Введите натуральное число: ');

ReadLn(N);

{для определения последней цифры числа N берем остаток от деления этого числа на 10, а для определения первой делим N на 10 в степени на единицу меньшую, чем количество цифр в записи числа (нумерация разрядов начинается с 0)}

S := N Mod 10 + N Div Power(10, Digits(N) - 1);

WriteLn('Искомая сумма: ', S)

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

Далее речь пойдет о модулях: их структуре, разработке, компиляции и использовании.
Модуль - это набор ресурсов (функций, процедур, констант, переменных, типов и т.д.), разрабатываемых и хранимых независимо от использующих их программ. В отличие от внешних подпрограмм модуль может содержать достаточно большой набор процедур и функций, а также других ресурсов для разработки программ. Обычно каждый модуль содержит логически связанные между собой программные ресурсы.

В основе идеи модульности лежат принципы структурного программирования. Существуют стандартные модули Turbo Pascal, которые обычно описываются в литературе по данному языку.
Модуль имеет следующую структуру:

Unit <имя модуля>; {заголовок модуля}

Interface

{интерфейсная часть}

Implementation

{раздел реализации}

Begin

{раздел инициализации модуля}

End.

После служебного слова Unit записывается имя модуля, которое (для удобства дальнейших действий) должно совпадать с именем файла, содержащего данный модуль. Поэтому (как принято в MS DOS) имя не должно содержать более 8 символов.

В разделе Interface объявляются все ресурсы, которые будут в дальнейшем доступны программисту при подключении модуля. Для подпрограмм здесь указывается лишь полный заголовок.

В разделе Implementation реализуются все подпрограммы, которые были ранее объявлены. Кроме того, здесь могут содержаться свои константы, переменные, типы, подпрограммы и т.д., которые носят вспомогательный характер и используются для написания основных подпрограмм. В отличие от ресурсов, объявленных в разделе Interface, все, что дополнительно объявляется в Implementation, уже не будет доступно при подключении модуля. При написании основных подпрограмм достаточно указать их имя (т.е. не нужно полностью переписывать весь заголовок), а затем записать тело подпрограммы.

Наконец, раздел инициализации (который часто отсутствует) содержит операторы, которые должны быть выполнены сразу же после запуска программы, использующей модуль.
Дадим некоторые рекомендации по разработке модулей:
1) спроектировать модуль, т.е. выделить основные и вспомогательные подпрограммы, другие ресурсы;
2) каждую подпрограмму целесообразно отладить отдельно, после чего «вклеить» в текст модуля.
Сохраним текст разработанной программы в файле DROBY.PAS и откомпилируем наш модуль. Для этого можно воспользоваться внешним компилятором, поставляемым вместе с Turbo Pascal. Команда будет выглядеть так: TPC DROBY.PAS. Если в тексте нет синтаксических ошибок, получим файл DROBY.TPU, иначе будет соответствующее сообщение с указанием строки, содержащей ошибку. Другой способ компиляции модуля - в среде программирования Turbo Pascal выбрать в пункте меню Run подпункты Make или Build (при этом должна быть включена компиляция на диск).
Теперь можно подключить модуль к программе, где планируется его использование.


Скачать файл (143.5 kb.)

Поиск по сайту:  

© gendocs.ru
При копировании укажите ссылку.
обратиться к администрации
Рейтинг@Mail.ru