ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 21.03.2025

Просмотров: 1639

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

Московский государственный социальный университет

Часть I

Лекция 1: Введение в программирование.

Лекция 2: Язык Паскаль и системы программирования на Паскале.

Лекции 3-4: Базисные конструкции языка.

Лекции 5-6: Простые операторы и программы с линейной структурой.

Лекция 7: Операторы с условиями.

Лекция 8: Методика разработки простых программ.

Лекция 9: Концепция типа данных.

Лекция 10: Структурный тип - Массив.

Лекция 11: Структурный тип - Строка.

Лекция 15: Структурный тип - Множество.

Лекция 16: Структурный тип - Запись.

Часть II

Лекции 17-19: Модули и их использование.

Interface

Interface

Implementation

Interface

Implementation

Лекция 20: Структурный тип - Файл.

Лекции 21-22: Основные задачи обработки файлов.

Interface

Implementation

Лекция 23: Динамическая память и указатели.

Лекции 24-25: Использование указателей для представления динамически структур данных.

Лекции 26-27: Объекты и объектно-ориентированное программирование.

Interface

Implementation

Оглавление

Часть I 3

Часть II 53

Оператор if-then является сокращенной формой условного оператора, рассчитанного на тот случай, когда в ветви else используется пустой оператор.

Пустой оператор является одним из простых операторов: он не производит никаких действий и обозначается точкой с запятой (;).

Замечание

После оператора ветви then (перед ключевым словом else) не должна стоять точка с запятой, т.к. она будет восприниматься как дополнительный (пустой) оператор, что нарушит синтаксическую структуру оператора if-then-else!

В качестве оператора1 или оператора2 в if-then-else может быть использован другой оператор if-then-else. Это - случай вложенных операторов if-then-else. Вложенные операторы if-then-else существенно усложняют читаемость программы, они могут также приводить к неоднозначности их чтения, поэтому следует по возможности избегать использования вложенных операторов if-then-else. Во многих случаях они могут быть заменены оператором выбора из нескольких альтернатив, который мы рассмотрим позднее.

Помимо операторов условного перехода в Паскале имеется также оператор безусловного перехода, имеющий синтаксическую структуру goto <метка>.

Оператор goto относится к числу нежелательных для использования операторов, т.к. способен серьёзно усложнить структуру программы, сделав её подобной "блюду спагетти". По этой причине мы не останавливаемся подробнее на этом операторе. Практически во всех случаях можно избежать использования goto , получая хорошо структурированные программы. Исключение составляет только безусловные переходы, для которых в Турбо Паскале предусмотрены специальные формы:

переход к концу программы - halt;

выход из процедуры или функции - exit;

выход из цикла - break;

переход к началу цикла - continue.

3. Примеры программ с ветвящейся структурой.

Пример программы с операторами if -then-else на Турбо Паскале:

program quad_eq;

{Корни квадратного уравнения}

var a,b,c:real; d,f:real;

begin writeln('Нахождение корней уравнения A*x*x + B*x + C =0');

writeln('Введите коэффициенты уравнения:');


write('A=');read(a); write('B=');read(b);write('C=');read(c);

writeln('Корни уравнения:');

if (a=0) then writeln('Ошибка: А=0 ')

else begin d:= (b*b -4*a*c); f:=-b/(2*a);

if d<0 then writeln('Нет вещественных корней');

if d=0 then writeln('X1=X2=',f);

if d>0 then writeln('X1=',(f+sqrt(d)/(2*a)):2:3,' X2=',(f-sqrt(d)/(2*a)):2:3);

end;

end.

4. Операторы итерационных циклов.

Ещё одним видом операторов с условиями являются операторы итерационных циклов. В Турбо Паскале имеются две разновидности таких операторов: оператор с предусловием (оператор while-do) и оператор с постусловием (оператор repeat-until). Синтаксическая структура этих операторов имеет следующую форму:

while < условие > do <оператор >;

repeat <последовательность операторов > until <условие>;

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

В каждом операторе итерационного цикла будем различать условие и тело цикла (повторяющееся действие). Тело цикла while-do - это один оператор, записанный после do, а для цикла repeat-until - тело цикла может быть и последовательностью операторов, записанных между repeat и until.

В цикле while-do при входе в цикл вычисляется значение условия. Если условие есть true - выполняется тело цикла и повторно вычисляется значение условия. Если вычисленное условие окажется false - осуществляется выход из цикла и переход к следующему по порядку оператору программы. Тело цикла - один оператор, поэтому, как и в случае оператора if-then-else , если в теле цикла необходимо выполнить последовательность операторов, её следует заключить в операторные скобки begin end.

В цикле repeat-until при входе в цикл вначале выполняется тело цикла (последовательность операторов между repeat и until), а затем вычисляется значение условия (стоящего после until). Если условие есть true - производится выход из цикла, если же false - повторяется тело цикла и опять проверяется условие. В цикле repeat-until ключевые слова repeat-until выполняют также и роль операторных скобок.

Резюмируя выполнение операторов while-do и repeat-until, следует обратить внимание на их различие: для оператора while-do повторение тела цикла происходит при значении условия true, а для оператора repeat-until при значении условия false. Соответственно выход из цикла while-do происходит при значении условия false, а для цикла repeat-until - при значении условия true. Во многих случаях более предпочтительной конструкцией является repeat-until т.к. нет необходимости в использовании скобок begin end , однако иногда более простым оператором цикла является while-do (если в алгоритме возможен случай, когда тело цикла не выполнится ни разу).


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

Тело цикла может в свою очередь содержать оператор цикла. В этом случае мы имеем вложенные циклы.

5. Примеры программ с циклами.

Приведем два примера простых программ с итерационными циклами на Турбо Паскале. Первая из этих программ вычисляет разложение вводимого целого числа на простые множители, используя цикл while-do, а вторая - переводит исходное десятичное число в эквивалентное ему двоичное число, используя цикл repeat-until:

program decompos; {программа разложения числа N на простые множители}

var N,J:integer;

begin write('Введите число N='); readln(N);write('N=1'); J:=2;

while (N>=J) do if (N mod J = 0) then begin write('*',J); N:=N div J end

else J:=J+1; writeln

end.

program dec_bin;

{Перевод десятичного числа в двоичное}

var dec:integer; bin:string;c:char;

begin write('Введите десятичное число:');read(dec);

bin:='';repeat if dec mod 2=1 then c:='1' else c:='0';

bin:=c+bin;dec:=dec div 2;

until dec=0;

writeln('Двоичное число:', bin);

end.


Лекция 8: Методика разработки простых программ.

1. Введение в методологию программирования.

2. Разработка проекта программы на Турбо Паскале.

3. Методика разработки алгоритма.

4. Примеры разработки программ на Турбо Паскале.

1. Введение в методологию программирования.

Наиболее распространённое и устойчивое заблуждение среди начинающих осваивать программирование - стремление немедленно писать текст программы по полученному заданию. Причина заключается в том, что исходная постановка задачи (на естественном языке), как правило, далека от её представления на языке программирования, и преодолеть это расстояние “одним махом” сложно, особенно при отсутствии опыта и недостаточном знании языка.

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

1. Разработка проекта программы, содержащего уточненную постановку задачи в терминах “вход - выход”.

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

3. Отладка полученной программы.

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

Конечно, человек склонен, почти всегда, действовать “по минимуму”, поэтому желание писать программу “в один этап” всегда привлекательно. Постарайтесь преодолеть это заблуждение! В противном случае вам вряд ли удастся достичь успехов в практическом программировании. В действительности попытка непосредственно писать текст программы (иногда даже не прочитав толком постановку задачи !) всегда приводит к бÓльшим потерям времени, либо вообще не завершается успешно из-за допущенных ошибок.

Если вы намерены быстро и эффективно освоить процесс разработки программ - обязательно придерживайтесь приведенных выше этапов! Они позволят вам безболезненно преодолеть барьер между естественным языком, на котором поставлена задача, и формальным языком программирования, на котором вам необходимо получить решение задачи. Всё что вам потребуется для этого знать на начальном этапе, это - основы структурированной методики построения проекта программы и алгоритма задачи, а также основные конструкции языка программирования. Всё остальное приобретается в процессе практической работы по разработке программ. Ниже приводятся основы такой структурированной методики.


2. Разработка проекта программы на Турбо Паскале.

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

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

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

Входные и выходные переменные, записанные в терминах Турбо-Паскаля, должны иметь уникальные имена (выбираемые программистом). Хороший стиль программирования предполагает также наличие комментариев, отражающих назначение этих переменных в программе. Пока вы не определили все входные и выходные переменные, не следует двигаться дальше! Всё равно вам придётся это сделать, но лучше это сделать раньше. Это пригодится в дальнейшей работе над проектом.

Во-вторых, следует в постановке задачи выявить так называемые аномалии, т.е. такие значения входных переменных, для которых потребуется особая реакция программы. Например, если входной переменной является строка символов, то обычно аномалией является пустая строка, а иногда и строка, содержащая “запрещённые “ для данной программы символы. Конечно, в некоторых задачах, аномалии могут и отсутствовать, однако весьма часто они встречаются, и на них программа должна реагировать. Аномалии следует рассматривать как некоторые ограничения на входные переменные, обычно задаваемые условиями, при выполнении которых должна следовать реакция программы.