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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2009, 22:21   #1
08ekhiv1
Пользователь
 
Регистрация: 28.02.2009
Сообщений: 27
Печаль Текстовый файл и очень простое задание DELPHI

Столкнулся с такой вот проблемой... Надо решить задачу:

"Дан текстовый файл литерных величин.
Подсчитать наибольшее количество идущих подряд в данном тексте символов, значение которого хранится в переменной Х."

Из всех моих попыток самой удачной получилась вот эта:

Код:
program TEXT;
{$APPTYPE CONSOLE}
uses
  SysUtils;
var t:TextFile;
    i,res:integer;
    x,s:char;
begin
  AssignFile(t,'Text.in');
  reset(t);
  readln(x);
  res:=0;
    while not EOF(t) do
      begin
        read(t,s);
        i:=0;
        while (not EOF(t)) and (ord(s)=ord(x)) do
          begin
            read(t,s);
            inc(i);
          end;
        if i>res then res:=i
      end;
  Writeln(res);
  CloseFile(t);
  sleep(10000);
end.
Но есть недостатки... работает правильно только тогда когда искомые символы не расположены на последнем месте... (требуется пробел для правильного ответа). Пробывал использовать Apeend(t,' ') и в конце if x=' ' to writeln(res-1) else write(s). И возможно написать эту программу так чтобы текст файл вводился в консоли, выводился ответ, и ответ записывался в другой текстовый файл... допустим text.out???
Помогите бедному студенту. Уже дня два думаю, ничего путного в голову не лезет.


Еслиб не надо было использовать отдельный текстовый файл код программы выглядел бы очень просто и довольно понятно:

Код:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var s:string; x:char; i,counter,res:integer;
begin
  readln(s);
  readln(x);
  i:=1;
  res:=0;
    while i<=length(s) do
      begin
        counter:=0;
while (i<=length(s)) and (ord(s[i])=ord(x)) do
          begin
            inc(counter);
            inc(i)
          end;
        if counter>res then res:=counter;
        inc(i);
      end;
  writeln(res);
  readln;
end.
Этот код работает идеально ))) но без нужных мне условий (

Но всё и все хотят усложнить этот мир ))) Помогите пожалуйста

Последний раз редактировалось 08ekhiv1; 28.02.2009 в 22:22. Причина: Дополнение
08ekhiv1 вне форума Ответить с цитированием
Старый 28.02.2009, 23:05   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Ну и что мешает считывать файл построчно, обрабатывать строку как Вы это делаете, и накапливать значения в другой переменной
Код:
sum:=0;
    while not EOF(t) do
      begin
        readln(t,s);
обработка строки
sum:=sum+res;
end;
puporev вне форума Ответить с цитированием
Старый 01.03.2009, 11:19   #3
08ekhiv1
Пользователь
 
Регистрация: 28.02.2009
Сообщений: 27
Вопрос Хммм...

Если честно, то что-то я не понял куда вставить этот код ( Разъесни пожалуйста.
08ekhiv1 вне форума Ответить с цитированием
Старый 01.03.2009, 12:12   #4
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

А Вы точно сами писали тот код, который привели выше? Просто если Вы писали сами, не понимаю Вашего вопроса, ибо это примитив. Если писали не сами, нет смысла объяснять.
puporev вне форума Ответить с цитированием
Старый 01.03.2009, 12:29   #5
Лукманов Александр
работа не волк....
Форумчанин
 
Аватар для Лукманов Александр
 
Регистрация: 09.06.2008
Сообщений: 337
По умолчанию

Я чё то слыхал о операторе HIGH. Погугли, может поможет.
Цель, для которой требуются неправые средства, не есть неправая цель.
Лукманов Александр вне форума Ответить с цитированием
Старый 01.03.2009, 12:51   #6
08ekhiv1
Пользователь
 
Регистрация: 28.02.2009
Сообщений: 27
По умолчанию

Цитата:
Сообщение от puporev Посмотреть сообщение
А Вы точно сами писали тот код, который привели выше? Просто если Вы писали сами, не понимаю Вашего вопроса, ибо это примитив. Если писали не сами, нет смысла объяснять.
Я то сам его писал, просто я не понимаю смысла, так как будет все точно также, но считывать построчно... глупо помоему

Цитата:
Сообщение от Лукманов Александр Посмотреть сообщение
Я чё то слыхал о операторе HIGH. Погугли, может поможет.
Функция High возвращает самое высокое разрешённое значение типа или переменной указанного типа. Это относится только к символам, массивам, порядковым и коротким строкам. Для массивов возвращает самый большой индекс.

Не могу придумать применение (

Последний раз редактировалось Stilet; 02.03.2009 в 08:59.
08ekhiv1 вне форума Ответить с цитированием
Старый 01.03.2009, 14:08   #7
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
глупо помоему
Так может по Вашему в программировании все глупо и не стоит этим вообще заниматься.
puporev вне форума Ответить с цитированием
Старый 02.03.2009, 08:34   #8
08ekhiv1
Пользователь
 
Регистрация: 28.02.2009
Сообщений: 27
По умолчанию

Цитата:
Сообщение от puporev Посмотреть сообщение
Так может по Вашему в программировании все глупо и не стоит этим вообще заниматься.
Работа обязывает... И я думаю на этом форуме не это обсуждается
08ekhiv1 вне форума Ответить с цитированием
Старый 02.03.2009, 22:48   #9
08ekhiv1
Пользователь
 
Регистрация: 28.02.2009
Сообщений: 27
Радость Хех

Сам задавал вопрос. Сам на его и отвечу... Мож кому-нибудь это решение принесет пользу... По крайней мере уже одному студенту помогло , т.е. мне . Решение оказалось довольно простым:

Код:
program Task;
{$APPTYPE CONSOLE}
uses
    SysUtils;
var t,f:TextFile;
    r,c,i:integer;
    x,s:char; a:string;
begin
  AssignFile(t,'Text.in');
  AssignFile(f,'Text.out');
  reset(t);
  readln(x);
  while not EOF(t) do
    begin
      read(t,s);
      a:=a+s;
    end;
  r:=0;
  i:=1;
  while i<=length(a) do
    begin
      c:=0;
      while (i<=length(a)) and (ord(a[i])=ord(x)) do
        begin
          inc(c);
          inc(i)
        end;
      if c>r then r:=c;
      inc(i);
    end;
  Writeln(r);
  CloseFile(t);
  ReWrite(f);
  WriteLn(f,r);
  CloseFile(f);
  sleep(10000);
end.
Описание: Берем файл с которого мы будем читать текст (t,'Text.in') и все его символы по порядку с помощью команд read(t,s)... a:=a+s присваеваем стринговской строке все символы файла по-порядку... А потом работыем с получившейся строкой как с стандартными задачами на литерные (строковые) велечины... И в конце программы и решения записываем все в файл f,'Text.out' вот и все ) Скажу себе спасибо и куплю булочку
08ekhiv1 вне форума Ответить с цитированием
Старый 02.03.2009, 23:02   #10
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
с помощью команд read(t,s)... a:=a+s присваеваем стринговской строке все символы файла по-порядку... А
это как раз и есть readln(t,a);
Зачем (ord(a[i])=ord(x))
если можно if a[i]=x
puporev вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как текстовый файл в формате word 2007 переделать в файл в формате ZAY JULIA Microsoft Office Word 13 09.06.2010 19:43
задача на текстовый файл в delphi [Drumm-are-turG] Помощь студентам 1 27.12.2008 15:42
текстовый файл Var17 Общие вопросы Delphi 1 22.12.2007 02:20
Текстовый файл в текстовый массив Kimimaru Общие вопросы C/C++ 1 02.12.2007 11:55
Как загрузить текстовый файл в Delphi? aidyn Помощь студентам 7 30.05.2007 20:56