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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.01.2012, 14:16   #1
DavioN
 
Регистрация: 27.01.2012
Сообщений: 3
По умолчанию Работа с текстовым файлом

Как сделать чтоб программа брала случайное слово из текстового файла?

Код:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;
var s:array[1..50] of char;
var word:string;
var i,j:integer;
var bukva:char;
begin
  readln (word);
  for i:=1 to length(word) do begin
    s[i]:=('_');
    write(s[i]:2);
  end;
   for i:=1 to length(word) do
    begin
      while s[i]=('_') do begin
      writeln('Vvedite bukvu':20);
      readln (bukva);
      for j:=1 to length(word) do
        begin
          if ord(bukva)=ord(word[j]) then
            s[j]:=bukva;
          write (s[j]:2)
        end;
        end;
    end;
    writeln('Slovo ugadano!':16);
    readln;readln;
end.


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 27.01.2012 в 14:57.
DavioN вне форума Ответить с цитированием
Старый 27.01.2012, 14:39   #2
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

1) считать все слова из файла в массив arr
2) функцией Random получить случайное число i (не больше, чем длина массива)
3) Слово, находящееся в arr[i] считать случайным словом из файла.

P.S. перед вызовом Random советую вызвать Randomize, чтобы слова были "послучайнее")
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 27.01.2012, 15:06   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Luuzuk, согласен.
и Randomize, кстати, нужно вызывать ОБЯЗАТЕЛЬНО!


но всё же попытаюсь дополнить ответ

DavioN,
1) почему не используете тип string (или SortString, или string[50] и т.п.) - это НАМНОГО удобнее, чем работать с набором символов (хотя по сути - обычная Pascal строка (в Delphi ShortString) это и есть массив символов с длиной в нулевом байте: type string = array[0..255] of char;
Это я про тип переменной S замечание написал..

2) Вы написали свой пример в консольном режиме Delphi. Это означает, что можно использовать элементы (в т.ч. классы), имеющиеся в Delphi ?! Если - ДА, то использование TStringList очень сильно упростит работу, связанную с обработкой текстового файла! (ну, например, прочитать файл можно одной командой - метод LoadFromFile('ИмяФайла.txt');

3) как будут хранится слова в текстовом файле? (рекомендую одно слово в строке - это самый удобный для обработки вариант)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.01.2012, 19:01   #4
DavioN
 
Регистрация: 27.01.2012
Сообщений: 3
По умолчанию

Может быть, если не сложно, кто нибудь допишет эту программу?) буду очень благодарен
DavioN вне форума Ответить с цитированием
Старый 30.01.2012, 19:38   #5
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

в раздел VAR добавляем аналог переменной "s" и назовём её "s1". Так же добавим переменную f:TextFile;
Теперь вместо:
Код:
  readln (word);
Вставим вот это:
Код:
  randomize;
  assignFile(f,'1.txt');
  reset(f);
  i:=1;
  while not EOF(f) do
  begin
    readln(f,s1[i]);
    i:=i+1;
    if i=51 then exit;
  end;
  closefile(f);

  word:=s1[random(i)+1];
В текстовом файле содержатся не слова, а буквы, и соблюдается условие - одна буква на одной строке в файле.
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 03.02.2012, 21:18   #6
DavioN
 
Регистрация: 27.01.2012
Сообщений: 3
По умолчанию

все равно ничего не получается(( может у меня в моей программе что то не так?
DavioN вне форума Ответить с цитированием
Старый 03.02.2012, 21:52   #7
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Чет вы мудрите, массивы символов какие-то...
Цитата:
Сообщение от DavioN
Как сделать чтоб программа брала случайное слово из текстового файла?
Случайное слово из input.txt:
Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  mass=array of string;
var
  T:textfile;
  m:mass;
  i:integer;
  symb:Char;
begin
  assignfile(T,'input.txt');
  reset(T);
  setlength(m,1);
  m[0]:='';
  i:=0;
  while not EOF(T) do
    begin
      while not EOLN(T) do
        begin
          read(T,symb);
          if not (symb in [' ',',','.','-','!','?','(',')']) then  //И все остальное, на что хватит воображения. Ну или if symb in ['a'..'z','A'..'Z'] then, но тогда только английский текст. Сообразишь кароче.
            m[i]:=m[i]+symb
          else
            begin
              inc(i);
              setlength(m,length(m)+1);
              m[i]:='';
            end;
        end;
      readln(T);
      if m[i]<>'' then
        begin
          inc(i);
          setlength(m,length(m)+1);
          m[i]:='';
        end;
    end;
  RANDOMIZE;
  writeln('Random word from input.txt: ',m[random(high(m))]);
  readln
end.
Для проверки взял первый попавшийся текст:
Цитата:
Сообщение от input.txt
Having trouble using Wikipedia today?
That's because the popular crowd-sourced online encyclopedia
is participating in an "Internet blackout" in protest of two controversial
anti-piracy bills: The Stop Online Piracy Act (SOPA) and its Senate companion,
the Protect IP Act (PIPA).
Pictures: Websites go dark to protest SOPA
The bills are intended to strengthen protections against copyright
infringement and intellectual property theft, but Internet advocates
say they would stifle expression on the World Wide Web. In essence, the
legislation has pitted content providers -- like the music and film industries
-- against Silicon Valley. CBS Corporation is among the media and entertainment
companies that support the legislation.
P.S. Кстати, это алгоритм предложенный Luuzuk'ом, только я писал со своими обозначениями.
Все тривиальное просто

Последний раз редактировалось whatever; 03.02.2012 в 22:10.
whatever вне форума Ответить с цитированием
Старый 03.02.2012, 22:10   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Чет вы мудрите, массивы символов какие-то...
А сам то?

Как бы там ни было, предлагаю свое видение:
Код:
program Project1;

{$APPTYPE CONSOLE}

uses    windows,
  SysUtils;
var s:string;c:char;f:file of char;i:Longint;
begin
 Assign(f,'D:\1\Console Win.ASM');Reset(f);
 Randomize;
 Seek(f,random(FileSize(f)));
 writeln(FilePos(f));
 repeat  Read(f,c) until IsCharAlphaNumeric(c);
 repeat  Seek(f,FilePos(f)-2); Read(f,c) until c=' ';
 repeat  Read(f,c);  s:=s+c; until (Eof(f))or(c=' ');
 Close(f);
 Write(s); readln;
  { TODO -oUser -cConsole Main : Insert code here }
end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.02.2012, 22:22   #9
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Цитата:
Сообщение от Stilet
А сам то?
Ну у меня считывание посимвольное, чтоб слова разделять, массив то строковый
Все тривиальное просто
whatever вне форума Ответить с цитированием
Старый 03.02.2012, 22:35   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
whatever
ТЫ все равно без массива не обошелся
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с текстовым файлом lavnikov1 Помощь студентам 2 29.06.2011 20:29
Работа с текстовым файлом, C++ RockGirl Помощь студентам 1 15.05.2011 15:53
Работа с текстовым файлом. tae1980 Microsoft Office Excel 10 29.06.2010 19:16
работа с текстовым файлом Cеверина Помощь студентам 4 30.03.2009 12:20
Работа с текстовым файлом Vasya Помощь студентам 28 24.01.2008 01:15