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

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Файлы (http://www.tehnari.ru/f41/t49136/)

RadMan 20.03.2011 17:12

Файлы
 
Дано целое число N и текстовый файл с именем Name1, содержащий один абзац текста, выровненный по левому краю. Отформатировать текст так, чтобы его ширина не превосходила N позиций, и выровнять текст по левому краю. Пробелы в конце строк удалить. Сохранить отформатированный текст в новом текстовом файле с именем Name2.
помогите(

Vladimir_S 20.03.2011 18:12

Эх, знать бы язык программирования, на котором нужно выполнить задание! Как бы здорово...
Но это всё пустые мечты, понимаю.
Ну что же, лет через пять-восемь к нам обещали заглянуть экстрасенсы, тогда и узнаем.
А пока - увы...

RadMan 20.03.2011 18:12

О простите, Паскаль.............

Vladimir_S 20.03.2011 19:27

Цитата:

Сообщение от RadMan (Сообщение 488768)
О простите, Паскаль.............

Тогда - пожалуйста. Не уверен, правда, что Вашему преподавателю понравится такой способ (через вспомогательный файл), но задачу эта программа решает. Естественно, пути к файлам можете прописать свои:
Код:

VAR
 f1,f2,f3:TEXT;
 N,L:Byte;
 S:String;
 C:Char;

BEGIN
 Assign(f1,'D:\Name1');
 ReSet(f1);
 Assign(f3,'D:\Name3');
 ReWrite(f3);
 Repeat
  Repeat
  Read(f1,C);
  If C<>' ' then Write(f3,C)  else WriteLn(f3);
  Until (C=' ') or (EoLn(f1)) or Eof(f1);
 Until Eof(f1);
 Close(f1);
 Close(f3);
 Write('N= ');
 ReadLn(N);
 Assign(f2,'D:\Name2');
 ReWrite(f2);
 ReSet(f3);
 ReadLn(f3,S);
 Write(f2,S);
 Repeat
  L:=Length(S);
  Repeat
  ReadLn(f3,S);
  L:=L+Length(S)+1;
  If L<=N then Write(f2,' '+S);
  Until (L>N) or (EoF(f3));
  If (not EoF(f3)) then
  begin
    WriteLn(f2);
    Write(f2,S);
  end;
 Until EoF(f3);
 Close(f3);
 Erase(f3);
 Close(f2);
END.


RadMan 20.03.2011 19:33

а зачем вспомогательный наме3?

Vladimir_S 20.03.2011 19:48

Цитата:

Сообщение от RadMan (Сообщение 488800)
а зачем вспомогательный наме3?

А вот зачем.
Программа работает так:
Все слова из файла Name1 переписываются во вспомогательный файл Name3, в котором каждое слово располагается на своей отдельной строке. Затем считываются слова из Name3 и в Name2 из них формируются строки нужной длины. В конце программы файл с именем Name3 уничтожается.
Вы можете посмотреть на него, закомментарив строку Erase(f3). Тогда он не уничтожится.

RadMan 20.03.2011 19:52

я не совсем понимаю как правильно вписываю..абзац..это значит текст примерно так вписывать

555555555555555555555
5555555555555555555555
555555555555555555555
а потом если ввожу например н=10 то он должен сделать
5555555555
55555555555
55555555555
.........



так??

Vladimir_S 20.03.2011 20:03

Цитата:

Сообщение от RadMan (Сообщение 488823)
я не совсем понимаю как правильно вписываю..абзац..это значит текст примерно так вписывать

555555555555555555555
5555555555555555555555
555555555555555555555
а потом если ввожу например н=10 то он должен сделать
5555555555
55555555555
55555555555
.........



так??

Так, да не совсем. Всё-таки речь идет о тексте, состоящем из отдельных слов, разделенных пробелами. Т.е. пусть исходный текст такой:
Код:

Гнев, богиня, воспой Ахиллеса, Пелеева сына,
Грозный, который ахеянам тысячи бедствий соделал:
Многие души могучие славных героев низринул
В мрачный Аид и самих распростер их в корысть плотоядным
Птицам окрестным и псам (совершалася Зевсова воля),
С оного дня, как, воздвигшие спор, воспылали враждою
Пастырь народов Атрид и герой Ахиллес благородный.
Кто ж от богов бессмертных подвиг их к враждебному спору?

При форматировании все слова должны сохраниться, только строки изменить длину. Например, после ограничения в 20 символов должно получиться:
Код:

Гнев, богиня,
воспой Ахиллеса,
Пелеева сына,
Грозный, который
ахеянам тысячи
бедствий соделал:
Многие души могучие
славных героев низринул
В мрачный Аид и самих
распростер их в корысть
плотоядным Птицам
окрестным и псам
(совершалася Зевсова
воля), С оного дня,
как, воздвигшие спор,
воспылали враждою
Пастырь народов Атрид
и герой Ахиллес
благородный. Кто ж от
богов бессмертных
подвиг их к
враждебному спору?


RadMan 20.03.2011 20:10

ага сделалось, а как если выровнить после форматировния по правому краю

Vladimir_S 20.03.2011 20:11

Цитата:

Сообщение от RadMan (Сообщение 488844)
ага сделалось, а как если выровнить после форматировния по правому краю

А надо?

RadMan 20.03.2011 20:17

да, щас увидел

RadMan 20.03.2011 20:20

да щас увидел, блин и в одной проге, тоесть так написано по левому/правому

Vladimir_S 20.03.2011 20:21

Цитата:

Сообщение от RadMan (Сообщение 488855)
да, щас увидел

Хорошо, только вот ведь в чем проблема - как Вы собираетесь смотреть результат? Дело в том, что многие Windows-редакторы и смотрелки принудительно срубают пробелы слева. У меня-то DOS-Паскаль, и я результат увижу, а вот Вы - не знаю. Но сейчас сделаю.

Vladimir_S 20.03.2011 20:29

Ну вот - пожалуйста. В DOS форматирование по правому краю работает - проверено. Отформатированный по правому краю текст находится в файле с именем Name3.
Код:

VAR
 f1,f2,f3:TEXT;
 N,L,i:Byte;
 S:String;
 C:Char;

BEGIN
 Assign(f1,'D:\Name1');
 ReSet(f1);
 Assign(f3,'D:\Name3');
 ReWrite(f3);
 Repeat
  Repeat
  Read(f1,C);
  If C<>' ' then Write(f3,C)  else WriteLn(f3);
  Until (C=' ') or (EoLn(f1)) or Eof(f1);
 Until Eof(f1);
 Close(f1);
 Close(f3);
 Write('N= ');
 ReadLn(N);
 Assign(f2,'D:\Name2');
 ReWrite(f2);
 ReSet(f3);
 ReadLn(f3,S);
 Write(f2,S);
 Repeat
  L:=Length(S);
  Repeat
  ReadLn(f3,S);
  L:=L+Length(S)+1;
  If L<=N then Write(f2,' '+S);
  Until (L>N) or (EoF(f3));
  If (not EoF(f3)) then
  begin
    WriteLn(f2);
    Write(f2,S);
  end;
 Until EoF(f3);
 Close(f3);
 Close(f2);
 ReSet(f2);
 ReWrite(f3);
 Repeat
  ReadLn(f2,S);
  For i:=1 to N-Length(S) do Write(f3,' ');
  WriteLn(f3,S);
 Until EoF(f2);
 Close(f2);
 Close(f3);
END.


RadMan 20.03.2011 20:33

спасибооооо огромноее

RadMan 27.03.2011 15:10

чтото не получается чтоб по правому краю и центру выпрямить, сделаййте пожалуйста

Vladimir_S 27.03.2011 15:44

Цитата:

Сообщение от RadMan (Сообщение 493038)
чтото не получается чтоб по правому краю и центру выпрямить, сделаййте пожалуйста

По центру я не делал, вы не заказывали, а насчет "не получается" - так я Вас в #13 предупреждал, с чем это может быть связано.
Программа построена так, что при выравнивании по правому краю перед строкой вставляются пробелы в таком количестве, чтобы последний символ строки оказался в нужной фиксированной позиции. Ну а всякие там смотрелки да редакторы часто эти "лишние" с их точки зрения пробелы просто срубают, вот и "не получается".
Под DOS всё работает - проверено.
Да и под Windows:

1. Исходный файл:
Код:

Гнев, богиня, воспой Ахиллеса, Пелеева сына,
Грозный, который ахеянам тысячи бедствий соделал:
Многие души могучие славных героев низринул
В мрачный Аид и самих распростер их в корысть плотоядным
Птицам окрестным и псам (совершалася Зевсова воля),
С оного дня, как, воздвигшие спор, воспылали враждою
Пастырь народов Атрид и герой Ахиллес благородный.
Кто ж от богов бессмертных подвиг их к враждебному спору?

2. С ограничением 70 символов и выравниванием по левому краю:
Код:

Гнев, богиня, воспой Ахиллеса, Пелеева сына, Грозный, который ахеянам
тысячи бедствий соделал: Многие души могучие славных героев низринул В
мрачный Аид и самих распростер их в корысть плотоядным Птицам
окрестным и псам (совершалася Зевсова воля), С оного дня, как,
воздвигшие спор, воспылали враждою Пастырь народов Атрид и герой
Ахиллес благородный. Кто ж от богов бессмертных подвиг их к
враждебному спору?

3. По правому краю:
Код:

Гнев, богиня, воспой Ахиллеса, Пелеева сына, Грозный, который ахеянам
тысячи бедствий соделал: Многие души могучие славных героев низринул В
        мрачный Аид и самих распростер их в корысть плотоядным Птицам
        окрестным и псам (совершалася Зевсова воля), С оного дня, как,
      воздвигшие спор, воспылали враждою Пастырь народов Атрид и герой
          Ахиллес благородный. Кто ж от богов бессмертных подвиг их к
                                                    враждебному спору?


RadMan 27.03.2011 15:52

а как тогда сделать, вот я сделал чтоб по левому и по центру...тут не могу исправить чтоб вместо левого правый был
Код:

VAR
f1,f2,f3:TEXT;
N,L,i,k:Byte;
S:String;
C:Char;

BEGIN
Assign(f1,'Name1.txt');
ReSet(f1);
Assign(f3,'Name3.txt');
ReWrite(f3);
Repeat
Repeat
Read(f1,C);
If C<>' ' then Write(f3,C) else WriteLn(f3);
Until (C=' ') or (EoLn(f1)) or Eof(f1);
Until Eof(f1);
Close(f1);
Close(f3);
Write('N= ');
ReadLn(N);
Assign(f2,'Name2.txt');
ReWrite(f2);
ReSet(f3);
ReadLn(f3,S);
Write(f2,S);
Repeat

L:=Length(S);
Repeat
ReadLn(f3,S);
L:=L+Length(S)+1;
If L<=N then Write(f2,' '+S);
Until (L>N) or (EoF(f3));
If (not EoF(f3)) then
begin
WriteLn(f2);
Write(f2,S);
end;
Until EoF(f3);
Close(f3);
Close(f2);
ReSet(f2);
ReWrite(f3);
Repeat
ReadLn(f2,S);
if odd(length(s))then s:=' '+s;
k:=(50-length(s)) div 2;
for i:=1 to k do
s:=' '+s;

WriteLn(f3,S);
Until EoF(f2);
Close(f2);
Close(f3);
END.


Vladimir_S 27.03.2011 19:48

Вы извините, но я просто добавил выравнивание по центру в свою программу (файл Name4). Изменения выделены красным. Вот:
Код:

VAR
 f1,f2,f3:TEXT;
 N,L,i,j:Byte;
 S:String;
 C:Char;

BEGIN
 Assign(f1,'D:\Name1');
 ReSet(f1);
 Assign(f3,'D:\Name3');
 ReWrite(f3);
 Repeat
  Repeat
  Read(f1,C);
  If C<>' ' then Write(f3,C)  else WriteLn(f3);
  Until (C=' ') or (EoLn(f1)) or Eof(f1);
 Until Eof(f1);
 Close(f1);
 Close(f3);
 Write('N= ');
 ReadLn(N);
 Assign(f2,'D:\Name2');
 ReWrite(f2);
 ReSet(f3);
 ReadLn(f3,S);
 Write(f2,S);
 Repeat
  L:=Length(S);
  Repeat
  ReadLn(f3,S);
  L:=L+Length(S)+1;
  If L<=N then Write(f2,' '+S);
  Until (L>N) or (EoF(f3));
  If (not EoF(f3)) then
  begin
    WriteLn(f2);
    Write(f2,S);
  end;
 Until EoF(f3);
 Close(f3);
 Close(f2);
 ReSet(f2);
 ReWrite(f3);
 Assign(f1,'D:\Name4');
 ReWrite(f1);

 Repeat
  ReadLn(f2,S);
  For i:=1 to N-Length(S) do Write(f3,' ');
  WriteLn(f3,S);
  For j:=1 to ((N-Length(S)) div 2) do Write(f1,' ');
  WriteLn(f1,S);

 Until EoF(f2);
Close(f1);
 Close(f2);
 Close(f3);
END.

Результат:
Код:

Гнев, богиня, воспой Ахиллеса, Пелеева сына, Грозный, который ахеянам
тысячи бедствий соделал: Многие души могучие славных героев низринул В
    мрачный Аид и самих распростер их в корысть плотоядным Птицам
    окрестным и псам (совершалася Зевсова воля), С оного дня, как,
  воздвигшие спор, воспылали враждою Пастырь народов Атрид и герой
    Ахиллес благородный. Кто ж от богов бессмертных подвиг их к
                          враждебному спору?


RadMan 27.03.2011 22:16

спасибо))

SunBunny 03.04.2011 15:04

Здравствуйте. Скажите, что нужно изменить в этих же задачах, чтобы они работали не только на один абзац текста, а на несколько? Абзацы отделяются друг от друга пустой строкой. Деление на абзацы необходимо сохранить. Помогите, пожалуйста.


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

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