Var s: string; // строка текста i,lf: integer; // lf - номер первого символа отдельного слова в строке // i - переменная цикла, для просмотра строки begin write('строка: '); readln(s); // считывание слова i:=1; lf:=1; // i:=1; - текущий символ слова - первый // lf:=1; - lf указывает на первый символ слова repeat // цикл по строке if s[i]=' ' then // если очередной символ строки - пробел, то begin // начало блока операторов if UpperCase(s[i-1])=UpperCase(s[lf]) then // если последний символ
текущего // слова равен первому символу слова без учета регистра,
то begin // начало блока операторов delete(s,lf,i-lf+1); // удаляем слово вместе с пробелом справа i:=lf; // i:=lf; - переменная i указывает на следующее слово end // конец блока операторов else lf:=i+1; // иначе, если первый символ слова не равен // последнему символу слова, устанавливаем lf на // первый символ следующего слова end; // конец блока по условию, что очередной символ - пробел
i:=i+1; // переходим к следующему символу в строке until >length(s); // если номер очередного символа строки больше длины // строки, то выход из цикла по строке // если в последнем слове текста есть совпадения // первого и последнего символа if s[length(s)] in ['.','?','!'] then // если текст заканчивается одним из знаков .?! if s[lf]=s[length(s)-1] then delete(s,lf-1,length(s)-lf+1) // сравниваем с предпоследним // если равны, то удаляем последнее слово else // иначе ничего не делаем else if s[lf]=s[length(s)] then delete(s,lf-1,length(s)-lf+2); // если последний // символ не .?!, то сравниваем первый символ последнего // слова с последним символом текста, если равны, // то удаляем последнее слово writeln('новая строка: ',s); // выводим новую строку на экран end. // конец программы
строка: Это озеро около заповедника. новая строка: Это заповедника.
строка: Около этого заповедника находится озеро. новая строка: этого заповедника находится.
строка: озеро около заповедника новая строка: заповедника
Английский = a + d + f + g = 28. Немецкий = b + e + f + g = 30. Французский = c + d + e + f = 42. Английский и немецкий = g + f = 8. Английский и французский = d + f = 10. Немецкий и французский = f + e = 5. Все три языка = f = 3.
А) Чтобы найти учеников, изучающих только английский, нужно вычесть "d + f + g". d = (d + f) - f = 10 - 3 = 8. g = (g + f) - f = 8 - 3 = 5. Английский = 28 - 13 = 15.
Французский = 42 - (d + e + f). e = (f + e) - f = 5 - 3 = 2.
42 - (8 + 2 + 3) = 42 - 13 = 29.
Немецкий = 30 - (e + f + g) 30 - (2 + 3 + 5) = 30 - 10 = 20.
Б) Складываем тех, кто знает английский/немецкий/французский и вычитаем 100.
i,lf: integer; // lf - номер первого символа отдельного слова в строке
// i - переменная цикла, для просмотра строки
begin
write('строка: '); readln(s); // считывание слова
i:=1; lf:=1; // i:=1; - текущий символ слова - первый
// lf:=1; - lf указывает на первый символ слова
repeat // цикл по строке
if s[i]=' ' then // если очередной символ строки - пробел, то
begin // начало блока операторов
if UpperCase(s[i-1])=UpperCase(s[lf]) then // если последний символ
текущего
// слова равен первому символу слова без учета регистра,
то
begin // начало блока операторов
delete(s,lf,i-lf+1); // удаляем слово вместе с пробелом справа
i:=lf; // i:=lf; - переменная i указывает на следующее слово
end // конец блока операторов
else lf:=i+1; // иначе, если первый символ слова не равен
// последнему символу слова, устанавливаем lf на
// первый символ следующего слова
end; // конец блока по условию, что очередной символ - пробел
i:=i+1; // переходим к следующему символу в строке
until >length(s); // если номер очередного символа строки больше
длины // строки, то выход из цикла по строке
// если в последнем слове текста есть совпадения
// первого и последнего символа
if s[length(s)] in ['.','?','!'] then // если текст заканчивается одним из знаков
.?!
if s[lf]=s[length(s)-1] then delete(s,lf-1,length(s)-lf+1) // сравниваем с
предпоследним
// если равны, то удаляем последнее слово
else // иначе ничего не делаем
else if s[lf]=s[length(s)] then delete(s,lf-1,length(s)-lf+2); // если последний
// символ не .?!, то сравниваем первый символ
последнего
// слова с последним символом текста, если равны,
// то удаляем последнее слово
writeln('новая строка: ',s); // выводим новую строку на экран
end. // конец программы
строка: Это озеро около заповедника.
новая строка: Это заповедника.
строка: Около этого заповедника находится озеро.
новая строка: этого заповедника находится.
строка: озеро около заповедника
новая строка: заповедника
Немецкий = b + e + f + g = 30.
Французский = c + d + e + f = 42.
Английский и немецкий = g + f = 8.
Английский и французский = d + f = 10.
Немецкий и французский = f + e = 5.
Все три языка = f = 3.
А) Чтобы найти учеников, изучающих только английский, нужно вычесть "d + f + g".
d = (d + f) - f = 10 - 3 = 8.
g = (g + f) - f = 8 - 3 = 5.
Английский = 28 - 13 = 15.
Французский = 42 - (d + e + f).
e = (f + e) - f = 5 - 3 = 2.
42 - (8 + 2 + 3) = 42 - 13 = 29.
Немецкий = 30 - (e + f + g)
30 - (2 + 3 + 5) = 30 - 10 = 20.
Б) Складываем тех, кто знает английский/немецкий/французский и вычитаем 100.
100 - (15 + 29 + 20) = 100 - 64 = 36.
Круги смотри во вложении.