Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 20.12.2010, 00:25   #1 (permalink)
Anytocccchka
Member
 
Регистрация: 20.12.2010
Сообщений: 18
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Unhappy Программа выдает ошибку: file not open

У меня задача:
В текстовом файле book.txt посчитать количество слов,в которых согласных букв больше чем глассных. Все найденные слова записать отдельными строками в файл words.txt


program qwerty;
uses crt;
var i,m,n,j:integer;
f,f1:text;
st,word:string;
kolg,kols,kol:byte;
const glas=[перечисление глассных];
soglas=[перечисление согласных];
begin
clrscr;
kol:=0;
kolg:=0;
kols:=0;
assign(f,'book.txt');
reset(f);
assign(f1,'words.txt');
rewrite(fi);
while not Eof(f) do begin
while (st[i]=' ') and (i<=length(st)) do
inc(i);
m:=i;
while (st[i]<>' ') and (i<=length(st)) do
inc(i);
n:=i;
word:=copy(st,m,n-m);

for j:=1 to length(word) do begin
if (word[j] in glas) then begin
kolg:=kolg+1;
if (word[i] in soglas) then kols:=kols+1;
if kols>kolg then begin
kol:=kol+1;
end;
write(f1,word);
close(f);
close(f1);
readln;
end;
end;
end;
end;
end.




Прога сначала выдает количество = 1,а потом выдает file not open
Уже замучалась с задачей Помогите пожалуйста в чем здесь проблема
Anytocccchka вне форума   Ответить с цитированием

Старый 20.12.2010, 00:25
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Поищите в этих ссылках ответы

Касперский выдает ошибку
Norton PartitionMagic 8.0 выдает ошибку.
Не загружается ОС и комп выдает ошибку
Фотошоп выдает ошибку.
Ноутбук выдает ошибку 0х000000D1

Старый 20.12.2010, 09:47   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Anytocccchka Посмотреть сообщение
Помогите пожалуйста в чем здесь проблема
Вот в этих двух строчках:
Цитата:
assign(f1,'words.txt');
rewrite(fi);
Под Assign у вас файловая переменная "f1", а под rewrite - "fi" (f+i). Вы уж выберите что-нибудь одно.
Vladimir_S вне форума   Ответить с цитированием
Старый 20.12.2010, 10:11   #3 (permalink)
Anytocccchka
Member
 
Регистрация: 20.12.2010
Сообщений: 18
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Нет,в программе у меня все правильно,это я тут видимо ошиблась...
Anytocccchka вне форума   Ответить с цитированием
Старый 20.12.2010, 10:25   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Anytocccchka Посмотреть сообщение
Нет,в программе у меня все правильно,это я тут видимо ошиблась...
Хорошо. На самом деле, в программе имеется и куда более существенная ошибка.
Рассмотрим первую часть - выделение слов. Вы открыли два файла на чтение и запись, а потом начинаете анализировать символы строки St, при этом абсолютно никак не связав саму строку с содержимым файла f! Или опять "в программе всё правильно"? Если так, то выложите, пожалуйста, РАБОЧИЙ листинг программы.
P.S. Кстати, слово "гласная" (как и "согласная") пишется с одним "с".
Vladimir_S вне форума   Ответить с цитированием
Старый 20.12.2010, 10:28   #5 (permalink)
Anytocccchka
Member
 
Регистрация: 20.12.2010
Сообщений: 18
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Ну не ругайтесь на меня=) А как исправить мою ошибку?=)
Anytocccchka вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 20.12.2010, 10:45   #6 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Так, пока - отбой, заметил еще ошибки.
Vladimir_S вне форума   Ответить с цитированием
Старый 20.12.2010, 10:54   #7 (permalink)
Anytocccchka
Member
 
Регистрация: 20.12.2010
Сообщений: 18
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

file not open for input
Anytocccchka вне форума   Ответить с цитированием
Старый 20.12.2010, 11:00   #8 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Anytocccchka Посмотреть сообщение
Ну не ругайтесь на меня=) А как исправить мою ошибку?=)
Вот - вроде исправил кучу ошибок. В частности, убрал CRT и readln: ведь Вы работаете с файлами, так зачем Вам экран?
Код:
program qwerty;
var
 i,m,n,j:integer;
 f,f1:text;
 st,word:string;
 kolg,kols,kol:byte;
const
 glas=[перечисление гласных];
 soglas=[перечисление согласных];
begin
 kol:=0;
 assign(f,'book.txt');
 reset(f);
 assign(f1,'words.txt');
 rewrite(f1);
 while not Eof(f) do
  begin
   readln(f,st);
   i:=1;
   while i<=length(st) do
    begin
     while st[i]=' ' do inc(i);
     m:=i;
     while (st[i]<>' ') do inc(i);
     n:=i;
     word:=copy(st,m,n-m);

     kolg:=0;
     kols:=0;
     for j:=1 to length(word) do
      begin
       if (word[j] in glas) then kolg:=kolg+1;
       if (word[j] in soglas) then kols:=kols+1;
      end;
     if kols>kolg then
      begin
       kol:=kol+1;
       write(f1,word,' ');
      end;
    end;
  end;
 close(f);
 close(f1);
end.
Vladimir_S вне форума   Ответить с цитированием
Старый 20.12.2010, 11:13   #9 (permalink)
Anytocccchka
Member
 
Регистрация: 20.12.2010
Сообщений: 18
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

runtime error 104
Anytocccchka вне форума   Ответить с цитированием
Старый 20.12.2010, 11:14   #10 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Еще ошибку заметил:
в строке
if (word[i] in soglas) then kols:=kols+1;
нужно i заменить на j.
В листинге поправлено.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 09:34.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.