- •Общая функциональная схема эвм
- •Языки программирования
- •Этапы решения задач на эвм
- •Понятие алгоритма и его свойства
- •Типы алгоритмов
- •Ос эвм. Понятие о файловой системе
- •Команды ms dos
- •Программирование на языке паскаль
- •Структура программы на языке паскаль
- •Описание данных
- •1. Константы
- •2. Переменные
- •Комментарии
- •Операторы языка паскаль
- •Операторы обработки данных
- •1. Операторы ввода
- •2. Операторы вывода
- •3. Вычисление по формулам. Оператор присваивания
- •Линейные программы
- •Управляющие операторы
- •1. Разветвляющиеся алгоритмы. Оператор if (если)
- •2. Пример разветвляющейся программы
- •3. Оператор case
- •Циклические алгоритмы и программы
- •1. Общая схема цикла
- •2. Циклы со счетчиком
- •3. Итерационные циклы
- •3.1. Оператор цикла с пост-условием
- •3.2. Оператор цикла с пред-условием
- •Tипы данных, используемых в паскале
- •1.Представление данных в эвм
- •2. Стандартные функции Паскаля и Турбо Паскаля
- •3. Булевские переменные и выражения
- •4.Функции для работы с символами
- •5. Массивы
- •Примеры программ обработки массивов
- •Особенности алгоритмов и программ с накапливанием
- •Алгоритм нахождения минимума и максимума
- •Задача сортировки
- •Обработка многомерных массивов
- •Итерационные циклы
- •Типовые алгоритмы с итерационными циклами
- •1. Приближенное вычисление функций
- •2. Решение уравнений приближенными методами
- •2.1. Метод Ньютона
- •Программы обработки строк символов (текстов)
- •1. Простейшие алгоритмы и программы обработки строк
- •Типовые программы обработки строк
- •Задача 1 выделения слов из текста (слова разделены одним пробелом)
- •Задача 2 выделения слов из текста (слова разделены несколькими пробелами)
- •Алгоритмы поиска
- •Алгоритм линейного поиска
- •Библиографический список
- •Содержание
Обработка многомерных массивов
Многомерные массивы имеют 2 и более индексов. Для их обработки организуют обычно несколько циклов, причем один вкладывается в другой. Такие циклы называются вложенными или циклами в цикле. При этом в каждом цикле параметром будет соответствующий индекс. Для составления алгоритма и программы необходимо определить, как они меняются.
Пример 1.
Ввести матрицу D размерностью m*n (n<=8, m<=5). Подсчитать количество отрицательных чисел в ней и заменить эти числа нулями. Отпечатать новую матрицу.
Алгоритм
1. Ввести матрицу.
2. Подсчитать количество нулей и заменить.
3. Вывести матрицу.
4. Закончить.
Для уточнения распишем матрицу
Нужно ввести и просмотреть все элементы, т.е. индексы будут меняться следующим образом:
номер строки (обозначим i), изменяется от 1 до 8
номер столбца (j), изменяется от 1 до 5
Алгоритм
1.1. Для i от 1 до 8
Для j от 1 до 5
ввести dij
2.1.Положить количество отрицательных чисел =0
2.2. Для i от 1 до 8
Для j от 1 до 5
Если dij<0, то
кол.тр.=кол.отр.+1 и
dij=0
Программа для этого алгоритма будет иметь вид:
PROGRAM MATR;
VAR
D:ARRAY [1..8, 1..5] OF REAL;
K,I,J:INTEGER;
BEGIN
{п.1.1}
Writeln('Введите матрицу чисел');
FOR I:=1 TO 8 DO
FOR J:=1 TO 5 DO
READ (D[I,J]);
K:=0; {п.2.1}
{п.2.2}
FOR I:=1 O 8 DO
FOR J:=1 TO 5 DO
IF D[I,J]<0 THEN
BEGIN
K:=K+1;
D[I,J]:=0
END;
{п.3}
Writeln('Результирующая матрица');
FOR I:=1 TO 8 DO
Begin
FOR J:=1 TO 5 DO
WRITE(D[I,J]);
Writeln; {переход на новую строку}
End;
WRITELN('Количество отицательных чисел в матрице - ',K);
END.
Пример 2.
Ввести матрицу A размерностью m*n (n<=10, m<=8). Подсчитать суммы чисел по строкам и отпечатать матрицу, а в конце каждой строки – сумму.
Для разработки алгоритма распишем матрицу и выясним, как меняются индексы обрабатываемых элементов и сколько будет сумм.
Количество сумм равно числу строк (8). Обозначим i-номер строки, j - номер столбца.
Алгоритм
1. Для i от 1 до 8
для j от 1 до 10
ввести aij
2. Для i от 1 до 8
2.1. Положить сумма[i] = 0
2.2. Для j от 1 до 10
вычислить сумма[i]=сумма[i]+aij
вывести aij
2.3. Вывести сумма[i]
3. Закончить
Программа для этого алгоритма будет иметь вид:
PROGRAM SUMMATR;
CONST
M=8;
N=10;
VAR
A:ARRAY [1..M, 1..N] OF REAL;
I,J:INTEGER;
S:ARRAY[1..M] OF REAL;
BEGIN
{ п.1 }
Writeln('Введите матрицу чисел');
FOR I:=1 TO M DO
FOR J:=1 TO N DO
READ(A[I,J]);
{ п.2 }
FOR I:=1 TO M DO
BEGIN
{ п.2.1 }
S[I]:=0;
{ п.2.2 }
FOR J:=1 TO N DO
BEGIN
S[I]:=S[I]+A[I,J];
WRITE(A[I,J]:8:3);
END;
{ п.2.3 }
WRITELN(S[I]:10);
END;
END.
В некоторых случаях при обработке матриц достаточно организовать только 1 цикл. Это, как правило задачи, в которых обрабатываются диагонали матриц.
Пример 3.
Ввести матрицу В размерностью n*n (n<10). Вывести элементы ее главной и побочной диагоналей.
Запишем матрицу
1. Элементы главной диагонали имеют одинаковые индексы. Это можно записать так:
1) bij, причем j=i, что не рационально;
2) bii – проще и рациональнее.
2. Побочная диагональ имеет вид:
b1,10 b2,9 b3,8 ... b10,1
Если первый индекс i, то второй: n-i+1.
Алгоритм.
1. Ввести матрицу.
2. Для i от 1 до n
вывести bii
3. Для i от 1 до n
вывести bi,n-i+1
4. Закончить.
Программа для этого алгоритма будет иметь вид:
PROGRAM DIAG;
CONST
N=10;
VAR
B:ARRAY [1..N, 1..N] REAL;
I,J:INTEGER;
BEGIN
{ п.1 }
WRITELN ('Введите матрицу');
FOR I:=1 TO N DO
FOR J :=1 TO N DO
READ(B[I,J]);
{ п.2 }
WRITELN('Главная диагональ');
FOR I:= 1 TO N DO
Write(B[I,I]:8:4);
{ п.3 }
WRITELN('Побочная диагональ');
FOR I:= 1 TO N DO
Write(B[I,N+1-I]:8:4);
End.
