Перезапись из текстового файла в массив и в типизированный файл - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д