строки в паскале
Автор я задал вопрос в разделе Другие языки и технологии
строки в Паскале и получил лучший ответ
Ответ от Gennady[гуру]
Доброго времени суток.
Вот теперь видно, что пытались сделать. Можно делать и так. Жаль ответы поели текст и трудновато разобраться. Но несколько замечаний сделаю. Если вы решили использовать функцию, то почему не присваиваете ей значение перед выходом? На мой взгляд все значительно проще и если не поставлена задача реализовать с использованием процедур и функций то можно сделать так.
uses crt;
var
s, S1, tmpS : string;
SumLen, NumWord : Integer;
sred : real;
begin
Write('Введите предложение : ');
ReadLn(S);
S := S + ' '; {добавляем пробел, чтобы не потерять последнее слово}
S1 := S; {сохраняем копию введенного предложения в переменной S1}
SumLen := 0;
NumWord := 0;
while Pos(' ', S) > 0 do begin {пока в строке есть пробелы, а значит и слова}
tmpS := Copy(S, 1, Pos(' ', S) -1); {выделяем очередное}
if Length(tmpS) > 0 then begin {слово не пустое}
SumLen := SumLen + Length(tmpS); {суммируем длину}
NumWord := NumWord + 1; {и увеличиваем счетчик слов}
Delete(S,1, Pos(' ', S)); {удаляем слово из входной строки}
end;
Sred := SumLen / NumWord; {определяем среднюю длину слова}
WriteLn('Средняя длина слова ', Sred:0:3);
S := S1; {восстанавливаем входную строку}
while Pos(' ', S) > 0 do begin {пока в строке есть пробелы, а значит и слова}
tmpS := Copy(S, 1, Pos(' ', S) -1); {выделяем очередное}
if Abs(Length(tmpS) - Round(Sred)) <= 2 then {разница в длинах не более 2 символов}
WriteLn(tmpS); {выводим слово}
Delete(S,1, Pos(' ', S)); {удаляем слово из входной строки}
end;
ReadLn;
end.
Удачи!
PS Если все-таки нужен ваш вариант, пишите в почту.
чтобы Ответы не переделывали код программы, целесообразно использовать [ l ] вместо [ i ]
var
i, n, bukvi, slov, sred : integer;
slovo, s : string;
m : Array [1..256] of string;
begin
slova:=0;
bukvi:=0;
n:=0;
Readln(s); {читаем текст}
for i:=1 to length(s) do {Повторяем действия столько раз скоко символов в строке s}
if (s[|] = ' ') and (slovo <> ''); {Если буква i в строке s равно пробелу и переменная slovo }
then {то }
begin
m[n]:=slovo; {массив m с номером n заполняем тем что есть в переменной slovo}
inc(slova); {Увеличиваем переменную на 1, которая подсчитывает количество слов}
inc(n); {увеличиваем на еденичку переменную n, что бы в следуйщий раз слово записывалась в следуйщий массив}
slovo:='' {опусташаем переменную slovo}
else
begin {иначе}
inc(bukvi); {увеличиваем на еденичку значение перменной bukvi, которая подсчитывает количество букв}
slovo:=slovo + s[|]; {добавляем букву к переменной slovo, сохраняющая слова}
end;
sred:=bukvi/slova; {среднее арефметическое количества букв в слове}
writeln(sred);
for i:=1 to slova do
if length(m[|])-sred>2
then writeln(m[|]);
end.
Не компилировал, так что могут быть недочеты.
Алсо как посоветовал гуру (лол, ник не помню, возвращаться лень) вместо i ставил |