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

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

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

Значит есть файл типа Char, нужно записать туда любые символы, кроме 0 (0 терминал). Нахожу в нем первую глас. и последнюю согл., нахожу их позиции и после этого нужно удалить всё, что находится между ними и записать оставшиеся символы в файл. Собственно с этим у меня и проблема, не знаю как удалить из этого файла всё, что находится между ними, сказали, что это можно сделать просто путем перемещения символов с последнего согласного и далее к началу первой согласной, а потом удалить оставшийся хвост через Truncate, но может можно и по-другому. Не используя дополнительных файлов, а буквы искать только английские. Вот код:
Листинг программы
  1. Uses crt; const
  2. glas=['e','y','u','i','o','a'];
  3. sogl=['q','w','r','t','p','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m'];
  4. var
  5. s,v,m:char;
  6. i,p,x,q,gl,so:integer;
  7. t:file of char;
  8. begin
  9. assign(t, '123.dat');
  10. rewrite(t);
  11. writeln('Введите символы: ');
  12. repeat
  13. readln(s);
  14. if s<>char(48) then write(t,s);
  15. until s=char(48);
  16. writeln;
  17. close(t);
  18. reset(t);
  19. x:=0;
  20. while not eof(t) do begin
  21. x:=x+1;
  22. read(t,s);
  23. if s in glas then begin
  24. if q<>1 then begin
  25. gl:=x;
  26. q:=1;
  27. v:=s;
  28. end;
  29. end;
  30. if s in sogl then begin
  31. so:=x;
  32. p:=1;
  33. m:=s;
  34. end;
  35. end;
  36. if q=0 then begin
  37. writeln('Не найдена гласная!');
  38. end else begin
  39. writeln('Первая гласная = ', v, ', eе индекс = ', gl);
  40. end;
  41. if p=0 then begin
  42. writeln('Не найдена согласная!');
  43. end else begin
  44. writeln('Последняя согласная = ', m, ', eе индекс = ', so);
  45. end;
  46. close(t);
  47. if (q<>0) and (p<>0) then begin
  48. end;
  49. reset(t);
  50. {if (p<>1) or (q<>1) then close(t) Тут нужно удалить середину путем замены
  51. else begin}
  52. reset(t);
  53. for i:=1 to filesize(t) do
  54. begin
  55. read(t,s); // А тут уже нужно вывести этот файл с удаленной серединкой
  56. write(s);
  57. end;
  58. reset(t);
  59. readln;
  60. end.
П.С задавал уже подобный вопрос, но там был текстовый файл, а тут типизированный файл, там решение кардинально другое.

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

textual
Листинг программы
  1. const
  2. glas=['e','y','u','i','o','a'];
  3. sogl=['q','w','r','t','p','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m'];
  4. var s,v,m:char;
  5.     i,j,g1,sp,k:integer;
  6. t:file of char;
  7. begin
  8. assign(t, '123.dat');
  9. rewrite(t);
  10. writeln('Введите символы: ');
  11. repeat
  12. readln(s);
  13. if s<>'0' then write(t,s);
  14. until s='0';
  15. writeln('Содержание исходного файла');
  16. reset(t);
  17. g1:=-1;//индекс первой гласной
  18. sp:=-1;//индекс последней согласной
  19. for i:=0 to filesize(t)-1 do
  20.  begin
  21.   read(t,s);
  22.   if (s in glas)and(g1=-1) then
  23.    begin
  24.     v:=s;
  25.     g1:=i;
  26.    end
  27.   else if s in sogl then
  28.    begin
  29.     m:=s;
  30.     sp:=i;
  31.    end;
  32.   write(s:2);
  33.  end;
  34. writeln;
  35. if g1=-1 then writeln('Не найдена гласная!')
  36. else writeln('Первая гласная = ', v, ', eе индекс = ', g1);
  37. if sp=-1 then writeln('Не найдена согласная!')
  38. else writeln('Последняя согласная = ', m, ', eе индекс = ', sp);
  39. if (g1<>-1)and(sp<>-1)then
  40.  begin
  41.   k:=abs(sp-g1)-1;//количество элементов удалить
  42.   if k=0 then write('Между найденными элементами нет других элементов')
  43.  end;
  44. if (g1=-1)or(sp=-1)or(k=0) then
  45.  begin
  46.   close(t);
  47.   writeln('Файл не меняется');
  48.   readln;
  49.   exit;
  50.  end;
  51. //обменяем местами если второй иендкс ментше первого
  52. if sp<g1 then
  53.  begin
  54.   i:=g1;
  55.   g1:=sp;
  56.   sp:=i;
  57.  end;
  58. reset(t);//возвращаемся в начало файла
  59. for i:=1 to k do//к раз
  60. for j:=g1+1 to filesize(t)-2 do//сдвигаем конец файла к g1
  61.  begin
  62.   seek(t,j+1);
  63.   read(t,s);
  64.   seek(t,j);
  65.   write(t,s);
  66.  end;
  67. seek(t,filesize(t)-k);//встаем на к от конца файла
  68. truncate(t); //обрезаем файл
  69. reset(t);//опять в начало и читаем
  70. writeln('Удаление элементов между первым гласным и последним согласным:');
  71. while not eof(t) do
  72.  begin
  73.   read(t,s);
  74.   write(s:2);
  75.  end;
  76. close(t);
  77. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы