Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2012, 18:49   #1
Начинающий програм
Форумчанин
 
Аватар для Начинающий програм
 
Регистрация: 22.11.2011
Сообщений: 201
По умолчанию Задача по теме файлы (Delphi)

Всем доброго времени суток! Помогите пожалуйста с задачей по теме файлы, кто отлично разбирается в этой теме. Буду Вам очень признателен!

Условие задачи.
Создайте файл Студент. Из файла Студент занесите в отдельный файл записи об отличниках. Можно использовать следующие критерии: имя, фамилия, курс, группа, предмет, оценка.
Начинающий програм вне форума Ответить с цитированием
Старый 15.05.2012, 19:22   #2
Arhangel7
Пользователь
 
Регистрация: 27.02.2010
Сообщений: 90
По умолчанию

ну и ...
создаем файл студент
type
tStyd = record
FIO:string[50];
Kyrs:integer;
grup:integer;
otlichnik:byte;
end;
читаем данные, смотрим - отличник, записываем )
как - то так
как-то так
Arhangel7 вне форума Ответить с цитированием
Старый 15.05.2012, 19:30   #3
Начинающий програм
Форумчанин
 
Аватар для Начинающий програм
 
Регистрация: 22.11.2011
Сообщений: 201
По умолчанию

читаем данные, смотрим - отличник, записываем

Трудность в задаче у меня возникла именно в этом. Помогите пожалуйста это написать кодом. Ни хочу распускать соплю, но мне эту задачу нужно сдать.
Начинающий програм вне форума Ответить с цитированием
Старый 15.05.2012, 19:45   #4
Arhangel7
Пользователь
 
Регистрация: 27.02.2010
Сообщений: 90
По умолчанию

для начала - нужна программа на Delphi?
или алг. для чего то?



Код:
AssignFile(var F; FileName: string) - связывает файловую переменную F и файл с именем FileName.

Reset(var F[: File; RecSize: word]) - открывает существующий файл. При открытии нетипизированного файла RecSize задает размер элемента файла.

Rewrite(var F[: File; RecSize: word]) - создает и открывает новый файл.

Read(F,v1[,v2,…vn]) - чтение значений переменных начиная с текущей позиции для типизированных файлов и строк для текстовых.

Write(F,v1[,v2,…vn]) - запись значений переменных начиная с текущей позиции для типизированных файлов и строк для текстовых.

CloseFile(F) - закрывает ранее открытый файл.

Seek(var F; NumRec: Longint) - для нетекстового файла устанавливает указатель на элемент с номером NumRec.

FilePos(var F): longint - для нетекстовых файлов возвращает номер текущей позиции. Отсчет ведется от нуля.

FileSize(var F): longint - для нетекстовых файлов возвращает количество компонентов в файле.

Eoln(var F: TextFile): boolean - возвращает True, если достигнут конец строки.

Eof(var F) ): boolean - возвращает True, если достигнут конец файла.

SeekEoln(var F: TextFile): boolean – возвращает True, если пройден последний значимый символ в строке или файле, отличный от пробела или знака табуляции.

SeekEof(var F: TextFile): boolean - то же, что и SeekEoln, но для всего файла.
как-то так

Последний раз редактировалось Arhangel7; 15.05.2012 в 19:47.
Arhangel7 вне форума Ответить с цитированием
Старый 15.05.2012, 19:50   #5
Начинающий програм
Форумчанин
 
Аватар для Начинающий програм
 
Регистрация: 22.11.2011
Сообщений: 201
По умолчанию

Попробую щас написать. Спасибо большое!

Что-то не так в этой процедуре
Код:
procedure View_file(var f:tfile; var name:string);      
var
  i:integer;
  rec:student;
begin
  for i:=0 to Filesize(f)-1 do                       
    begin
      read(f,rec);                                     
      write('№',i+1,' ');                              
      write_student(rec);                              
    end;
  writeln('Вывод закончен!');
end;

Последний раз редактировалось Stilet; 18.05.2012 в 07:38.
Начинающий програм вне форума Ответить с цитированием
Старый 17.05.2012, 20:10   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Хм, дело может быть в отсутствующем seek, но по приведенному коду сложно сказать.
Перед for напишите seek(f,0);
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 17.05.2012, 20:10   #7
Начинающий програм
Форумчанин
 
Аватар для Начинающий програм
 
Регистрация: 22.11.2011
Сообщений: 201
По умолчанию

Вот вся программа:
Код:
program Project115155k;

{$APPTYPE CONSOLE}

uses
  SysUtils,windows;
type
  Tsession = array[1..10,1..5] of record            
                                  name: string[10];
                                  mark: 1..5;       
                                  end;
  student = record               
            FIO: string[40];     
            curs: 1..5;           
            group: 1..9;         
            results: Tsession;    
           end;
 TFile= file of student ; 
var k:integer;
    fname: string;
    f:TFile;

procedure Read_student(var st:student);       
var
  i,j:integer;                            
begin
  with st do
    begin
      write('Введите ФИО: ');
      readln(FIO);
      write('Введите курс: ');
      readln(curs);
      write('Введите группу: ');
      readln(group);
      writeln('Введите результаты сессий:');
      i:=1;
      repeat
        writeln('Сейссия №',i,': ');
        for j:=1 to 5 do
          begin
            write('Название ',j,'-го экзамена: ');
            readln(results[i,j].name);
            write('Оценка за ',j,'-й экзамен: ');
            readln(results[i,j].mark);
          end;
        inc(i);
      until (i=curs*2+1); 
    end;
  writeln('Ввод закончен!');
end;

procedure write_student(var st:student);          
var
  i,j:integer;
begin
  with st do
    begin
      writeln(FIO,', ',curs,' курс, ',group,' группа.'); 
      for i:=1 to curs*2 do                              
        begin
          write('  Сессия ',i,': ');
          for j:=1 to 5 do
          write(results[i,j].name,': ',results[i,j].Mark,', ');
          writeln;
        end;
    end;
end;

procedure New_file(var f:tfile; var name:string);   
begin
  write('Имя нового файла: ');
  readln(name);
    if fileexists(name) then                          
      begin                                         
        assign(f,name);
        rewrite(f);                                  
        writeln('Файл "',name,'" создан!');
        closefile(f);
      end;
end;

procedure Open_file(var f:tfile; var name:string);      
begin
  write('Имя файла для открытия: ');
  readln(name);                                          
  assignfile(f,name);
  reset(f);                                          
  closefile(f);
  writeln('Файл "',name,'" открыт!');
end;

procedure Add_rec(var f:tfile; var name:string);       
var
  rec:student;
begin
  reset(f);
  seek(f,Filesize(f));                                
  Read_student(rec);                                   
  write(f,rec);                                       
  writeln('Запись добавлена!');                       
  closefile(f)
end;

procedure Task(var f:tfile; var name:string); 
var
  n,i:integer;                               
  rec:student;
  f2:tfile;
  b,c,d:boolean;
  name2:string;
begin
  write('Введите имя файла для результатов: ');
  readln(name2);
  reset(f);                                                  
  assign(f2,name2);
  rewrite(f2);                                              
  writeln('Файл "',name2,'" создан!');
  write('Ищем записи, удовлетворяющие условию... ');
  for n:=0 to Filesize(f)-1 do                               
    begin
      b:=true;
      c:=true;
      i:=1;
      d:=true;                        
      seek(f,n);                                              
      read(f,rec);                                            
      while (i<=5) and d do                                   
        begin
          if (rec.results[rec.curs*2,i].mark<4) then d:=false;   
          inc(i);                                                
        end;
      i:=1;
      if d then                                              
        begin
          while c and (i<=5) do                                   
            begin
              if rec.results[rec.curs*2,i].mark=5 then      
                if b=true then
                  b:=false
                else
                  c:=false;                
                  inc(i);                                               
            end;
          if c then                                               
            begin
              writeln('Найдена запись ',n+1);
              write(f2,rec);                                       
            end;
        end;
    end;
  closefile(f);
  closefile(f2);
end;

begin
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);                                             
  New_file(f,fname);
  Open_file(f,fname);
  Add_rec(f,fname);
  Task(f,fname);
  View_file(f,fname);
end.
Начинающий програм вне форума Ответить с цитированием
Старый 17.05.2012, 20:13   #8
Начинающий програм
Форумчанин
 
Аватар для Начинающий програм
 
Регистрация: 22.11.2011
Сообщений: 201
По умолчанию

В связи с тем что в сообщении ни должно быть больше 5000 символов я исключил из кода процедуру в которой у меня ошибка.
Начинающий програм вне форума Ответить с цитированием
Старый 17.05.2012, 21:12   #9
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Файл не открыт в ошибочной процедуре (нет reset(f)).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 17.05.2012, 21:31   #10
Начинающий програм
Форумчанин
 
Аватар для Начинающий програм
 
Регистрация: 22.11.2011
Сообщений: 201
По умолчанию

Помогите пожалуйста подкорректировать эту функцию под условие
Код:

procedure Task(var f:tfile; var name:string);// процедура которая заносит сведения об отличниках в отдельный файл 
var
  n,i:integer;                               
  rec:student;
  f2:tfile;
  b,c,d:boolean;
  name2:string;
begin
  write('Введите имя файла для результатов: ');
  readln(name2);
  reset(f);                                                  
  assign(f2,name2);
  rewrite(f2);                                              
  writeln('Файл "',name2,'" создан!');
  write('Ищем записи, удовлетворяющие условию... ');
  for n:=0 to Filesize(f)-1 do                               
    begin
      b:=true;
      c:=true;
      i:=1;
      d:=true;                        
      seek(f,n);                                              
      read(f,rec);                                            
      while (i<=5) and d do                                   
        begin
          if (rec.results[rec.curs*2,i].mark<4) then d:=false;   
          inc(i);                                                
        end;
      i:=1;
      if d then                                              
        begin
          while c and (i<=5) do                                   
            begin
              if rec.results[rec.curs*2,i].mark=5 then      
                if b=true then
                  b:=false
                else
                  c:=false;                
                  inc(i);                                               
            end;
          if c then                                               
            begin
              writeln('Найдена запись ',n+1);
              write(f2,rec);                                       
            end;
        end;
    end;
  closefile(f);
  closefile(f2);
end;

Последний раз редактировалось Начинающий програм; 18.05.2012 в 01:16.
Начинающий програм вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача Delphi на файлы KarolinaGree Помощь студентам 7 10.05.2012 22:46
Задания по теме файлы Бени Паскаль, Turbo Pascal, PascalABC.NET 1 05.01.2011 22:17
Задача по теме "файлы" Aleo13 Паскаль, Turbo Pascal, PascalABC.NET 13 10.11.2008 21:30