
Помогите, пожалуйста, решить в Паскаль АВС две задачи.. Дана строка, состоящая из фамилий,
разделенных одним или несколькими пробелами. 1. Сколько фамилий начинаются и заканчиваются на одну букву? 2. Удалить из строки фамилии, длина которых четна.

Ответы на вопрос

program ryazantsev;
var str, newstr: string;
pos,i,k:integer;
begin
newstr:='';
Writeln ('Введите строку с фамилиями');
Readln(str);
for i:=1 to Length(str) do begin
if str[i]=' ' then continue;
if (i=1) or (str[i-1]=' ') then pos:=i
else if (i=Length(str)) or (str[i+1]=' ') then begin
if LowerCase(str[i])=LowerCase(str[pos]) then k:=k+1;
if (i-pos+1) mod 2 <> 0 then newstr:=newstr+Copy(str, pos, i-pos+1)+' '
end
end;
writeln('Количество фамилий начинающихся и заканчивающихся на одну букву: ', k);
writeln('Новая строка: ', newstr)
end.



Задача 1: Сколько фамилий начинаются и заканчиваются на одну букву?
Для решения этой задачи вам потребуется разделить строку на отдельные фамилии и проверить, начинается ли каждая фамилия и заканчивается ли она на одну и ту же букву. Затем нужно подсчитать количество фамилий, удовлетворяющих этому условию.
Вот пример решения на языке Паскаль:
```pascal program CountNames; var inputString: string; names: array of string; i, count: integer; begin // Ввод строки с фамилиями writeln('Введите строку с фамилиями:'); readln(inputString); // Разделение строки на фамилии names := inputString.Split(' '); // Подсчет фамилий, начинающихся и заканчивающихся на одну букву count := 0; for i := 0 to Length(names) - 1 do begin if (Length(names[i]) > 0) and (names[i][1] = names[i][Length(names[i])]) then count := count + 1; end; // Вывод результата writeln('Количество фамилий, начинающихся и заканчивающихся на одну букву: ', count); end. ```
Задача 2: Удалить из строки фамилии, длина которых четна
Для решения этой задачи вам потребуется разделить строку на отдельные фамилии и проверить, является ли длина каждой фамилии четной. Затем нужно удалить из строки фамилии, удовлетворяющие этому условию.
Вот пример решения на языке Паскаль:
```pascal program RemoveNames; var inputString: string; names: array of string; i: integer; begin // Ввод строки с фамилиями writeln('Введите строку с фамилиями:'); readln(inputString); // Разделение строки на фамилии names := inputString.Split(' '); // Удаление фамилий, длина которых четна for i := Length(names) - 1 downto 0 do begin if Length(names[i]) mod 2 = 0 then Delete(inputString, Pos(names[i], inputString), Length(names[i]) + 1); end; // Вывод результата writeln('Измененная строка: ', inputString); end. ```
Обратите внимание, что в обоих примерах используется функция `Split`, которая разделяет строку на подстроки по заданному разделителю. Эта функция может быть не доступна во всех версиях Паскаля, поэтому вам может потребоваться использовать альтернативный способ разделения строки на фамилии.
Помните, что приведенные примеры решений могут быть оптимизированы и доработаны в зависимости от конкретных требований и ограничений вашей задачи.


Топ вопросов за вчера в категории Информатика








Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili