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

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

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

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





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

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


вот задача

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


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

Заранее спасибо
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Профи
****

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

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


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

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





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

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


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


делал вот так

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


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

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

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


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

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

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


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

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


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


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

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

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


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

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


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





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

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


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

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

 





- Текстовая версия 29.04.2024 20:17
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name