Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие по информатике 2009.doc
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
12.36 Mб
Скачать

2.7. Матрицы

Пример 2.7.1. Составить программу определения максимального элемента в случайно заданном массиве А[10,10] и посчитать сумму элементов данного массива, значения которых по абсолютной величине не превышает значение 0.5.

VAR i, j:integer;

A: ARRAY [1..10, 1..10] OF real;

MAX, S:real;

BEGIN

{Ввод матрицы с клавиатуры}

randomize;

FOR i:=1 TO 10 DO

FOR j:=1 TO 10 DO

BEGIN

write(’A[’,i, ’,’ ,j,’]=’);

readln(A[i,j])

END;

{Нахождение минимального элемента в матрице A(10,10)}

MAX:=A[1,1];

FOR i:=1 TO 10 DO

FOR j:=1 TO 10 DO

IF MAX<A[i, j] THEN MAX:=A[i, j];

{Нахождение суммы элементов |a(i,j)|<0.5}

S:=0;

FOR i:=1 TO 10 DO

FOR j:=1 TO 10 DO

IF abs(A[i, j])<=0.5 THEN S:=S+A[i, j];

{Вывод результатов}

writeln(’Максимальный элемент данного массива =’, MAX:10:6);

writeln(’Сумма =’, S:10:6);

END.

Пример 2.7.2. Составить программу определения суммы элементов главной диагонали в массиве А[3,3].

CONST

A:ARRAY [1..3,1..3] OF real= ( (2,4,6.7), (1.3, 0.11,2E-3), (6,2,7) );

VAR i, j:integer;

A: ARRAY [1..10, 1..10] OF real;

S:real;

BEGIN

S:=0;

FOR i:=1 TO 10 DO S:=S+A[i, i];

writeln(‘Cумма элементов главной диагонали матрицы =’, S:10:6);

END.

Пример 2.7.3. Составить программу определения номера строки в случайно заданном массиве А[7,10], сумма элементов которой максимальна.

VAR i, j, Nmax:integer;

A: ARRAY [1..7, 1..10] OF real;

S: ARRAY [1..7] OF real;

BEGIN

randomize;

FOR i:=1 TO 7 DO

FOR j:=1 TO 10 DO

A[i, j]:=(1-2random)10;

{Нахождение суммы элементов каждой строки}

FOR i:=1 TO 7 DO

BEGIN

S[i]:=0;

FOR j:=1 TO 10 DO

S[i]:=S[i]+A[i, j];

END;

{Нахождение номера максимального элемента в массиве S(7)}

Nmax:=1;

FOR i:=1 TO 7 DO

IF S[Nmax]<S[i] THEN Nmax:=i;

{Вывод результатов}

writeln(’Максимальная сумма строки =’, MAX:10:6);

END.

2.8. Файлы

Пример 2.8.1. Рассчитать массив Р(6) по формуле:

.

Исходные данные ввести из файла ’data.txt’, который представляет собой следующее (буквы рядом с числами указывают, какие числа каким переменным соответствуют). Результаты записать в файл ’data.res’.

2.73E-4A 0.83B

1 5 -6 4 5 -1C(6)

7.43

3.51 D(3)

-0.14

1.23E

VAR p:ARRAY [1..6] OF real;

c:ARRAY [1..6] OF integer;

d:ARRAY [1..3] OF real;

i, j:integer;

a, b, e, s:real;

f:text;

BEGIN

Assign(F,’data.txt’);

Reset(F);

readln(F,a,b);

FOR j:=1 TO 6 DO read(F,c[j]);

readln(F);

FOR i:=1 TO 3 DO readln(F,d[i]);

readln(F,e);

Close(F);

S:=0;

FOR j:=1 TO 3 DO S:=S+sqr(d[j]);

Assign(F,’data.res’);

Rewrite(F);

FOR i:=1 TO 6 DO

BEGIN

P[i]:=aС[i]+b+S/e;

writeln(F,’P[’,i,’]=’,P[i]:10)

END;

Close(F)

END.

Считывание массива из файла

  1. Считывание массива из файла. Количество элементов известно.

Assign (F , ’data.txt’);

Reset (F);

FOR i:=1 TO N DO readln(F, x[i]);

Close (F);

Примечание. Данные в файле data.txt записаны в столбик. Например,

1.00

2.47

...

4.89

  1. Считывание массива из файла. Количество элементов неизвестно.

Assign (F, ’data.txt’);

Reset (F);

N:=0;

WHILE NOT (seekeof (F)) do

BEGIN

N:=N+1;

readln (F, x[N] , y[N]);

END;

Close (F);

  1. Запись массива в файл.

Assign (F , ’data.res’);

Rewrite (F);

FOR i:=1 TO N DO

writeln(F, ’X[’ , i , ’]=’ , x[i]:5:2);

Close (F);

4. Считывание матрицы из файла.

Assign (F , ’data.txt’);

Reset (F);

FOR i:=1 TO N DO

BEGIN

FOR j:=1 TO M DO read(F,a[i,j]);

readln(F)

END;

Close (F);

Пример 2.8.2. Рассчитать массовые доли компонентов газовой смеси:

,

если известны мольные доли x(n) и молярные массы m(n) компонентов.

VAR x, xm, m:ARRAY[1..20] OF real;

S:real;

i:integer;

C:text;

BEGIN

write(’n=’); readln(n);

{Ввод массивов x(n) и m(n) из файла.}

Assign(C,’data.txt’);

Reset(C);

FOR i:=1 TO n DO readln(C,x[i],m[i]);

Close(C);

{Расчет суммы.}

S:=0;

FOR i:=1 TO n DO

S:=S+x[i]m[i];

{Расчет массива xm(n) с одновременным выводом результатов.}

FOR i:=1 TO n DO

BEGIN

xm[i]:=x[i]m[i]/S;

writeln(’x[’,i,’]=’,x[i]:6:3,’ xm[’,i,’]=’,xm[i]:6:3)

END;

END.

Пример 2.8.3. Найти среднюю молярную массу фракции нефти по формуле:

,

(т.е. найти среднюю молярную массу тех компонентов нефти, температура кипения которых попадает в температурный интервал выкипания фракции нефти [Tn,Tk]). Данная задача сводится к нахождению сумм «с условием».

VAR x, m, T:ARRAY[1..100] OF real;

Tn, Tk, S, Sm, Ms:real; F:text; i, N:integer;

BEGIN

{Ввод с клавиатуры значений Tn и Tk.}

write(’Температура начала кипения фракции. Tn=’);

readln(Tn);

write(’Температура окончания кипения фракции.Tk=’);

readln(Tk);

{Ввод из файла значений массивов x,m,T. Количество элементов в массиве заранее неизвестно.}

Assign(F, ’Fuel.dat’);

Reset(F); N:=0;

WHILE not(seekeof(F)) DO

BEGIN

N:=N+1;

readln(F,x[N],m[N],T[N]);

END;

Close(F);

{Расчет средней молярной массы для веществ с температурами кипения Tn<Ti<Tk.}

S:=0; Sm:=0;

FOR i:=1 TO N DO

IF (Tn<T[i]) AND (T[i]<Tk) THEN

BEGIN

S:=S+x[i]; Sm:=Sm+x[i]m[i];

END;

Ms:=Sm/S;

{Вывод результата.}

writeln(’Средняя молярная масса. Ms=’,Ms:6:2,’ г/моль’)

END.