- •Федеральное агенство по образованию российской федерации
- •1. Основные категории и понятия информатики
- •Предмет информатики как науки
- •1.2. Информация: структура, форма, измерение
- •2. Техническое и программное обеспечение пэвм
- •2.1. Структура аппаратных средств пэвм
- •2.2. Программное обеспечение пэвм
- •3. Основы алгоритмизации
- •Этапы разработки программ
- •3.2.Формы представления алгоритмов
- •Действие 1
- •Действие 2
- •Классификация и примеры алгоритмических структур
- •3.2.1. Алгоритм линейной структуры.
- •3.2.2. Алгоритм разветвляющейся структуры.
- •Да нет да да Рис 3.11
- •3.2.3. Алгоритмы циклической структуры.
- •4.2. Структура программы на языке Паскаль
- •4.3. Скалярные стандартные типы данных
- •4.4. Скалярные, пользовательские типы данных
- •5. Структурные типы данных
- •Массивы
- •5.3. Записи
- •5.4. Записи с вариантами
- •Множества
- •5.6.Файлы
- •6. Операции над данными скалярных типов. Выражения
- •7. Операторы языка Паскаль
- •7.1. Простые операторы
- •7.2. Структурные операторы
- •Оператор 2
- •8. Примеры программ на языке Паскаль
- •8.1. Пример 1. Арифметические выражения. Оператор присваивания
- •Пример 2. Условные операторы
- •Ввод чисел х, а
- •8.3. Пример 3. Программа обработки одномерного массива
- •8.4. Пример 4. Программа обработки двумерного массива
- •True False True False False
- •8.5. Пример 5. Программа обработки символьных строк
- •8.6. Пример 6. Программа обработки двумерного массива с вводом элементов матрицы из текстового файла
- •9.Разработка программ сложной структуры
- •9.1. Процедуры и функции
- •9.2. Область действия идентификаторов при использовании процедур и функций. Локальные и глобальные переменные
- •9.3. Передача данных в подпрограмму с помощью параметров. Формальные и фактические параметры
- •9.4. Использование процедур и функций
- •True False Рис. 9.4
- •9.5. Массивы – параметры процедур и функций
- •True False True False Рис. 9.7
- •True False True False True False Рис 9.9
- •9.6. Рекурсивные процедуры и функции
- •True False Рис. 9.10 True False
- •True False Рис. 9.12
- •9.7. Модули
- •10. Динамические структуры данных
- •Основные определения
- •10.2. Объявление и создание динамических структур данных. Указатели
- •Операции над указателями
- •Программа создания и обработки линейного списка
- •Приложение. Контрольные вопросы
- •Литература
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:
Файл matrix.txt
4 4
1 2 -3 -6
-3 -9 0 5
-6 -3 7 8
11 6 23 -1
Результат: imax=4.
Тестовый пример 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!