• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Файлы.Гистограма длины слов

  • Автор темы eva7
  • Дата начала
E

eva7

Приветики )
мне нужно написать прогу, которая подсчитывает количество слов и их длину. а в результат записать сколько слов этой длины есть в тексте.

напремер
ну вот и настало лето. сессия . жуть...
должно показать

букв слов
1 1
2 1
3 1
4 2
6 1
7 1

я начала писать ,но что-то не знаю как дальше
Код:
program Untitled;
uses crt;
var f:Text;
slov,i:integer;
ST,s:string;

function Words(s:string):boolean;
const
st = ('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');
var i,j,sum:integer;
begin
sum:=0;
for i:=1 to Length(s)do
for j:=1 to Length(st) do
if s[i] = st[j]then sum:=sum+1;

IF sum = Length(s) THEN Words:=true ELSE Words:=false;
end;

BEGIN
ClrScr;
S:='';
st:='';
slov:=0;

Assign(f, 'C:\FPC\2.4.0\bin\i386-win32\histogram.txt');
Reset(f);

while not EOF(f)do
Begin
readln(f,st);


for i:=1 to Length(st)do
if (st[i]<>#32)and(i <> length(st))
then s:=s+st[i]
else
begin
if words(s)=true then slov:=slov+1;
s:='';
end;

End;
Close(f);


writeln('Ilosc slow : ',Slov);
readln;

END.



вот еще - догадалася что длинну слова можна определить так
Код:
n:= length(s);
writeln( n );

но как сделать чтобы оно запоминало длинну каждого слова отдельно, а потом в зависимости от n выводило количество слов ?
и что делать с пробелом?

помогите,пожалуйста..

у меня здесь ошибка в том, что если есть виражение,например "програма Паскаль"
то считает как одно слово =(
тоисть считает как строки - и не знаю что делать...
:lovecodeby:
 
D

Dock1100

атавизмы - ну, "хвосты" от той задачи, которую вы решали - вывести число слов заданной пользователем длины.
типа этого:
и чуть ниже там тоже есть...

Исходная задача автора - определение кол-ва одно-, двух-, трехбуквенных и т.д. слов в заданном тексте.
Я по-другому уже не могу сформулировать))))
Исправил, чет задачу сначала не так понял.

Со стринг листом еще быстрее.
Стринглист, в паскале? может в Делфи?
 
H

hosm

насколько помню: почему глючит с длиной >255- в стандартных паскалевских строках длина зашита в 0 байте... диапазон байта - 0..255. И еще тип PChar был вроде=)
if pos(s,st)>0 then word_length:=word_length+1; if pos(s,st)=0 then

А почему такая ненависть к else? Я что-то пропустила, это в паскале сейчас дурной тон? :KillMe:
мб, еще if pos(s,st) < 0 добавить? :rolleyes: - так, на всякий случай ;)
s, st - не меняются на одной и той же итерации цикла, pos - стандартная ф-ция, которая не будет сразу и > 0 и =0.
 
H

hosm

Со стринг листом еще быстрее.
что-то я не припомнила в паскале ничего такого стандартного :KillMe:
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Так, для инфы:</div></div><div class="sp-body"><div class="sp-content"> у нас на LotusScript есть стандартная альтернатива массиву - List - бывает иногда удобно :rolleyes:
Это динамический список элементов одного типа (в том числе и объектов), есть проверка наличия элемента, возможен проход по всем элементам, доступ по строке-ключу. Если бы задачку решала на этом языке, точно взяла бы его в качестве хранилища, так как строки у нас переменной длины и могут содержать до 32K символов.
типа такого:
A list is a one-dimensional collection of elements of the same data type. You can change the size of a list at any time while the application is running and LotusScript does not allocate any storage space at compile time for the elements of a list. Lists automatically shrink or grow when elements are deleted from or added to them. You access each element in a list by a unique String value, called a list tag.
я б просто не пинала дважды pos или вообще сделала проверку на множествах (если бы помнила точно точку разрыва диапазонов для русских символов - он не был непрерывным (вроде в какой-то из кодировок))
Код:
 if pos(s[i],st)>0 then { или альтернатива - if (s[i] in ['a'..'z', 'A'..'Z']) then }
word_length:=word_length+1 
else
begin
if (word_length>0)and(word_length<=255) then
sym_word_count[word_length]:= sym_word_count[word_length]+1
else sym_word_count[256]:=sym_word_count[256]+1;
word_length:=0;	
end;
 
E

etc

В вопросе не уточняется что это только паскаль, автору пофик, поэтому можно экскрементировать.
 
E

eva7

Спасибо вам большое...
счас буду все разбирать...
Это в Паскале..
и мне не пофиг - просто я заболела немного + экзамены сдавала параллельно и еще проги писала...
уже начала сомневаться,ту ли проффесию выбрала - нервы сдают...
трудно просто - а еще одна в чужой стране..
поэтому и буквы не англ.а польськие..
но спасибо за помощь..
надеюсь я все-таки справлюсь и стану нормальным програмистом.. если не сдамся =\

а еще я в Паскале новичек - поэтому стараюся все проги как-то попроще понять, и некоторые премудрости обойти - иногда код длиннее, но просто учитель строгий =\
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!