Создать функцию программиста, которая подсчитывает в заданной строке количество слов

макс1111

Создать функцию программиста, которая подсчитывает в заданной строке количество слов (слова разделены одним или более пробелами). В программе запрашиваются две строки, и в той из них, где количество слов больше, поменять местами первое и последнее слово. (помогите пожалуйста)
4 ответа

макс1111

uses crt;
{функция количества слов}
function Count(s:string):byte;
var i,k:byte;
begin
k:=0;
for i:=1 to length(s) do
{если не пробел и первый или перед ним пробел=начало слова}
if(s[i]<>' ')and((i=1)or(s[i-1]=' ')) then k:=k+1;
Count:=k;
end;
 
{процедура обмена первого и последнего слов}
procedure Obmen(var s:string);
var s1,sp:string;
    i,i1,ip:byte;
begin
{составляем первое слово}
i1:=1;
while s[i1]=' ' do
i1:=i1+1;
s1:='';
i:=i1;{его начало}
while s[i]<>' 'do
 begin
  s1:=s1+s[i];{само слово}
  i:=i+1;
 end;
{составляем последнее слово}
ip:=length(s);
while s[ip]=' ' do
ip:=ip-1;
sp:='';
i:=ip;
while s[i]<>' ' do
 begin
  sp:=s[i]+sp;{само слово}
  i:=i-1;
 end;
ip:=i+1;{его начало}
{обмениваем слова}
insert(s1,s,ip);{вставляем первое перед последним}
delete(s,ip+length(s1),length(sp));{удаляем последнее}
insert(sp,s,i1);{последнее перед первым}
delete(s,i1+length(sp),length(s1));{удаляем первое}
writeln(s);
end;
 
var st1,st2:string;
   k1,k2:byte;
begin
clrscr;
writeln('Введите 1 строку из слов, разделенных пробелами');
readln(st1);
k1:=Count(st1);
writeln('Количество слов=',k1);
writeln('Введите 2 строку из слов, разделенных пробелами');
readln(st2);
k2:=Count(st2);
writeln('Количество слов=',k2);
if k1>k2 then
 begin
  writeln('В первой строке слов больше');
  Obmen(st1);
 end
else if k1<k2 then
 begin
  writeln('Во второй строке слов больше');
  Obmen(st2);
 end
else write('В обеих строках слов поровну');
readln
end.
Чуть поправил код, убрал лишние переменные
var st1,st2:string;
   k1,k2:byte;


макс1111

спасибо большое!


макс1111

Вообще наверное нужно без процедуры, про нее в задании нет.
uses crt;
{функция количества слов}
function Count(s:string):byte;
var i,k:byte;
begin
k:=0;
for i:=1 to length(s) do
{если не пробел и первый или перед ним пробел=начало слова}
if(s[i]<>' ')and((i=1)or(s[i-1]=' ')) then k:=k+1;
Count:=k;
end;
var st1,st2,s,s1,sp:string;
   k1,k2,i,i1,ip:byte;
begin
clrscr;
writeln('Введите 1 строку из слов, разделенных пробелами');
readln(st1);
k1:=Count(st1);
writeln('Количество слов=',k1);
writeln('Введите 2 строку из слов, разделенных пробелами');
readln(st2);
k2:=Count(st2);
writeln('Количество слов=',k2);
if k1=k2 then write('В обеих строках слов поровну')
else
 begin
  if k1>k2 then
   begin
    writeln('В первой строке слов больше');
    s:=st1;
   end
  else if k1<k2 then
   begin
    writeln('Во второй строке слов больше');
    s:=st2;
   end;
  writeln('Обмен первого и последнего слова:');
  {составляем первое слово}
  i1:=1;
  while s[i1]=' ' do
  i1:=i1+1;
  s1:='';
  i:=i1;{его начало}
  while s[i]<>' 'do
   begin
    s1:=s1+s[i];{само слово}
    i:=i+1;
   end;
  {составляем последнее слово}
  ip:=length(s);
  while s[ip]=' ' do
  ip:=ip-1;
  sp:='';
  i:=ip;
  while s[i]<>' ' do
   begin
    sp:=s[i]+sp;{само слово}
    i:=i-1;
   end;
  ip:=i+1;{его начало}
  {обмениваем слова}
  insert(s1,s,ip);{вставляем первое перед последним}
  delete(s,ip+length(s1),length(sp));{удаляем последнее}
  insert(sp,s,i1);{последнее перед первым}
  delete(s,i1+length(sp),length(s1));{удаляем первое}
  writeln(s);
 end;
readln
end.


макс1111

Создать функцию программиста, которая подсчитывает в заданной строке количество слов
function WordCount(Str: String): Byte;
const
  Simvols = [' ', ';', ':', '!', '?', '.', ','];
var
  Count, i: Byte;
begin
  Count:=1;
  for i:=1 to Length(Str) do
    if (Str[i] in Simvols) and not (Str[i+1] in Simvols) then
      Inc(Count);
  WordCount:=Count;
end;