Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 1
Регистрация: 17.11.2015
Сообщений: 42

Запись в файл часть содержащей наибольшее количество пробелов

27.01.2022, 17:59. Показов 492. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго дня!
Есть задача:
Дан текстовый файл F. Записать в файл G часть содержимого F, следующую за наиболее длинной группой идущих подряд пробелов.
Я понял задачу по своему и файл исходник у меня выглядит так
a b c
b c d e f g
a b c d a b c d e f g i j
a b c d e f g i j a b c d e f g i j
g e f h
d e f g i j
b c d e
b c d e f g


Реализовал я код при помощи массива

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
var
  f,g :text;
  temp :string;
  max, i, j, k, l, sum, str :integer;
  a:array[1..10] of string;
  begin
    assign(f,'input.txt');
    assign(g, 'output.txt');
    reset(f);
    rewrite(g);
    max:=0;
    sum:=0;
    //выполняем до тех пор пока не закончится файл
    while not EOF(f) do
    begin
      readln(f,temp); //читаем строку
      l:=length(temp); //читаем длинну строки
      k:=0;
      //перебираем посимвольно строку и считаем пробелы
      for i:=1 to l do
        begin
          if temp[i]=' ' then k:=k+1;
        end;
        if k > sum then
          begin 
          sum:=k; 
          str:=max;
          end;
      inc(max);//увеличиваем массив на 1 элемент
      a[max]:=temp//присваиваем новому значение строки
    end;
    //переписываем с массива в выходной файл
    for i:=str to max do
    begin
      temp:=a[str+1];
      for j:=1 to length(temp) do
        write(g, temp[j]);
        writeln(g);
        str:=str+1;
    end;
    close(f);
    close(g);
  end.
Однако преподаватель сказал сделать без массива, мол это не совсем корректное решение + ограничение файла из за явно указанного размера массива, хотя все работает и с размерностью можно было исправить. И вот теперь я не знаю, как теперь привязаться позиционно к строкам. Процедура подсчета пробелов допустим останется та же, но когда встретив условие что k больше предыдущего значения, как удалить все строки или все символы до начала файла?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.01.2022, 17:59
Ответы с готовыми решениями:

Найти номер строки, содержащей наибольшее количество цифр
Задана символьная матрица. Найти номер строки, содержащей наибольшее количество цифр.

Найти номер строки матрицы, содержащей наибольшее количество нулей
Задан двумерный массив целых чисел размером n*m Найти номер строки, содержащей наибольшее количество нулей

Найти в матрице номер строки, содержащей наибольшее количество нулей
Задан двумерный массив целых чисел размером n*m Найти номер строки, содержащей наибольшее количество нулей.

3
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
28.01.2022, 10:27
Цитата Сообщение от BReDD Посмотреть сообщение
встретив условие что k больше предыдущего значения, как удалить все строки или все символы до начала файла?
Вариантов традиционно больше одного:
1) на первом проходе посчитать, затем переоткрыть f, дочитать до нужного места, записать в g,
2) закрыть g, переоткрыть его по Rewrite.

Добавлено через 5 минут
Pascal
1
2
      l:=length(temp); //читаем длинну строки
      for i:=1 to l do
Достаточно
Pascal
1
 for i:=1 to Length(temp) do
Пределы цикла вычисляются один раз до первого исполнения тела цикла.

И самое главное: у вас в условии недвусмысленно
Цитата Сообщение от BReDD Посмотреть сообщение
наиболее длинной группой идущих подряд пробелов
Насколько понимаю, подряд идущие пробелы, это вот эти, между a и b, b и c:
Code
1
2
3
a    b     c
 ____ _____
 ^--^ ^---^
Но считаете почему-то совсем другое...
0
0 / 0 / 1
Регистрация: 17.11.2015
Сообщений: 42
28.01.2022, 17:21  [ТС]
Цитата Сообщение от bormant Посмотреть сообщение
Но считаете почему-то совсем другое..
Если ставится какая то задача, логично что программа должна гипотетически принести какую то пользу в дальнейшем применении, что бы студент приобрел необходимые навыки. В таком варианте, как написали вы, это действительно верное понимание постановки задачи, а я посчитал абсурдным ибо практического применения такой программы придумать не смог. Мой вариант выглядел тоже не фонтан, но мне показался более логичным.
Цитата Сообщение от bormant Посмотреть сообщение
1) на первом проходе посчитать, затем переоткрыть f, дочитать до нужного места, записать в g,
вот тут можно подробнее немного плз. Я как раз немогу понять, как запомнить положение курсора. Ладно его перенести в начало строки то это будет не temp[i] а temp[0] (Нам же надо и эту строчку перенести), но вот координаты курсора теперь как узнать, я почему и в ступоре, что в текстовых файлах можно считать посимвольно...
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
28.01.2022, 17:37
Цитата Сообщение от BReDD Посмотреть сообщение
как запомнить положение курсора
Вариантов традиционно больше одного:
1) для файла Text запоминать номер строки и положение в строке,
2) для file of Char положение курсора запомнить непосредственно, он же с произвольным доступом
Поскольку вариант (2) тривиальный, посмотрим на вариант (1):
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  Reset(f); {n:=0;}
  while not EoF(f) do begin
    ReadLn(f,s); Inc(n); k:=0; 
    for i:=1 to Length(s) do if s[i]=' ' then Inc(k);
    if mk<k then begin
      mk:=k; mn:=n;
    end;
  end;
  Reset(f); Rewrite(g);
  for n:=n-1 downto 0 do ReadLn(f,s);
  while not EoF(f) do begin
    ReadLn(f,s); WriteLn(g,s);
  end;
  Close(g); Close(f);
Добавлено через 4 минуты
PS. Подсчет пробелов пока как было -- количество в строке.
Ибо первое правило радиотехника: одновременно крутить не больше одной ручки.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.01.2022, 17:37
Помогаю со студенческими работами здесь

Найти номер строки матрицы, содержащей наибольшее количество отрицательных чисел
Дана квадратная матрица размерностью MxN (M и N - целые положительные числа, причём не больше 10). Вывести на экран матрицу, а затем номер...

Найти номер последней по порядку строки содержащей наибольшее количество букв ш, щ
Дана символьная матрица размером 13х18 найти номер последней по порядку строки содержащей наибольшее количество букв ш,щ. Заранее спасибо.

Найти индекс строки матрицы содержащей наибольшее количество повторяющихся элементов
Написать программу, которая находит индекс той строчки матрицы, содержащий наибольшее количество повторяющихся элементов. Так выглядит...

Поиск строки, содержащей наибольшее количество слов, начинающихся с гласной буквы
помогите с алгоритмом. а то я что то никак не въеду как делать

Найти номер первой по порядку строки массива, содержащей наибольшее количество цифр
найти номер первой по порядку строки массива содержащей наибольшее количество цифр


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru