Пиши Дома Нужные Работы

Обратная связь

Пример 6. Программа обработки двумерного массива с вводом элементов матрицы из текстового файла

 

Задание 6. В двумерном массиве (матрице) определить номер строки, в которой находится максимальное количество положительных элементов. Если положительных элементов нет в массиве, вывести сообщение об этом.

Исходные данные ввести из текстового файла, сохраняемого на диске.

 

Постановка задачи.

Исходные данные.

q Имя текстового файла на диске

q Текстовый файл на диске с указанным именем, содержащий следующую информацию:

o число строк в матрице n<=10;

o число столбцов в матрице m<=10;

o двумерный массив (матрица) размером n x m , содержащий положительные и отрицательные значения.

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

Аномалии:

· отсутствие файла с исходными данными на диске;

· отсутствие положительных элементов в массиве.

Реакция на аномальную ситуацию – выдача сообщения.

 

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

Исходные данные:

СТРОКА fn – имя входного файла на диске;

ФАЙЛ F1 – входной, текстовый файл (файловая переменная);

СКАЛЯР n<=10 - целое число;

СКАЛЯР m<=10 - целое число;

МАССИВ A[n x m] целого типа.

Выходные данные:

СКАЛЯР imax – целое число.

Промежуточные данные:

МАССИВ K[n] целого типа /* массив счетчиков количества положительных элементов в строках матрицы */

СКАЛЯР kmax – целое число /* максимальное количество положительных элементов */

СКАЛЯР i – целое число /* параметр цикла */

СКАЛЯР j – целое число /* параметр цикла */

Начало

Вывод(‘input filename’)

Ввод(fn)

Связывание файловой переменной F1 c файлом, имя которого fn

Отключение проверки завершения операции ввода-вывода



Открытие файла F1 в режиме чтения

Включение проверки завершения операции ввода-вывода

Если IOResult<>0 то

Вывод(‘File not found!’)

Принудительное завершение программы

КОНЕЦ_ЕСЛИ

Ввод_из_файла(n)

Ввод_из_файла (m)

ЦИКЛОТ i:=1 ДО n

ЦИКЛОТ j:=1 ДО m

Ввод_из_файла (A[i,j])

КОНЕЦ_ЦИКЛА

КОНЕЦ_ЦИКЛА

ЦИКЛ ОТ i:=1 ДО n

K[i]=0;

ЦИКЛ ОТ j:=1 ДО m

ЕСЛИ (A[i,j]>0) ТО

K[i]= K[i]+1

КОНЕЦ_ЕСЛИ

КОНЕЦ_ЦИКЛА

КОНЕЦ_ЦИКЛА

Kmax=K[1]

imax=1

ЦИКЛ ОТ i:=1 ДО n

ЕСЛИ (K[i]>Kmax) ТО

Kmax=K[i]

imax=i

КОНЕЦ_ЕСЛИ

КОНЕЦ_ЦИКЛА

ЕСЛИ (Kmax=0) ТО

Вывод(‘Not A[i,j]>0!’)

ИНАЧЕ

Вывод(‘imax= ‘,imax)

КОНЕЦ_ЕСЛИ

Закрытие файла

Конец

Блок-схема данного алгоритма, описанного на псевдокоде, представлена на рис. 8.9.

 


Блок-схема алгоритма.

       
 
 
   
Рис. 8.9



Программа на языке Паскаль.

 


Program Nomer_Row;

Var

F1: text;

A: array[1..10,1..10] of integer;

K: array[1..10] of integer;

i, j, n, m, kmax, imax: integer;

fn: string;

begin

write('input filename '); readln(fn);

assign(F1,fn);

{$I-} Reset(F1); {$I+}

if IOResult<>0 then

begin

write('File ', fn, ' not found!'); readln; Halt;

End;

read(F1,n); read(F1,m);

for i:=1 to n do begin

for j:=1 to n do begin

read(F1,A[i,j]);

write(A[i,j],' ');

end;

writeln;

end;

for i:=1 to n do begin

K[i]:=0;

for j:=1 to m do

if (A[i,j]>0) then

K[i]:= K[i]+1;

end;

kmax:=K[1]; imax:=1;

for i:=1 to n do

if (K[i]>kmax) then begin

kmax:=K[i]; imax:=i;

end;

if kmax=0 then writeln('Not A[i][j]>0 !')

else writeln('imax= ',imax);

close(F1);

write('PRESS ANY KEY!');

readln;

end.

 


Результаты тестирования.

1. Исходные данные:

Текстовый файл matrix.txt, содержащий следующую информацию

<n - число строк > <m - число столбцов>

<матрица n x m, элементы разделяются пробелами, каждая строка матрицы записывается в отдельной строке файла>

a) Тестовый пример 1:

Файл matrix.txt

4 4

1 2 -3 -6

-3 -9 0 5

-6 -3 7 8

11 6 23 -1

Результат: imax=4.

a) Тестовый пример 2:

Файл matr.txt

4 4

-1 -2 -3 -6

-3 -9 0 -5

-6 -3 -7 -8

-11 -6 -23 -1

Результат: сообщение - Not A[i][j]>0 !

Результаты, выданные программой.

 

1. Тестовый пример1

input filename c:\matrix.txt

1 2 -3 -6

-3 -9 0 5

-6 -3 7 8

11 6 23 -1

imax= 4

PRESS ANY KEY!

 

2. Тестовый пример 2

input filename c:\matr.txt

-1 -2 -3 -6

-3 -9 0 -5

-6 -3 -7 -8

-11 -6 -23 -1

Not A[i][j]>0 !

PRESS ANY KEY!

 


Разработка программ сложной структуры

 

Процедуры и функции

 

При создании программы решения сложной задачи выполняется декомпозиция (разделение) задачи на подзадачи, а подзадачи – на еще меньшие подзадачи. Каждая подзадача имеет точно определенное функциональное назначение и интерфейс, т.е. описание входных и выходных данных. Представление алгоритма решения задачи ив виде совокупности связанных между собой подзадач обусловливает структуру сложной программы в виде множества взаимосвязанных подпрограмм.

Подпрограмма – это отдельно запрограммированный алгоритм, который могут использовать другие алгоритмы. Подпрограмма является самостоятельной частью программы, имеет свое имя и оформляется в соответствии с правилами синтаксиса языка программирования высокого уровня.

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

Использование подпрограмм позволяет избежать повторений одной и той же последовательности операторов в программе, упростить разработку и отладку больших программ.

Описание процедуры или функции имеет такую же структуру, как и программа на Паскале, и может включать в себя разделы Label, Const, Type, Var, Procedure, Function и раздел операторов. Любой из разделов, кроме раздела операторов, может отсутствовать. Процедуры и функции могут включать в себя другие, внутренние процедуры и функции.

Описание процедуры имеет следующий вид:

Procedure <имя> (<список формальных параметров>);

Label

Const разделы описаний меток, констант, типов,

Type переменных

Var

Procedure разделы описаний внутренних

Function процедур и функций

 

Begin

<операторы>

end;


Описание функции имеет следующий вид:

Function <имя> (<список формальных параметров>): <тип результата>;

Label

Const разделы описаний меток, констант, типов,

Type переменных

Var

Procedure разделы описаний внутренних

Function процедур и функций

 

Begin

<операторы>

end;

Описание процедуры или функции завершается точкой с запятой.

В разделе операторов функции должен быть хотя бы один оператор, который присваивает имени функции значение результата следующего вида:

<имя функции>:=<выражение>;

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

Предложение Procedure (Function) называется заголовком процедуры (функции). В заголовке в круглых скобках указывается список формальных параметров, с помощью которого осуществляется обмен данными между вызывающей программой или подпрограммой и вызываемой процедурой или функцией. Обмен данными между программами и подпрограммами осуществляется тремя способами:

o с помощью глобальных переменных;

o с помощью списка формальных параметров;

o с помощью возвращаемых значений в случае функции.

Рассмотрим подробно все три способа.

 






ТОП 5 статей:
Экономическая сущность инвестиций - Экономическая сущность инвестиций – долгосрочные вложения экономических ресурсов сроком более 1 года для получения прибыли путем...
Тема: Федеральный закон от 26.07.2006 N 135-ФЗ - На основании изучения ФЗ № 135, дайте максимально короткое определение следующих понятий с указанием статей и пунктов закона...
Сущность, функции и виды управления в телекоммуникациях - Цели достигаются с помощью различных принципов, функций и методов социально-экономического менеджмента...
Схема построения базисных индексов - Индекс (лат. INDEX – указатель, показатель) - относительная величина, показывающая, во сколько раз уровень изучаемого явления...
Тема 11. Международное космическое право - Правовой режим космического пространства и небесных тел. Принципы деятельности государств по исследованию...



©2015- 2024 pdnr.ru Все права принадлежат авторам размещенных материалов.