Лекция 19.Комбинированные задачи. автор: Садовский Ефим Моисеевич1. Повторение. Строковые величины. Замена символов. Подсчет количества символов. Накопление литерных величин. Перестановка символов. Цикл While.
2. Комбинированные задачи. Практически любую достаточно сложную задачу в программировании можно "разложить" на несколько простых и решать их последовательно, выводя на экран и проверяя промежуточные результаты. Например, третью задачу предыдущего урока: Вводится предложение. Поменяйте местами первое и последнее слово, если они содержат одинаковое количество символов можно было разложить на: 1. Ввод исходных данных. 2. Подсчет количества символов (например, N) в первом слове с помощью цикла while. 3. Замена символов 1-го и length(s)-N-го, 2-го и length(s)+1-N-го, 3-го и length(s)+2-N-го, …, N-го и length(s)+N-1-N-го. 4. Вывод результатов на экран. Вообще, практически в любой задаче присутствуют блоки ввода данных и вывода результатов на экран. Решение таких задач проще выполнять поэтапно. Сначала организуем ввод данных. Решаем очередную задачу и выводим промежуточные результаты (например, количество символов первого слова), проверяя их. В более сложных задачах – это практически единственный способ отыскать ошибку. Пример 1. Удалить в предложении 3-е слово. Разбиваем задачу на несколько этапов: 1. Ввод данных. 2. Записываем в новую переменную первую часть предложения (до 3-го слова). 3. Определяем номер символа в предложении, которым заканчивается третье слово. 4. Дописываем в новую строку окончание предложения. 5. Вывод результатов. После второго этапа:Program p1;
var s,s1:string;
i,k:integer;
begin
write('Введите предложение: ')
readln(s);
s1:='';
k:=1;
i:=1;
while k<3 do
begin
if s[i]=' ' then k:=k+1;
s1:=s1+s[i];
i:=i+1;
end;
writeln(s1);
writeln(i);
end. После этого этапа очень важно проверить правильно ли сформировано начало литерной величины S1 и чему равна переменная i (ее значение должно совпадать с номером первой буквы третьего слова, при необходимости коррекции после цикла while дописывается строка i:=i+1;). После третьего этапа:Program p1;
var s,s1:string;
i,k:integer;
begin
write('Введите предложение: ')
readln(s);
s1:='';
k:=1;
i:=1;
while k<3 do
begin
if s[i]=' ' then k:=k+1;
s1:=s1+s[i];
i:=i+1;
end;
while s[i]<>' ' do
i:=i+1;
writeln(i);
end. Мы определяем номер следующего пробела (после 3-го слова). После этого этапа проверяем чему равна переменная i (ее значение должно совпадать с номером пробела после третьего слова, при необходимости коррекции после цикла while дописывается строка i:=i+1; или i:=i-1;). Окончательное решение задачи:Program p1;
var s,s1:string;
t,i,k:integer;
begin
write('Введите предложение: ')
readln(s);
s1:='';
k:=1;
i:=1;
while k<3 do
begin
if s[i]=' ' then k:=k+1;
s1:=s1+s[i];
i:=i+1;
end;
while s[i]<>' ' do
i:=i+1;
for t:=i to length(s) do
s1:=s1+s[t];
writeln('Полученное предложение:',s1);
end. 3. Решение задач. 1. Удалить в предложении N-е слово. 2. Вводится предложение. Заменить все буквы N-го слова точками. 3. Поменять местами 1 и N-е слово в предложении.
pascal, pascal, pascal, pascal
|