Консультация № 194325
29.12.2018, 18:56
0.00 руб.
0 1 1
Здравствуйте! У меня возникли сложности с таким вопросом:
Дана последовательность, содержащая от 2 до 50 слов, в каждом из которых от 1 до 8 строчных латинских букв; между соседними словами - не менее одного пробела, за последним словом - точка. Напечатать те слова последовательности, которые отличны от последнего слова и удовлетворяют следующему свойству:
- слово симметрично;
-каждая буква входит в слово не менее 2-х раз;

И еще одно пожалуйста
Дан файл товар, содержащий сведения об экспортируемых товарах: указывается наименование товара, страна, импортирующая товар, и объем поставляемой партии в штуках. Составить список стран, в которые экспортируется данный товар, и общий объем этого экспорта.

спасибо заранее



Обсуждение

давно
Старший Модератор
31795
6196
07.01.2019, 17:58
общий
это ответ
Здравствуйте, 01goch01!

[code lang=pascal h=300]uses crt;
const n=10;
var a:string;
function inpKey(b:integer):char;
var a:char;
begin
repeat a:=ReadKey;
until a in[' ','.','a'..'z'];
if(a='.')and(b<1)then a:=' ';
write(a);inpKey:=a;
end;
procedure b(var c:string;z:integer);
var d:char;e,f:string;i,j:integer;
begin
e:='';
{фильтр пробелов}
repeat d:=inpKey(z);
until d in ['.','a'..'z'];
{фильтр символов}
while(d in ['a'..'z'])and(length(e)<n)do
begin
e:=e+d;d:=InpKey(z);
if(d='.')and(z<1)then d:=' ';
end;
{пробел уходим в рекурсию}
if d=' 'then b(c,z+1);
{конец ввода}
if(d='.')and(length(e)>0)then
begin
c:=e;
writeln;
writeln('Last word: ',c);
write('Result:');
end;
{есть последнее слово}
if length(c)>0 then
begin
{первое условие: отличны от последнего}
if e<>c then
begin
{второе условие: слово симметрично}
i:=1;j:=length(e);
while(i<j)and(e[i]=e[j])do
begin inc(i);dec(j);end;
if j<=i then
begin
{третье условие: каждая буква входит в слово не менее 2-х раз}
i:=1;f:=e;
repeat j:=0;d:=f[1];
while(pos(d,f)>0)and(length(f)>0)do
begin inc(j);delete(f,pos(d,f),1);end;
until(j<2)or(f='');
{если счетчик больше - выводим}
if j>2 then write(' ',e);
end;
end;
end else if length(e)>0 then
begin
c:=e;
writeln;
writeln('Last word: ',c);
write('Result:');
end;;
end;
begin
write('Enter string:');
b(a,0);
end.[/code]

Это задание трудно решать с помощью строк, но решается просто, с помощью рекурсии.
Удачи!
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа