Файл: программирование на паскале2.doc

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

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

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

Добавлен: 21.04.2025

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

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

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

СОДЕРЖАНИЕ

Министерство образования и науки российской федерации

Начальный курс программирования на основе алгоритмического языка Паскаль

Введение

Часть. Основы программирования на Паскале

1.1. Структура простейшей Паскаль-программы

1.2. Данные и операции над ними

1.2.1. Свойства ячейки памяти. Переменные и константы

1.2.2. Типы данных

1.2.3. Правила записи констант

1.2.4. Описание переменных и именованных констант в Паскале

1.2.5. Выражения

1.3. Операторы преобразования данных

1.3.1. Оператор присваивания

1.3.2. Понятие ввода и вывода

1.3.3. Оператор вывода

1.3.4. Оператор ввода

1.4. Разработка простейших программ

1.4.1. Понятие о качестве программы и основные технологические принципы разработки программ

1.4.2. Алгоритм и способы его записи.

1.4.3. Изображение алгоритмов в виде блок-схем

1.4.4. Базовые структуры алгоритмов и их кодирование на Паскале

1. Следование

2. Ветвление (развилка)

If условие then

If условие then

3. Цикл

1.4.5. Примеры разработки программ

1.5. Массивы

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

1.5.2. Примеры программ с массивами

1.614. Структура паскаль-программы

Часть.Подпрограммы

2.1. Общие сведения о подпрограммах

2.2. Процедуры в Паскале

2.2.1.Описание процедур

2.2.2. Обращение к процедуре

2.3. Функции Паскаля

2.3.1. Описание функций

2.3.2. Обращение к функции

2.4. Глобальные и локальные имена

2.5. Использование подпрограммы в качестве параметра другой подпрограммы

2.6. Модули

2.6.1. Общие сведения

2.6.2. Структура модуля

2.6.3. Использование модулей

2.6.4. Модули как средство программирования

Часть. Обработка символьной информации и документов сложной структуры

3.1. Обработка символьной информации

3.1.1. Символьный тип

3.1.2.Строковые типы

3.1.3. Подпрограммы, работающие со строками

Функции

Процедуры

3.2. Тип запись

3.3. Файлы

3.3.1. Общие понятия

3.3.2. Файлы в Турбо Паскале

3.3.3. Текстовые файлы

Пример 1

Пример 2

3.3.4. Типизированные файлы

3.3.5. Нетипизированные файлы

Часть IV. Работа с динамическими массивами

Приложение 1. Краткая инструкция по работе в среде Turbo (Borland) Pascal.

Режимы компиляции программы, использующей модули

Приложение 2. Краткая инструкция по работе в режиме консольного приложения средыDelphi. Создание консольного приложения

Сохранение консольного приложения.

Отладка программы

Контрольные вопросы

Заключение

Библиографические ссылки

Содержание

Часть IV. Работа с динамическими массивами 98

Если минимальное (одинаковое) значение имеют несколько элементов массива, то предложенный алгоритм выдаст наименьший из их индексов; при нестрогом неравенстве (a[i]min) будет выдаваться наибольший номер. В ситуации, когда надо определить номера всех элементов, имеющих минимальное значение, алгоритм должен иметь два цикла обработки: в первом цикле должен определяться минимум, а во втором по сравнениюmin=a[i] находиться номера элементов.

program primer3_1_5_2;

Var a:array[1..10] of real;

min:real; N,k,i:integer;

Begin

writeln( 'Введите число элементов массива,N<=10 ');

readln(N);

writeln( 'Введите массив из ',N, ' элементов');

for i:=1 to N do

read(a[i]);

readln; {Закончен ввод, далее алгоритм по блок-схеме}

min:=a[1]; k:=1;

for i:=2 to N do

if a[i]<min then

begin

min:=a[i];

k:=i

end;{begin-endограничивают ветвь "да"}

writeln(' min=',min, ' k=', k);

readln{задержка экрана с результатами до нажатияENTER}

End.

Пример 4. Дана матрицааизNстрок иMстолбцов (N5,M5). Для каждой строки матрицы найти сумму элементов и определить число строк, для которых эта сумма положительна.

Таблица 8. Состав данных примера 4.

Имя

Смысл

Тип

Структура

Исходные данные

N

число строк матрицы

целый

простая переменная

М

число столбцов

целый

простая переменная

а

заданная матрица

вещественный

двумерный массив размером 5*5

Выходные данные

i

счетчик строк матрицы

целый

простая переменная

s

сумма элементов i-ой строки

вещественный

простая переменная

k

число строк с положи­тельной суммой эле­ментов

целый

простая переменная

Промежуточные данные

j

счетчик столбцов матрицы

целый

простая переменная


Обратим внимание, что считая s простой переменноймы предполагаем, что значения сумм всех строк должны последовательно записываться в одну ячейку памяти. В этом случаев одном цикле по строкам мы должны вычислить сумму элементов строки s, вывести s и сравнить ее с нулем для вычисления k. Можно было объявить s как одномерный массив (число его элементов равно числу строк матрицы); тогда алгоритм обработки мог бы состоятьиз двух последовательных циклов по строкам:в первом из них вычислялись бы все элементы массива s и накапливалось значение k, а во втором производился бы вывод значений элементов массива s.

Таким образом, этот несложный пример иллюстрирует два очень важных положения:

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

  2. выбор структуры данных влияет на алгоритм.

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

Разработанный алгоритм имеет кратный (вложенный) цикл: тело цикла, управляемого параметром i - этот цикл называетсявнешним, - содержит цикл, управляемый параметром j,внутренний цикл.Представленная конструкция также называетсяциклом кратности (вложенности) 2. Заметим, что внешний цикл (с параметром i) обеспечивает переход от строки к строке матрицы, внутренний цикл (с параметром j) обеспечивает движение по строке (т. е. переход от столбца к столбцу при фиксированном значении i).

да

нет

Рис. 12,б. Детализация блока 6.


Программа, написанная по блок-схема рис.12,в приведена ниже.

program primer4_1_5_2;

Var a:array[1..5,1..5] of real;

s:real; N,M,k,i,j:integer;

Begin

writeln ( 'Введите число строк матрицы, N<=5 ');

readln(N);

writeln ( 'Введите число столбцов матрицы, М<=5 ');

readln(M);

writeln ( 'Введите матрицу размером', N, '* ', M);

for i:=1 to N do

for j:=1 to M do

read(a[i,j]);

readln; {Закончен ввод, далее алгоритм по блок-схеме}

k:=0;

writeln(' i',' s');{вывод заголовков столбцов i,s }

for i:=1 to N do

begin

s:=0;

for j:=1 to M do

s:=s+a[i,j];

if s>0 then

k:=k+1;

writeln(i:2, s);

end;{begin-end ограничивают тело внешнего цикла}

writeln(' k=', k);

readln{задержка экрана с результатами до нажатия ENTER}

End.


1.614. Структура паскаль-программы

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

Программа состоит из заголовка и блока. Общий вид заголовка:

programИмя_программы;

Имя программы должно являться идентификатором (см. §1.2.1)

Блок программы состоит из следующих разделов:

раздел меток (LABEL);

раздел констант (CONST);

раздел типов (TYPE);

раздел переменных (VAR);

раздел процедур (PROCEDURE) и функций (FUNCTION);

раздел действий.

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

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

Далее дается краткая характеристика каждого из разделов.

Раздел меток

Любой исполняемый оператор может быть снабжен меткой. В стандартном Паскале метка - это целая положительная константа. Метка отделяется от оператора двоеточием. Все используемые в блоке метки должны быть описаны в разделе LABEL. На помеченные операторы можно перейти с помощью оператора безусловного перехода goto. Структурное программирование ограничивает использование меток и операторов безусловного перехода, поэтому в данном пособии они не рассматриваются.

Раздел констант

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

имя_константы=значение_константы

Раздел типов

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

Имя_типа=описание_типа

Пример:

CONST N=20;

TYPE

MAS1=ARRAY[1..N,1..7] OF REAL;

Кроме массивов, в Паскале имеются другие нестандартные типы. К ним, например, относятся тип перечисление и тип отрезок.

Тип перечислениезадается перечислением тех значений, которые может принимать данное этого типа. Описание типа:

Имя_типа=(значение_1,значение_2,...,значение_N);

Каждое значение именуется некоторым идентификатором. Значения считаются упорядоченными:


значение_1<значение_2< ...<значение_N.

Примеры перечисляемых типов: DAY=(SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURDAY,FRIDAY,SATURDAY);

COLOR=(BLACK,BROWN,GREEN,YELLOW,WHITE).

Переменные этих типов должны быть описаны в разделе VARобычным образом:

DATE:DAY; PAINTER:COLOR.

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

В дальнейшем нам понадобится термин "порядковый тип". Порядковый тип- это тип, для которого все допустимые значения могут быть некоторым образом упорядочены (перенумерованы). Типыinteger, char, boolean, перечисления являются порядковыми. Заметим, что типrealне считается порядковым, хотя, принимая во внимание ограниченное число разрядов, отводимое на представление вещественного числа в памяти ЭВМ, значения типа REAL можно упорядочить.

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

Общий вид описания ограниченного типа:

Имя_типа=нижняя_граница..верхняя_граница

Нижняя граница не должна превышать верхнюю. Базовый тип определяется типом границ.

Пример описания ограниченных типов:

ktype=1..20;

workday=MONDAY..FRIDAY;

color1=BROWN..YELLOW;

Для типа ktype базовый тип - INTEGER, для типа workday - DAY, для типа color1 - COLOR.

Пример описания переменных ограниченных типов:

К:ktype; N,N1,N2:workday; col:color1;

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

Задание ограниченного типа и типа перечисления может производиться не в разделе TYPE, а непосредственно при описании переменных. Например,

i: 1..100; color10: (blue,red yellow, green);

Раздел переменных

Напомним, что каждая используемая переменная должна быть описана в разделе VAR. Общий вид раздела:

VAR

<список1 имен переменных>:<тип1>;

<список2 имен переменных>:<тип2>;

. . .

<списокN имен переменных>:<типN>;