Другие языки программирования и технологии
строки в Паскале
Задача: дана строка,состоящая из слов,разделенных пробелами. Найти среднюю длину слов этой строки и вывести слова, длина которых отличается не более чем на два символа от средней. вот моя программа,помогите подредактировать!))) program lab_7; uses crt; var s,w:string; sred:real; function Sredna_Dlina_Slov(var sred:real):real; var s : string; i : word; slovo, bukva : word; begin readln(s); bukva:=0; if s[1]=' ' then slovo:=0 else slovo:=1; i:=1; while (i <= length (s)) do begin if (s<>' ') then inc(bukva); if (i< length(s)) and (s=' ') and (s[i+1]<>' ') then inc(slovo); inc(i); end; sred:=bukva/slovo; Writeln('Sredniaja dlinna slova = ',sred:3:3); ReadKey; end; function word(w:string):string; var s:string;var i:integer; begin w:=''; for i:=1 to length(s) do begin if s<>' ' then w:=w+s else if (length(w)>sred-2) and (length(w)
Доброго времени суток.
Вот теперь видно, что пытались сделать. Можно делать и так. Жаль ответы поели текст и трудновато разобраться. Но несколько замечаний сделаю. Если вы решили использовать функцию, то почему не присваиваете ей значение перед выходом? На мой взгляд все значительно проще и если не поставлена задача реализовать с использованием процедур и функций то можно сделать так.
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 Если все-таки нужен ваш вариант, пишите в почту.
Вот теперь видно, что пытались сделать. Можно делать и так. Жаль ответы поели текст и трудновато разобраться. Но несколько замечаний сделаю. Если вы решили использовать функцию, то почему не присваиваете ей значение перед выходом? На мой взгляд все значительно проще и если не поставлена задача реализовать с использованием процедур и функций то можно сделать так.
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 ставил |
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 ставил |
Похожие вопросы
- строки в паскале
- по строкам в Паскале
- Помогите написать программу, используя строки, на Паскале, пожалуйста. Я буду очень благодарна
- Как заменить слово в строке?Паскаль
- Как разделить слова в строке, чтобы их потом сравнивать друг с другом и сортировать? (Паскаль)
- паскаль... строки...функция delete. не подскажете, почему в этой программе она не выполняется,что опять не так тут?(((
- Паскаль строки
- Помогите решить задачу в паскале. Задание: Заменить в строке все вхождения "да" на "нет".
- Как найти слово в строке. Паскаль
- паскаль(строки)