Данный файл целых чисел. Удалить из него все отрицательные числа - Pascal ABC

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

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

Данный файл целых чисел. Удалить из него все отрицательные числа.

Решение задачи: «Данный файл целых чисел. Удалить из него все отрицательные числа»

textual
Листинг программы
var f:file of integer;
    x,y,p,q:integer;
begin
// Создание файла
assign(f, 'file');
rewrite(f);
randomize;
for p:=1 to 40 do
 begin
  x:=-20+random(41);
  write(f,x);
 end;
// Выводим содержимое файла на экран
writeLn('Содержание исходного файла');
reset(f);
while not eof(f) do
 begin
  read(f,x);
  write(x:4);
 end;
writeln;
//удаляем отрицательные
reset(f);
p:=-1; //индексы всех элемента\в в файле
q:=-1; //индексы не отрицательных
while not EoF(f) do
 begin
  inc(p);//индекс числа
  read(f,x);//само число
  if x>=0 then //если не отрицательное
   begin
     inc(q);//индекс среди неотрицательных
     if q<>p then //если индексы не равны
      begin
       seek(f,q); //пишем число на место очередного неотрицательного
       write(f,x);
       seek(f,p+1);//продолжаем читать с того места где кончили +1
      end;
    end;
  end;
seek(f,q+1);//встаем за последним неотрицательным
truncate(f);//обрезаем файл
writeln('Содержание сжатого файла');
reset(f);
while not eof(f) do
 begin
  read(f,x);
  write(x:4);
 end;
close(f);
end.

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

  1. Объявлены переменные:
    • f: файл целых чисел;
    • x, y, p, q: целые числа;
  2. Создается файл с помощью функции assign и rewrite.
  3. Записываются 40 случайных целых чисел в файл с помощью цикла for и функции write.
  4. Выводится содержимое файла на экран с помощью функции writeLn и цикла while с условием not eof, а также функции read и write для чтения и вывода каждого числа.
  5. Начальные индексы неотрицательных чисел устанавливаются в -1 с помощью переменных p и q.
  6. В цикле while с условием not EoF (конец файла) происходит:
    • Инкремент p для получения индекса следующего числа;
    • Чтение числа с помощью функции read;
    • Если число неотрицательное (x >= 0), то:
      • Инкремент q для получения индекса следующего неотрицательного числа;
      • Если q не равно p, то:
      • Перемещение файла к месту следующего неотрицательного числа с помощью функции seek;
      • Запись числа на это место с помощью функции write;
      • Перемещение файла к следующему числу с помощью функции seek (p + 1);
  7. После окончания цикла, файл перемещается за последним неотрицательным числом с помощью функции seek;
  8. Файл обрезается с помощью функции truncate;
  9. Выводится сообщение о содержимом сжатого файла с помощью функции writeLn;
  10. Содержимое файла выводится на экран с помощью цикла while с условием not eof и функций read и write;
  11. Файл закрывается с помощью функции close.

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


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

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

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