Удалить из файла символы между первой гласной и последней согласной буквой - PascalABC.NET

Узнай цену своей работы

Формулировка задачи:

Значит есть файл типа Char, нужно записать туда любые символы, кроме 0 (0 терминал). Нахожу в нем первую глас. и последнюю согл., нахожу их позиции и после этого нужно удалить всё, что находится между ними и записать оставшиеся символы в файл. Собственно с этим у меня и проблема, не знаю как удалить из этого файла всё, что находится между ними, сказали, что это можно сделать просто путем перемещения символов с последнего согласного и далее к началу первой согласной, а потом удалить оставшийся хвост через Truncate, но может можно и по-другому. Не используя дополнительных файлов, а буквы искать только английские. Вот код:
П.С задавал уже подобный вопрос, но там был текстовый файл, а тут типизированный файл, там решение кардинально другое.

Решение задачи: «Удалить из файла символы между первой гласной и последней согласной буквой»

textual
Листинг программы
const
glas=['e','y','u','i','o','a'];
sogl=['q','w','r','t','p','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m'];
var s,v,m:char;
    i,j,g1,sp,k:integer;
t:file of char;
begin
assign(t, '123.dat');
rewrite(t);
writeln('Введите символы: ');
repeat
readln(s);
if s<>'0' then write(t,s);
until s='0';
writeln('Содержание исходного файла');
reset(t);
g1:=-1;//индекс первой гласной
sp:=-1;//индекс последней согласной
for i:=0 to filesize(t)-1 do
 begin
  read(t,s);
  if (s in glas)and(g1=-1) then
   begin
    v:=s;
    g1:=i;
   end
  else if s in sogl then
   begin
    m:=s;
    sp:=i;
   end;
  write(s:2);
 end;
writeln;
if g1=-1 then writeln('Не найдена гласная!')
else writeln('Первая гласная = ', v, ', eе индекс = ', g1);
if sp=-1 then writeln('Не найдена согласная!')
else writeln('Последняя согласная = ', m, ', eе индекс = ', sp);
if (g1<>-1)and(sp<>-1)then
 begin
  k:=abs(sp-g1)-1;//количество элементов удалить
  if k=0 then write('Между найденными элементами нет других элементов')
 end;
if (g1=-1)or(sp=-1)or(k=0) then
 begin
  close(t);
  writeln('Файл не меняется');
  readln;
  exit;
 end;
//обменяем местами если второй иендкс ментше первого
if sp<g1 then
 begin
  i:=g1;
  g1:=sp;
  sp:=i;
 end;
reset(t);//возвращаемся в начало файла
for i:=1 to k do//к раз
for j:=g1+1 to filesize(t)-2 do//сдвигаем конец файла к g1
 begin
  seek(t,j+1);
  read(t,s);
  seek(t,j);
  write(t,s);
 end;
seek(t,filesize(t)-k);//встаем на к от конца файла
truncate(t); //обрезаем файл
reset(t);//опять в начало и читаем
writeln('Удаление элементов между первым гласным и последним согласным:');
while not eof(t) do
 begin
  read(t,s);
  write(s:2);
 end;
close(t);
end.

Объяснение кода листинга программы

Список действий:

  1. Задание констант для гласных и согласных букв.
  2. Объявление переменных для работы с файлом и его содержимым.
  3. Открытие файла для чтения и записи.
  4. Ввод символов из файла с помощью цикла repeat-readln.
  5. Проверка каждого введенного символа на гласность или согласность.
  6. Если символ является гласным и первая гласная еще не найдена, то сохраняем символ в переменной v и первую гласную в переменной g1.
  7. Если символ является согласным и последняя согласная еще не найдена, то сохраняем символ в переменной m и последнюю согласную в переменной sp.
  8. Запись каждого символа в файл с помощью write(s:2).
  9. Вывод содержимого файла до удаления элементов.
  10. Если первая гласная не найдена, то выводится сообщение Не найдена гласная!.
  11. Если последняя согласная не найдена, то выводится сообщение Не найдена согласная!.
  12. Если первая и последняя гласные успешно найдены, то вычисляется количество символов между ними и сохраняется в переменной k.
  13. Если k=0, то выводится сообщение Между найденными элементами нет других элементов.
  14. Если первая гласная не найдена, последняя согласная не найдена или k=0, то файл не изменяется и выводится сообщение Файл не меняется.
  15. Если sp меньше g1, то меняются местами значения g1 и sp.
  16. Файл сбрасывается в начало.
  17. Если k>0, то выполняется два вложенных цикла для удаления k символов между первой гласной и последним согласным.
  18. Файл закрывается и открывается заново для чтения.
  19. Выводится сообщение Удаление элементов между первым гласным и последним согласным: и содержимое файла.
  20. Файл закрывается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4 из 5
Похожие ответы