Конспект лекций по программированию для начинающих. Гладков В.П. - 198 стр.

UptoLike

Составители: 

200
10. Найти самый короткий путь между максимальным и минимальным
элементами двумерного массива, если разрешается двигаться вправо, влево, вверх,
вниз и по диагонали.
11. В двумерном массиве n·m найти среднее арифметическое первого столбца и
количество элементов в каждом из следующих столбцов, превышающих среднее
арифметическое предыдущего столбца.
12. РАБОТА СО СТРОКАМИ
Строки представляют собой последовательность символов используемой
кодовой таблицы. Строка характеризуется своей длиной. Строку можно
интерпретировать как массив, поэтому методы работы с массивами подходят и для
строк. Однако для строк применяются и специфические методы, основанные на
процедурах и функциях работы со строками. Эти процедуры и функции описаны
нами ранее. В этой главе
рассмотрим специфические методы работы со строками.
Пример 12.1. Подсчитать, сколько раз в заданной строке встречается указанная
буква.
Решение 1. Обозначим заданную строку - s, а искомую букву - a. Тогда для
решения задачи будем просматривать заданную строку посимвольно и каждый
символ сравнивать с заданной буквой.
k:=0; { количество указанных букв в строке }
for i:=1 to length(s) do
if copy(s,i,1)=a then k:=k+1.
Решение 2. Будем искать положение указанной буквы в строке до тех пор, пока
ее удастся найти. Затем отбрасываем ту часть строки, где была найдена указанная
буква, и повторяем поиск.
k:=0; j:=pos(a,s); { позиция первого вхождения а в строку s }
while j<>0 do
begin k:=k+1;
s:=copy(s,j+1,length(s)-j)
j:=pos(a,s)
end.
Пример 12.2. Проверить, входят ли в строку s две буквы а.
Решение. Если бы требовалось найти две буквы а, стоящие подряд, то задача бы
решалась просто: if pos('aa',s)>0 then write('входят') else write('НЕ входят'). Однако
здесь требуется проверить наличие двух букв а, стоящих в любом месте строки.
Эта задача является поисковой. Если строка закончится и две буквы а не будут
найдены, то ответ на вопрос задачи отрицательный.
Если при поиске будут
найдены две буквы а, то ответ на вопрос задачи положительный. Для подсчета
найденных букв а используется счетчик.
k:=0; { счетчик букв а }
f:=false; { пока не нашли две буквы а }
i:=1; { номер исследуемого символа строки }
while (i<=length(s)) and not f do
if copy(s,i,1)='a'
then begin k:=k+1;
if k=2 then f:=true
                                         200

   10. Найти самый короткий путь между максимальным и минимальным
элементами двумерного массива, если разрешается двигаться вправо, влево, вверх,
вниз и по диагонали.
   11. В двумерном массиве n·m найти среднее арифметическое первого столбца и
количество элементов в каждом из следующих столбцов, превышающих среднее
арифметическое предыдущего столбца.

                         12. РАБОТА СО СТРОКАМИ
    Строки представляют собой последовательность символов используемой
кодовой таблицы. Строка характеризуется своей длиной. Строку можно
интерпретировать как массив, поэтому методы работы с массивами подходят и для
строк. Однако для строк применяются и специфические методы, основанные на
процедурах и функциях работы со строками. Эти процедуры и функции описаны
нами ранее. В этой главе рассмотрим специфические методы работы со строками.
    Пример 12.1. Подсчитать, сколько раз в заданной строке встречается указанная
буква.
    Решение 1. Обозначим заданную строку - s, а искомую букву - a. Тогда для
решения задачи будем просматривать заданную строку посимвольно и каждый
символ сравнивать с заданной буквой.
    k:=0; { количество указанных букв в строке }
    for i:=1 to length(s) do
       if copy(s,i,1)=a then k:=k+1.
    Решение 2. Будем искать положение указанной буквы в строке до тех пор, пока
ее удастся найти. Затем отбрасываем ту часть строки, где была найдена указанная
буква, и повторяем поиск.
    k:=0; j:=pos(a,s); { позиция первого вхождения а в строку s }
    while j<>0 do
    begin      k:=k+1;
               s:=copy(s,j+1,length(s)-j)
               j:=pos(a,s)
    end.
    Пример 12.2. Проверить, входят ли в строку s две буквы а.
    Решение. Если бы требовалось найти две буквы а, стоящие подряд, то задача бы
решалась просто: if pos('aa',s)>0 then write('входят') else write('НЕ входят'). Однако
здесь требуется проверить наличие двух букв а, стоящих в любом месте строки.
Эта задача является поисковой. Если строка закончится и две буквы а не будут
найдены, то ответ на вопрос задачи отрицательный. Если при поиске будут
найдены две буквы а, то ответ на вопрос задачи положительный. Для подсчета
найденных букв а используется счетчик.
    k:=0; { счетчик букв а }
    f:=false; { пока не нашли две буквы а }
    i:=1; { номер исследуемого символа строки }
    while (i<=length(s)) and not f do
       if copy(s,i,1)='a'
       then begin k:=k+1;
                      if k=2 then f:=true