Procedure GetWord(s:string; var from:integer; var w:string; var len:integer); { Ищет в строке s слово, начиная с позиции from. Если слово w найдено, from будет указывать на его начало, а в len будет находиться длина эого слова. если слово не найдено, w='', len=0 Слова раздеяются минимум одним пробелом, за исключением первого и последнего слова, у которых пробел может находиться только с одной стороны. } var i,n:integer; stop:Boolean; begin n:=Length(s); i:=from; stop:=false; while (i<=n) and (not stop) do if s[i]=' ' then Inc(i) else stop:=true; if i>n then begin len:=0; w:='' end else begin from:=i; stop:=false; while (i<=n) and (not stop) do if s[i]<>' ' then Inc(i) else stop:=true; if i>n then len:=n-from+1 else len:=i-from; w:=Copy(s,from,len) end end;
var s1,wd,wdmax:string; ic,L,Lmax:integer;
begin Write('Введите строку: '); Readln(s1); ic:=1; Lmax:=0; repeat GetWord(s1,ic,wd,L); if (L>0) and (L>Lmax) then begin Lmax:=L; wdmax:=wd end; ic:=ic+L+1 until L=0; Writeln('Самое длинное слово "',wdmax,'" длины ',Lmax) end.
Тестовое решение: Введите строку: Это пример тестовой строки с произвольным числом пробелов. Самое длинное слово "произвольным" длины 12
Выходными данными компьютера является чек и сдача(если она требуется). Арифметические действия: из количество денег, что дал покупатель нужно отнять сумму всех купленных товаров и таким образом найти нужную сдачу. Например: входные данные: кол-во введенных денег = 100 руб. сумма цены товаров = (10 руб. + 21 руб + 37.21 руб.) 100 руб. - (10 руб. + 21 руб + 37.21 руб.) = 100 руб. - 68,21 руб. = 31,79. В данном случае в чеке будет указана введенное количество денег и сумма всех купленных товаров. Сдача в этом примере будет = 31,79.
Двоичные операции применяются ко всем битам, стоящим на одинаковых местах:
- "или" (v): в результате стоит 1, если на этом месте хотя бы у одного из исходных чисел стоит 1. A v B = 10111_2 v 10011_2 = 10111_2 (например, на 3-м месте у А стоит 1, у B стоит 0, поэтому в результате там стоит 1)
- "и" (&): в результате стоит 1, если на этом месте у всех исходных чисел стоит 1. (A v B) & C = 10111_2 & 11010_2 = 10010_2 = 16 + 2 = 18.
{
Ищет в строке s слово, начиная с позиции from.
Если слово w найдено, from будет указывать на его начало,
а в len будет находиться длина эого слова.
если слово не найдено, w='', len=0
Слова раздеяются минимум одним пробелом, за исключением
первого и последнего слова, у которых пробел может
находиться только с одной стороны.
}
var
i,n:integer;
stop:Boolean;
begin
n:=Length(s); i:=from; stop:=false;
while (i<=n) and (not stop) do
if s[i]=' ' then Inc(i) else stop:=true;
if i>n then begin len:=0; w:='' end
else begin
from:=i; stop:=false;
while (i<=n) and (not stop) do
if s[i]<>' ' then Inc(i) else stop:=true;
if i>n then len:=n-from+1 else len:=i-from;
w:=Copy(s,from,len)
end
end;
var
s1,wd,wdmax:string;
ic,L,Lmax:integer;
begin
Write('Введите строку: '); Readln(s1);
ic:=1; Lmax:=0;
repeat
GetWord(s1,ic,wd,L);
if (L>0) and (L>Lmax) then
begin Lmax:=L; wdmax:=wd end;
ic:=ic+L+1
until L=0;
Writeln('Самое длинное слово "',wdmax,'" длины ',Lmax)
end.
Тестовое решение:
Введите строку: Это пример тестовой строки с произвольным числом пробелов.
Самое длинное слово "произвольным" длины 12