Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача на файл и еще...
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
UnSpi
Пожалуйста помогите рещить такую задачу!!!!!! :molitva:
Реально ,вопрос жизни и смерти!!!!!!
Вот условие:
В текстовый файл занесена строка длиной более 255 символов (в строке может быть только одно слово). Вывести на экран строку, удалив повторяющие «лишние» пробелы, если они есть, и во всех словах перенести последнюю букву в начало слова.
заранее спасибо!!!
volvo
Задание уточните... Здесь есть противоречие:
Цитата(UnSpi @ 28.05.05 13:53)
В текстовый файл занесена строка длиной  более 255 символов (в строке может быть только одно слово). Вывести на экран строку, удалив повторяющие «лишние» пробелы, если они есть, и во всех словах перенести последнюю букву в начало слова.

Сколько строк занесено в файл? Если одна, и в одной строке - одно слово, то что значит "во всех словах перенести..."
UnSpi
Уточняю,
в строке содержится много слов,написанных через один и более пробелов(а строка
состоит из более чем 255 символов).
потом на экран вывести эту же строку,но только чтобы слова были написаны через
ОДИН пробел ,и в каждом слове перенести последнюю букву в начало слова.
volvo
Тогда вот так:
var
  ch: char;
  s: string;
  f: text;
begin
  assign(f, 'my.txt');
  reset(f);
  while not seekeof(f) do begin

    repeat
      read(f, ch);
    until ch <> #32;

    s := ch;

    repeat
      read(f, ch);
      if ch <> #32
        then s := s + ch;
    until (ch = #32) or (eof(f));
    s := s[length(s)] + copy(s, 1, pred(length(s)));
    write(s, ' ');

  end;
end.
UnSpi
большое спасибо!!!!!!все понятно!!!!
можно теперь такой вопрос:
как вывести в этой задаче сначала исходный текст,а затем уже переработанный,
и еще как изменится программа,если в данной строке нужно удалить повторяющие «лишние» пробелы, если они есть, и если слово нечетной длины, удалить среднюю букву в каждом слове??????
volvo
Цитата(UnSpi @ 28.05.05 17:19)
как вывести в этой задаче сначала исходный текст, а затем уже переработанный

while not eof(f) do begin
  read(f, ch); write(ch);
end;
reset(f);
{ и потом уже делать по алгоритму }

Цитата(UnSpi @ 28.05.05 17:19)
как изменится программа, если в данной строке нужно удалить повторяющие «лишние» пробелы, если они есть

это не нужно добавлять - оно уже есть. Этим занимается вот этот фрагмент:
    repeat
      read(f, ch);
    until ch <> #32;


Цитата(UnSpi @ 28.05.05 17:19)
и если слово нечетной длины, удалить среднюю букву в каждом слове??????

вместо
s := s[length(s)] + copy(s, 1, pred(length(s)));

делать
if odd(length(s)) then
  delete(s, succ(length(s) div 2), 1);
UnSpi
спасибо!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! smile.gif
А моно еще такую задачку решить:

1).Задан файл, содержащий текст программы на языке высокого уровня. Создать процедуру, позволяющую подсчитать количество памяти, которое будет выделено
в сегменте данных для всех данных програм мы вещественных типов.

2).Задан файл, содержащий текст программы на языке высокого уровня. Создать процедуру, позволяющую подсчитать количество памяти, которое будет выделено в сегменте данных для всех данных программы перечисляемого типа.
volvo
Это не так просто как ты думаешь. Попробуй, например, навскидку сказать, сколько данных вещественного типа будет в таком случае:
type
  float = double;
  f_array = array[1 .. 10] of float;
var 
  a, b, c: real; d, e, f: float;
const
  x: f_array = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

Заметь, это - Паскаль... Я не говорю про другие языки...
UnSpi
Да,я понимаю!!!
просто у меня есть прога ,которая подсчитывает количество памяти, которое будет выделено в сегменте данных для всех данных программы стандартных типов.
но вот в чем проблема:Я В НЕЕ ВЪЕХАТЬ НЕ МОГУ!!!! :fire:
Но тебе я все равно благодарен!!!!!!!!!!!!!!!!! :thanks:
UnSpi
Вот та задача:
program file5;
uses    crt;             {strings}
procedure Memory(var f:text);
var x                :char;
    flag             :byte;
    stop             :boolean;
    ChType           :string;
    Memtype,Totalmem :integer;
begin
                        stop:=true;
                        Totalmem:=0;
                         while stop do
 begin
  read(f,x);
  flag:=1;
   if x='b' then begin
    read(f,x);
    if x='e' then begin
     read(f,x);
      if x='g' then begin   {begin}
       read(f,x);
        if x='i' then begin
         read(f,x);
          if x='n' then begin writeln('razmer pamyati dlya dannih=0');
                              halt;
                        end;
                      end;
                    end;
                  end;
                 end;

   if x='v' then begin
    read(f,x);
     if x='a' then begin     {var}
      read(f,x);
       if x='r' then repeat
                      read(f,x);
   if x='b' then begin
    read(f,x);
    if x='e' then begin
     read(f,x);
      if x='g' then begin   {begin}
       read(f,x);
        if x='i' then begin
         read(f,x);
          if x='n' then begin stop:=false;
                        end;
                      end;
                    end;
                  end;
                 end;
     if x=',' then inc(flag);
     if x=':' then begin
       ChType:='';
       read(f,x);
       while x<>';'do begin
       Chtype:=Chtype+x;
       read(f,x);
                      end;
     { case ChType of
     'byte'    :Memtype:=1;
      shortint:Memtype:=1;
      word    :Memtype:=2;
      integer :Memtype:=2;
      longint :Memtype:=4;
      real    :Memtype:=6;
      double  :Memtype:=8;
      extended:Memtype:=10;
      comp    :Memtype:=8
      single  :Memtype:=4;
      char    :Memtype:=1;
      string  :Memtype:=256;
      pchar   :Memtype:=4;
      pointer :Memtype:=4;
      boolean :Memtype:=1;
      bytebool:Memtype:=2;
      wordbool:Memtype:=2;
      longbool:Memtype:=4;}
      if Chtype='byte'     then Memtype:=1;
      if Chtype='shortint' then Memtype:=1;
      if Chtype='word'     then Memtype:=2;
      if Chtype='integer'  then Memtype:=2;
      if Chtype='longint'  then Memtype:=4;
      if Chtype='real'     then Memtype:=6;
      if Chtype='double'   then Memtype:=8;
      if Chtype='extended' then Memtype:=10;
      if Chtype='comp'     then Memtype:=8;
      if Chtype='single'   then Memtype:=4;
      if Chtype='char'     then Memtype:=1;
      if Chtype='string'   then Memtype:=256;
      if Chtype='pchar'    then Memtype:=4;
      if Chtype='pointer'  then Memtype:=4;
      if Chtype='boolean'  then Memtype:=1;
      if Chtype='bytebool' then Memtype:=2;
      if Chtype='wordbool' then Memtype:=2;
      if Chtype='longbool' then Memtype:=4;
      Totalmem:=Totalmem+flag*Memtype;
      flag:=1;
                   end;

                     until not stop;
                   end;
                 end;
 end;
 writeln('the size of memory for data:',Totalmem);
                        end;
var
   fp  :text;
begin
  ClrScr;
  assign(fp,'FILE.TXT');
  {$I+}
  reset(fp);
  {$I-}
  if IOResult <> 0 then BEGIN writeln('FILE NOT FOUND');
                              halt;
                        END
                   else Memory(fp);
 readkey;
end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.