program point;
Type Orehi = class // Создаём тип данных хранящий в себе координаты
public
z,y : string;
x:integer; // Задаём координатам типы данных, создаём конструктор и процедуры
constructor Create(z2,y2: string;x2: integer);
constructor Create(b:Orehi);
End;
constructor Orehi.Create(z2,y2: string;x2: integer); // Описываем работу конструктора и процедурQ
begin
z :=z2;
x := x2;
y := y2;
end;
constructor Orehi.Create(b:Orehi); // Описываем работу конструктора и процедур
begin
z :=b.z;
x :=b.x;
y :=b.y;
end;
function Ins (z3,y3: string; x3: integer): Orehi ;
var c:Orehi;
begin
if (length(z3)<>0) and (x3 > 0) and (length(y3)<>0) then begin
c:=new Orehi(z3,y3,x3);
Ins:=c;
end
else begin
Writeln(('Введены неправильные данные'));
end;
end;
procedure InsInMas (a:array of Orehi;n:integer);
var name1,cst: string;
cp,i: integer;
begin
for i:=0 to n do begin
Writeln(('Введите название орехов'));
readln(name1);
Writeln(('Введите регион происхождения'));
readln(cst);
Writeln(('Введите цену за 1 кг'));
readln(cp);
a[i]:=Ins(name1,cst,cp);
end;
end;
procedure SortByOne(a:array of Orehi;n:integer);
var tmp:Orehi;
i,j: integer;
begin
for i:=0 to n do begin
for j:=0 to n-i-1 do begin
if a[j].z>a[j+1].z then begin
tmp := a[j];
a[j] := a[j+1];
a[j+1] := tmp;
end;
end;
end;
end;
procedure SortByTwo(a:array of Orehi;n:integer);
var tmp:Orehi;
i,j: integer;
begin
for i:=0 to n do begin
for j:=0 to n-i-1 do begin
if a[j].x>a[j+1].x then begin
tmp := a[j];
a[j] := a[j+1];
a[j+1] := tmp;
end;
end;
end;
end;
procedure FindSmth(a:array of Orehi;n:integer;var s:Array of Orehi);
var
i,sr,count,p: integer;
begin
sr:=0;
count:=0;
p:=0;
for i:=0 to n do begin
sr:=sr+a[i].x;
end;
sr:=sr div n;
for i:=0 to n do begin
if sr>a[i].x then begin
count:=count+1;
end
end;
SetLength(s,count);
for i:=0 to n do begin
if a[i].x <sr then begin
s[p]:=a[i];
p:=p+1;
end
end;
end;
procedure WriteInFile(a:array of Orehi;n:integer;Fi:string);
var
file2: Text;
i: integer;
begin
Assign(file2,Fi);
Rewrite(file2);
for i:=0 to n do begin
Writeln(file2,a[i].z,' ',a[i].y,' ',a[i].x);
Close(file2);
end;
end;
function ReadFromFile(Fi:string): array of Orehi;
var
f: Text;
i,count,count2,x2: integer;
s:string;
a:array of Orehi;
begin
count2:=1;
Assign(f,Fi);
Reset(f);
While not eof(f) do begin
Readln(f,s);
WriteLn(s);
count:=count+1;
SetLength(a,count);
Reset(f);
WriteLn(count);
for i:=0 to count-1 do begin
while not eoln(f) do begin
Read(f,s);
WriteLn(s);
if count2=1 then begin
a[i].z:=s;
end ;
if count2=2 then begin
a[i].y:=s;
end;
if count2=3 then begin
x2:=StrToInt(s);
a[i].x:=x2;
end;
count2:=count2+1;
end;
count2:=1;
end;
Close(f);
ReadFromFile:=a;
end;
end;
procedure FindSmthFile(Fi:string;Fi2:string);
var
a:array of Orehi;
s:array of Orehi;
begin
a:=ReadFromFile(Fi);
FindSmth(a,length(a),s);
WriteInFile(s,length(s),Fi2);
end;
procedure CoutMas (a:array of Orehi;n:integer);
var
ans: Array of Orehi;
i,j: integer;
ss:string;
begin
writeln(('Что нужно вывести:'));
writeln(('Начальный массив: 1'));
writeln(('Массив после первой сортировки:2'));
writeln(('Массив после второй сортировки:3'));
writeln(('Результат функции поиска:4'));
writeln(('Данные, которые будут записаны в файл:5'));
writeln(('Массив, который получился выписыванием данных из файла:6'));
writeln(('Результат функции поиска в файле:7'));
read(j);
case j of
1:
for i:=0 to n do begin
Writeln(a[i].z,' ',a[i].y,' ',a[i].x);
end;
2:
if j=2 then begin
SortByOne(a,n);
for i:=0 to n do begin
Writeln(a[i].z,' ',a[i].y,' ',a[i].x);
end;
end;
3:
if j=3 then begin
SortByTwo(a,n);
for i:=0 to n do begin
Writeln(a[i].z,' ',a[i].y,' ',a[i].x);
end;
end;
4:
if j=4 then begin
FindSmth(a,n,ans);
if (length(ans)=0) then begin
Writeln(('Подходящих значений нет'));
end
else begin
for i:=0 to length(ans) do begin
Writeln(ans[i].z,' ',ans[i].y,' ',ans[i].x);
end;
end;
end;
5:
for i:=0 to n do begin
Writeln(a[i].z,' ',a[i].y,' ',a[i].x);
end;
6:
if j=6 then begin
WriteLn(('Введите название и расширение файла'));
Readln(ss);
ans:=ReadFromFile(ss);
for i:=0 to length(ans) do begin
Writeln(ans[i].z,' ',ans[i].y,' ',ans[i].x);
end;
end;
7:
if j=7 then begin
FindSmth(a,n,ans);
if (length(ans)=0) then begin
Writeln(('Подходящих значений нет'));
end
else begin
for i:=0 to length(ans) do begin
Writeln(ans[i].z,' ',ans[i].y,' ',ans[i].x);
end;
end;
end;
else begin
writeln(('Введён неправильный номер'));
end;
end;
end;
var //Оснавная часть программы
b1: array of Orehi; // Приводим массивы к собственному типу данных
b2: array of Orehi;
tmp: Orehi; // Временная переменная для сортировки
i ,j, N,vv: integer; // Объявляем переменные
ss,s2,s3: string;
begin
writeln(('Введите количетсво видов орехов')); //Ввод стартовых значений
readln(N);
SetLength(b1,N);//Создание размеров массива
SetLength(b2,N);
tmp:= new Orehi();// Задаём значения для временной переменной
N:=N-1; // Исключаем
vv:=1;
ss:='';
while vv <>0 do begin
writeln(('Меню значений'));
writeln(('Вывода массива и всех процедур на экран: 1'));
writeln(('Заполнение массива:2'));
writeln(('Сортировка массива по первому признаку:3'));
writeln(('Сортировка массива по второму признаку:4'));
writeln(('Поиск:5'));
writeln(('Записать массив в файл:6'));
writeln(('Прочитать значения из файла в массив:7'));
writeln(('Поиск в файле:8'));
writeln(('Окончание программы:0'));
readln(vv);
case vv of
1:
CoutMas(b1,N);
2:
if vv=2 then begin
InsInMas(b1,N);
b2:=b1;
end;
3:
SortByOne(b1,N);
4:
SortByTwo(b1,N);
5:
FindSmth(b1,N,b2);
6:
if vv=6 then begin
WriteLn(('Введите название и расширение файла'));
Readln(s2);
WriteInFile(b1,N,s2)
end;
7:
if vv =7 then begin
WriteLn(('Введите название и расширение файла'));
Readln(s2);
b2:=ReadFromFile(s2);
end;
8:
if vv =8 then begin
WriteLn(('Введите название и расширение файла в котором нужно искать'));
Readln(s2);
WriteLn(('Введите название и расширение файла в котором нужно записать'));
Readln(s3);
FindSmthFile(s2,s3);
end;
end;
end;
end.