Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача!
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Delphi
Gorinicher
Доброго времени суток всем, кто заглянул в эту тему!!! Мне очень нужна ваша помощь в решении задачки.
Условие:
Каждая запись типа tz содержит в 1 поле – номер, в 2 поле название группы (string [8]), в поле 3 – фамилию (string [12]), а в 4,5,6 полях – 3 оценки студента.
Составить программу с меню, содержащую 4 обработчика его пунктов выполняющих:
А) Создание файла ‘999.dat’ типа ftz=File of tz из 5 записей.
В) Отображение в таблице StringGrid данных файлов типа ftz.
С) Создание файла ‘999.max’ из двух записей файла ‘999.dat’ с минимальными номерами.
Д) Создание файла ‘999.gr’ из записей ‘999.dat’ сгруппированных по названиям групп.

Преподавателю в особенности не нравиться как я реализую пункт С, он говорит всё время "а вы минимум искать то умеете?". И этой фразой он сбивает меня с толку.

Вот сама задача в реализации, то что у меня получилось:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, Grids;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    StringGrid1: TStringGrid;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N11: TMenuItem;
    N21: TMenuItem;
    procedure Formcreate(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure N3Click(Sender: TObject);
    procedure N4Click(Sender: TObject);
    procedure N5Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;
   tz=record
    Nom:integer;
    Gruppa:string[8];
    Fam:string[12];
    o1,o2,o3:integer;
    end;
     tfz=File of tz;
    tm=array[1..5] of tz;
    var
    Form1: TForm1;
    f:tfz;
    m:tm=((Nom:1;Gruppa:'ИУ1-3';Fam:'Иванов';o1:2;o2:3;o3:4),
          (Nom:2;Gruppa:'ИУ2-4';Fam:'Петров';o1:3;o2:4;o3:5),
          (Nom:3;Gruppa:'ИУ3-5';Fam:'Сидоров';o1:4;o2:5;o3:2),
          (Nom:4;Gruppa:'ИУ4-1';Fam:'Лавров';o1:5;o2:2;o3:3),
          (Nom:5;Gruppa:'ИУ5-2';Fam:'Кашин';o1:2;o2:3;o3:4));
implementation

{$R *.dfm}

procedure TForm1.Formcreate(Sender: TObject);
begin
stringgrid1.ColCount:=6;
stringgrid1.RowCount:=6;
stringgrid1.options:=stringgrid1.options+[goEditing];
stringgrid1.FixedRows:=1;
stringgrid1.FixedCols:=0;
StringGrid1.Cells[0,0]:='№';
stringgrid1.cells[1,0]:='Группа';
stringgrid1.cells[2,0]:='Фамилия';
stringgrid1.cells[3,0]:='O1';
stringgrid1.cells[4,0]:='O2';
stringgrid1.cells[5,0]:='O3';
end;

procedure TForm1.N2Click(Sender: TObject);
Var  i:integer;
 begin
 assignFile(f, '999.dat');
 rewrite(f);
 For i:=1 to 5 do
  Write(f,m[i]);
  closeFile(f);
end;


procedure TForm1.N3Click(Sender: TObject);
var z1,z2:tz; f1,f2:tfz; i,j,n:integer;
begin
  assignfile(f1, '999.dat');//связываем файловую переменную f1 c файлом 999.dat
  assignfile(f2, '999.max');//связываем файловую переменную f2 с файлом 999.max
  reset(f1);//открываем файл f1 для чтения
  rewrite(f2);//создаем файл f2, если он был создан то очищаем его
  read(f1,z1);
  n:=z1.Nom;
  Seek(f1,0);
  for i:=1 to 2 do begin
    read(f1,z2);//читаем запись с которой мы будем сравнивать
    if (z2.Nom=n) and (i<>n) then read(f1,z2);//если вдруг намер этой записи оказался наименьшим
    Seek(f1,0);//переводим на начало указатель
    while (not Eof(f1)) do begin
      read(f1,z1);//читаем запись для сравнения
      if ((z1.Nom<z2.Nom) and (z1.Nom<>n)) then //если номер записи меньше текущей
        z2:=z1;//то записываем ее в z2
    end;
    n:=z2.Nom;//запоминаем номер наименьшей записи
    Seek(f1,0);//переводим на начало указатель
    write(f2,z2);//записываем наименьшую запись в файл f2
  end;//конец цикла
  closefile(f1);//закрываем файл f1
  closefile(f2);//закрываем файл f2
end;//конец процедуры N11Click

procedure TForm1.N4Click(Sender: TObject);
 Var i:integer;
 z:tz;
begin
  assignFile(f, '999.gr');
  reset(f);
  i:=1;
  while Not Eof(f) do
   Begin
    read(f,z);
    stringgrid1.Cells[0,i]:=intToStr(z.Nom);
    stringgrid1.Cells[1,i]:=z.Gruppa;
    stringgrid1.Cells[2,i]:=z.Fam;
    stringgrid1.Cells[3,i]:=IntToStr(z.o1);
    stringgrid1.Cells[4,i]:=IntToStr(z.o2);
    stringgrid1.Cells[5,i]:=IntToStr(z.o3);
    i:=i+1;
    End;

end;


procedure TForm1.N5Click(Sender: TObject);
var i,j,leng:integer; z1,z2:tz; st:string; f1,f2:tfz; stat:array of bool;
begin
  assignfile(f1, '999.dat');//связываем файловую переменную с файлом 999.dat
  assignfile(f2, '999.gr');//связываем файловую переменную с файлом 999.gr
  reset(f1);//открываем файл для чтения
  rewrite(f2);//создаем файл, если он был создан то очищаем его
  leng:=filesize(f1);//запоминаем длину файла
  Setlength(stat,leng);//устанавливаем длину динамического массива
  for i:=0 to leng-1 do begin  //заполняем false массив статусов
    stat[i]:=false;
  end;
  i:=0;
  while i<leng do begin
    read(f1,z1);//читаем запись z1, с которой дальше будем сравнивать
    if (stat[i]<>true) then begin //если мы ее еще не записали в файл f2
      Seek(f1, 0);//переводим указатель на начало
      j:=0;
      while (j<leng) do begin
        read(f1,z2);//читаем запись z2
        if (z2.Gruppa=z1.Gruppa) then begin //если названия групп совпадают
          stat[j]:=true; //запоминаем что мы записали эту запись в файл
          write(f2,z2);//записываем запись z2 в файл
        end;
        j:=j+1;
      end;
      Seek(f1, i+1);//переводим указатель на следующую запись
    end;
  i:=i+1;
  end;
   closefile(f1);//закрываем файл f1
   closefile(f2);//закрываем файл f2
end;

end.



У меня к вам большая просьба, если кто-то попытаеться её сделать. то пожалуйта напишите в стиле "начальные знания" и с подробнейшими коментариями. Я сам программирую всего пол года, и сталкиваюсь с этим впервые в своей жизни.

Да и еще одна просьба. Если кто-то может мне дохотчиво объяснить Канву с примерами реализации, там всяческих простых геометрических тел, их движения, масштабирования, переноса и в таком духе, то огромнейшая просьба, пожалуйсто объясните на примерах программ. А то меня иначе из универа попрут, а Информатика есть один единственный хвост!!!

Заранее всех благодарю, кто откликнеться на зов о помощи!!!!!!
мисс_граффити
Пожалуйста, соблюдай правила: код надо заключать в специальные теги; заголовок делать таким, чтобы он нес некоторую смысловую нагрузку (имеющую отношение к содержанию темы!)... В общем, посмотри в верху страницы.
ну и раздел - это все же Delphi.
Исправь первые 2 нарушения.
В таком виде понять что-либо в задаче невозможно.
Например, в TForm1.N11Click творится что-то ужасное.. глубокий смысл которого мне не удалось постичь.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.