Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 30.12.2009, 20:10
Аватар для N@stya
N@stya N@stya вне форума
Прохожий
 
Регистрация: 29.12.2009
Сообщения: 5
Репутация: 10
Сообщение Программа на типизированные файлы

Помогите пожалуйста завершить программу!
Дан файл целых чисел 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  
Старый 02.01.2010, 13:55
Аватар для N@stya
N@stya N@stya вне форума
Прохожий
 
Регистрация: 29.12.2009
Сообщения: 5
Репутация: 10
По умолчанию

Напишите пожалуйста хотя бы как во второй файл записать все компоненты кроме максимумов...
Ответить с цитированием
  #3  
Старый 02.01.2010, 23:11
Аватар для m0nzt3r
m0nzt3r m0nzt3r вне форума
Прохожий
 
Регистрация: 02.12.2008
Адрес: Россия, Москва
Сообщения: 7
Репутация: 11
По умолчанию

У тебя довольно странный алгоритм, честно говоря. В общем, вот что у меня получилось. Как я понял по твоему коду, в одной программе он должен и создавать исходный файл, и на его основе составлять второй файл с результатом. От себя добавил вывод на экран обоих файлов. Если что-то не понятно - спрашивай

Код:
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  
Старый 06.01.2010, 18:34
Аватар для N@stya
N@stya N@stya вне форума
Прохожий
 
Регистрация: 29.12.2009
Сообщения: 5
Репутация: 10
По умолчанию

Спасибо огромное! А нельзя обойтись без модуля Math?
Ответить с цитированием
  #5  
Старый 06.01.2010, 19:32
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

Цитата:
Сообщение от N@stya
Спасибо огромное! А нельзя обойтись без модуля Math?
Можно, удали его из проэкта, а функции на которых возникнет ошибка, перепиши или скопируй их из того же модуля...
Ответить с цитированием
  #6  
Старый 06.01.2010, 19:30
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

Цитата:
Сообщение от m0nzt3r
Код:
    ...
    read(F1,k1);
    read(F1,k2);
    read(F1,k3);
    ...

хочу подметить, если размер файла будет некратным трем, тогда получите ошибку...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:56.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025