Форум «Всё о Паскале» _ Задачи _ задача "файлы" помогите решить
Автор: Vigame 16.12.2008 6:11
вот задача
Цитата
Дан текстовый файл. Считая, что количество букв в одном слове не превосходит 20, определить, сколько в файле имеется слов, состоящих из одного, двух, трех и т.д. символов. Результат вывести в другой текстовый файл.
помогите пожалуйста нечего не получается смог смастерить программу для подсчета слов в фаиле и больше нечего паскаль идет всего неделю и нужно срочно сдать задачу
Заранее спасибо
Автор: Айра 16.12.2008 7:22
Ну по сути большую часть ты сделал)) только интересно, по какому алгоритму)
А так, есть такие мысли: описываем массив из 20 элементов, номер элемента соответствует количеству букв в слове, заполняем его сначала нулями.. Затем просматриваем файл, считываем символы и загоняем их в строку s:=s+ch, пока очередной не будет пробелом (или какие там еще могут быть символы разделители), собрали слово, посчитали его длину через length(s), и увеличили значение соответствующего элемента массива.. Очистили строку s:='', и пошли выделять слова дальше.. Как-то так)
Автор: Vigame 16.12.2008 7:31
в общем от что у меня получилась но дальше не могу уже 8 часов мучаюсь
Код
Uses crt; var MyFile: Text; i,n: integer; s: String; x,y,yItog: integer; begin clrscr; x:=0; y:=0; Assign(MyFile,'Text1.txt'); ReSet(MyFile); while not EOF(myFile) do begin ReadLn(MyFile,s); n:= Length(s); for i:=1 to n do begin if s[i]=' ' then x:=x+1; end; y:=x+1; x:=0; yItog:=yItog+y; end; Close(MyFile); Assign(MyFile,'Text2.txt'); ReWrite(MyFile); Write(MyFile,yItog); Close(MyFile); end.
Автор: Lapp 16.12.2008 9:58
Цитата(Айра @ 16.12.2008 3:22)
... и загоняем их в строку ... Очистили строку ...
Зачем вообще тут строка? Сохранять символы - лишняя работа, и место лишнее нужно
Скорее, как-то так:
const Letters=['A'..'Z','a'..'z'];
var f: file of char; a: array[1..20]of integer; i: integer; c: char;
begin Assign(f,'text1.txt'); ReSet(f); i:=0; while not EoF(f) do begin Read(f,c); if c in Letters then Inc(i) else if i>0 then begin Inc(a[i]); i:=0 end end; Close(f); if c in Letters then Inc(a[i]); for i:=1 to 20 do WriteLn(i,':',a[i]:10) end.
Автор: Vigame 16.12.2008 16:40
спасибо работает но нужно сделать сохранение в другой фаил....
Добавлено через 7 мин. ура все сделал вначале ступил))))) вот код если кому интересно
Код
const Letters=['A'..'Z','a'..'z'];
var f: file of char; g: text; a: array[1..20]of integer; i: integer; c: char;
begin Assign(f,'text1.txt'); ReSet(f); i:=0; while not EoF(f) do begin Read(f,c); if c in Letters then Inc(i) else if i>0 then begin Inc(a[i]); i:=0 end end; Close(f); if c in Letters then Inc(a[i]); Assign(g,'text2.txt'); Append(g); for i:=1 to 20 do begin WriteLn(i,':',a[i]:10); Writeln(g,i, ' - ',a[i]:10); end; Close(g); end.
Lapp спасибо тебе огромное если хочешь за помощь магу рублеф 50 кинуть на вебмани токо вечером
Автор: Lapp 16.12.2008 17:35
Цитата(Vigame @ 16.12.2008 13:15)
магу рублеф 50 кинуть на вебмани токо вечером
Ну нет, браток, извиняй.. Если хочешь платить - иди в раздел На Заказ. Но спасибо, я понимаю, что это от чистого сердца
В то же время надеюсь, что была польза не только сдаче задания, но и твоим знаниям