Программирование типовых алгоритмов вычислений Информатика
6. Примеры алгоритмов работы с двумерными массивами 6. Примеры алгоритмов работы с двумерными массивами Вычисление суммы элементов матрицы s:=0.0; for i:=1 to n do for j:=1 to m do s:=s+b[i,j]; Вычисление суммы диагональных элементов матрицы (следа матрицы) s:=0.0; for i:=1 to n do s:=s+b[i,i]
Вычисление суммы элементов строки матрицы, i = 1,..., n (количество строк). for i:=1 to n do begin s[i] :=0; for j:=1 to m do s[i]:=s[i]+b[i,j]; end; Вычисление суммы элементов столбца матрицы, j = 1,...,m (количество столбцов). for j:=1 to m do begin s[j]:=0; for i:=1 to n do s[j]:=s[j]+b[i,j]; end;
Нахождение наибольшего (наименьшего) значения элемента в матрице и его номера: max:=b[1,1]; for i:=1 to n do for j:=1 to m do if b[i,j]>max then begin max:=b[i,j]; n:=I; m:=j; end; Нахождение наибольшего элемента в строке матрицы for i:=1 to n do begin max[i]:=b[i,1]; for j:=1 to m do if b[i,j]>max[i] then max[i]:=b[i,j]; end;
Файлы Удобным способом хранения информации служит запись этой информации на магнитный носитель (жесткие, гибкие диски, магнитные ленты). Запись удобна особенно тогда, когда объем информации велик и в дальнейшем предполагается использовать эту информацию в других программах. В Паскале предусмотрен специальный тип данных – файлы, операции над которыми сводятся к работе с внешними носителями
Файл – это поименованная область памяти на каком–либо носителе информации, предназначенная для хранения данных. Этим носителем может быть гибкий или жесткий диск (магнитная лента). Внешние файлы должны быть описаны в разделе описаний программы. Описание файлов в общем случае имеет следующий вид: type = file of ; var : ; или var file of ;
Файловая переменная (обозначим ее как f) служит для доступа к файлу. В Турбо–Паскале существуют следующие категории файлов: типизированные; нетипизированные; текстовые. В зависимости от категории объявление файлов соответственно будет: varf1 : file of ; f2 : file; f 3 : text.
Например: var f1:file of char; f2:file; f3:text. Так как по определению число элементов файла не задается, то для нахождения конца файла введена стандартная функция Eof(var:file):boolean; Когда наступает конец файла Eof принимает значение True в противном случае – False
Стандартные процедуры для работы с файлами. Работа с файлами производится посредством специальных стандартных процедур. Рассмотрим некоторые из них. АSSIGN (f, ' ') – эта процедура связывает файловую переменную f с именем внешнего файла на диске. Например: Assign (f1, 'fl.d'), здесь имя файловой переменной f1 связывается с файлом fl.d на диске. RESET (f) – процедура открывает существующий файл f для чтения. REWRITE (f) – создает и открывает новый файл для записи.
APPEND (f) – открывает существующий файл для добавления данных. READ (f, X1,...,Xn) или READLN (f, X1,...,Xn) – считывает из файла f значения переменных X1 … Xn. WRITE (f, X1,...,Xn) или WRITELN (f, X1,...,Xn) – записывает в файл f значения переменных X1 … Xn. CLOSE (f) – закрывает файл f после окончания работы с ним.
Особым типом файлов являются текстовые файлы. Эти файлы содержат некоторый текст, который состоит из обычных символов (например, букв алфавита и цифр). Символы текстового файла разбиты на строки. Описание текстового файла: Var : text; Текстовый файл состоит из последовательности строк различной длины.
Для определения конца строки используется функция Eoln(var F:text) : Boolean; Она принимает значение True, если достигнут конец строки, и значение False – в противном случае. Для чтения из текстового файла или записи в текстовый файл можно использовать процедуры Write (f, X1,...,Xn), Writeln(f, X1,...,Xn) Read(f, X1,...,Xn), Readln (f, X1,...,Xn).
Следует отметить, что, несмотря на то, что текстовый файл является набором символьных значений, он может использоваться (и часто используется) для хранения численных значений. При считывании или записи значений в файл происходит автоматическое преобразование из числового формата в символьный и наоборот. Продемонстрируем работу с файлами на примере.
Пример. Составить программу пересчета концентраций химических веществ, заданных в мольных долях, в весовые :, i = 1,...,5, где ВD i – концентрация в весовых долях; MD i – концентрация в мольных долях; MB i – молекулярный вес веществ. Исходные данные ввести из файла, результат вычислений поместить в файл.
Программный файл. Program Conz; type mas=array[1..10]of real; var BD,MD,MB:mas; s:real; i:integer; f1,f2:text; {объявление файлов} Begin Assign(f1,dat); Assign(f2,rez); Reset(f1); Rewrite(f2); {ввод данных из файла dat} for i:=1 to 5 do read(f1,MD[i]); readln(f1);
for i:=1 to 5 do read(f1,MB[i]); s:=0.0; for i:=1 to 5 do s:=s+MD[i]*MB[i]; for i:=1 to 5 do BD[i]:=MD[i]*MD[i]/s; {вывод результатов в файл rez} for i:=1 to 5 do write(f2,BD[i]:6:2, ); close(f1); close(f2); End.
После написания и сохранения программного файла в новый файл согласно последовательности ввода данных в программе (1–я строка – массив значений концентраций МD i ; 2–я строка – массив значений молекулярных весов МВ i ) записывают через пробел исходные численные данные и сохраняют файл под именем dat. После выполнения вычислений ПЭВМ создает файл с именем rez, в который помещаются результаты расчетов (строка численных значений массива BD i ).