Структурные типы данных в Pascal

Понятие, элементы и операции с одномерными массивами. Стандартные процедуры обработки данных в Pascal. Отличие одномерного массива от двумерного. Написание программы для определения суммы и произведения чисел. Ввод и вывод строк, поиск длины предложений.

Рубрика Программирование, компьютеры и кибернетика
Вид методичка
Язык русский
Дата добавления 27.04.2016
Размер файла 35,6 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://allbest.ru

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

Федеральное государственное образовательное учреждение высшего профессионального образования

«ЮЖНЫЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

Структурные типы данных в Pascal

Горбанева О.И.

Ростов-на-Дону

2011

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

Печатается в соответствии с решением кафедры прикладной математики и программирования факультета математики, механики и компьютерных наук ЮФУ, протокол № от 2011г.

СОДЕРЖАНИЕ

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

1.1 Что такое одномерный массив

1.2 Описание одномерного массива

1.3 Операции с одномерными массивами

1.4 Стандартные процедуры обработки одномерных массивов

1.5 Некоторые примеры решения задач на массивы

1.6 Вопросы

1.7 Задания

2. Двумерные массивы

2.1 Что такое двумерный массив

2.2 Описание двумерного массива

2.3 Операции с двумерными массивами

2.3 Стандартные процедуры обработки двумерных массивов

2.5 Некоторые примеры решения задач на массивы

2.6 Вопросы

2.7 Задания

3. Строки

3.1Описание строки

3.2 Операции со строками

3.3 Некоторые примеры решения задач на строки

3.4 Вопросы

3.5 Задания

1. ОДНОМЕРНЫЕ МАССИВЫ

1.1 Что такое одномерный массив

Массив - это упорядоченная последовательность однотипных данных, объединенная под одним именем. Каждый элемент массива имеет порядковый номер в массиве.

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

T={10, 12, 6, 0, -4, -3, -1, 1, 3, 7, 5, 9, 12, 15, 13, 16, 14, 18, 20, 18, 22, 19, 18, 18, 18, 17, 16, 18, 19,15}.

То есть, температура в первый день месяца - первый элемент массива - равна T(1) = 10, температура за десятый день месяц - десятый элемент массива - T(10) = 7, температура за двадцать пятый день месяца - T(25) = 18.

Еще одним примером массива является список студентов в группе:

1. Иванов;

2. Петров;

3. Сидоров;

4. Федоров;

5. Коваленко;

6. Костенко;

7. Королев;

8. Медведев;

9. Матвеева;

10. Филимонова.

Это - пример массива, состоящего из десяти элементов. Третий элемент массива - Сидоров. Седьмой элемент массива - Королев. Десятый элемент массива (он же последний) - Филимонова.

1.2 Описание одномерного массива

При описании массива нужно указать имя массива, диапазон изменения индексов (номеров элементов) и тип элементов. Описывать массив можно как в разделе type, так и в разделе var.

Описание массива в разделе type:

Type имя_типа = array [ном_нач .. ном_кон] of тип_элем;

var имя_мас : имя_типа;

Описание массива в разделе Var:

Var имя_массива : array [ном_нач .. ном_кон] of тип_элем;

Здесь имя_массива - имя самого массива, тип_элем - тип элементов массива, например integer; char; string; real и т.д., ном_нач - начальный номер элементов массива, ном_кон - конечный номер элементов массива,

Пример объявления массива:

Var a: array [1..15] of integer;

Здесь описан массив a из пятнадцати целых элементов.

Тот же массив можно было объявить следующими способами:

Type mas = array [1..15] of integer;

Var a:mas;

1.3 Операции с одномерными массивами

1) Обращение к элементу массива происходит путем указания имени массива, после чего в квадратных скобках указывается номер элемента в массиве;

a[4] - обращение к четвертому элементу массива;

b[i] - обращение к i-му элементу массива.

Над элементом массива можно осуществлять те же операции, что и над переменными того же типа.

2) Присваивание: с массивами в целом можно выполнять только эту операцию.

x:=y - присваивания одного массива другому,

причем массивы должны быть одного типа.

Все остальные действия можно выполнять только с отдельными элементами массива.

1.4 Стандартные процедуры обработки одномерных массивов

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

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

1) Ввод массива. Массив нельзя вводить с клавиатуры при помощи оператора readln(a). Каждый элемент массива приходится вводить отдельно. А так как в массиве 10 элементов, то нужно перебрать все эти элементы. То есть номер элемента i будет меняться от 1 до 10, для ввода массива нужно завести цикл от i=1 до i=10, на каждом шаге которого будет вводиться с клавиатуры очередной i-й элемент массива:

For i:=1 to 10 do readln(a[i]);

2) Вывод массива. Аналогично вводу, каждый элемент любого массива приходится выводить отдельно. А так как элементов несколько, то для вывода массива нужно завести цикл от i=1 до i=10:

For i:=1 to 10 do writeln(a[i]);

3) Нахождение суммы элементов массива. Сумма всех элементов массива будет содержаться в переменной s. Переберем все элементы массива (for i:=1 to 10 do) и добавим их к переменной s (s:=s+a[i]). Но предварительно до перебора всех элементов переменную s обозначим за 0, так как пока в сумме s ни один элемент массива не учтен.

Соответствующий фрагмент программы:

S:=0;

For i:=1 to 10 do s:=s+a[i];

Writeln(s);

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

Program z1;

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

i, s:integer;

begin

for i:=1 to 10 do readln(a[i]);

s:=0;

for i:=1 to 10 do s:=s+a[i];

writeln(s)

end.

4) Нахождение произведения элементов массива. Произведение всех элементов массива будет содержаться в переменной p. Переберем все элементы массива (for i:=1 to 10 do) и умножим их на переменную p (p:=p*a[i]). Но предварительно до перебора всех элементов переменную p обозначим за 1, а не за 0, так как при умножении дальнейших элементов на 0 получим в результате 0, а не то произведение, которое мы ищем.

Соответствующий фрагмент программы:

p:=1;

For i:=1 to 10 do p:=p*a[i];

Writeln(p);

Текст всей программы:

Program z2;

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

i, p:integer;

begin

for i:=1 to 10 do readln(a[i]);

p:=1;

for i:=1 to 10 do p:=p*a[i];

writeln(p)

end.

5) Нахождение минимального (наименьшего) и максимального (наибольшего) элемента массива. Рассмотрим нахождение максимального элемента в массиве. Для хранения максимального элемента заведем переменную max.

Для определения максимума в массиве первый элемент массива обозначим за максимальный (max:=a[1]), затем пересмотрим все остальные элементы массива (for i:=2 to 10 do) и если встретим элемент, больший того, который считался максимальным до этого момента (if a[i]>max then), то обозначим его за максимальный (max:=a[i]).

Соответствующий фрагмент программы:

max:=a[1];

For i:=1 to 10 do if a[i]>max then max:=a[i];

Writeln(max);

Текст всей программы:

Program z3;

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

i,max:integer;

begin

for i:=1 to 10 do readln(a[i]);

max:=a[1];

For i:=2 to 10 do if a[i]>max then max:=a[i];

Writeln(max);

end.

1.5 Некоторые примеры решения задач на массивы

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

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

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

Соответствующий фрагмент программы:

S:=0;

For i:=1 to 10 do if a[i]>3 then s:=s+a[i];

Writeln(s);

Текст программы:

Program z2;

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

i, s:integer;

begin

for i:=1 to 10 do readln(a[i]);

s:=0;

for i:=1 to 10 do if a[i]>3 then s:=s+a[i];

writeln(s)

end.

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

Соответствующий фрагмент программы:

p:=1;

For i:=1 to 10 do if a[i] mod 2 =0 then p:=p*a[i];

Writeln(p);

Текст программы:

Program z5;

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

i, p:integer;

begin

for i:=1 to 10 do readln(a[i]);

p:=1;

for i:=1 to 10 do if a[i] mod 2 =0 then p:=p*a[i];

writeln(p)

end.

Пример 3. Найти количество элементов, принадлежащих промежутку (2; 10].Введем переменную k, отвечающую за количество нечетных элементов. В данном случае перебираем все элементы массива и если находим элемент из промежутка (2; 10], добавляем к переменной k единицу (то есть мы указываем, что найден еще один элемент массива, удовлетворяющий условию задачи).

Соответствующий фрагмент программы:

k:=0;

for i:=1 to 10 do if (a[i]>2)and(a[i]<=10) then k:=k+1;

writeln(k)

Текст программы:

Program z6;

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

i, k:integer;

begin

for i:=1 to 10 do readln(a[i]);

k:=0;

for i:=1 to 10 do if (a[i]>2)and(a[i]<=10) then k:=k+1;

writeln(k)

end.

Пример 4. Найти минимальный элемент в массиве и его порядковый номер (то есть его нахождение в массиве). Введем дополнительную переменную, допустим k, в которой хранится номер минимального элемента.

о есть изначально за минимум возьмем первый элемент массива, и укажем, что номер минимального элемента - первый

(Min:=a[1]; k:=1;).

Затем перебираем все оставшиеся элементы массива, (for i:=2 to 10 do) и, как только найдем элемент, меньший того элемента, который на данный момент является минимальным элементом среди предыдущих элементов массива (if a[i]<min then) , обозначаем этот элемент за минимум (min:=a[i]) и указываем, что изменился и номер минимального элемента (k:=i).

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

For i:=1 to 10 do if a[i]<min then begin

Min:=a[i];

K:=i;

end;

Текст программы:

Program z7;

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

i, min, k:integer;

begin

for i:=1 to 10 do readln(a[i]);

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

For i:=1 to 10 do if a[i]>max then

begin

min:=a[i];

k:=i;

end;

end.

Пример 5. На протяжении всего апреля каждые сутки в полдень измеряется температура в городе. Определить среднюю температуру морозных дней в апреле.

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

Program z8;

Var t:array [1..30] of real;

sum, srt: real;

i, k: integer;

Begin sum:=0;

k:=0;

for i:=1 to 30 do

Begin write(`Введите температуру за `, i, `-е апреля `);

readln(t[i]);

end;

for i:=1 to 30 do If t[i]<0 then

Begin sum:=sum+t[i];

k:=k+1;

end;

srt:=sum/k;

writeln(`Средняя температура морозных дней в апреле `,srt:10:2)

end.

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

Program z9;

Var t:array [1..30] of real;

max: real;

i: integer;

Begin for i:=1 to 30 do

Begin write(`Введите температуру за `, i, `-е апреля `);

readln(t[i]);

end;

max:=t[i];

for i:=2 to 30 do If t[i]>max then max:=t[i];

writeln(`Максимальная температура в апреле `,max:10:2)

end.

1.6 Вопросы

1. Как объявлять одномерные массивы в Паскаль?

2. Приведите примеры одномерных массивов.

3. Какие операции можно осуществлять над всем массивом сразу?

4. Как обращаться к элементам массива?

5. Как найти минимальный элемент в массиве?

1.7 Задания

Составить программу для решения задачи, используя одномерные массивы:

Вариант 1. Вычислить сумму элементов массива X(6), которые принадлежат отрезку [0; 1].

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

Вариант 2. В массиве целых чисел M(8) вычислить среднее арифметическое положительных элементов.

Есть данные о глубине океана в 20 его точках. Найти минимум из этих величин.

Вариант 3. В массиве целых чисел X(7) найти количество элементов, которые лежат в отрезке [-1; 1].

По данным за месяц о суточной температуре воздуха в местности выяснить, сколько было засушливых дней? (т.е. средняя температура за день больше 20°С).

Вариант 4. Определите максимальный элемент массива B(5) и его порядковый номер.

По данной плотности населения в 15 точках местности вычислить среднюю плотность населения местности.

Вариант 5. В массиве целых чисел C(6) найти произведение элементов, больших семи.

Измерили 15 раз процент содержания минерала в почве. Выяснить, сколько раз концентрация минерала в почве оказалась менее 10 процентов?

Вариант 6. В массиве целых чисел X(8) подсчитать сумму отрицательных элементов.

Дано население во всех 18 городах страны. Вычислить общее население в стране.

Вариант 7. В массиве целых чисел A(8) найти сумму положительных элементов.

По известным данным рождаемости в городе за каждый месяц выяснить, сколько детей родилось за год?

Вариант 8. В массиве целых чисел B(10) найти количество элементов, расположенных в пределах [0; 1] .

На протяжении месяца каждый день измерялась скорость ветра в определенной местности. Выяснить максимальную скорость ветра за месяц.

Вариант 9. В массиве целых чисел A(8) найти количество нулевых элементов.

Известно население 10 населенных пунктов (в тыс.). Сколько из них являются городами? (т.е. более 40 тыс. чел.).

Вариант 10. Вычислить произведение отрицательных элементов массива целых чисел A(8).

Выяснить, сколько в группе совершеннолетних человек, если известен возраст каждого члена группы из 25 человек? (Совершеннолетним считается человек, возраст которого не менее 18 лет)

Вариант 11. Найти в массиве целых чисел A(10) сумму элементов, меньших 7.

Глубина реки измерена в 16 местах. Может ли по ней проплыть судно подводной высотой 4 м? (т.е. минимальная глубина должна быть более 4 м)

Вариант 12. В массиве целых чисел A(5) найти произведение нечетных элементов.

Каждый день на протяжении всего месяца измеряется содержание кислорода в атмосфере (в процентах). Определить минимальную за месяц концентрацию кислорода в воздухе.

2. ДВУМЕРНЫЕ МАССИВЫ

2.1 Что такое двумерный массив

Двумерный массив - это массив, каждый элемент которого, в свою очередь также является массивом. Каждый элемент двумерного массива определяется двумя индексами - номером элемента в первом внешнем массиве и номером элемента во втором внутреннем массиве.

Двумерный массив можно представить в виде таблицы, элементы которого расположены по строкам и столбцам. Первый индекс элемента - это номер строки, второй - номер столбца (таблица 1).

Таблица 1. Матрица

1-й столбец

2-й столбец

m-й столбец

1-я строка

a11

a12

a1m

2-я строка

a21

a22

a2m

n-я строка

an1

an2

anm

То есть, элемент a35 располагается на пересечении 3-й строки и 5-го столбца, элемент aij - на пересечении i-й строки и j-го столбца.

Пример двумерного массива - зал в кинотеатре. В зале имеется некоторое количество рядов, в каждом из которых имеется некоторое количество мест. Допустим, 8-й ряд место 12 - элемент двумерного массива - первый индекс i=8, второй индекс - j=12.

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

Даже дата в каком-либо году - двумерный массив: первый индекс - номер месяца, второй - номер дня в месяце.

2.2 Описание двумерного массива

При описании массива нужно указать имя массива, диапазоны изменения двух индексов и тип элементов. Описывать массив можно как в разделе type, так и в разделе var тремя способами.

Самый частый способ:

Var имя_мас:array [нач_индекс1 .. кон_индекс1, нач_индекс2 .. кон_индекс2] of тип_элем;

Еще один способ - непосредственно указать, что данная структура - массив массивов:

Var имя_мас:array [нач_индекс1 .. кон_индекс1] of array [нач_индекс2 .. кон_индекс2] of тип_элем;

И наименее встречающееся описание:

Var имя_мас:array [нач_индекс1 .. кон_индекс1][нач_индекс2 .. кон_индекс2] of тип_элем;

Здесь имя_массива - имя самого массива, тип_элем - тип элементов массива, например integer; char; string; real и т.д., нач_индекс1 - нижнее значение первого индекса элементов массива, кон_индекс1 - верхнее значение первого индекса массива, нач_индекс2 - нижнее значение второго индекса элементов массива, кон_индекс2 - верхнее значение второго индекса массива. Первый индекс указывает на номер строки, а второй - на номер столбца, на пересечении которых находится элемент.

Пример объявления массива:

Var tabl: array [1..9,1..9] of integer;

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

Тот же массив можно было объявить следующими способами:

Var tabl: array [1..9][1..9] of integer;

Var tabl: array [1..9] of array [1..9] of integer;

2.3 Операции с двумерными массивами

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

a[4,8] - обращение к элементу массива a, расположенному на пересечении четвертой строки и восьмого столбца;

b[i, j] - обращение к элементу массива b, расположенному на пересечении i-й строки и j-го столбца.

Над элементом массива можно осуществлять все допустимые операции для переменных типа того элемента.

2) Присваивание: с массивами в целом можно выполнять только эту операцию.

x:=y - присваивания одного массива другому,

или x[i]:=y[j] - присваивание одной строки массива другой,

причем массивы должны быть одного типа и иметь одинаковое количество присваиваемых элементов.

Все остальные действия можно выполнять лишь с отдельными элементами массива.

2.4 Стандартные процедуры обработки двумерных массивов

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

Var a:array [1..15, 1..10] of integer;

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

1) Ввод массива. Каждый элемент двумерного массива приходится вводить отдельно, так же как и в случае одномерного массива. А так как элементов несколько, то чтобы перебрать все элементы, нужно перебрать все строки от 1 до 15, а в каждой из строк перебрать все номера столбцов.

То есть, при рассмотрении первой строки (i=1) мы должны рассмотреть все номера столбцов, (с j=1 до j=10), при рассмотрении второй строки (i=2) мы должны также рассмотреть все номера столбцов, (с j=1 до j=10), и т.д., при рассмотрении последней строки (i=15) мы должны рассмотреть все номера столбцов, (с j=1 до j=10).

То есть для ввода массива нужно завести цикл от i=1 до i=15, который будет содержать внутренний цикл от j=1 до 10:

For i:=1 to 15 do for j:=1 to 10 do readln(a[i,j]);

2) Вывод массива. Аналогично вводу, каждый элемент любого массива приходится выводить отдельно, для чего нужно завести цикл от i=1 до i=15, который также будет содержать внутренний цикл от 1 до 10. Чтобы вывести массив в виде таблицы, нужно после ввода каждой строки (то есть после перебора всех номеров столбцов), перейти на новую строку при помощи оператора writeln:

For i:=1 to 15 do

begin for j:=1 to 10 do writeln(a[i]);

writeln;

end;

3) Нахождение суммы элементов массива. Элементы двумерного массива складываются аналогично одномерным, только меняются уже два индекса, в то время как в одномерном массиве - один.

Соответствующий фрагмент программы:

S:=0;

For i:=1 to 15 do for j:=1 to 10 do s:=s+a[i,j];

Writeln(s);

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

Program z1;

Var a:array [1..15,1..10] of integer;

i, j, s:integer;

begin

for i:=1 to 15 do for j:=1 to 10 do readln(a[i,j]);

for i:=1 to 15 do

begin for j:=1 to 10 do writeln(a[i,j]);

writeln;

end;

s:=0;

for i:=1 to 15 do for j:=1 to 10 do s:=s+a[i,j];

writeln(s)

end.

4) Нахождение произведения элементов массива. Соответствующий фрагмент программы

Program z2;

Var a:array [1..15,1..10] of integer;

i, j, p:integer;

begin

for i:=1 to 15 do for j:=1 to 10 do readln(a[i,j]);

for i:=1 to 15 do

begin for j:=1 to 10 do writeln(a[i,j]);

writeln;

end;

p:=1;

for i:=1 to 15 do for j:=1 to 10 do p:=p*a[i,j];

writeln(s)

end.

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

Для хранения максимального элемента заведем переменную max, в которую на первом шаге занесем первый элемент массива.

max:=a[1,1];

Перебирая в двойном цикле все строки и столбцы, а тем самым и все элементы массива, будем сравнивать их с переменной max, и если элемент массива больше переменной max, то переменной max присвоим текущий i-й элемент массива, если же элемент массива не больше переменной max, то переменная max не меняется.

For i:=1 to 15 do for j:=1 to 10 do if a[i,j]>max then max:=a[i,j];

Соответствующий фрагмент программы:

max:=a[1,1];

For i:=1 to 15 do for j:=1 to 10 do if a[i,j]>max then max:=a[i,j];

Writeln(max);

Текст всей программы:

Program z3;

Var a:array [1..15,1..10] of integer;

i, ,j,max:integer;

begin

for i:=1 to 15 do for j:=1 to 10 do readln(a[i,j]);

for i:=1 to 15 do

begin for j:=1 to 10 do writeln(a[i,j]);

writeln;

end;

max:=a[1,1];

For i:=1 to 15 do for j:=1 to 10 do if a[i,j]>max then max:=a[i,j];

Writeln(max);

end.

2.5 Некоторые примеры решения задач на массивы

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

Var a:array [1..15,1..10] of integer;

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

Пример 1. Найти сумму элементов, больших трех. Текст программы:

Program z4;

Var a:array [1..15,1..10] of integer;

i, ,j, s:integer;

begin

for i:=1 to 15 do for j:=1 to 10 do readln(a[i,j]);

for i:=1 to 15 do

begin for j:=1 to 10 do writeln(a[i,j]);

writeln;

end;

s:=0;

for i:=1 to 15 do for j:=1 to 10 do if a[i,j]>3 then s:=s+a[i,j];

writeln(s)

end.

Пример 2. Найти произведение четных элементов. Текст программы:

Program z5;

Var a:array [1..15,1..10] of integer;

i, ,j, p:integer;

begin

for i:=1 to 15 do for j:=1 to 10 do readln(a[i,j]);

for i:=1 to 15 do

begin for j:=1 to 10 do writeln(a[i,j]);

writeln;

end;

p:=1

for i:=1 to 15 do for j:=1 to 10 do if a[i,j] mod 2 =0 then p:=p*a[i,j];

writeln(p)

end.

Пример 3. Найти количество элементов, принадлежащих промежутку (2; 10]. Текст программы:

Program z6;

Var a:array [1..15,1..10] of integer;

i, ,j, k:integer;

begin

for i:=1 to 15 do for j:=1 to 10 do readln(a[i,j]);

for i:=1 to 15 do

begin for j:=1 to 10 do writeln(a[i,j]);

writeln;

end;

k:=0;

for i:=1 to 15 do for j:=1 to 10 do if (a[i,j]>2)and(a[i,j]<=10) then k:=k+1;

writeln(k)

end.

Пример 4. Найти максимальный элемент в массиве и его порядковый номер (то есть его нахождение в массиве). Введем две дополнительных переменных, допустим k1, в которой хранится номер строки максимального элемента, и k2, в которой хранится номер столбца максимального элемента.

Max:=a[1,1]; k1:=1; k2:=1;

For i:=1 to 15 do for j:=1 to 10 do if a[i,j]>max then begin

Max:=a[i,j];

K1:=i;

K2:=j

end;

Текст программы:

Program z7;

Var a:array [1..15,1..10] of integer;

i, ,j, max, k1, k2:integer;

begin

for i:=1 to 15 do for j:=1 to 10 do readln(a[i,j]);

for i:=1 to 15 do

begin for j:=1 to 10 do writeln(a[i,j]);

writeln;

end;

Max:=a[1,1]; k1:=1; k2:=1;

For i:=1 to 15 do for j:=1 to 10 do if a[i,j]>max then

begin

Max:=a[i,j];

k1:=i;

k2:=j

end;

end.

Пример 5. Заменить элементы второго столбца матрицы A(3; 5) их квадратами. Переберем элементы второго столбца, меняя номер строки i, и каждый элемент A[i, 2] заменим его квадратом. Номер столбца, заметим, менять не будем, так как он нам известен - второй.

После изменений новый массив нужно вывести при помощи стандартного вывода двумерного массива

For i:=1 to 3 do a[i, 2]:=sqr(a[i, 2]);

Текст программы:

Program z8;

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

i, ,j:integer;

begin

for i:=1 to 3 do for j:=1 to 5 do readln(a[i,j]);

for i:=1 to 3 do

begin for j:=1 to 5 do writeln(a[i,j]);

writeln;

end;

for i:=1 to 3 do a[i,2]:=sqr(a[i,2]);

for i:=1 to 3 do

begin for j:=1 to 5 do writeln(a[i,j]);

writeln;

end;

end.

Пример 6. Подсчитать сумму четных элементов 2-й строки матрицы A(3; 5). Сначала значение суммы примем за ноль.

S:=0;

Переберем элементы второй строки, меняя номер столбца j, и каждый элемент A[2, j] будем добавлять в сумму. Номер строки, заметим, менять не будем, так как он нам известен - второй.

S:=0;

For j:=1 to 5 do s:=s+a[2,j];

Текст программы:

Program z9;

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

S, i, ,j:integer;

begin

for i:=1 to 3 do for j:=1 to 5 do readln(a[i,j]);

for i:=1 to 3 do

begin for j:=1 to 5 do writeln(a[i,j]);

writeln;

end;

S:=0;

for j:=1 to 5 do s:=s+a[2,j];

writeln(s);

end.

2.6 Вопросы

1. Как объявлять двумерные массивы в Паскаль?

2. Какие операции можно осуществлять над всем двумерным массивом сразу?

3. Как обращаться к элементам двумерного массива?

4. Как найти минимальный элемент в двумерном массиве?

5. В чем отличие обработки одномерного массива от обработки двумерного массива.

2.7 Задания

Составить программу для решения задачи, используя двумерные массивы:

Вариант 1. Дан двумерный массив целых чисел A(5; 8). Увеличить все его значения на десять.

Замените элементы первой строки матрицы A(4; 4) элементами, равными 1. Отпечатайте новую матрицу.

Вариант 2. В массиве целых чисел A(8; 10) вычислить произведение отрицательных элементов.

Замените элементы второго столбца матрицы A(4; 4) элементами, равными 6. Отпечатайте новую матрицу.

Вариант 3. В массиве целых чисел B(10; 8) найти количество нулевых элементов.

Вычислить и отпечатать сумму элементов третьего столбца матрицы А(4; 4) с соответствующим заголовком.

Вариант 4. В массиве целых чисел A(8; 10) найти сумму положительных элементов.

Подсчитайте и отпечатайте в третьей строке матрицы A(4; 4) число нулевых элементов.

Вариант 5. В массиве целых чисел A(10; 8) найти сумму отрицательных элементов.

Вычислите и отпечатайте произведение положительных элементов третьего столбца матрицы A(4; 4) с соответствующим заголовком.

Вариант 6. В массиве целых чисел X(8; 6) подсчитать число элементов больших трех.

Посчитайте в четвертой строке матрицы A(4; 4) число отрицательных элементов и выведите на печать полученный результат.

Вариант 7. В массиве целых чисел С(6; 5) найти минимальный элемент и его номер.

Подсчитайте и отпечатайте в четвертой строке матрицы A(4; 4) произведение отрицательных элементов.

Вариант 8. В массиве целых чисел B(5; 7) найти произведение положительных элементов.

Замените элементы первого столбца матрицы A(4; 4) элементами 1, 0, 2, 4. Отпечатайте новую матрицу.

Вариант 9. 1. В массиве целых чисел X(7; 8) найти произведение отрицательных элементов.

Отпечатайте с соответствующим заголовком в два столбца элементы первой и четвертой строк матрицы A(4; 4).

Вариант 10. Вычислить среднее арифметическое элементов массива целых чисел M(8; 6).

Отпечатайте с соответствующим заголовком в два столбца элементы второй и третьей строк матрицы A(4; 4).

Вариант 11. В массиве целых чисел X(6; 5) найти количество положительных элементов.

Замените отрицательные элементы четвертого столбца матрицы A(4; 4) соответствующими положительными элементами. Отпечатайте новую матрицу.

Вариант 12. В массиве целых чисел B(10; 5) найти количество отрицательных элементов.

Отпечатайте с соответствующим заголовком элементы главной диагонали матрицы (4; 4) в строку.

3. СТРОКИ

3.1 Описание строки

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

Var имя: string [длина];

- объявление строки с максимально заданной длиной;

Var имя: string;

- объявление строки без указания максимальной заданной длины;

Примеры объявления строк:

Var s: string [20];

str: string;

Строка s может иметь не более двадцати символов, а если при этом длина строки не указывается, значит, длина строки ограничивается 255-ю символами. Значения строк должны обязательно заключаться в апострофы. То есть, если мы хотим поместить в строку s выражение «Я - студент геологического факультета», мы будем использовать оператор присваивания:

str:='Я - студент геологического факультета';

или еще примеры:

s:='1980`; (это именно строка, не целое число, с этой строкой нельзя производить арифметических операций),

s:='Введите переменную a, а затем b';

s:=''; (это пустая строка, заметьте, что между апострофами нет ни одного символа, даже пробела);

s:=' '; (это строка, содержащая один пробел).

3.2 Операции со строками

Пусть описаны следующие строки:

Var s, s1, str: string;

1) Ввод строки: В отличие от массива, строку можно вводить целиком сразу при помощи оператора readln:

Readln(s);

2) Присваивание строки: Значение одной строки можно присвоить другой строке, например:

s1:=s

3) Обращение к символу строки с порядковым номером i аналогично обращению к элементу массива

s[i]

Например, в строке str='Я - студент геологического факультета' символ str[6]='т', str[15]='о', str[2]=' ' (пробел).

4) Вывод строки: Строку можно выводить целиком при помощи оператора writeln:

writeln(s);

5) Сложение строк: Подобно числовым переменным, строковые переменные можно складывать. Результат сложения можно присваивать какой-либо символьной переменной.

Например, если значение переменной s равно «Турбо », а переменной s1 - «Паскаль», то в результате операции:

Str:=s+s1;

Значение переменной str станет равным словосочетанию «Turbo Pascal», т.е. вторая строка приписывается в конец первой.

То же самое можно сделать при помощи функии Concat(s1,s2, … sn), например получить фразу «Turbo Pascal» можно при помощи

Str:=Сoncat(s,s1);

6) Сравнение строк можно производить при помощи знаков =, >, <, <>, <=, >=. Сравнение строк происходит посимвольно слева направо.

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

7) Определение длины строки производится при помощи функции

Length(s)

Например, если s='Турбо ', s1='Паскаль', str='Turbo Pascal', то

Length(s)=6;

Length(s1)=7;

Length(str)=13

8) Выделение подстроки в строке

Copy(s,L,N)

Выделение подстроки из строки s длиной N, начинающуюся с позиции L.

Например, в строке s='Я - студент геофака', после выполнения оператора

Str:=Copy(s,5,7)

Получим str='студент' (вырезали из строки s подстроку, начиная с пятого символа, длиной семь символов).

9) определения номера начальной позиции первого вхождения подстроки в строке

Pos(s1,s)

- определяет номер начальной позиции первого вхождения подстроки S1 в строку S. Если подстрока не найдена, результат равен нулю.

Например, в строках s='Я - студент геофака', s1='гео', str='студент'

Pos(s1,s)=13; (строка 'гео' входит в строку 'Я - студент геофака', начиная с тринадцатого символа)

Pos(str,s)=5; (строка 'студент' входит в строку 'Я - студент геофака', начиная с пятого символа, пробелы учитываются)

Pos(s1,str)=0; (строка 'гео' входит в строку 'студент' не входит)

10) удаление из строки подстроки

Delete(s, L, N)

- удаление из строки S подстроки длины N, начинающуюся с позиции L.

Например, в строке s='Я учусь на геофаке' в результате выполнения процедуры

Delete(s,3,6);

получим s='Я на геофаке' (удалили в строке s шесть символов , начиная c третьего).

11) вставка подстроки в строку

Insert(s1, s, L)

- вставка в строку S подстроки S1, начиная с позиции L.

Например, в строке s='Я на геофаке', s1='КОВ' в результате выполнения процедуры

массив pascal произведение программа

Insert(s1,s,2);

получим s='ЯКОВ на геофаке' (строка s1 вставилась в строку s, начиная со второго символа).

3.3 Некоторые примеры решения задач на строки

Пример 1. Найти количество пробелов в строке. Введем строку, затем перебирая все символы от первого (i=1) до последнего (i=length(s)) посмотрим, сколько из них равны пробелам, предварительно переменную k, которая отвечает за количество пробелов, присвоим нулю,

k:=0;

For i:=1 to length(s) do if s[i]=' ` then k:=k+1;

Текст программы:

Program z1;

Var s:string;

i, k : integer;

begin

readln(s);

k:=0;

For i:=1 to length(s) do if s[i]=' ` then k:=k+1;

writeln(k)

end.

Пример 2. Найти количество букв `j' и `f' в строке. Также строку нужно ввести, перебрать все символы в строке, как и в предыдущем случае, и подсчитать количество символов `j' и `f'.

Переменную, отвечающую за количество букв `j', обозначим k1, а переменную, отвечающую за количество букв `f', обозначим k2.

k1:=0;

For i:=1 to length(s) do if s[i]='j` then k1:=k1+1;

K2:=0;

For i:=1 to length(s) do if s[i]='f` then k2:=k2+1;

Текст программы:

Program z2;

Var s:string;

i, k1,k2 : integer;

begin

readln(s);

k1:=0;

For i:=1 to length(s) do if s[i]='j` then k1:=k1+1;

K2:=0;

For i:=1 to length(s) do if s[i]='f` then k2:=k2+1;

writeln(k1, k2)

end.

Пример 3. В строке заменить слово «студент» на «абитуриент». После ввода строки нужно при помощи операции pos найти номер символа, где это слово начинается.

n:=pos(`студент', s);

Если такое слово в предложении есть (If n>0 then), то удалим семь символов с места n в строке

delete(s,n.7);

после чего на это же место n вставим строку «абитуриент»

Insert(`абитуриент',s, n)

Текст программы:

Program z3;

Var s:string;

i,n :integer;

begin

readln(s);

n:=pos(`студент', s);

if n>0 then

begin delete(s,n,7);

Insert(`абитуриент',s, n)

End;

Writeln(s)

end.

Пример 4. В начало строки «наступил новый учебный год» добавить строку «1 сентября ». Текст программы:

Program z4;

Var s, s1, s2:string;

Begin s:='наступил новый учебный год';

s1:='1 сентября';

s2:=s1+s;{ можно s2:=concat(s1,s); }

writeln(s2)

end.

3.4 Вопросы

1. Как объявить строку в Паскаль?

2. Во что необходимо заключать строковые переменные?

3. Какие операции над строками вы знаете?

3.5 Задания

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

Вариант 2. Введите два слова с клавиатуры. Соедините их, определите длину полученного слова. Напечатайте введенные слова, полученное слово и его длину.

Вариант 3. Из слова «Черепаха» получите:

ѕ Слово «чех»;

ѕ Слово «папаха»;

ѕ Число 8;

ѕ Число 3.

Вариант 4. Составьте программу, которая вырезает пять символов из данного текста, соединяет эту вырезку со вторым текстом и определяет длину полученного слова.

Вариант 5. Введите с клавиатуры три слова и соедините их в предложение. Напечатайте полученное предложение и длину каждого слова.

Вариант 6.Составьте программу, которая получает следующие слова из «квартира» и определяет их длину:

ѕ тир;

ѕ рита;

ѕ тара.

Вариант 7. Составьте программу, которая заменяет три последние буквы введенного с клавиатуры слова на символ «f». Длину слова и результаты напечатать.

Вариант 8. Составьте программу, которая получает из слова «смешной» слово «смешная».

Вариант 9. Получите слово из заданного с клавиатуры слова, заменяя в нем вторую букву на букву «о».

Вариант 10. Написать программу для получения из строки «17, 4, 21»:

ѕ 1721;

ѕ 38;

ѕ 4.

Вариант 11. Из слова «Салака» получить слова:

ѕ Собака;

ѕ Сало;

ѕ Ласка.

Напечатайте их длину.

Вариант 12. Из слова «Бригантина» напишите программу для получения слов и цифр:

ѕ Бриг;

ѕ бант;

ѕ тина;

ѕ 10.

Размещено на Allbest.ru

...

Подобные документы

  • Решения задачи графическим и программным способами. Описание алгоритма решения графическим способом, укрупненная схема алгоритма. Ввод элементов двумерного массива, вывод преобразованного массива, разработка программы на языке pascal, листинг программы.

    курсовая работа [115,5 K], добавлен 22.05.2010

  • Разработка программы на языке Pascal. Описание переменных. Действия, которые должна выполнить программа согласно выбранного алгоритма. Детализация графической части программы. Листинг и тестирование программы. Вывод массива данных на экран монитора.

    контрольная работа [360,4 K], добавлен 13.06.2012

  • Особенности разработки программ на языке Turbo Pascal на примере программы обработки массива данных с построением диаграммы. Функции программы и основные требования к ней. Состав входных и выходных данных. Использование предметной области "Садовод".

    курсовая работа [789,1 K], добавлен 13.03.2013

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

    контрольная работа [150,4 K], добавлен 03.05.2014

  • Рассмотрение правил записи, способов ввода и вывода, использования функций обработки символьных данных в Pascal. Описание алгоритмизации и программирования файловых структур данных, проектирования структуры файла. Ознакомление с работой данных массива.

    курсовая работа [336,2 K], добавлен 27.06.2015

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

    курсовая работа [75,6 K], добавлен 07.03.2010

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

    лабораторная работа [11,4 K], добавлен 13.05.2011

  • Разработка программ на языке Turbo Pascal на основе использования массивов данных. Особенности хранения данных, способы объявления переменных, действия над элементами массивов, их ввод и вывод. Практическое применение одномерных и многомерных массивов.

    методичка [17,8 K], добавлен 25.11.2010

  • Разработка эскизного и технического проектов программы "Helpopr" (ввод, хранение и вывод данных на дисплей по запросу пользователя). Язык программирования Turbo Pascal. Описание алгоритма программы. Требования к компьютеру и программному обеспечению.

    курсовая работа [198,1 K], добавлен 03.02.2010

  • Составление программы на языке Pascal для обработки результатов соревнований по фигурному катанию, проводившихся по трем видам многоборья. Генератор случайных чисел. Блок-схема программы. Ввод данных, выбор пользователя, оформление результатов вычислений.

    курсовая работа [471,8 K], добавлен 21.12.2012

  • Написание программы "телеграф", который принимает от пользователя сообщения и выводит его на экран в виде последовательности точек и тире. Их вывод сортируется звуковым сигналом соответствующей длительности. Программа написана на языке Turbo Pascal.

    курсовая работа [565,6 K], добавлен 18.08.2008

  • Изучение функций и возможностей среды разработки языка программирования Pascal. Рассмотрение работы с одномерными и двумерными массивами, со строками и числами. Математическая формулировка задач. Разработка алгоритмов, описание структуры программ.

    курсовая работа [879,8 K], добавлен 11.02.2016

  • Описание алгоритма решения задачи по вычислению суммы элементов строк матрицы с использованием графического способа. Детализация укрупненной схемы алгоритма и разработка программы для решения задачи в среде Turbo Pascal. Листинг и тестирование программы.

    курсовая работа [446,0 K], добавлен 19.06.2014

  • Анализ эффективности методов сортировки данных в языке Turbo Pascal. Разработка эскизного и технического проекта программы. Сортировка без и с использованием дополнительной памяти, за исключением небольшого стека (массива). Сортировка связанных списков.

    курсовая работа [359,0 K], добавлен 23.05.2012

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

    курсовая работа [563,6 K], добавлен 22.01.2016

  • Описание алгоритма решения задачи графическим способом. Ввод элементов исходного массива в цикле. Нахождение определённых элементов. Сортировка элементов с помощью пузырькового метода. Разработка программы на языке Pascal. Поиск наибольшего элемента.

    лабораторная работа [123,5 K], добавлен 15.01.2014

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

    курсовая работа [26,7 K], добавлен 19.06.2010

  • Рассмотрение основных функций программы Microsoft Access. Решение задач на языке программирования Pascal. Создание визитной карточки в графическом редакторе Paint и презентации в PowerPoint. Изучение работы с пакетом прикладных программ Open Office.

    курсовая работа [3,0 M], добавлен 14.06.2010

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

    курсовая работа [1,5 M], добавлен 17.03.2014

  • История языка Pascal, его основные концепции. Линейный и циклический алгоритмы, типы данных. Условные операторы, операторы цикла. Программа вычисления суммы n первых членов геометрической прогрессии по любым двум ее членам, номера которых известны.

    отчет по практике [421,8 K], добавлен 07.06.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.