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

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Задача!, Впринципе она решена мною. но преподу всё время не нравиться((
сообщение
Сообщение #1





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

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


Доброго времени суток всем, кто заглянул в эту тему!!! Мне очень нужна ваша помощь в решении задачки.
Условие:
Каждая запись типа 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.



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

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

Заранее всех благодарю, кто откликнеться на зов о помощи!!!!!!

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


просто человек
******

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

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


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


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 28.10.2020 1:25
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name