![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
![]() Помогите пожалуйста завершить программу!
Дан файл целых чисел F1. Выполнить над элементами файла следующее действие:Среди каждых трех компонент файла F1 удалить максимальное, а два других поменять местами.( То есть например дан файл f1: 123465832, На выходе программы должно быть:215423. Код:
{$APPTYPE CONSOLE} uses SysUtils; type tfile=file of integer; procedure VvodFile(var f:tfile); var k:integer; begin rewrite(f); while random(30)<>20 do begin k:=random(100)-50; write(f,k); end; closefile(f); end; procedure VivodFile(var f:tfile); var k:integer; begin reset(f); while not eof(f) do begin read(f,k); write(k,' '); end; closefile(f); writeln; end; var f1,f2,f3:tfile; k,k1,p,max,min,i,j,x,im,tmp:integer; a:array of integer; begin randomize; assign(f1,'1.dat'); assign(f2,'2.dat'); VvodFile(f1); writeln('1 file'); VivodFile(f1); reset(f1); rewrite(f2); while not eof(f1) do begin p:=0; max:=-100; while (p<3) and not eof(f1) do begin read(f1,k); if k>max then max:=k; p:=p+1; end; end; Вот здесь я нашла все максимумы каждых трех компонент файла f1. Что можно сделать дальше? |
#2
|
||||
|
||||
![]() Напишите пожалуйста хотя бы как во второй файл записать все компоненты кроме максимумов...
|
#3
|
||||
|
||||
![]() У тебя довольно странный алгоритм, честно говоря. В общем, вот что у меня получилось. Как я понял по твоему коду, в одной программе он должен и создавать исходный файл, и на его основе составлять второй файл с результатом. От себя добавил вывод на экран обоих файлов. Если что-то не понятно - спрашивай
![]() Код:
program Project1; {$APPTYPE CONSOLE} uses SysUtils,Math; type TFile = file of integer; var F1,F2:TFile; procedure MakeFile(name:string); var k,i:integer; F1:TFile; begin randomize; AssignFile(F1,name); ReWrite(F1); for i:=1 to (random(33)+1)*3 do begin k:=random(10); //Если хочешь, можешь тут хоть 100 поставить. Это максимальное значение элементов файла write(F1,k); end; CloseFile(F1); end; procedure ShowFile(name:string); var k:integer; F1:TFile; begin AssignFile(F1,name); {$I-} ReSet(F1); {$I+} if IOResult<>0 then begin writeln('Error opening the file!'); Exit; end; write('File: '); while not EOF(F1) do begin read(F1,k); write(k,' '); end; CloseFile(F1); writeln; end; procedure ProcessFile(name1,name2:string); var k1,k2,k3,n:integer; begin AssignFile(F1,name1); AssignFile(F2,name2); {$I-} ReSet(F1); {$I+} if IOResult<>0 then begin writeln('Error opening the file!'); Exit; end; ReWrite(F2); while not EOF(F1) do begin read(F1,k1); read(F1,k2); read(F1,k3); if Max(k1,k2)>k3 then begin write(F2,k3); n:=Min(k1,k2); write(F2,n) end else begin write(F2,k2); write(F2,k1); end; end; CloseFile(F1); CloseFile(F2); end; begin MakeFile('file.dat'); ProcessFile('file.dat','file2.dat'); ShowFile('file.dat'); ShowFile('file2.dat'); readln; end. |
#4
|
||||
|
||||
![]() Спасибо огромное! А нельзя обойтись без модуля Math?
|
#5
|
|||
|
|||
![]() Цитата:
|
#6
|
|||
|
|||
![]() Цитата:
хочу подметить, если размер файла будет некратным трем, тогда получите ошибку... |