IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Сортировка в типизированном файле., Необходимо удалить повторяющиеся числа и найти среднее арифметическое
MrPerec
сообщение 31.10.2011 21:19
Сообщение #1





Группа: Пользователи
Сообщений: 3
Пол: Мужской
Реальное имя: Илья

Репутация: -  0  +


Здравствуйте.
Пожалуйста помогите с типизированным файлом. По заданию числовые данные должны хранится в текстовом файле (файл создается любым способом и данные заносятся так же любым способом) после из текстового файла они переносятся в:
- массив;
- типизированный файл.
Где обрабатываются по одному и тому же алгоритму и выполнить в виде 2х процедур не связанных между собой (например, при обработке типизированного файла не ссылаться на размер массива и т.д)
Алгоритм: Из исходных данных удалить повторяющиеся числа. Определить среднее арифметическое оставшихся чисел и записать его на первое место, сдвинув остальные числа.

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

Код:
uses crt;
const n=10;
var
f:text;
i:integer;

PROCEDURE MASSIV;
var
a:array[1..n] of integer;
j,k,m,summa:integer;
sr_a:real;
begin
{\\\Чтение из текстового файла в массив///}
clrscr;
writeln('Исходный массив:');
reset(f);
i:=0;
while not seekeof(f) do
begin inc(i);
read(f,a[i]);
write(a[i],' ');
end;
{\\\Удаление повторяющихся чисел, определение среднего арифметического оставшихся чисел и его запись на первое место///}
k:=0;
for i:=1 to n do
begin m:=0;
for j:= 1 to k do
if a[i]=a[j] then
inc(m);
if m=0 then
begin inc(k);
a[k]:=a[i];
end;
end;
writeln;
writeln('Результат:');
summa:=0;
for i:=1 to k do
begin summa:=summa+a[i];
end;
sr_a:=summa/k;
write(sr_a:0:2,' ');
for i:=1 to k do
write(a[i],' ');
end;

PROCEDURE TIP_FILE;
var
f1:file of real;
data:integer;
begin
writeln;
writeln;
{\\\Создание типизированного файла///}
assign(f1,'Tip_File.int');
rewrite(f1);
{\\\Чтение из текстового файла и запись в типизированный файл ///}
reset(f);
writeln('Даннные в типизированном файле:');
while not seekeof(f) do
begin read(f,data);
write(f1,data);
write(data,' ');
end;
{\\\Удаление повторяющихся чисел, определение среднего арифметического оставшихся чисел и его запись на первое место///}

close(f1);
end;

BEGIN
{\\\Создание и запись числовых данных в текстовый файл///}
assign(f,'File.txt');
rewrite(f);
for i:=1 to n do
repeat
write(f,random(9));
write(f,' ');
until i=i;

MASSIV;
TIP_FILE;
close(f);
end.


Сообщение отредактировано: MrPerec - 31.10.2011 21:21
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Rian
сообщение 31.10.2011 23:54
Сообщение #2


Знаток
****

Группа: Пользователи
Сообщений: 394
Пол: Мужской

Репутация: -  9  +



writeln('Даннные в типизированном файле:');
while not seekeof(f) do
begin read(f,data);
write(f1,data);
write(data,' ');
inc(max)//запомнить количество элементов в типизированном файле
end;
{\\\Удаление повторяющихся чисел, ///}
writeln('tipis file clear');
reset(f1);
zero:=0;
i:=0;

while not eof(f1) do begin
inc(i);
read(f1, k1);
write(k1:4:2, ' ');

for j:=i to max-1 do begin
seek(f1, j);
read(f1, k2);

if k2=k1 then begin
seek(f1, j);
write(f1, zero);
end;
end;

seek( f1, i );

end;





что-нибудь такое не уверен можно ли считать запись нулями как удаление числа...


--------------------
Objective-C, Unity3d
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
IUnknown
сообщение 1.11.2011 10:11
Сообщение #3


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  627  +


Не надо ничего нулями записывать. По тому же алгоритму - идем по всему файлу, и проверяем, были ли ранее записаны элементы. А потом Truncate файлу по количеству уникальных элементов:

PROCEDURE TIP_FILE;
var
f1 : file of integer;
summa : integer;
curr_p, p, k, m : longint;
ai, aj : integer;
begin
writeln;
writeln;
{\\\Создание типизированного файла///}
assign(f1,'Tip_File.int');
rewrite(f1);
{\\\Чтение из текстового файла и запись в типизированный файл ///}
reset(f);
writeln('Даннные в типизированном файле:');
while not seekeof(f) do
begin
read(f,ai);
write(f1,ai);
write(ai,' ');
end;
writeln;

curr_p := 0;
k := -1;
summa := 0;
while curr_p < filesize(f1) do
begin
seek(f1, curr_p); read(f1, ai);
m := 0;
p := -1;
while p < k do
begin
inc(p);
seek(f1, p); read(f1, aj);
if ai = aj then inc(m);
end;
if m = 0 then
begin
inc(k);
seek(f1, k); write(f1, ai);
summa := summa + ai;
end;
inc(curr_p);
end;
inc(k);
seek(f1, k);
truncate(f1);

reset(f1);
write((summa / k):0:2, ' ');
while not eof(f1) do
begin
read(f1, ai);
write(ai, ' ');
end;
writeln;
close(f1);
end;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
MrPerec
сообщение 1.11.2011 22:21
Сообщение #4





Группа: Пользователи
Сообщений: 3
Пол: Мужской
Реальное имя: Илья

Репутация: -  0  +


Спасибо за помощь smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
NinaKkady
сообщение 22.05.2015 2:22
Сообщение #5


Гость






smile.gif
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 28.03.2024 22:03
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"