Урок 1. Языки программирования. Этапы решения задач на ПК
Урок 1. Языки программирования. Этапы решения задач на ПК
Решение любой задачи разбивается на этапы:
1. Постановка задачи
2. Формализация (математическая постановка)
3. Выбор (или разработка) метода решения
4. Разработка алгоритма
5. Составление программы
6. Отладка программы
7. Вычисление и обработка результатов
1. При постановке задачи выясняется конечная цель и вырабатывается общий подход к решению задачи. Выясняется сколько решений имеет задача и имеет ли их вообще. Изучаются общие свойства рассматриваемого физического явления или объекта, анализируются возможности данной системы программирования.
2. На этом этапе все объекты задачи описываются на языке математики, выбирается форма хранения данных, составляются все необходимые формулы.
3. Выбор существующего или разработка нового метода решения (очень важен и, в то же время личностный этап).
4. На этом этапе метод решения записывается применительно к данной задаче на одном из алгоритмических языков (чаще на графическом).
5. Переводим решение задачи на язык, понятный машине.
Средства создания программ
В общем случае для создания программ нужно иметь следующие компоненты:
· текстовый редактор — для набора исходного текста программы;
· компилятор — для перевода текста программы в машинный код;
· редактор связей — для сборки нескольких откомпилированных модулей в одну программу;
· библиотеки функций — для подключения стандартных функций к программе.
Современные системы программирования включают в себя все указанные компоненты и называются интегрированными системами. По способу разработки программ можно выделить два подхода:
· процедурное программирование — это программирование, при котором выполнение команд программы определяется их последовательностью, командами перехода, цикла или обращениями к процедурам;
· объектно-ориентированное программирование – программирование, при котором формируются программные объекты, имеющие набор свойств, обладающие набором методов и способные реагировать на события, возникающие как во внешней среде, так и в самом объекте (нажатие мыши, срабатывание таймера, превышение числовой границы и т.д.). Таким образом, выполнение той или иной части программы зависит от событий в программной системе.
Объектно-ориентированное программирование (ООП) не исключает, а охватывает технологию процедурного программирования.
Основные этапы развития языков программирования
Языки программирования развивались одновременно с развитием ЭВМ. С начала 50-х годов это были низкоуровневые языки (машинные и ассемблеры). В 1956 году появился язык Фортран, а в 1960 — Алгол-60. Это языки компилирующего типа, существенно уменьшившие трудоемкость программирования. Языки ориентированы на выполнение математических вычислений. В дальнейшем возникло большое количество различных языков, претендовавших на универсальность (PL/1) или для решения конкретных задач (COBOL — для деловых задач, ЛОГО — для обучения, Пролог — для разработки систем искусственного интеллекта). С середины 60-х до начала 80-х разработаны и получили распространение языки Pascal, Basic, Си, Ада и другие.
Принципиально новым этапом в развитии языков программирования стало появление методологии непроцедурного (ООП) программирования. Основные достоинства ООП — быстрота разработки интерфейса программного приложения, возможность наследования свойств программных объектов.
Урок 2. Алгоритм: определение, свойства, способы записи. Исполнители алгоритмов: назначение, среда, система команд.
Базовые алгоритмические структуры
Алгоритм и его свойства
Алгоритм— это предписание некоторому исполнителю выполнить конечную последовательность действий, приводящую к некоторому результату.
В программировании алгоритм является фундаментом программы, а основным исполнителем — компьютер. На стадии тестирования алгоритма исполнителем может быть сам программист.
Алгоритм может быть записан с помощью блок-схемы, текстовым предписанием, с помощью рисунков, таблично или на специальном алгоритмическом языке. Наиболее популярны блок-схемы и предписания. Преимущество блок-схем — в наглядности алгоритма.
Основными свойствами алгоритма являются:
1. дискретность — представление алгоритма в виде последовательности шагов;
2. массовость — применимость алгоритма к некоторому множеству исходных данных;
3. определенность — за конечное число шагов либо должен быть получен результат, либо доказано его отсутствие;
4. однозначность — при повторном применении алгоритма к тем же исходным данным должен быть получен тот же результат.
Из перечисленных свойств лишь дискретность является обязательным свойством алгоритма. Можно привести примеры, когда невыполнение свойств массовости, определенности и однозначности не позволяет говорить об отсутствии алгоритма.
Для изображения алгоритмов будем использовать блок-схемы, формируемые из типовых блоков, показанных на рис. 1.
Константы и переменные
Любая программа имеет смысл, если она обрабатывает какие-либо данные. В Паскале данные разделяются на константы и переменные. В программе константы и переменные определяются идентификаторами (именами) пользователя. Каждая переменная и константа принадлежат к определенному типу данных.
Константы – данные, которые не меняют своего значения в процессе выполнения программы. Тип константы автоматически распознается компилятором. Все константы должны быть описаны в специальном разделе, который начинается зарезервированным словом const (constant – константа).
В Паскаль применяется 5 видов констант простых типов:
- Целочисленные константы. В качестве значений может использоваться любое целочисленное данное в десятичном или шестнадцатеричном формате (year=2003)
- Вещественные константы определяются числами, записанными в десятичном формате данных (time=0.2e+4, yyy=304.0)
- Символьные константы могут быть определены только посредством символов таблицы ASCII. При этом сам символ заключается в апострофы (var1='A')
- Строковые константы определяются произвольной последовательностью символов, заключенных в апострофы (stroke='IBM')
- Типизированные константы (переменные с начальным значением). Каждой типизированной константе ставится в соответствие имя, тип, начальное значение (year1:integer =1995)
Формат:
Const
Имя = значение константы;
Пример:
Сonst
MyName = ‘Ваня Иванов’;
J=5;
Max=1000;
Min=2;
Center=(max-min)/2;
Переменные – данные, которые могут менять свои значения в процессе выполнения программы. Тип переменных должен быть описан перед тем, как с переменными будут выполняться какие-либо действия. Переменные описываются в специальном разделе, который начинается зарезервированным словом var (variable – переменная). Однотипные переменные могут перечисляться через запятую перед указанием их типа.
Формат:
Var
Имя : тип переменной;
Пример:
Var
A, d, c, r: integer;
Summa: real;
Кроме констант и переменных существуют так называемые типизированные константы. Данные этого типа описываются в разделе const, и для них указывается тип, как у переменных.
Формат:
Const
Имя : тип = значение;
Пример:
Const
K: word = $B800;
Ocenka: byte = 4;
Predmet: string=’информатика’;
Все переменные делятся на глобальные и локальные. Глобальными являются переменные, объявленные вне процедур и функций, а локальными - объявленные внутри процедур и функций.
Паскаль накладывает ряд ограничений на использование переменных:
- Среди глобальных переменных не может быть двух с одинаковыми идентификаторами;
- Среди локальных переменных в пределах одной процедуры или функции не может быть двух с одинаковыми идентификаторами;
- В тексте программы любой глобальный идентификатор может дублировать любой локальный идентификатор, т.к. даже при одинаковых именах они хранятся в разных участках памяти.
Типы данных
Любые данные Паскаля характеризуются своими типами. Тип определяет:
· формат представления данных в памяти компьютера
· множество допустимых значений, принимаемое переменной или константой, принадлежащей к выбранному типу
· множество допустимых операций применимых к этому типу
Тип переменной определяется при ее объявлении. Одна из базовых концепций Паскаля заключается в жесткой проверке соответствия типов в операциях присваивания.
Типы данных в языке ТП делятся на 2 основных класса:
Простые типы
· стандартные (целочисленный тип, логический (булевый) тип, символьный тип, вещественный тип, перечислимый тип)
· пользовательские
2. Структурированные типы (строки, массивы, множества, запись, файл)
Целочисленный тип
Данные целочисленных типов могут быть представлены как в десятичной, так и в шестнадцатеричной системе. Если число представлено в шестнадцатеричной системе, перед ним без пробела записывается знак $. Диапазон изменений шестнадцатеричных чисел от $0000 до $FFFF.
Byte | 0..255 | 1 байт |
Word | 0..65535 | 2 байта |
Integer | -32768..32767 | 2 байта |
longint | -2147483648.. 2147483647 | 4 байта |
Арифметические операции над данными целого типа: +, -, *, /, div (деление нацело), mod (остаток от деления).
Операции отношения: =, <>, <, >, <=, =>.
Стандартные функции:
Abs (x) | Модуль х |
Sqr (x) | Х2 |
Sqrt (x) | Квадратный корень из х |
Sin (x) | Синус х |
Cos (x) | Косинус х |
Arctan (x) | Арктангенс х |
Succ (x) | Следующее целое число (х+1) |
Pred (x) | Предыдущее целое число (х-1) |
Exp (x) | ex (e=2.7) |
Ln (x) | Натуральный логарифм |
К вещественному типу относится подмножество вещественных чисел, представленных в формате с плавающей точкой и фиксированным числом цифр. В записи вещественных чисел можно использовать обычный (4700=4.7*103)и экспоненциальный формат записи (4700=4.7000000Е+03). В экспоненциальной форме выделяют 2 части: мантиссу и порядок.
N=M*np
N – само число
M – мантисса
n – основание
p – порядок
1000000=1,0*106 (N=1000000; M=1,0; n=10; p=6)
В ПК:
MEp
M – мантисса
E – экспонента (…умножить на 10 в степени…)
p – порядок
-2.5000000Е+03 (М=-2.5000000, р=3)
Real | 2.9Е-39 .. 1.7Е+38 | 6 байт |
single | 1.5E-45 .. 3.4E+38 | 4 байта |
double | 5.0E-324 .. 1.7E+308 | 8 байт |
extended | 1.9E-4951 .. 1.1E+4932 | 10 байт |
Арифметические операции над данными вещественного типа: +, -, *, /.
Операции отношения: =, <>, <, >, <=, =>.
Стандартные функции:
Abs (x) | Модуль х |
Sqr (x) | Х2 |
Sqrt (x) | Квадратный корень из х |
Sin (x) | Синус х |
Cos (x) | Косинус х |
Arctan (x) | Арктангенс х |
trunc(x) | Отбрасывание дробной части |
round(x) | Округление до целого |
Exp (x) | ex (e=2.7) |
Ln (x) | Натуральный логарифм |
Выражение, составленное из переменного целого и вещественного типа, имеет вещественный тип. Допускается присваивание переменной вещественного типа значения выражения целого типа, но не наоборот.
Порядок выполнения операций: действия в скобках, *, /, div, mod; +, -; =, <>, <, >, <=, =>.
Символьный тип (char) представляет собой тип данных, предназначенный для хранения одного символа (буквы, знака или кода). В переменную этого типа может быть помещен любой из 256 символов расширенного кода ASCII.
Переменная типа char занимает один байт памяти. Значения типа char задаются в апострофах. Кроме того можно задавать значения используя код из таблицы ASCII. Над данными символьного типа можно выполнять операции сравнения.
Строковый тип
Строка - последовательность любых символов, заключенных в апострофы. Для определения данных строкового типа используется идентификатор string.
Булевский тип данных представляется двумя значениями True (истина) и False (ложь). Применяется в логических выражениях и выражениях отношения. При описании величин этого типа указывают слово boolean. Для размещения в памяти переменной булевского типа требуется 1 байт.
Перечислимый тип определяется как упорядоченный набор идентификаторов, заданный путем их перечисления. При этом список идентификаторов разделенных запятой указывается в круглых скобках. Задается перечисляемый тип в разделе type. Значения переменных перечисляемого типа не могут вводиться с клавиатуры и выводиться на экран.
Пример:type
A=(2, 4, 1, 7);
B=('c', 'L', '3', '|');
Интервальный тип позволяет задать 2 константы, которые определяют границы изменения переменных данного типа. Значение первой константы должно быть меньше значения второй, сами они должны быть целочисленными или символьными и разделены двумя точками.
Пример:var
A, В, С:-7..4;
Программа и транслятор
Программа— это детальное и законченное описание алгоритма средствами языка программирования. Исполнителем программы является компьютер. Для выполнения компьютером программа должна быть представлена в машинном коде — последовательности чисел, понимаемых процессором. Написать программу в машинных кодах вручную достаточно сложно. Поэтому сегодня практически все программы создаются с помощью языков программирования, которые по своим синтаксису и семантике приближены к естественному человеческому языку. Это снижает трудоемкость программирования. Однако, текст программы, записанный с помощью языка программирования, должен быть преобразован в машинный код. Эта операция выполняется автоматически с помощью специальной служебной программы, называемой транслятором.
Трансляторы делятся на два типа: интерпретаторы и компиляторы.
Интерпретатор переводит в машинный код и выполняет очередной оператор (команду) программы. Если команда повторяется, то интерпретатор рассматривает ее как встреченную впервые.
Компилятор переводит в машинный код исходный текст программы целиком. Поэтому достоинство компиляторов — быстродействие и автономность получаемых программ. Достоинство интерпретаторов — их компактность, возможность остановить в любой момент выполнение программы, выполнить различные преобразования данных и продолжить работу программы. Примерами служебных программ — интерпретаторов являются GW Basic, Лого, школьный алгоритмический язык, многие языки программирования баз данных. Компиляторами являются Turbo Pascal, С++, Delphi.
Общая структура программы
Program<имя программы>;
Label<раздел описания меток>;
Const<раздел описания констант>;
Type<раздел описания типов>;
Var<раздел описания переменных>;
Procedure (Function)<раздел описания подпрограмм>;
Begin
<раздел операторов>
End.
Все программы обязательно имеют раздел заголовок и раздел операторов. Остальные составляющие могут отсутствовать. При отсутствии некоторых частей программы общий порядок их следования сохраняется.
Разделы между собой разделяются знаком ";"
Раздел операторов заключается в операторные скобки. Это зарезервированные слова begin, end. Раздел операторов заканчивается точкой. Запись внутри операторных скобок ведется с отступом в три знака.
Раздел "заголовок" начинается с зарезервированного слова, за которым указывается имя программы. В качестве имени может использоваться любой набор символов алфавита с несколькими исключениями:
· Нельзя использовать зарезервированные слова
· Нельзя начинать имя с цифры
· При использовании имени не используется пробел
· Оператор присваивания - это основной оператор любого языка программирования. Данный оператор позволяет поместить определенное значение в необходимую вам переменную.
· Оператор присваивания имеет вид: <переменная> := <выражение>;
Операторы ввода/вывода
Паскаль содержит четыре оператора ввода/вывода: read, readln, write, writeln.
Оператор read осуществляет ввод данных с клавиатуры и размещение их в стандартном файле ввода input. Вводимые данные размещаются в качестве значений переменных, имена которых перечислены в круглых скобках за оператором read.
Общая структура: read (список ввода);
read (a, b, c);
Вводятся данные тоже списком, в котором они разделяются пробелом. Ввод заканчивается нажатием Enter. Курсор, отмечающий позицию следующего ввода/вывода остается за последним введенным данным.
Оператор readln выполняет аналогичные действия и переводит курсор на следующую строку.
Оператор write осуществляет вывод на экран или печатающее устройство с одновременным размещением в стандартном файле вывода output. Оператор может выводить сообщение или значение переменной. Сообщения записываются в апострофах. Для вывода значения переменной указывается имя переменной. Сообщения и переменные можно чередовать в одном списке, разделяя их запятыми. Курсор остается за последним выведенным данным.
Оператор writeln выполняет аналогичные действия и переводит курсор на следующую строку.
Операторы write и writeln допускают т.н. форматированный вывод данных.
Общая структура: write (список вывода); write (‘Пояснительная запись’, список вывода);
write (a:5:2); write (‘скорость автомобиля= ’, а:5:2);
Первое из чисел указывает сколько экранных знаков отводится под вывод. Второе число указывает количество знаков после запятой в числе и может отсутствовать.
Операции и выражения
Выражение определяет порядок выполнения действий над данными и состоит из операндов, круглых скобок и знаков операций. В Паскале имеются 3 типа выражений:
· Арифметические (арифметические действия над числами)
· Логические
· Символьные
Все операции делятся на унарные(действия над одним операндом) и бинарные (действия над двумя операндами).
Оператор выбора
Для случаев, когда требуется осуществить выбор одного значения из конечного набора вариантов, оператор if удобнее заменить оператором выбора (переключателем) case:
case выражение of
список1:оператор1;
список2:оператор2;
…
списокN:операторN
else оператор0;
end;
Оператор case выполняется также, как и составной условный оператор. Выражение (после ключевого слова case) должно иметь целый или символьный тип. Значение этого выражения последовательно сравнивается со значениями в расположенных ниже списках. Если в одном из списков находится совпадающее значение, то выполняется соответствующий оператор. Элементы списка перечисляются через запятую (если их несколько), ими могут быть константы и диапазоны значений того же типа, что и тип выражения. Диапазоны указываются в виде:
Урок 4. Циклы
Цикл– вычислительный процесс, характеризующийся многократным повторением одних тех же действий.
Число повторений цикла называется счетчиком и для него выделяется специальная переменная. На счетчик накладывается условие, определяющее количество повторений цикла. В цикле должно быть обеспечено изменение счетчика цикла, чтобы он мог завершиться за конечное число шагов. Повторяемый блок операторов называют телом цикла. Однократное выполнение цикла называют шагом цикла. Когда количество повторений неизвестно, используют цикл с условием:
· условие проверяется перед телом цикла (циклы с предусловием)
· условие повторяется после тела цикла (циклы с постусловием)
Существует специальный оператор принудительного выхода из цикла – break, который завершает выполнение тела цикла и передает управление оператору, следующему сразу за циклом.
Оператор цикла со счетчиком
Реализуется с помощью оператора for. После очередного повтора цикла происходит увеличение/уменьшение счетчика на 1. Далее это значение сравнивается с конечным значением счетчика и если счетчик не вышел за конечное значение, то тело цикла повторяется опять. Как только счетчик привысит конечное значение, выполнение цикла прекратится.
Последовательное увеличение счетчика на единицу: for счетчик:=А to В do оператор; А - начальное значение счетчика; В – конечное значение | Последовательное уменьшение счетчика на единицу: for счетчик:=А downto В do оператор; |
Цикл с предусловием
Реализуется с помощью оператора while. В этом случае условие проверяется до цикла. Выполнение тела цикла происходит до тех пор пока истинно условие. Как только условие становится ложным, управление передается на оператор следующий за циклом. Конструкция цикла:
while логическое условие do
Тело цикла
Соответственно, если в теле цикла содержится несколько операторов, то они заключаются в служебные слова begin…end.
ПРИМЕЧАНИЕ! Точка с запятой не ставится ни перед служебными словами then, else, do, ни после них.
Repeat
Тело цикла
until логическое выражение
Важно! Операторы begin…end здесь не требуются.
Метки
В большинстве случаев алгоритмы требуют организации программных переходов. В Паскаль требуется оператор безусловного перехода:
goto метка;
метка – произвольный идентификатор, позволяющий именовать определенный оператор в программе. После метки необходимо поставить двоеточие. Пример:
goto M2;
…
M2: write (D);
ЗАДАЧИ:
1. Определить количество учеников сдавших экзамен по предмету. Количество учеников ввести с клавиатуры.
2. Определить стоимость партии товара. Количество единиц товара и стоимость за единицу товара ввести с клавиатуры.
3. Найти все целые цифры в диапазоне от 100 до 999, сумма цифр которых больше произведения этих цифр.
4. Необходимо построить график функции y (N)=sin(0.2*N), где N – представляет собой последовательность целых чисел от 0 до 20. Для отметки каждой точки графика выбрать символ звездочку.
ПРИМЕЧАНИЕ! Одно деление на оси ординат (одно знакоместо) соответствует 0.1. Ось Х проходит параллельно левой границе экрана на расстоянии 20 символов.
Одномерные массивы
Одномерный массив представляет собой последовательность данных записанных в строку, каждый элемент массива имеет 1 порядковый номер (индекс). На месте индекса может стоять константа, переменная, выражение.
Любой массив сначала надо объявить:
Var
имя массива:array[тип индекса]of тип элементов;
Например:
Var
А:array[1..10]of integer;
Для ввода и вывода, а также для обработки элементов массива используют цикл со счетчиком:
For i:=1 to n do A[i]:=выражение; | For i:=1 to n do Read(A[i]); | For i:=1 to n do Write(A[i]); |
Запись A[2*i] означает, что будут рассмотрены четные элементы массива.
Запись A[2*i-1] означает, что будут рассмотрены нечетные элементы массива.
Двумерные массивы
Двумерный массив представляет собой таблицу из однотипных элементов, организованную по строкам и столбцам. Элемент такого массива записывается с 2-мя индексами, первый из которых – номер строки, второй – номер столбца.
Объявление массива:
Var
имя массива:array[тип индекса строки, тип индекса столбца]of тип элементов;
Например:
Var
А:array[1..10,1..10]of integer;
Для ввода и вывода, а также для обработки элементов массива используют 2 цикла со счетчиком:
For i:=1 to n do For j:=1 to m do A[i,j]:=выражение; | For i:=1 to n do For j:=1 to m do Read(A[i,j]); | For i:=1 to n do For j:=1 to m do Write(A[i,j]); |
ПРИМЕЧАНИЯ!
1. Массив можно заполнить случайными числами (функцией random(N)).
2. Подсчет суммы элементов массива выполняется по формуле: S=S+A[i]
3. Поиск максимального элемента выполняется по алгоритму:
· в некоторую переменную N записывается значение 1 элемента массива
· в цикле (от второго элемента) проверяем: если значение элемента массива больше N, то переписываем это значение в переменную N
4. Формула для заполнения массива: A[i]:=A[i-1]+A[i-2] называется итерационной, а числа – «числами Фибоначчи», означает, что каждый элемент массива равен сумме двух предыдущих.
5. Инвертирование элементов массива выполняется по алгоритму в цикле:
· некоторой переменной N присваивается значение первого элемента массива
· первому элементу массива присваивается значение последнего элемента массива
· последнему элементу массива присваивается значение N
6. Для квадратной матрицы (количество строк = количеству столбцов) справедливо следующее:
· для индексов элементов, стоящих на главной диагонали: i=j
· для индексов элементов, стоящих на побочной диагонали: i+j = n+1 (n – количество строк или столбцов)
· для индексов элементов, стоящих выше главной диагонали: i<j
· для индексов элементов, стоящих ниже главной диагонали: i>j
ЗАДАЧИ (ОДНОМЕРНЫЕ МАССИВЫ):
1. Значения элементов массива F[1..10] задаются с помощью следующего фрагмента программы:
F[1]:=1; F[2]:=1;
For i:=3 to 10 do
F[i]:=F[i-1]+F[i-2];
Какое значение будет иметь элемент массива F[9]?
2. Значения элементов массива A[1..10] задаются с помощью следующего фрагмента программы:
p:=1;
For i:=1 to 5 do
begin
A[2*i-1]:=i;
A[2*i]:=p;
p:=p*2
end.
Какое значение будет иметь элемент массива A[4], A[9]?
3. В программе используется одномерный целочисленный массив А с индексами от 1 до 10. Чему будут равны элементы массива после выполнения фрагмента программы:
For i:=1 to 10 do
A[i]:=i*5;
For i:=1 to 5 do
Begin
p:=A[i];
A[i]:=A[11-i];
A[11-i]:=p
End;
4. В программе используется одномерный целочисленный массив А с индексами от 1 до 10. Чему будут равны элементы массива после выполнения фрагмента программы:
For i:=1 to 10 do
A[i]:=2*i-1;
p:=A[10];
For i:=10 downto 2 do
A[i]:=A[i-1];
A[1]:=p;
5. Значения двух массивов A[1..10], B[1..10] задаются с помощью фрагмента программы. Сколько элементов массива будут иметь отрицательные значения?
p:=12;
For i:=1 to 10 do
Begin
A[i]:=p;
p:=p-2;
end; k:=1;
For i:=1 to 10 do
begin
B[i]:=A[i]*k;
k:=-k;
end;
6. Объявить целочисленный массив из 20 элементов. Заполнить массив случайными числами в интервале от 0 до 99. Вывести исходный массив на экран. Посчитать и вывести на экран сумму элементов данного массива.
7. Объявить целочисленный массив из 5 элементов. Заполнить его с клавиатуры. Найти сумму всех элементов массива, которые больше 9.
8. Объявить целочисленный массив из 10 элементов. Заполнить массив случайными числами в интервале от 0 до 20. Вывести исходный массив на экран. Посчитать и вывести на экран среднее арифметическое значение элементов данного массива.
9. Объявить целочисленный массив из 10 элементов. Заполнить массив случайными числами в интервале от 0 до 50. Вывести исходный массив на экран. Посчитать и вывести на экран максимальное значение элементов данного массива и порядковый номер этого элемента в массиве.
10.Объявить целочисленный массив из 10 элементов. Заполнить массив случайными числами в интервале от 0 до 50. Вывести исходный массив на экран. Вывести на экран инвертированный массив, в котором элементы будут поменяны местами: первый элемент меняется значением с последним, второй с предпоследним и т.д.
Урок 8. Запись
Данные, описывающие существенные стороны того или иного объекта путем включения в описание нескольких, часто разнотипных, элементов, называют записью (record). В языке Паскаль запись определяется путем указания служебного слова record и перечисления входящих в запись элементов с указанием типов этих элементов.
Запись Паскаля – структурированный комбинированный тип данных, состоящий из фиксированного числа компонент (полей) разного типа.
Например, анкетные данные о студенте вуза могут быть представлены в виде информационной структуры:
Такая структура называется двухуровневым деревом. В Паскале эта информация может храниться в одной переменной типа record (запись). Задать тип можно следующим образом:
type < имя _ типа >=record
<имя_поля1>: тип;
<имя_поля2>: тип;
…………………
<имя_поля K >: тип
end;
где record – служебное слово, а <имя_типа> и <имя_поля> - правильные идентификаторы языка Паскаль.
Описание анкеты студента в Паскале будет выглядеть так:
Type anketa=record
fio: string[45];
pol: char;
dat_r: string[8];
adres: string[50];
curs: 1..5;
grupp: string[3];
end;
Такая запись Паскаля, так же как и соответствующее ей дерево, называется двухуровневой.
Поля записи Паскаля могут иметь любой тип, в частности сами могут быть записями. Такая возможность используется в том случае, когда требуется представить многоуровневое дерево (более 2 уровней). Например, те же сведения о студентах можно отобразить трехуровневым деревом.
Такая организация данных позволит, например, делать выборки по году рождения или по городу, где живут студенты. В этом случае описание соответствующей записи в Паскале будет выглядеть так:
Type anketa1=record
fio: string[45];
pol: char;
dat_r: record;
god: integer;
mes: string[10];
den: 1..31;
end;
adres: record
gorod: string[25];
ulica: string [20];
dom, kv: integer;
end;
curs: 1..5;
grupp: string[3];
end;
Поля
После того, как определен тип записи Паскаля, можно определять переменную этого типа. Переменная определяется путем задания ее идентификатора и указания типа.
var
student: anketa;
student 1: anketa 1;
Элементы записи называются полями, а обращение к ним производится через использование их имен – идентификаторов полей. Практически, поля записи обрабатываются точно так же, как и любые другие переменные. Но в отличие от обычной переменной имена полей должны предваряться ссылкой на идентификатор записи Паскаля и отделяться от него точкой. Такая запись называется уточняющий идентификатор:
<имя_записи>.<имя_поля>
Например, чтобы обратиться к полю curs переменной student, необходимо указать следующее составное имя:student.curs:=3;
Для того чтобы обратиться к полю god в записи student 1, необходимо записать уточняющий идентификатор, состоящий из трех имен: student1.dat_r.god:=1982;
Использование полей записи Паскаля в выражениях и условиях идентично использованию обычных переменных.
Урок 1. Языки программирования. Этапы решения задач на ПК
Решение любой задачи разбивается на этапы:
1. Постановка задачи
2. Формализация (математическая постановка)
3. Выбор (или разработка) метода решения
4. Разработка алгоритма
5. Составление программы
6. Отладка программы
7. Вычисление и обработка результатов
1. При постановке задачи выясняется конечная цель и вырабатывается общий подход к решению задачи. Выясняется сколько решений имеет задача и имеет ли их вообще. Изучаются общие свойства рассматриваемого физического явления или объекта, анализируются возможности данной системы программирования.
2. На этом этапе все объекты задачи описываются на языке математики, выбирается форма хранения данных, составляются все необходимые формулы.
3. Выбор существующего или разработка нового метода решения (очень важен и, в то же время личностный этап).
4. На этом этапе метод решения записывается применительно к данной задаче на одном из алгоритмических языков (чаще на графическом).
5. Переводим решение задачи на язык, понятный машине.
Средства создания программ
В общем случае для создания программ нужно иметь следующие компоненты:
· текстовый редактор — для набора исходного текста программы;
· компилятор — для перевода текста программы в машинный код;
· редактор связей — для сборки нескольких откомпилированных модулей в одну программу;
· библиотеки функций — для подключения стандартных функций к программе.
Современные системы программирования включают в себя все указанные компоненты и называются интегрированными системами. По способу разработки программ можно выделить два подхода:
· процедурное программирование — это программирование, при котором выполнение команд программы определяется их последовательностью, командами перехода, цикла или обращениями к процедурам;
· объектно-ориентированное программирование – программирование, при котором формируются программные объекты, имеющие набор свойств, обладающие набором методов и способные реагировать на события, возникающие как во внешней среде, так и в самом объекте (нажатие мыши, срабатывание таймера, превышение числовой границы и т.д.). Таким образом, выполнение той или иной части программы зависит от событий в программной системе.
Объектно-ориентированное программирование (ООП) не исключает, а охватывает технологию процедурного программирования.