Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 11.12.2020
Сообщений: 2

Распечатать текст из файла в обратном порядке предложений и слов

11.12.2020, 21:21. Показов 952. Ответов 3

Студворк — интернет-сервис помощи студентам
Всем привет. Получил задание: записать текст из файла, но в обратном порядке строк и слов, вот пример:
input: В лесу родилась елочка
В лесу она росла
output: росла она лесу в
елочка родилась лесу в
Получился вот такой вот код:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Program Zadacha1;
Procedure LineReverse(var line1:string);
var
    line2 : string;
    i, a:byte;
begin
    a := 0;
    line2 := '';
    for i := length(line1) downto 1 do begin
        if line1[i] = ' ' then begin
            line2 := line2 + copy(line1, i+1, a) + '';
            a := 0;
        end
        else begin 
            a := a + 1
        end;
    line2 := line2 + copy(line1,i,a);
    line1 := line2;
    end;
end;
 
var
    n : integer;
    TextFile, OutputFile : text;
    line : string;
    i,j : byte;
begin
    n := 0;
    assign (TextFile,'D:\temp\input.txt');
    reset(TextFile);
    assign (OutputFile, 'D:\temp\output.txt');
    while not EOF(TextFile) do begin
        n += 1;
        readln(TextFile, line);
    end;
    for i := n downto 1 do 
        begin
            reset(TextFile);
            rewrite(OutputFile);
            for j := 1 to i do begin
                readln(TextFile, line);
                LineReverse(line);
                writeln(OutputFile, line);
            end;
        end;
    close(TextFile);
    close(OutputFile);
end.
ошибка в 10 строке с индексом за границами строки, но я не могу понять как это исправить (даже если поставить границы от 2 downto 1 выдает ошибку). В общем, спасите..
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.12.2020, 21:21
Ответы с готовыми решениями:

Вывод предложений из текстового файла в обратном порядке
Помогите пожалуйста решить задачу! Написать программу, которая считывает из текстового файла три предложения и выводит их в обратном...

Вывод предложений из текстового файла в обратном порядке
Написать программу, которая считывает из текстового файла три предложения и выводит их в обратном порядке.

Вывести слова всех предложений из файла в обратном порядке
Написать программу, которая считывает текст из файла и выводит на экран все его предложения в обратно порядке.

3
2 / 1 / 1
Регистрация: 11.02.2020
Сообщений: 25
12.12.2020, 01:22
Если посмотреть в отладчике, то в в главном цикле LineReverse на первой же итерации строке Line1 присваивается значение line2 (один знак) и на второй итерации программа пытается взять уже несуществующий элемент line1 (условно изначальная длина строки была 7, он сначала взял 7 элемент, а теперь пытается взять 6, но строка то уже изменилась).
Мой вариант писался в стиле индусов, но вроде работает =) Только программу нужно сохранять в папку с файлами и создать их там заранее иначе они не подцепятся.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
program Project1;
 
 
function perevorachivaemstroky(line:string): string;
 
var
word,wordcash,newline:string;
i:byte;
 
begin
  newline:='';
  word:='';
 
  // тут мы просто переворачиваем строку в обратную последовательность
  for i:=Length(line) downto 0 do
  newline:=newline+line[i];
 
  line:=newline;
  newline:='';
 
  // тут мы читаем символ, если это не пробел, то мы добавляем его перед нашей строковой переменной word
  // как только символ это пробел или последняя итерация- тогда в нашу финальную строку newline мы вставляем накопившиеся символы, которые были записаны в word
  For I:=1 to Length(line) do
  If line[i]=' ' then
 begin
   newline:=newline+word+' ';
   word:='';
  end
  else begin
  wordcash:=copy(line,i,1);
  word:=wordcash+word;
  if i=Length(line) then
  newline:=newline+word;
  end;
 
  perevorachivaemstroky:=newline;
 
end;
 
 
var
 
   TextFile, OutputFile : text;
   line : string;
   i,chislostrok : byte;
 
begin
    assign (TextFile,'input.txt');
    assign (OutputFile, 'output.txt');
 
    reset(TextFile);
    Rewrite(OutputFile);
    chislostrok:=0;
 
 
    //считаем количество строк в файле
    while not EOF(TextFile) do begin
      chislostrok:=chislostrok+1;
      readln(TextFile);
    end;
 
    //открываем заново файл
    reset(TextFile);
 
 
    //главный цикл, где мы поочередно читаем chislostrok-1 в пустую, а при последнем чтении
    //результат записываем в текстовый файл output перед этим прогнав его через функцию самописную,
    //которая переворачивает строку
repeat
 
For I:=chislostrok downto 1 do
    begin
       if I=1 then
       begin
       readln(TextFile,line);
       line:=perevorachivaemstroky(line);
        writeln(OutputFile,line);
        line:='';
        reset(TextFile);
       end
       else readln(TextFile);
    end;
 
    chislostrok:=chislostrok-1;
 
 
until chislostrok = 0;
 
 
 
    close(TextFile);
    close(OutputFile);
    writeln(chislostrok);
    readln();
 
end.
0
0 / 0 / 0
Регистрация: 11.12.2020
Сообщений: 2
12.12.2020, 11:50  [ТС]
Pascal
1
  newline := newline+line[i];
Эта строка все с той же ошибкой: Runtime exception: Индекс находился вне границ массива.
Я думал, что проблема в том, что в файле могут быть пустые строки, но компилятор не пропускает даже одну строку без пробелов.
0
2 / 1 / 1
Регистрация: 11.02.2020
Сообщений: 25
12.12.2020, 12:03
Не знаю что у тебя не так идёт, у меня мой код компилируется и выполняет поставленную задачу, работаю в IDE Lazarus.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.12.2020, 12:03
Помогаю со студенческими работами здесь

Ввести текст произвольной длины и распечатать его в обратном порядке
1.Ввести текст произвольной длины и распечатать его в обратном порядке. 2.Определить сколько раз в введённом тексте встречается слог еле....

Чтение из текстового файла трех предложений и вывод их в обратном порядке
Написать программу, которая считывает из текстового файла три предложения и выводит их в обратном порядке. Люди помогите. Собственно...

Распечатать в порядке, обратном алфавитному буквы, входящие в текст не менее трех раз
Распечатать в порядке, обратном алфавитному, все буквы, которые входят в текст не менее трех раз. мне сказали чтобы в ней было c =...

Заданный во входном файле текст (за ним следует точка) распечатать в обратном порядке
2.Заданный во входном файле текст (за ним следует точка) распечатать в обратном порядке

Из текстового файла распечатать предложения в обратном порядке
В файле input.txt задан текст. Распечатать его по предложениям, начиная с последнего и кончая первым! var a:array of string; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 Слева синяя линия - количество заказов - идёт вниз, работники не справляются. Справа синяя линяя идёт вверх, потому. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в КА2. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru