Технический форум

Технический форум (http://www.tehnari.ru/)
-   Delphi, Kylix and Pascal (http://www.tehnari.ru/f43/)
-   -   Программа выдает ошибку: file not open (http://www.tehnari.ru/f43/t43564/)

Anytocccchka 20.12.2010 00:25

Программа выдает ошибку: 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 :tehnari_ru_093:
Уже замучалась с задачей:tehnari_ru_148: Помогите пожалуйста в чем здесь проблема:tehnari_ru_837:

Vladimir_S 20.12.2010 09:47

Цитата:

Сообщение от Anytocccchka (Сообщение 431999)
Помогите пожалуйста в чем здесь проблема

Вот в этих двух строчках:
Цитата:

assign(f1,'words.txt');
rewrite(fi);
Под Assign у вас файловая переменная "f1", а под rewrite - "fi" (f+i). Вы уж выберите что-нибудь одно.

Anytocccchka 20.12.2010 10:11

Нет,в программе у меня все правильно,это я тут видимо ошиблась...:tehnari_ru_093:

Vladimir_S 20.12.2010 10:25

Цитата:

Сообщение от Anytocccchka (Сообщение 432080)
Нет,в программе у меня все правильно,это я тут видимо ошиблась...:tehnari_ru_093:

Хорошо. На самом деле, в программе имеется и куда более существенная ошибка.
Рассмотрим первую часть - выделение слов. Вы открыли два файла на чтение и запись, а потом начинаете анализировать символы строки St, при этом абсолютно никак не связав саму строку с содержимым файла f! Или опять "в программе всё правильно"? Если так, то выложите, пожалуйста, РАБОЧИЙ листинг программы.
P.S. Кстати, слово "гласная" (как и "согласная") пишется с одним "с".

Anytocccchka 20.12.2010 10:28

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

Vladimir_S 20.12.2010 10:45

Так, пока - отбой, заметил еще ошибки.

Anytocccchka 20.12.2010 10:54

file not open for input

Vladimir_S 20.12.2010 11:00

Цитата:

Сообщение от Anytocccchka (Сообщение 432087)
Ну не ругайтесь на меня=) А как исправить мою ошибку?=)

Вот - вроде исправил кучу ошибок. В частности, убрал 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.


Anytocccchka 20.12.2010 11:13

runtime error 104

Vladimir_S 20.12.2010 11:14

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


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

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.