Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции(ЯВУ)-Паскаль.doc
Скачиваний:
63
Добавлен:
31.03.2015
Размер:
1.08 Mб
Скачать

8.5. Пример 5. Программа обработки символьных строк

Задание 5. В массиве строк (тексте) определить число слов.

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

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

  • Число строк в тексте ns<=10;

  • Массив размером ns, содержащий символьные строки максимальной длины, равной 255.

Выходные данные:количество слов в тексте.

Алгоритм.Подсчет числа слов в тексте.

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

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

МАССИВ Mtext[ns] типа string.

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

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

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

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

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

Начало

Вывод(‘inputns<10’)

Ввод(ns)

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

Вывод(‘line ‘,i)

Ввод(Mtext[i])

КОНЕЦ_ЦИКЛА

K=0;

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

ЦИКЛ ОТ j:=1 ДО length(Mtext[I])

ЕСЛИ (Mtext[i,j]=’ ‘) ТО

K= K+1

КОНЕЦ_ЕСЛИ

КОНЕЦ_ЦИКЛА

КОНЕЦ_ЦИКЛА

вывод(‘K= ‘,K)

Конец

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

False

True

False

True

False

True

Рис. 8.8

True

False

Program K_Words;

Var

Mtext: array[1..10] of string;

i, j, ns, k: integer;

begin

writeln;

write('input ns<10 ');

readln(ns);

for i:=1 to ns do

begin

write(' Line ',i,': ');

readln(Mtext[i]);

end;

k:=0;

for i:=1 to ns do

begin

for j:=1 to length(Mtext[i]) do

if (Mtext[i,j]=' ') then

k:= k+1;

k:= k+1;

end;

writeln(k,' words in the text ');

write('PRESS ANY KEY!');

readln;

end.

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

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

ns=3

Mtext= (‘В этой программе определяется’,

‘число слов в тексте.’

‘Слова разделяются пробелами.’)

Результат – сообщение «11 words in the text».

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

input ns<10 3

Line 1: В этой программе определяется

Line 2: число слов в тексте.

Line 3: Слова разделяются пробелами.

11 words in the text

PRESS ANY KEY!

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

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

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

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

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

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

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

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

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

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

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

Аномалии:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Начало

Вывод(‘inputfilename’)

Ввод(fn)

Связывание файловой переменной F1cфайлом, имя которого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.

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

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

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

True

False

Рис. 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- число столбцов>

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

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

Файл matrix.txt

4 4

1 2 -3 -6

-3 -9 0 5

-6 -3 7 8

11 6 23 -1

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

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

Файл matr.txt

4 4

-1 -2 -3 -6

-3 -9 0 -5

-6 -3 -7 -8

-11 -6 -23 -1

Результат: сообщение - NotA[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!