Символьные строки. Можно ли рассматривать строку как массив?

Содержание

Слайд 2

Чем плох массив символов? var B: array[1..N] of char; Это массив

Чем плох массив символов?

var B: array[1..N] of char;

Это массив символов:

каждый символ

– отдельный объект;
массив имеет длину N, которая задана при объявлении

Что нужно:
обрабатывать последовательность символов как единое целое
строка должна иметь переменную длину

Слайд 3

Символьные строки длина строки рабочая часть s[1] s[2] s[3] s[4] var

Символьные строки

длина строки

рабочая часть

s[1]

s[2]

s[3]

s[4]

var s: string;

var s: string[20];

Длина строки:

n := length

( s );

var n: integer;

Слайд 4

Символьные строки Задача: ввести строку с клавиатуры и заменить все буквы

Символьные строки

Задача: ввести строку с клавиатуры и заменить все буквы «а»

на буквы «б».

program qq;
var s: string;
i: integer;
begin
writeln('Введите строку');
readln(s);
for i:=1 to Length(s) do
if s[i] = 'а' then s[i] := 'б';
writeln(s);
end.

readln(s);

writeln(s);

Length(s)

ввод строки

длина строки

вывод строки

Слайд 5

Задания Эти же задания в файле с заданиями. Выполнить 3 задания,

Задания Эти же задания в файле с заданиями. Выполнить 3 задания,

затем "Операции со строками"

Ввести символьную строку и заменить все буквы «а» на буквы «б», как заглавные, так и строчные.
Пример:
Введите строку:
ааббссААББСС
Результат:
ббббссББББСС
Ввести символьную строку и заменить все буквы «а» на буквы «б» и наоборот, как заглавные, так и строчные.
Пример:
Введите строку:
ааббссААББСС
Результат:
ббаассББААСС

Слайд 6

Задания Ввести символьную строку и проверить, является ли она палиндромом (палиндром

Задания

Ввести символьную строку и проверить, является ли она палиндромом (палиндром читается

одинаково в обоих направлениях).
Пример: Пример:
Введите строку: Введите строку:
АБВГДЕ КАЗАК
Результат: Результат:
Не палиндром. Палиндром.
Слайд 7

Операции со строками Объединение строк: добавить одну строку в конец другой.

Операции со строками

Объединение строк: добавить одну строку в конец другой.

Запись нового

значения:

var s, s1, s2: string;

s := 'Вася';

s1 := 'Привет';
s2 := 'Вася';
s := s1 + ', ' + s2 + '!';

'Привет, Вася!'

Выделение подстроки: выделить часть строки в другую строку.

s := '123456789';
s1 := Copy ( s, 3, 6 );
s2 := Copy ( s1, 2, 3 );

'345678'

'456'

с 3-его символа

6 штук

Слайд 8

Удаление и вставка Удаление части строки: Вставка в строку: s :=

Удаление и вставка

Удаление части строки:

Вставка в строку:

s := '123456789';
Delete ( s,

3, 6 );

с 3-его символа

6 штук

строка
меняется!

'123456789'

'129'

s := '123456789';
Insert ( 'ABC', s, 3 );
Insert ( 'Q', s, 5 );

куда вставляем

что вставляем

начиная с 3-его символа

'12ABC3456789'

'12ABQC3456789'

Слайд 9

Поиск в строке Поиск в строке: s := 'Здесь был Вася.';

Поиск в строке

Поиск в строке:

s := 'Здесь был Вася.';
n := Pos

( 'е', s );
if n > 0 then
writeln('Буква е – это s[', n, ']')
else writeln('Не нашли');
n := Pos ( 'Вася', s );
s1 := Copy ( s, n, 4 );

s[3]

3

n = 11

Особенности:
функция возвращает номер символа, с которого начинается образец в строке
если слова нет, возвращается 0
поиск с начала (находится первое слово)

var n: integer;

Слайд 10

Примеры s := 'Вася Петя Митя'; n := Pos ( 'Петя',

Примеры

s := 'Вася Петя Митя';
n := Pos ( 'Петя', s );
Delete

( s, n, 4 );
Insert ( 'Лена', s, n );

'Вася Лена Митя'

s := 'Вася Петя Митя';
n := length ( s );
s1 := Copy ( s, 1, 4 );
s2 := Copy ( s, 11, 4 );
s3 := Copy ( s, 6, 4 );
s := s3 + s1 + s2;
n := length ( s );

'Вася Митя'

14

'Вася'

'Митя'

'Петя'

'ПетяВасяМитя'

12

6

Слайд 11

Пример решения задачи Задача: Ввести имя, отчество и фамилию. Преобразовать их

Пример решения задачи

Задача: Ввести имя, отчество и фамилию. Преобразовать их к

формату «фамилия-инициалы».
Пример:
Введите имя, фамилию и отчество:
Василий Алибабаевич Хрюндиков
Результат:
Хрюндиков В.А.

Алгоритм:
найти первый пробел и выделить имя
удалить имя с пробелом из основной строки
найти первый пробел и выделить отчество
удалить отчество с пробелом из основной строки
«сцепить» фамилию, первые буквы имени и фамилии, точки, пробелы…

Слайд 12

Программа program qq; var s, name, otch: string; n: integer; begin

Программа

program qq;
var s, name, otch: string;
n: integer;
begin
writeln('Введите имя, отчество

и фамилию');
readln(s);
n := Pos(' ', s);
name := Copy(s, 1, n-1); { вырезать имя }
Delete(s, 1, n);
n := Pos(' ', s);
otch := Copy(s, 1, n-1); { вырезать отчество }
Delete(s, 1, n); { осталась фамилия }
s := s + ' ' + name[1] + '.' + otch[1] + '.';
writeln(s);
end.
Слайд 13

Задания всем 4,5,6, затем См. файл с заданиями в конце по

Задания всем 4,5,6, затем См. файл с заданиями в конце по

вариантам

Ввести в одну строку фамилию, имя и отчество, разделив их пробелом. Вывести инициалы и фамилию.
Пример:
Введите фамилию, имя и отчество:
Иванов Петр Семёнович
Результат:
П.С. Иванов
Ввести имя файла (возможно, без расширения) и изменить его расширение на «.exe».
Пример:
Введите имя файла: Введите имя файла:
qqq qqq.com
Результат: Результат:
qqq.exe qqq.exe

Слайд 14

Задания Ввести путь к файлу и «разобрать» его, выводя каждую вложенную

Задания

Ввести путь к файлу и «разобрать» его, выводя каждую вложенную папку

с новой строки
Пример:
Введите путь к файлу:
C:\Мои документы\10-Б\Вася\qq.exe
Результат:
C:
Мои документы
10-Б
Вася
qq.exe
Слайд 15

Задачи на обработку строк Задача: с клавиатуры вводится символьная строка, представляющая

Задачи на обработку строк

Задача: с клавиатуры вводится символьная строка, представляющая собой

сумму двух целых чисел, например:
12+35
Вычислить эту сумму:
12+35=47

Алгоритм:
найти знак «+»
выделить числа слева и справа в отдельные строки
перевести строки в числа
сложить
вывести результат

Слайд 16

Преобразования «строка»-«число» Из строки в число: s := '123'; Val (

Преобразования «строка»-«число»

Из строки в число:

s := '123';
Val ( s, N, r

); { N = 123 }
{ r = 0, если ошибки не было
r – номер ошибочного символа}
s := '123.456';
Val ( s, X, r ); { X = 123.456 }

Из числа в строку:

N := 123;
Str ( N, s ); { '123' }
X := 123.456;
Str ( X, s ); { '1.234560E+002' }
Str ( X:10:3, s ); { ' 123.456' }

var N, r: integer;
X: real;
s: string;

Слайд 17

Программа program qq; var s, s1, s2: string; r, n, n1,

Программа

program qq;
var s, s1, s2: string;
r, n, n1, n2, sum:

integer;
begin
writeln('Введите выражение (сумму чисел):');
readln(s);
n:= Pos('+', s);
s1:= Copy(s, 1, n-1);
s2:= Copy(s, n+1, Length(s)-n);
Val(s1, n1, r);
Val(s2, n2, r);
sum:= n1 + n2;
writeln(n1, '+', n2, '=', sum);
end.

слагаемые-строки

слагаемые-числа

сумма

слагаемые-строки

слагаемые-числа

Слайд 18

Задания «3»: Ввести арифметическое выражение: разность двух чисел. Вычислить эту разность.

Задания

«3»: Ввести арифметическое выражение: разность двух чисел. Вычислить эту разность.
Пример:

25-12
Ответ: 13
«4»: Ввести арифметическое выражение: сумму трёх чисел. Вычислить эту сумму.
Пример:
25+12+34
Ответ: 71
Слайд 19

Задания «5»: Ввести арифметическое выражение c тремя числами, в котором можно

Задания

«5»: Ввести арифметическое выражение c тремя числами, в котором можно использовать

сложение и вычитание. Вычислить это выражение.
Пример: Пример:
25+12+34 25+12-34
Ответ: 71 Ответ: 3
Пример: Пример:
25-12+34 25-12-34
Ответ: 47 Ответ: -21
Слайд 20

Задания «6»: Ввести арифметическое выражение c тремя числами, в котором можно

Задания

«6»: Ввести арифметическое выражение c тремя числами, в котором можно использовать

сложение, вычитание и умножение. Вычислить это выражение.
Пример: Пример:
25+12*3 25*2-34
Ответ: 61 Ответ: 16
Пример: Пример:
25-12+34 25*2*3
Ответ: 47 Ответ: 150
Слайд 21

Посимвольный ввод Задача: с клавиатуры вводится число N, обозначающее количество футболистов

Посимвольный ввод

Задача: с клавиатуры вводится число N, обозначающее количество футболистов команды

«Шайба», а затем – N строк, в каждой из которых – информация об одном футболисте таком формате:
<Фамилия> <Имя> <год рождения> <голы>
Все данные разделяются одним пробелом. Нужно подсчитать, сколько футболистов, родившихся в период с 1988 по1990 год, не забили мячей вообще.

Алгоритм:

for i:=1 to N do begin
{ пропускаем фамилию и имя }
{ читаем год рождения Year и число голов Gol }
if (1988 <= Year) and (Year <=1990) and
(Gol = 0) then { увеличиваем счетчик }
end;

Слайд 22

Посимвольный ввод Пропуск фамилии: repeat read(c); until c = ' ';

Посимвольный ввод

Пропуск фамилии:

repeat
read(c);
until c = ' '; { пока не

встретим пробел }

var c: char;

Пропуск имени:

repeat read(c); until c = ' ';

Ввод года рождения:

read(Year); { из той же введенной строки }

var Year: integer;

Ввод числа голов и переход к следующей строке:

readln(Gol); { читать все до конца строки }

var Gol: integer;

Слайд 23

Программа program qq; var c: char; i, N, count, Year, Gol:

Программа

program qq;
var c: char;
i, N, count, Year, Gol: integer;
begin
writeln('Количество

футболистов');
readln(N);
count := 0;
for i:=1 to N do begin
repeat read(c); until c = ' ';
repeat read(c); until c = ' ';
read(Year);
readln(Gol);
if (1988 <= Year) and (year <= 1990) and
(Gol = 0) then count := count + 1;
end;
writeln(count);
end.

repeat read(c); until c = ' ';
repeat read(c); until c = ' ';
read(Year);
readln(Gol);

Слайд 24

Посимвольный ввод Если фамилия нужна: fam := ''; { пустая строка

Посимвольный ввод

Если фамилия нужна:

fam := ''; { пустая строка }
repeat

read(c); { прочитать символ }
fam := fam + c; { прицепить к фамилии }
until c = ' ';

Вместо read(Year):

s := ''; { пустая строка }
repeat
read(c); { прочитать символ }
s := s + c; { прицепить к году }
until c = ' ';
Val(s, Year, r); { строку – в число }

var fam: string;

var s: string;

Слайд 25

Посимвольный ввод Если нужно хранить все фамилии: const MAX = 100;

Посимвольный ввод

Если нужно хранить все фамилии:

const MAX = 100;
var fam: array[1..MAX]

of string;
...
fam[i] := ''; { пустая строка }
repeat
read(c); { прочитать символ }
fam[i] := fam[i] + c;
until c = ' ';

массив символьных строк

Слайд 26

Задания «3»: Вывести фамилии и имена всех футболистов, которые забили больше

Задания

«3»: Вывести фамилии и имена всех футболистов, которые забили больше двух

голов.
Пример:
Иванов Василий
Семёнов Кузьма
«4»: Вывести фамилию и имя футболиста, забившего наибольшее число голов, и количество забитых им голов.
Пример:
Иванов Василий 25

Информация о футболистах вводится так же, как и для приведенной задачи (сначала N, потом N строк с данными).

Слайд 27

Задания «5»: Вывести в алфавитном порядке фамилии и имена всех футболистов,

Задания

«5»: Вывести в алфавитном порядке фамилии и имена всех футболистов, которые

забили хотя бы один гол. В списке не более 100 футболистов.
Пример:
Васильев Иван
Иванов Василий
Кутузов Михаил
Пупкин Василий
Слайд 28

Программирование на языке Паскаль Часть II Тема 7. Рекурсивный перебор

Программирование на языке Паскаль Часть II

Тема 7. Рекурсивный перебор

Слайд 29

Рекурсивный перебор Задача: Алфавит языка племени «тумба-юмба» состоит из букв Ы,

Рекурсивный перебор

Задача: Алфавит языка племени «тумба-юмба» состоит из букв Ы, Ц,

Щ и О. Вывести на экран все слова из К букв, которые можно составить в этом языке, и подсчитать их количество. Число K вводится с клавиатуры.

1

K

в каждой ячейке может быть любая из 4-х букв

4 варианта

4 варианта

4 варианта

4 варианта

Количество вариантов:

Слайд 30

Рекурсивный перебор 1 K Рекурсия: Решения задачи для слов из К

Рекурсивный перебор

1

K

Рекурсия: Решения задачи для слов из К букв сводится к

4-м задачам для слов из K-1 букв.

1

K

1

K

1

K

перебрать все варианты

перебрать все варианты

перебрать все варианты

перебрать все варианты

Слайд 31

Процедура procedure Rec(p: integer); begin if p > K then begin

Процедура

procedure Rec(p: integer);
begin
if p > K then begin
writeln(s);
count

:= count+1;
end
else begin
s[p]:='Ы'; Rec ( p+1 );
s[p]:='Ц'; Rec ( p+1 );
s[p]:='Щ'; Rec ( p+1 );
s[p]:='О'; Rec ( p+1 );
end;
end;

1

K

p

s

p+1

рекурсивные вызовы

окончание рекурсии

Глобальные переменные:
var s: string;
count, K: integer;

Слайд 32

Процедура procedure Rec(p: integer); const letters = 'ЫЦЩО'; var i: integer;

Процедура

procedure Rec(p: integer);
const letters = 'ЫЦЩО';
var i: integer;

begin
if p > k then begin
writeln(s);
count := count+1;
end
else begin
for i:=1 to length(letters) do begin
s[p] := letters[i];
Rec(p+1);
end;
end;
end;

const letters = 'ЫЦЩО';

for i:=1 to length(letters) do begin
s[p] := letters[i];
Rec(p+1);
end;

все буквы

цикл по всем буквам

локальная переменная

Слайд 33

Программа program qq; var s: string; K, i, count: integer; begin

Программа

program qq;
var s: string;
K, i, count: integer;
begin
writeln('Введите длину слов:');

read ( K );
s := '';
for i:=1 to K do s := s + ' ';
count := 0;
Rec ( 1 );
writeln('Всего ', count, ' слов');
end.

procedure Rec(p: integer);
...
end;

процедура

s := '';
for i:=1 to K do s := s + ' ';

строка из K пробелов

глобальные переменные

Слайд 34

Задания Алфавит языка племени «тумба-юмба» состоит из букв Ы, Ц, Щ

Задания

Алфавит языка племени «тумба-юмба» состоит из букв Ы, Ц, Щ и

О. Число K вводится с клавиатуры.

«3»: Вывести на экран все слова из К букв, в которых первая буква – Ы, и подсчитать их количество.
«4»: Вывести на экран все слова из К букв, в которых буква Ы встречается более 1 раза, и подсчитать их количество.
«5»: Вывести на экран все слова из К букв, в которых есть одинаковые буквы, стоящие рядом (например, ЫЩЩО), и подсчитать их количество.

Слайд 35

Программирование на языке Паскаль Часть II Тема 8. Матрицы

Программирование на языке Паскаль Часть II

Тема 8. Матрицы

Слайд 36

Матрицы Задача: запомнить положение фигур на шахматной доске. 1 2 3 4 5 6 c6 A[6,3]

Матрицы

Задача: запомнить положение фигур на шахматной доске.

1

2

3

4

5

6

c6

A[6,3]

Слайд 37

Матрицы Матрица – это прямоугольная таблица чисел (или других элементов одного

Матрицы

Матрица – это прямоугольная таблица чисел (или других элементов одного типа).
Матрица

– это массив, в котором каждый элемент имеет два индекса (номер строки и номер столбца).

A

строка 2

столбец 3

ячейка A[3,4]

Слайд 38

Матрицы Объявление: const N = 3; M = 4; var A:

Матрицы

Объявление:

const N = 3;
M = 4;
var A: array[1..N,1..M] of integer;

B: array[-3..0,-8..M] of integer;
Q: array['a'..'d',False..True] of real;

Ввод с клавиатуры:

for i:=1 to N do
for j:=1 to M do begin
write('A[',i,',',j,']=');
read ( A[i,j] );
end;

A[1,1]=

25

A[1,2]=

14

A[1,3]=

14

...

A[3,4]=

54

i

j

for j:=1 to M do
for i:=1 to N do begin

Слайд 39

Матрицы Заполнение случайными числами for i:=1 to N do for j:=1

Матрицы

Заполнение случайными числами

for i:=1 to N do
for j:=1 to M

do
A[i,j] := random(25) - 10;

цикл по строкам

цикл по столбцам

Вывод на экран

for i:=1 to N do begin
writeln;
end;

перейти на новую строку

for j:=1 to M do
write ( A[i,j]:5 );

вывод строки

в той же строке

Слайд 40

Обработка всех элементов матрицы Задача: заполнить матрицу из 3 строк и

Обработка всех элементов матрицы

Задача: заполнить матрицу из 3 строк и 4

столбцов случайными числами и вывести ее на экран. Найти сумму элементов матрицы.

program qq;
const N = 3; M = 4;
var A: array[1..N,1..M] of integer;
i, j, S: integer;
begin
{ заполнение матрицы и вывод на экран}
S := 0;
writeln('Сумма элементов матрицы ', S);
end.

for i:=1 to N do
for j:=1 to M do
S := S + A[i,j];

Слайд 41

Задания Заполнить матрицу из 8 строк и 5 столбцов случайными числами

Задания

Заполнить матрицу из 8 строк и 5 столбцов случайными числами в

интервале [-10,10] и вывести ее на экран.

«3»: Удвоить все элементы матрицы и вывести её на экран.
«4»: Найти минимальный и максимальный элементы в матрице их номера. Формат вывода:
Минимальный элемент A[3,4]=-6
Максимальный элемент A[2,2]=10
«5»: Вывести на экран строку, сумма элементов которой максимальна. Формат вывода:
Строка 2: 3 5 8 9 8

Слайд 42

Операции с матрицами Задача 1. Вывести на экран главную диагональ квадратной

Операции с матрицами

Задача 1. Вывести на экран главную диагональ квадратной матрицы

из N строк и N столбцов.

A[1,N]

A[2,2]

A[3,3]

A[N,N]

for i:=1 to N do
write ( A[i,i]:5 );

Задача 2. Вывести на экран вторую диагональ.

A[N,1]

A[N-1,2]

A[2,N-1]

for i:=1 to N do
write ( A[i, ]:5 );

N+1-i

сумма номеров строки и столбца N+1

A[1,1]

Слайд 43

Операции с матрицами Задача 3. Найти сумму элементов, стоящих на главной

Операции с матрицами

Задача 3. Найти сумму элементов, стоящих на главной диагонали

и ниже ее.

строка 1: A[1,1]
строка 2: A[2,1]+A[2,2]
...
строка N: A[N,1]+A[N,2]+...+A[N,N]

S := 0;
for i:= 1 to N do

цикл по всем строкам

for j:= 1 to i do
S := S + A[i,j];

складываем нужные элементы строки i

Слайд 44

Операции с матрицами Задача 4. Перестановка строк или столбцов. В матрице

Операции с матрицами

Задача 4. Перестановка строк или столбцов. В матрице из

N строк и M столбцов переставить 2-ую и 4-ую строки.

2

4

j

A[2,j]

A[4,j]

for j:=1 to M do begin
c := A[2,j];
A[2,j] := A[4,j];
A[4,j] := c;
end;

Задача 5. К третьему столбцу добавить шестой.

for i:=1 to N do
A[i,3] := A[i,3] + A[i,6];

Слайд 45

Задания Заполнить матрицу из 7 строк и 7 столбцов случайными числами

Задания

Заполнить матрицу из 7 строк и 7 столбцов случайными числами в

интервале [10,90] и вывести ее на экран. Заполнить элементы, отмеченные зеленым фоном, числами 99, и вывести полученную матрицу на экран.

«3»: «4»: «5»:

Слайд 46

Программирование на языке Паскаль Часть II Тема 9. Файлы

Программирование на языке Паскаль Часть II

Тема 9. Файлы

Слайд 47

Файлы Файл – это область на диске, имеющая имя. Файлы только

Файлы

Файл – это область на диске, имеющая имя.

Файлы

только текст без оформления, не

содержат управляющих символов (с кодами < 32)

ACSII (1 байт на символ)
UNICODE (2 байта на символ)

*.txt, *.log,
*.htm, *.html

могут содержать любые символы кодовой таблицы

*.doc, *.exe,
*.bmp, *.jpg,
*.wav, *.mp3,
*.avi, *.mpg

Текстовые

Двоичные

Папки (каталоги)

Слайд 48

Принцип сэндвича I этап. открыть файл : связать переменную f с

Принцип сэндвича

I этап. открыть файл :
связать переменную f с файлом
открыть файл

(сделать его активным, приготовить к работе)

assign(f, 'qq.txt');

reset(f); {для чтения}

rewrite(f); {для записи}

II этап: работа с файлом

Переменная типа «текстовый файл»: var f: text;

III этап: закрыть файл

close(f);

read ( f, n ); { ввести значение n }

write ( f, n ); { записать значение n }
writeln ( f, n );{c переходом на нов.строку }

Слайд 49

Работа с файлами Особенности: имя файла упоминается только в команде assign,

Работа с файлами

Особенности:
имя файла упоминается только в команде assign, обращение к

файлу идет через файловую переменную
файл, который открывается на чтение, должен существовать
если файл, который открывается на запись, существует, старое содержимое уничтожается
данные записываются в файл в текстовом виде
при завершении программы все файлы закрываются автоматически
после закрытия файла переменную f можно использовать еще раз для работы с другим файлом
Слайд 50

Последовательный доступ при открытии файла курсор устанавливается в начало чтение выполняется

Последовательный доступ

при открытии файла курсор устанавливается в начало
чтение выполняется с той

позиции, где стоит курсор
после чтения курсор сдвигается на первый непрочитанный символ

12 5 45 67 56●

конец файла
(end of file, EOF)

12 5 45 67 56●

assign ( f, 'qq.txt' );
reset ( f );

read ( f, x );

Слайд 51

Последовательный доступ чтение до конца строки как вернуться назад? close (

Последовательный доступ

чтение до конца строки
как вернуться назад?

close ( f );
reset

( f ); { начать с начала }

readln ( f, x );

12 5 45¤ 36 67¤ 56●

конец строки
(end of line, EOL)

Слайд 52

Пример Задача: в файле input.txt записаны числа (в столбик), сколько их

Пример

Задача: в файле input.txt записаны числа (в столбик), сколько их –

неизвестно. Записать в файл output.txt их сумму.
Алгоритм:
Открыть файл input.txt для чтения.
S := 0;
Если чисел не осталось, перейти к шагу 7.
Прочитать очередное число в переменную x.
S := S + x;
Перейти к шагу 3.
Закрыть файл input.txt.
Открыть файл output.txt для записи.
Записать в файл значение S.
Закрыть файл output.txt.

цикл с условием «пока есть данные»

Слайд 53

Программа program qq; var s, x: integer; f: text; begin assign(f,

Программа

program qq;
var s, x: integer;
f: text;
begin
assign(f, 'input.txt');
reset(f);

s := 0;
close(f);
end.

while not eof(f) do begin
readln(f, x);
s := s + x;
end;

f: text;

eof(f)

логическая функция, возвращает True, если достигнут конец файла

assign(f, 'output.txt');
rewrite(f);
writeln(f, 'Сумма чисел ', s);
close(f);

запись результата в файл output.txt

Слайд 54

Задания В файле data.txt записаны числа, сколько их – неизвестно. «3»:

Задания

В файле data.txt записаны числа, сколько их – неизвестно.

«3»: Найти

сумму чётных чисел и записать её в файл output.txt.
«4»: Найти минимальное и максимальное из четных чисел и записать их в файл output.txt.
«5»: Найти длину самой длинной цепочки одинаковых чисел, идущих подряд, и записать её в файл output.txt.
Слайд 55

Обработка массивов Задача: в файле input.txt записаны числа (в столбик), сколько

Обработка массивов

Задача: в файле input.txt записаны числа (в столбик), сколько их

– неизвестно, но не более 100. Переставить их в порядке возрастания и записать в файл output.txt.
Проблемы:
для сортировки надо удерживать в памяти все числа сразу (массив);
сколько чисел – неизвестно.
Решение:
выделяем в памяти массив из 100 элементов;
записываем прочитанные числа в массив и считаем их в переменной N;
сортируем первые N элементов массива;
записываем их в файл.
Слайд 56

Чтение данных в массив var A: array[1..100] of integer; f: text;

Чтение данных в массив

var A: array[1..100] of integer;
f: text;

function

ReadArray: integer;
var i: integer;
begin
assign(f, 'input.txt');
reset(f);
i := 0;
close(f);
ReadArray := i;
end;

Глобальные переменные:

Функция: ввод массива, возвращает число элементов

while (not eof(f)) and (i < 100) do begin
i := i + 1;
readln(f, A[i]);
end;

ReadArray := i;

цикл заканчивается, если достигнут конец файла или прочитали 100 чисел

Слайд 57

Программа program qq; var A: array[1..100] of integer; f: text; N,

Программа

program qq;
var A: array[1..100] of integer;
f: text; N, i: integer;
Begin

N := ReadArray;
{ сортировка первых N элементов }
end.

function ReadArray: integer;
...
end;

assign(f, 'output.txt');
rewrite(f);
for i:=1 to N do
writeln(f, A[i]);
close(f);

вывод отсортированного массива в файл

Слайд 58

Задания В файле input.txt записаны числа (в столбик), известно, что их

Задания

В файле input.txt записаны числа (в столбик), известно, что их не

более 100.

«3»: Отсортировать массив по убыванию и записать его в файл output.txt.
«4»: Отсортировать массив по убыванию последней цифры и записать его в файл output.txt.
«5»: Отсортировать массив по возрастанию суммы цифр и записать его в файл output.txt.

Слайд 59

Обработка текстовых данных Задача: в файле input.txt записаны строки, в которых

Обработка текстовых данных

Задача: в файле input.txt записаны строки, в которых есть

слово-паразит «короче». Очистить текст от мусора и записать в файл output.txt.
Файл input.txt :
Мама, короче, мыла, короче, раму.
Декан, короче, пропил, короче, бутан.
А роза, короче, упала на лапу, короче, Азора.
Каждый, короче, охотник желает, короче, знать, где ...
Результат - файл output.txt :
Мама мыла раму.
Декан пропил бутан.
А роза упала на лапу Азора.
Каждый охотник желает знать, где сидит фазан.
Слайд 60

Обработка текстовых данных Алгоритм: Прочитать строку из файла (readln). Удалить все

Обработка текстовых данных

Алгоритм:
Прочитать строку из файла (readln).
Удалить все сочетания

", короче," (Pos, Delete).
Записать строку в другой файл.
Перейти к шагу 1.
Обработка строки s:
Особенность:
надо одновременно держать открытыми два файла (один в режиме чтения, второй – в режиме записи).

пока не кончились данные

repeat
i := Pos(', короче,', s);
if i <> 0 then Delete(s, i, 9);
until i = 0;

искать «, короче,»

удалить 9 символов

Слайд 61

Работа с двумя файлами одновременно program qq; var s: string; i:

Работа с двумя файлами одновременно

program qq;
var s: string;
i:

integer;
fIn, fOut: text;
begin
assign(fIn, 'input.txt');
reset(fIn);
assign(fOut, 'output.txt');
rewrite(fOut);
{ обработать файл }
close(fIn);
close(fOut);
end.

fIn, fOut: text;

файловые переменные

открыть файл для чтения

открыть файл для записи

Слайд 62

Полный цикл обработки файла while not eof(fIn) do begin readln(fIn, s);

Полный цикл обработки файла

while not eof(fIn) do begin
readln(fIn,

s);
writeln(fOut, s);
end;

repeat
i := Pos(', короче,', s);
if i <> 0 then
Delete(s, i, 9);
until i = 0;

пока не достигнут конец файла

обработка строки

запись «очищенной» строки

Слайд 63

Задания В файле input.txt записаны строки, сколько их – неизвестно. «3»:

Задания

В файле input.txt записаны строки, сколько их – неизвестно.

«3»: Заменить

все слова «короче» на «в общем» и записать результат в файл output.txt.
«4»: Вывести в файл output.txt только те строки, в которых есть слово «пароход». В этих строках заменить все слова «короче» на «в общем».
«5»: Вывести в файл output.txt только те строки, в которых больше 5 слов (слова могут быть разделены несколькими пробелами).
Слайд 64

Сортировка списков Задача: в файле list.txt записаны фамилии и имена пользователей

Сортировка списков

Задача: в файле list.txt записаны фамилии и имена пользователей сайта

(не более 100). Вывести их в алфавитном порядке в файл sort.txt.
Файл list.txt :
Федоров Иван
Иванов Федор
Анисимов Никита
Никитин Николай
Результат – файл sort.txt :
Анисимов Никита
Иванов Федор
Никитин Николай
Федоров Иван
Слайд 65

Сортировка списков Алгоритм: прочитать строки из файла в массив строк, подсчитать

Сортировка списков

Алгоритм:
прочитать строки из файла в массив строк, подсчитать их

в переменной N
отсортировать первые N строк массива по алфавиту
вывести первые N строк массива в файл

Объявление массива (с запасом):

const MAX = 100;
var s: array[1..MAX] of string;

Слайд 66

Сортировка списков Ввод массива строк из файла: assign(f, 'list.txt'); reset(f); N:=

Сортировка списков

Ввод массива строк из файла:

assign(f, 'list.txt');
reset(f);
N:= 0;
while not eof(f)

do begin
N:= N + 1;
readln(f, s[N]);
end;
close(f);

var f:Text;
N: integer;

Слайд 67

Сортировка списков Сортировка первых N элементов массива: for i:=1 to N-1

Сортировка списков

Сортировка первых N элементов массива:

for i:=1 to N-1 do

begin
nMin:= i;
for j:=i+1 to N do
if s[j] < s[nMin] then nMin:= j;
if i <> nMin then begin
c:= s[i];
s[i]:= s[nMin];
s[nMin]:= c;
end;
end;

var i, j, nMin: integer;
c: string;

Слайд 68

Сортировка списков Вывод первых N строк массива в файл: assign(f, 'sort.txt');

Сортировка списков

Вывод первых N строк массива в файл:

assign(f, 'sort.txt');
rewrite(f);
for i:=1

to N do
writeln(f, s[i]);
close(f);

var f:Text;
i, N: integer;

Слайд 69

Сортировка списков Как сравниваются строки: || || || || ? s1

Сортировка списков

Как сравниваются строки:

||

||

||

||

?

s1

s2

Кодовая таблица:

Win

UNICODE

245

226

код('х') > код('в')

'х' > 'в'

'Пароход'

> 'Паровоз'
Слайд 70

Сортировка списков Как сравниваются строки: || || || ? s1 s2

Сортировка списков

Как сравниваются строки:

||

||

||

?

s1

s2

'х' > ¤

'Пароход' > 'Пар'

Слайд 71

Сортировка списков Работа с отдельной строкой массива: var s: array[1..MAX] of

Сортировка списков

Работа с отдельной строкой массива:

var s: array[1..MAX] of string;

c: string; {вспомогательная строка}
...
for i:=1 to N do begin
с:= s[i];
{ работаем со строкой c, меняем ее }
s[i]:= c;
end;
Слайд 72

Задания «3»: Добавить к списку нумерацию: 1) Анисимов Никита 2) Иванов

Задания

«3»: Добавить к списку нумерацию:
1) Анисимов Никита
2) Иванов Федор
«4»:

Выполнить задачу на «3» и сократить имя до первой буквы:
1) Анисимов Н.
2) Иванов Ф.
«5»: Выполнить задачу на «4», но при выводе начинать с имени:
1) Н. Анисимов
2) Ф. Иванов
Слайд 73

Списки с числовыми данными Задача: в файле marks.txt записаны фамилии и

Списки с числовыми данными

Задача: в файле marks.txt записаны фамилии и имена

школьников и баллы, полученные ими на экзамене (0-100). В файле не более 100 строк. Вывести в файл best.txt список тех, кто получил более 75 баллов.
Файл marks.txt :
Федоров Иван 78
Иванов Федор 63
Анисимов Никита 90
Никитин Николай 55
Результат – файл best.txt :
Федоров Иван 78
Анисимов Никита 90
Слайд 74

Работа с двумя файлами одновременно var fIn, fOut: Text; ... assign(fIn,

Работа с двумя файлами одновременно

var fIn, fOut: Text;
...
assign(fIn, 'marks.txt');
reset(fIn);
assign(fOut, 'best.txt');
rewrite(fOut);
while

not eof(fIn) do begin
{ обработка строк из файла }
end;
close(fIn);
close(fOut);
Слайд 75

Цикл обработки файла var ball: integer; ... while not eof(fIn) do

Цикл обработки файла

var ball: integer;
...
while not eof(fIn) do begin
readln(fIn, s);

{ обработка строки s }
{ ball:= результат на экзамене }
if ball > 75 then
writeln(fOut, s);
end;
Слайд 76

Преобразования «строка»-«число» Из строки в число: s := '123'; Val (

Преобразования «строка»-«число»

Из строки в число:

s := '123';
Val ( s, N, r

); { N = 123 }
{ r = 0, если ошибки не было
r – номер ошибочного символа}
s := '123.456';
Val ( s, X, r ); { X = 123.456 }

Из числа в строку:

N := 123;
Str ( N, s ); { '123' }
X := 123.456;
Str ( X, s ); { '1.234560E+002' }
Str ( X:10:3, s ); { ' 123.456' }

var N, r: integer;
X: real;
s: string;

Слайд 77

Обработка строки n:= Pos(' ', s); { n:= 7; } fam:=

Обработка строки

n:= Pos(' ', s); { n:= 7; }
fam:= Copy(s,1,n-1); {

fam:= 'Пупкин'; }
Delete(s, 1, n); { s:= 'Вася 82'; }
n:= Pos(' ', s); { n:= 5; }
name:= Copy(s,1,n-1); { name:= 'Вася'; }
Delete(s, 1, n); { s:= '82'; }
Val(s, ball, r); { ball:= 82; }

var n, r: integer;
s, fam, name: string;

s:

n

1

n

1

Слайд 78

Задания «3»: Добавить к списку нумерацию: 1) Федоров Иван 78 2)

Задания

«3»: Добавить к списку нумерацию:
1) Федоров Иван 78
2) Анисимов Никита

90
«4»: Выполнить задачу на «3» и сократить имя до первой буквы:
1) Федоров И. 78
2) Анисимов Н. 90
«5»: Выполнить задачу на «4», но отсортировать список по алфавиту.
1) Анисимов Н. 90
2) Федоров И. 78
«6»: Выполнить задачу на «4», но отсортировать список по убыванию отметки (балла).