ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 21.04.2025
Просмотров: 1352
Скачиваний: 0
СОДЕРЖАНИЕ
Министерство образования и науки российской федерации
Начальный курс программирования на основе алгоритмического языка Паскаль
Часть. Основы программирования на Паскале
1.1. Структура простейшей Паскаль-программы
1.2. Данные и операции над ними
1.2.1. Свойства ячейки памяти. Переменные и константы
1.2.3. Правила записи констант
1.2.4. Описание переменных и именованных констант в Паскале
1.3. Операторы преобразования данных
1.4. Разработка простейших программ
1.4.1. Понятие о качестве программы и основные технологические принципы разработки программ
1.4.2. Алгоритм и способы его записи.
1.4.3. Изображение алгоритмов в виде блок-схем
1.4.4. Базовые структуры алгоритмов и их кодирование на Паскале
1.4.5. Примеры разработки программ
1.5.1. Понятие массива. Основные правила работы с массивами в Паскале
1.5.2. Примеры программ с массивами
1.614. Структура паскаль-программы
2.1. Общие сведения о подпрограммах
2.4. Глобальные и локальные имена
2.5. Использование подпрограммы в качестве параметра другой подпрограммы
2.6.4. Модули как средство программирования
Часть. Обработка символьной информации и документов сложной структуры
3.1. Обработка символьной информации
3.1.3. Подпрограммы, работающие со строками
Часть IV. Работа с динамическими массивами
Приложение 1. Краткая инструкция по работе в среде Turbo (Borland) Pascal.
Режимы компиляции программы, использующей модули
v:=v*(1+p/100);
i:=i+1
end
end;
Readln;
End.
Обратите внимание, что при v<nbвозможна ситуация, когда цикл выполнится меньше, чемnраз.
1.5. Массивы
1.5.1. Понятие массива. Основные правила работы с массивами в Паскале
До сих пор мы рассматривали только простые данные, т. е. данные, занимающие одну ячейку памяти. Значение простого данного представляет собой единое целое, не разделяется на компоненты. Существуютсложные данные, состоящие из нескольких компонент (и, соответственно, занимающих несколько ячеек памяти). Примером сложных данных (иногда говорят оданных сложной структурыилисложного типа) является массив.
Массив - это сложное данное, состоящее из конечного числа упорядоченных компонент, имеющих одно имя, одинаковый тип и расположенных в последовательных ячейках памяти компьютера.
Массивы применяются очень часто, так как многие задачи связаны с обработкой информации, представляющей собой конечное множество однотипных данных. Например, массивы оценок в студенческой ведомости, массивы выплат сотрудникам некоторого предприятия, массивы фамилий, имен и отчеств сотрудников, и т. д.
Упорядоченностькомпонент массива означает, что они пронумерованы. "Достать" компоненту можно указав ее номер (индекс) или номера, потому что у одной компоненты может быть несколько номеров; например, оценка в сводной ведомости успеваемости студентов характеризуется двумя номерами - номером студента и номером предмета. В Паскале индексы указываются в квадратных скобках.
Количество индексов у элементов массива называется размерностью массива. Массив размерности 1 называется также одномерным, размерности 2 - двумерным, и т. д. Двумерные массивы также называются матрицами.
Количество значений какого-либо индекса называется размером массива по данному индексу, а общее количество элементов массива -размером массиваили егодлиной. Легко видеть, что размер массива равен произведению его размеров по всем индексам.
В Паскале начальное значение каждого индекса может быть любым целым значением, как положительным, так отрицательным или нулевым. В примерах этого пособия поддерживается естественная нумерация элементов, начиная с единицы. Так, одномерный массив аиз двадцати элементов имеет элементыа[1], a[2],...,a[20]. Элементы двумерного массива (матрицы)bс размерами 3 и 5 можно представить в виде таблицы из 3 строк и 5 столбцов. Принято считать, что первый индекс является номером строки, а второй - номером столбца таблицы:
b[1][1] b[1][2] ... b[1][5]
b[2][1] b[2][2] ... b[2][5]
b[3][1] b[3][2] ... b[3][5]
При описании массивов необходимо указать начальное и конечное значение всех его индексов. Описание M-массива имеет вид:
имя: array[нач_знач1..кон_знач1] ...[ нач_значM..кон_значM]ofтип;
В квадратных скобках указывается нач_значiикон_значi– начальное и конечное значениеi-го индекса, обязательноконстанты, иначе компилятор не сможет выделить память под массив. После ключевого словаofуказывается тип элементов массива.
Например,
Vara:array[1..20]ofinteger; {одномерный массив – вектор - из 20 элементов целого типа}
b:array[1..3,1..5]ofreal;{двумерный массив – матрица - из 3 строк и 5 столбцов – вещественного типа}
c:array[1..N]ofinteger; { одномерный массив изNэлементов целого типа, описание допустимо только в том случае, еслиN- константа, определенная в разделе констант}
a1:array[0..19]ofreal;{одномерный массив из 20 элементов}
a2:array[-9..10]ofreal; { одномерный массив из 20 элементов }
Если некоторый тип-массив используется в программе несколько раз, то имеет смысл этот тип обозначить некоторым именем. Например,
AR1=ARRAY [1..10,1..10] OF REAL
Такое задание типа массив должно находиться в разделе типов Паскаль-программы. Раздел типов начинается с ключевого слова Typeи предназначен для определения нестандартных (т. е. не встроенных в алгоритмический язык) типов. Другие примеры нестандартных типов (кроме типа массив) будут рассмотрены ниже. Поскольку при описании типов могут потребоваться константы, а сами типы нужны при объявлении переменных, разумным12является следующий порядок следования разделов: констант, типов, переменных.
Для описания переменных Х, У этого типа в разделе переменных может присутствовать инструкция :
Х: AR1; У: AR1; {эквивалентно Х, У: AR1; }
Двумерные массивы располагаются в памяти по строкам,многомерные - так, что чаще меняются правые индексы.
В программах на Паскале в качестве индекса элемента массива можно использовать любое целочисленное выражение при условии, что его значение не выходит за объявленные при описании границы. Элемент массива (его также называют переменной с индексами) можно использовать в выражениях точно так же, как простую переменную такого же типа. Ввод и вывод массивов происходит поэлементно, т. е. для их программирования необходимо организовывать циклы.
1.5.2. Примеры программ с массивами
Пример 1. Дан массиваиз 20 элементов. Вычислить сумму положительных и количество неположительных элементов массива. Начиная с этого примера, с целью улучшения наглядности, характеристики данных будем представлять в виде таблицы:
Таблица 6. Состав данных примера 1.
|
Имя |
Смысл |
Тип13 |
Структура |
|
Исходные данные |
|||
|
а |
заданный массив |
вещественный |
одномерный массив из 20 элементов |
|
Выходные данные |
|||
|
s |
сумма положительных элементов массива |
вещественный |
простая переменная |
|
k |
количество неположительных элементов |
целый |
простая переменная |
|
Промежуточные данные |
|||
|
i |
счетчик элементов массива |
целый |
простая переменная |
Алгоритм состоит из ввода исходных данных, цикла, в котором накапливаются sиk, и вывода результатов. Цикл управляется переменнойi, которая изменяется от 0 до 19. Перед циклом накапливаемым переменным присваиваются начальные значения (нулевые, так как прибавление нуля не изменяет сумму). Основной частью тела цикла является ветвление. Блок-схема алгоритма приведена на рис. 9. Далее приведена Паскаль-программа.
program primer_1_5_2;
Var a:array[1..20] of real; s:real; k,i:integer;
Begin
writeln('Введите массив из 20 элементов');
{Далее цикл для поэлементного ввода массива}
for i:=1 to 20 do
read(a[i]);
readln; {Далее алгоритм по блок-схеме}
s:=0; k:=0;
for i:=1 to 20 do
if a[i]>0 then
s:=s+a[i]
else
k:=k+1;
writeln(' s=',s,' k=',k);
readln{задержка экрана с результатами до нажатия ENTER}
End.
Пример 2. Дан массиваизNэлементов (N10). Вычислить произведение элементов массива, меньших заданного значенияс.
Таблица 7. Состав данных примера 2.
|
Имя |
Смысл |
Тип |
Структура |
|
Исходные данные |
|||
|
с |
заданное значение |
веществ. |
простая переменная |
|
N |
число элементов массива |
целый |
простая переменная |
|
а |
заданный массив |
веществ. |
одномерный массив из 10 элементов |
|
Выходные данные |
|||
|
р |
произведение элементов массива, удовлетворяющих условию |
веществ. |
простая переменная |
|
Промежуточные данные |
|||
|
i |
счетчик элементов массива |
целый |
простая переменная |
|
k |
количество элементов, удовлетворяющих условию |
целый |
простая переменная |
Обратите внимание, что структура массива апредполагает отведение пода десяти ячеек памяти. В программе описывается массиваиздесятиэлементов, a используются лишь первые N них. Пользователь данной программы должен помнить, что вводимое значение числа элементов массива должно находиться в интервале 1N10. Проверка корректности введенного значения N, несомненно, улучшила бы надежность программы; с целью упрощения программы мы не делаем такой проверки. Для устранения необходимости распределения памяти под массив «по максимуму» в любом алгоритмическом языке , требующем компиляции, следует использовать операторы динамического распределения памяти, но этот материал выходит за границы данного пособия.
Блок-схема алгоритма приведена на рис. 10. Алгоритм не сильно отличается от рассмотренного в примере 1. Остановимся на различиях. Для накапливания произведения необходимо перед циклом переменной р присвоить начальное значение 1 (умножение на 1 не изменяет произведение). Переменнаяkнужна для выявления ситуации отсутствия элементов, меньших заданного значения; развилка после цикла позволяет обнаружить эту ситуацию.
Далее приведена программа.
program primer2_1_5_2;
Type mas=array[1..10] of real;
Var a:mas;{можно обойтись без раздела типов,
используя описание a:array[1..10] of real}
c,p:real; N,k,i:integer;
Begin
writeln ( 'Введите c, N'); readln(c,N);
writeln ( 'Введите массив из ', N, ' элементов');
for i:=1 to N do
read(a[i]); readln;
p:=1; k:=0;
for i:=1 to N do
if a[i]<c then
begin
p:=p*a[i]; k:=k+1
end;{begin-end ограничивают ветвь "да"}
if k=0 then
writeln ('таких элементов нет')
else
writeln(' p=',p);
readln{задержка экрана с результатами до нажатия ENTER}
End.
Пример 3. Дан массиваизNэлементов (N10). Найти минимальное значение среди элементов массива и номер элемента с таким значением.
Таблица 7. Состав данных примера 3.
|
Имя |
Смысл |
Тип |
Структура |
|
Исходные данные |
|||
|
N |
число элементов массива |
целый |
простая переменная |
|
а |
заданный массив |
вещественный |
одномерный массив из 10 элементов |
|
Выходные данные |
|||
|
min |
минимальный элемент массива |
вещественный |
простая переменная |
|
k |
номер минимального элемента |
целый |
простая переменная |
|
Промежуточные данные |
|||
|
i |
счетчик элементов массива |
целый |
простая переменная |
Блок-схема алгоритма приведена на рис. 11. В начале каждого выполнения цикла min– это минимальное значение среди (i-1) первых элементов массива. Это значениеminсравнивается с а[i] и в результате определяется минимум из первыхiэлементов массива; при изменении текущего минимального значения запоминается номер элемента, на котором достигается текущий минимум (операторk:=i).