Перезапись из текстового файла в массив и в типизированный файл - Turbo Pascal

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

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

Необходимо переписать числовые данные из текстового файла в: 1. одномерный массив, 2. типизированный файл, Необходимо обработать все эти данные по одному и тому же алгоритму в соответствии заданию и выполнить в виде двух процедур, не связанных между собой (например, при обработке типизированного файла не ссылаться на размер массива ) Найти суммы цифр каждого числа без учета повторяющихся цифр. Числа, дающие повторяющиеся суммы, удалить.

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

textual
Листинг программы
uses crt;
type mas=array[1..100] of integer;
     tfile=file of integer;
function sum(a:integer):byte;
var b:integer;
    c,s:byte;
    m:set of byte;
begin
b:=a;
m:=[];
s:=0;
while b>0 do
 begin
  c:=b mod 10;
  if not(c in m) then
   begin
    s:=s+c;
    m:=m+[c];
   end;
  b:=b div 10
 end;
sum:=s
end;
procedure readmas(var f:text;var a:mas;var n:integer);
begin
reset(f);
n:=0;
while not eof(f) do
 begin
  n:=n+1;
  read(f,a[n]);
 end;
close(f)
end;
procedure readfile(var f:text;var t:tfile);
var a:integer;
begin
reset(f);
assign(t,'file');
rewrite(t);
while not eof(f) do
 begin
  read(f,a);
  write(t,a);
 end;
close(f)
end;
procedure printmas(a:mas;n:integer);
var i:integer;
begin
writeln('Исходный массив');
for i:=1 to n do
write(a[i]:4);
writeln
end;
procedure printfile(var t:tfile);
var a:integer;
begin
seek(t,0);
writeln('Содержание исходного типизированного файла');
while not eof(t) do
 begin
  read(t,a);
  write(a:4);
 end;
writeln
end;
procedure newmas(var a:mas;var n:integer);
var i,j:integer;
    m:set of byte;
begin
m:=[];
i:=1;
while i<=n do
if not(sum(a[i]) in m) then
 begin
  m:=m+[sum(a[i])];
  i:=i+1
 end
else
 begin
  if i=n then n:=n-1
  else
   begin
    for j:=i to n-1 do
    a[j]:=a[j+1];
    n:=n-1
   end;
 end;
writeln('Удаление элементов с повторяющейся суммой цифр');
for i:=1 to n do
write(a[i]:4);
writeln
end;
procedure newfile(var t:tfile);
var i,j,k,a,b:integer;
    m:set of byte;
begin
seek(t,0);
m:=[];
i:=0;
k:=0;
while i<filesize(t)-k-1 do
 begin
  seek(t,i);
  read(t,a);
  if not(sum(a) in m) then
   begin
    m:=m+[sum(a)];
    i:=i+1
   end
  else
   begin
    k:=k+1;
    for j:=i to filesize(t)-2 do
     begin
      seek(t,j+1);
      read(t,b);
      seek(t,j);
      write(t,b)
     end;
   end
 end;
seek(t,filesize(t)-1-k);
read(t,b);
if sum(b) in m then k:=k+1;
seek(t,filesize(t)-k);
truncate(t);
writeln('Удаление элементов с повторяющейся суммой цифр');
seek(t,0);
while not eof(t) do
 begin
  read(t,a);
  write(a:4);
 end;
close(t)
end;
var f:text;
    a:mas;
    t:tfile;
    n:integer;
begin
clrscr;
assign(f,'input.txt');
readmas(f,a,n);
readfile(f,t);
printmas(a,n);
newmas(a,n);
printfile(t);
newfile(t);
readln
end.

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


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

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

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