строки в паскаль



строки в паскале

Автор я задал вопрос в разделе Другие языки и технологии

строки в Паскале и получил лучший ответ

Ответ от 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 ]

Ответ от Alibak[активный]
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 ставил |

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: строки в Паскале
Строковый тип на Википедии
Посмотрите статью на википедии про Строковый тип
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*