IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> задача "файлы" помогите решить, задали задачку уже 8 часов голову ломаю((((
Vigame
сообщение 16.12.2008 2:11
Сообщение #1





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


вот задача

Цитата
Дан текстовый файл. Считая, что количество букв в одном слове не превосходит 20, определить, сколько в файле имеется слов, состоящих из одного, двух, трех и т.д. символов. Результат вывести в другой текстовый файл.


помогите пожалуйста нечего не получается смог смастерить программу для подсчета слов в фаиле и больше нечего паскаль идет всего неделю и нужно срочно сдать задачу

Заранее спасибо
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 8)
Айра
сообщение 16.12.2008 3:22
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 731
Пол: Женский

Репутация: -  25  +


Ну по сути большую часть ты сделал)) только интересно, по какому алгоритму)

А так, есть такие мысли:
описываем массив из 20 элементов, номер элемента соответствует количеству букв в слове, заполняем его сначала нулями.. Затем просматриваем файл, считываем символы и загоняем их в строку s:=s+ch, пока очередной не будет пробелом (или какие там еще могут быть символы разделители), собрали слово, посчитали его длину через length(s), и увеличили значение соответствующего элемента массива.. Очистили строку s:='', и пошли выделять слова дальше..
Как-то так)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Vigame
сообщение 16.12.2008 3:31
Сообщение #3





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


в общем от что у меня получилась но дальше не могу уже 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.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 16.12.2008 5:58
Сообщение #4


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Айра @ 16.12.2008 3:22) *
... и загоняем их в строку
... Очистили строку ...
Зачем вообще тут строка? Сохранять символы - лишняя работа, и место лишнее нужно smile.gif

Скорее, как-то так:
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.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Vigame
сообщение 16.12.2008 12:40
Сообщение #5





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


спасибо работает но нужно сделать сохранение в другой фаил....


делал вот так

         Assign(f,'Text2.txt');
ReWrite(f);
Write(f,i,':',a[i]:10);
Close(f);


но что-то не получается помогите пожалуйста

за всех нужно форматировать...

Сообщение отредактировано: Lapp - 16.12.2008 12:56
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 16.12.2008 12:55
Сообщение #6


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Если ты делаешь форматированный вывод, то файл должен быть типа text Заведи еще один файл:
g: text;

- и выводи в него.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Vigame
сообщение 16.12.2008 13:15
Сообщение #7





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


вот сделал

Код
  for i:=1 to 20 do begin
   WriteLn(i,':',a[i]:10);
   Assign(g,'text2.txt');
   Append(g);
   Write(g,i, ' - ',a[i]);
   Close(g);
   end;


а как сделать чтобы в тексте выводилось с новой страки
у меня вот что получилось
Код
01 - 12 - 43 - 84 - 135 - 16 - 77 - 08 - 09 - 310 - 011 - 012 - 013 - 014 - 015 - 016 - 017 - 018 - 019 - 020 - 0


а мне надо
Код
01 - 12
02 - 43
03 - 84
04 - 135
.....


можно такое сделать???

Добавлено через 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 кинуть на вебмани токо вечером smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 16.12.2008 13:35
Сообщение #8


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Vigame @ 16.12.2008 13:15) *
магу рублеф 50 кинуть на вебмани токо вечером smile.gif
Ну нет, браток, извиняй.. smile.gif Если хочешь платить - иди в раздел На Заказ.
Но спасибо, я понимаю, что это от чистого сердца smile.gif

В то же время надеюсь, что была польза не только сдаче задания, но и твоим знаниям smile.gif


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Vigame
сообщение 16.12.2008 13:53
Сообщение #9





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


да я уже все понял как делать огромное пасибо!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 14:11
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"