Написать программу на языке C++ для решения задачи 2.4.2 из учебника А. Шеня. 2.4.2 Представляя разбиения как невозрастающие последовательности, перечислите их в порядке, обратном лексикографическому. (Для n = 4, например, должно быть 4, 3+1, 2+2, 2+1+1, 1+1+1+1)
const
//Формат файла
//Фамилия имя номер
fl = 'D:\phone.txt';
var
t : text;
c : char;
Fnm,s : string;
begin
assign (t,fl);
reset (t);
writeln ('Укажите фамилию');
readln (Fnm); writeln();
While not eof (t) do
begin
s := '';
//Считываем фамилию
read (t,c);
While c <> ' ' do
begin
s := s + c;
read (t,c);
end;
//Если Фамилию нужная то дочитываем
//иначе переходим к следующему
if s = fnm then
begin
write (s+' ');
While not eoln(t) do
begin
read (t,c);
write (c);
end;
readln (t);
writeln ();
end
else
readln (t);
end;
close (t);
end.
var
f: text;
i, j, h: byte;
l, k: smallint;
s, s1, s2, m: string;
begin
assign(f, 'F.txt'); {путь к файлу}
reset(f);
read(f, s);
s := ' ' + s + ' ';
close(f);
writeln('укажите 2 слова через строчку');
readln(s1);
readln(s2);
i := 0; j := 0; m := s; k := 1;
while k <> 0 do
begin
k := pos(' ' + s1 + ' ', m);
if (k <> 0) then inc(i);
delete(m, 1, k + length(s1));
end;
k := 1; m := s;
while k <> 0 do
begin
k := pos(' ' + s2 + ' ', m);
if (k <> 0) then inc(j);
delete(m, 1, k + length(s2));
end;
m := s; k := 1; h:=0;
while (k <> 0) or (l <> 0) do
begin
k := pos(' ' + s1 + ' ' + s2 + ' ', m);
l := pos(' ' + s2 + ' ' + s1 + ' ', m);
if (k <> 0) or (l <> 0) then inc(h);
delete(m, 1, k + l + length(s2 + s1) + 1);
end;
writeln('количество слов соответствующих первому = ', i);
writeln('количество слов соответствующих второму = ', j); writeln('непосредственно друг за другом х', h);
end.