- •Министерство образования и науки российской федерации
- •Оглавление предисловие
- •Составление структурных схем алгоритмов и программ
- •Пример 1
- •Пример 2
- •Задания
- •Пример 3
- •Задания
- •Пример 4
- •Пример 5
- •Задания
- •Алфавит языка pascal. Типы данных. Раздел описаний. Оператор присваивания. Ввод-вывод. Составление простейших программ
- •Стандартные процедуры
- •Стандартные функции
- •Пример 1
- •Пример 2
- •Задания
- •Пример 3
- •Задания
- •Задания
- •Использование переменных логического типа. Логический оператор присваивания
- •Логический оператор присваивания
- •R операция_сравнения s
- •Пример 1
- •Задания
- •4. Программирование разветвляющихся структур
- •4.1. Использование в программах условного оператора
- •Пример 1
- •Задания
- •4.2. Использование в программах оператора варианта
- •Case выражение-селектор of метка_случая : оператор;
- •Пример 1
- •Задания
- •5. Использование переменных типа char
- •Задания
- •6. Реализация циклических структур
- •6.1. Применение оператора цикла с параметром
- •Шаг изменения параметра цикла:
- •Пример 1
- •Задания
- •Пример 2
- •Пример 3
- •Задания
- •Пример 4
- •Задания
- •Таким образом изображаются циклы в структурных схемах (в лабораторных работах, курсовых работах и т.Д.). Пример 5
- •Задания
- •Задания
- •Пример 6
- •Задания
- •Не смотря на то, что есть еще другие операторы цикла, обычно вводят и выводят массивы с помощью оператора цикла с параметром.
- •6.2. Применение оператора цикла с постусловием
- •Пример 1
- •Задания
- •6.3. Применение оператора цикла с предусловием
- •Основные различия между операторами циклов с постусловием и предусловием
- •Пример 1
- •Задания
- •6.4. Работа с двухмерными массивами.
- •Задания
- •Пример 1
- •Задания
- •7. Поиск и сортировка числовых данных
- •Пример 1
- •Задания
- •8. Решение задач с применением подпрограмм
- •Procedure имя(список параметров);
- •Var идентификаторы:имя типа;...; var идентификаторы: имя типа
- •Var идентификаторы:имя типа;...;var идентификаторы: имя типа;...; идентификаторы:имя типа;...;идентификаторы:имя типа
- •Идентификаторы:имя типа;идентификаторы:имя типа; ...;идентификаторы:имя типа
- •Локальные переменные доступны только внутри процедур, в которых они определены!
- •Пример 1
- •Задания
- •9. Использование переменных перечисляемого типа
- •Ввод и вывод значений переменных перечисляемого типа запрещен.
- •Задания
- •10. Использование переменных ограниченного типа
- •Задания
- •11. Использование переменных множественного типа
- •Var идентификатор : set of порядковый тип;
- •Запрещен.
- •Правила приоритета для множественных операций:
- •Задания
- •12. Использование записей
- •With префикс[,префикс [...]] do оператор
- •Пример 1
- •Задания
- •13. Работа со строками
- •Каждая переменная типа string вводится отдельной процедурой readln
- •Пример 1
- •Задания
- •14. Работа с файлами
- •Пример 1
- •Пример 2
- •Пример 3
- •Задания
- •Библиографический список
6.4. Работа с двухмерными массивами.
Вложенные циклы
Задания
№1. Дана матрица A(4,6). Напечатать элемент, стоящий на пересеченииnстроки иmстолбца.
Примечание. Как же осуществить ввод двухмерного массива? Двухмерный массив - это матрица. Введем сначала первую строку этой матрицы. Элементы первой строки:
а11 а12 а13 . . . a16 .
В ней первый индекс у элементов - постоянный - равен 1 (номеру строки), а второй - изменяется от 1 до 6 («пробегает» все столбцы первой строки). Следовательно, надо организовать цикл по столбцам (j), чтобы ввести всю первую строку матрицы:
for j:=1 to 6 do
read(a[1,j]);
Но строк у нас 4. Следовательно, первый индекс тоже должен «пробежать» все свои значения от 1 до 4, чтобы можно было ввести все строки матрицы:
for i:=1 to 4 do for j:=1 to 6 do read(a[i,j]); |
При i=1 введем все элементы первой строки. Потом i станет равно 2, и мы введем все элементы второй строки. И т.д., пока не введем всю матрицу.
Процедура read позволяет нам вводить числа как через пробел (и не один!), так и через <Enter>. Поэтому, организовав такой ввод, мы можем вводить матрицу в привычном для нас виде, например:
3 5 7 -8 4 100
-3 4 1 0 3 5
0 0 1 -1 2 –6
4 6 1 0 4 1.5
Таким образом можно ввести любую матрицу. Советуем Вам ввод матрицы выделить в рамочку, как это сделано выше, и хорошо запомнить!
№2. Дано: матрица А(5,3); Х. ЕслиХ>0, то элементы четвертой строки матрицы увеличить в два раза.
Примечание. Вывод матрицы аналогичен вводу. Если мы напишем, например, так:
for i:=1 to 5 do
for j:=1 to 3 do
writeLN(a[i,j])
то матрица будет выводиться по строкам (т.е. при i=1 (1 строка) j «пробегает» все значения от 1 до 3 (все столбцы) и т.д.), но вывод элементов этой матрицы будет осуществлен в столбик (по одному элементу в строке экрана), т.к. стоит LN. Если убрать LN, т.е. написать просто WRITE, то элементы будут выводиться в строку (пока позволит длина строки экрана). Как же сделать, чтобы они выводились в виде матрицы? То есть нам надо, чтобы машина вывела одну строку матрицы, а затем выполнить перевод курсора на следующую строку, чтобы новая строка матрицы выводилась с новой строки. Перевод на новую строку у нас должен осуществляться во внешнем цикле (по i). Следовательно, после вывода одной строки (т.е. после отработки цикла по j) надо поставить WRITELN. Тогда операторы, осуществляющие вывод матрицы (цикл), приобретают следующий вид:
for i:=1 to 5 do
for j:=1 to 3 do
write(a[i,j]);
writeln
Но это еще не все. Последний оператор (WRITELN) стоит за телом циклов и, следовательно, будет выполняться один раз. А нам надо, чтобы перевод строки (WRITELN) стоял во внешнем цикле. Значит, раз нам надо выполнить более одного оператора в цикле, мы эти операторы должны заключить в операторные скобки:
for i:=1 to 5 do
begin
for j:=1 to 3 do
write(a[i,j]);
writeln
end
Если мы организуем такой вывод в программе, то результат получим, например, в следующем виде:
-5.4189222353E+01 1.5933608403E+00 2.6595828123E+00
-6.4226175728E+01-4.9656302622E+01-5.6398568978E+01
1.4007135108E+01 2.1996811428E+01-5.6369144702E+01
-5.3711999441E+00-3.9245778788E+01-4.2954834620E+01
-5.8254164038E+01-1.8887273339E+01-1.9566185586E+01
Как мы видим, в строках между значениями практически нет пропусков. Это не очень удобно. Если мы используем формат для вывода результатов, то мы получим более удобочитаемый вид. Например, следующий вывод:
for i:=1 to 5 do Begin for j:=1 to 3 do write(a[i,j]:10:2); writeln end |
нам даст уже такой вид выводимой информации:
-80.00 -76.86 6.10
-59.74 -52.71 -12.83
-48.13 -63.82 -42.78
-37.43 -71.80 -32.52
-72.94 4.09 -74.03
Советуем Вам выделить вывод матрицы в рамку, как это сделано выше, и хорошо запомнить!
№3. Определить сумму элементов шестой строки матрицы А(10,11).
№4. Дана матрица А(10,4).Вывести на печать минимальный элемент восьмой строки.
№5. Дана матрица А(12,5).Определить векторВ, каждый элемент которого может быть получен как сумма соответствующих элементов первого и последнего столбцов.
№6. Переставить местами элементы второго и четвертого столбцов в матрице С(10,10).