Удалить из файла символы между первой гласной и последней согласной буквой - 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.
Объяснение кода листинга программы
Список действий:
- Задание констант для гласных и согласных букв.
- Объявление переменных для работы с файлом и его содержимым.
- Открытие файла для чтения и записи.
- Ввод символов из файла с помощью цикла repeat-readln.
- Проверка каждого введенного символа на гласность или согласность.
- Если символ является гласным и первая гласная еще не найдена, то сохраняем символ в переменной v и первую гласную в переменной g1.
- Если символ является согласным и последняя согласная еще не найдена, то сохраняем символ в переменной m и последнюю согласную в переменной sp.
- Запись каждого символа в файл с помощью write(s:2).
- Вывод содержимого файла до удаления элементов.
- Если первая гласная не найдена, то выводится сообщение
Не найдена гласная!
. - Если последняя согласная не найдена, то выводится сообщение
Не найдена согласная!
. - Если первая и последняя гласные успешно найдены, то вычисляется количество символов между ними и сохраняется в переменной k.
- Если k=0, то выводится сообщение
Между найденными элементами нет других элементов
. - Если первая гласная не найдена, последняя согласная не найдена или k=0, то файл не изменяется и выводится сообщение
Файл не меняется
. - Если sp меньше g1, то меняются местами значения g1 и sp.
- Файл сбрасывается в начало.
- Если k>0, то выполняется два вложенных цикла для удаления k символов между первой гласной и последним согласным.
- Файл закрывается и открывается заново для чтения.
- Выводится сообщение
Удаление элементов между первым гласным и последним согласным:
и содержимое файла. - Файл закрывается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д