Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2008, 19:42   #1
Алексей Д.
Пользователь
 
Регистрация: 02.04.2008
Сообщений: 32
По умолчанию

Код:
uses crt;
const
a: set of char =['0'..'9','a'..'z','A'..'Z',',','.'];
c: set of char =['0'..'9',',','.'];
var
s:string;
i,k,j: integer;
b: boolean;
word: array[1..30] of string[5];
begin
j:=0;
b:=false;
s:='ghj mj,k l6kg j.kh kld .';
for i:=1 to length(s) do
begin
if s[i] in a then
begin
if b=false then
begin
b:=true;
j:=j+1;
end;
word[j]:=word[j]+s[i]
end
else if not (s[i] in a) and b then b:=false;
end;
for i:=1 to j do
begin
b:=false;
for k:=1 to length(word[i]) do
if (word[i][k] in c) and (b=false) then
begin
b:=true;
writeln(word[i]);
end;
end;
readln;
end.
Вот в такую прогу нужно внести изменения вследствие которых входные данные считывались бы из файла, а результат выводился в файл на диск.

Я вот так переделал. Правильно??
Код:
uses crt;
const
a: set of char =['0'..'9','a'..'z','A'..'Z',',','.'];
c: set of char =['0'..'9',',','.'];
const
name='C:\OUT5.doc';
var
s:string;
i,k,j: integer;
b: boolean;
word: array[1..30] of string[5];
begin
assign(f,name);
rewrite(f);
j:=0;
b:=false;
s:='ghj mj,k l6kg j.kh kld .';
for i:=1 to length(s) do
begin
if s[i] in a then
begin
if b=false then
begin
b:=true;
j:=j+1;
end;
word[j]:=word[j]+s[i]
end
else if not (s[i] in a) and b then b:=false;
end;
for i:=1 to j do
begin
b:=false;
for k:=1 to length(word[i]) do
if (word[i][k] in c) and (b=false) then
begin
b:=true;
writeln(f,word[i]);
end;
end;
readln;
end.
Ну чего? Не правильно? =(

Последний раз редактировалось Stilet; 07.05.2008 в 07:56.
Алексей Д. вне форума Ответить с цитированием
Старый 07.05.2008, 06:33   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Чтение из файла Вы не сделали.
Запись вроде бы нормально. Только надо обязательно закрывать файл: Close(f)
и ещё - файл будет стираться и записываться заново каждый раз (rewrite). Расширение у файла лучше сделать .TXT (это не принципиально, просто DOC - это для Microsoft Word документов...)

это всё без учёта того, что же собственно делает программа... ;-)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.05.2008, 13:16   #3
Алексей Д.
Пользователь
 
Регистрация: 02.04.2008
Сообщений: 32
По умолчанию

А для чтения из файла нужно использовать функцию Reset(f)?? Мне вот нужно чтобы моя строка считывалась из файла, а не вводилась в самой программе. А потом это обрабатывая строка также вводится в файл при помощи rewrite(f), так?? А как это все в одной проге уместить??
Алексей Д. вне форума Ответить с цитированием
Старый 07.05.2008, 16:13   #4
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
Стрелка

Вот переделал вам(текст в DOS кодировке!):
Код:
uses crt;
const
	a :set of char=['0'..'9', 'a'..'z', 'A'..'Z', ',', '.'];
	c :set of char=['0'..'9', ',', '.'];
var
	s :string;
	i,k,j :integer;
	b :boolean;
	word :array[1..30]of string[5];
         Buf,Path :String;
         FIn :Text;
begin
 j := 0;
 b := false;

  Write('‚ўҐ¤ЁвҐ Ё¬п, Їгвм Є д ©«г-"—’…Ќ?…": '); ReadLn(Path);
   { —Ёв Ґ¬ ®¤*г бва®Єг Ё§ д ©«  }
  Assign(FIn, Path);
   {$I-}
  Reset(FIn);
   {$I+}
  IF IOResult=0 Then
   ReadLn(FIn, S)
  ELSE
   begin
  WriteLn('ЌҐг¤ «®бм Їа®зЁв вм д ©«!');
   Readln;
  Exit;
   end;
  Close(FIn);
    WriteLn;
 { s:='ghj mj,k l6kg j.kh kld .'; }
   { Џ®¤Ј®в ў«Ёў Ґ¬ д ©« ¤«п § ЇЁбЁ }
  Write('‚ўҐ¤ЁвҐ Ё¬п, Їгвм Є д ©«г-"‡ЂЏ?‘њ": '); ReadLn(Path);
  Assign(FIn, Path);
   {$I-}
  ReWrite(FIn);
   {$I+}
  IF IOResult<>0 Then
   begin
  WriteLn('ЌҐг¤ «®бм ®вЄалвм д ©« *  § ЇЁбм!');
   Readln;
  Exit;
   end;

for i:=1 to length(s) do
begin
	if s[i] in a then
	begin
	 if b=false then
	 begin
	  b:=true;
	  j:=j+1;
	 end;
	  word[j]:=word[j]+s[i]
	end
	 Else
 if not (s[i] in a) and b then b:=false;
end;

for i:=1 to j do
begin
	 b:=false;
	for k:=1 to length(word[i]) do
	if (word[i][k] in c) and (b=false) then
	begin
	b:=true;
	 writeln(FIn, word[i]);
	end;
end;
 WriteLn(#13#10, '‡ ўҐаиҐ**®!');
 Close(FIn);
readln;
end.
___________________________________ ______________________________
++Me
Alter вне форума Ответить с цитированием
Старый 07.05.2008, 18:04   #5
Алексей Д.
Пользователь
 
Регистрация: 02.04.2008
Сообщений: 32
По умолчанию

А где пути к файлам, откуда мы брали бы данные и куда выводили бы результат??
Алексей Д. вне форума Ответить с цитированием
Старый 07.05.2008, 19:28   #6
Алексей Д.
Пользователь
 
Регистрация: 02.04.2008
Сообщений: 32
По умолчанию

Я сделал вот так и у меня выводит только точку:

Код:
uses crt;
const
a: set of char =['0'..'9','a'..'z','A'..'Z',',','.'];
c: set of char =['0'..'9',',','.'];
var
f: text;
s: string;
i,k,j: integer;
b: boolean;
word: array[1..30] of string[5];
begin
j:=0;
b:=false;
assign(f,'C:\lab2.txt');
reset(f);
read(f,s);
close(f);
for i:=1 to length(s) do
begin
if s[i] in a then
begin
if b=false then
begin
b:=true;
j:=j+1;
end;
word[j]:=word[j]+s[i]
end
else if not (s[i] in a) and b then b:=false;
end;
for i:=1 to j do
begin
b:=false;
for k:=1 to length(word[i]) do
if (word[i][k] in c) and (b=false) then
begin
b:=true;
assign(f,'C:\lab2out.txt');
rewrite(f);
writeln(f, word[i]);
close(f);
end;
end;
readln;
end.
в файле lab2 у меня ghj mj,k l6kg j.kh kld .
Алексей Д. вне форума Ответить с цитированием
Старый 07.05.2008, 20:43   #7
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Не понял, что Вы делаете, но создание файла нужно вынести из цикла.

Код:
   assign(f,'lab2out.txt');
   rewrite(f);
   for i:=1 to j do begin
     b:=false;
     for k:=1 to length(word[i]) do
        if (word[i][k] in c) and (b=false) then begin
           b:=true;
           writeln(f, word[i]);
        end;
   end;
   close(f);
А что у Вас с отступами ? Вы их принципиально не используете ?
Если будут еще вопросы, расскажите в чем суть задания.
alexBlack вне форума Ответить с цитированием
Старый 07.05.2008, 22:03   #8
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
Сообщение

Мой вариант исправления, протестирован и работоспособен.
Что неустраивает?
В коде релизовано чтение одной строки из файла, в начале кода.
Если нужно несколько, то надо ещё одну переменную под второй файл, т.к первый будет открыт, то есть:
Код:
FIn, FOut :text;
И работать в цикле.
Alter вне форума Ответить с цитированием
Старый 07.05.2008, 22:10   #9
Алексей Д.
Пользователь
 
Регистрация: 02.04.2008
Сообщений: 32
По умолчанию

Alter, я вот не понял почему нет пути к файлу нигде...как он его обнаружит тогда?? Я вот написал C:\lab2.txt и т.д., а у тебя нет такого...и еще иероглифы какие то.

alexBlack, всмысле отступы?)
Алексей Д. вне форума Ответить с цитированием
Старый 07.05.2008, 22:22   #10
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
Сообщение

Цитата:
Сообщение от Алексей Д. Посмотреть сообщение
Alter, я вот не понял почему нет пути к файлу нигде...как он его обнаружит тогда?? Я вот написал C:\lab2.txt и т.д., а у тебя нет такого...

alexBlack, всмысле отступы?)
Для работы с путями используется переменная path :string;.
Если текстовый файл лежит в каталоге программы, то достаточно его имени с расширением.
Что делаю:
1) запрашиваю путь к файлу для чтение из него строки в перемнную S, с последующим закрытием этого файла(поэтому там одна файловая переменная типа Text):
Код:
  Write('Введите имя, путь к файлу-"ЧТЕНИЕ": '); ReadLn(Path);
   { Читаем одну строку из файла }
  Assign(FIn, Path);
   {$I-}
  Reset(FIn);
   {$I+}
  IF IOResult=0 Then
   ReadLn(FIn, S)
  ELSE
   begin
  WriteLn('Неудалось прочитать файл!');
   Readln;
  Exit;
   end;
  Close(FIn);
2) открываю второй файл для записи в него результатов(Сразуже, в случае Успешного чтения из первого файла), но перед этим справшиваю его Имя, Путь к нему(Файла может и несуществовать, он создастся):

Код:
   { Подготавливаем файл для записи }
  Write('Введите имя, путь к файлу-"ЗАПИСЬ": '); ReadLn(Path);
  Assign(FIn, Path);
   {$I-}
  ReWrite(FIn);
   {$I+}
  IF IOResult<>0 Then
   begin
  WriteLn('Неудалось открыть файл на запись!');
   Readln;
  Exit;
   end;

for i:=1 to length(s) do
begin
 .........................................................................................
end;

for i:=1 to j do
begin
 .........................................................................................
	 writeln(FIn, word[i]);
 .........................................................................................
end;
 WriteLn(#13#10, 'Завершенно!');
 Close(FIn);
readln;
end.
По моему всё понятно объяснил.
Alter вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Файлы NeiL Win Api 3 24.07.2008 17:02
Файлы. BR@BUS Помощь студентам 5 09.04.2008 19:35
Файлы madmot Операционные системы общие вопросы 3 06.02.2008 12:10
INI файлы aesoem Общие вопросы Delphi 3 24.12.2007 21:22
два вредных вопроса:про асю и прикриплёные файлы файлы steck Свободное общение 3 17.06.2007 14:53