Сама задача выглядит вот так:
Дан файл "Багаж пассажиров", который содержит данные о количестве вещей и их общем весе для каждого пассажира. Выделить пассажиров, данные которых превышают средние показатели файла.
Объясните пожалуста... код мне впринципе ненужен!
у меня такое задание в методичке по ООП)) а это нужно что б информация о каждом багаже хранилась в Массиве объектов?
У тебя по условию информация в файле хранится, а не в массиве. А уж куда ты ее прочитаешь - дело твое...
А считать с помощью метода который будет в объекте?
Опять же, смотря что за объект... Можно сделать объект - Пассажир, который будет хранить только информацию об одном пассажире + массив таких объектов, тогда можно читать файл и не из метода, а простой функцией.
Можно сделать Массив в виде объекта, тогда читать файл можно будет из метода этого объекта.
Ты определись, что именно ты будешь делать, а потом вопросы задавай.
Вот если я начал где то так, что б лучше всего делать дальеш?
uses crt;
type
OO = object
kolv : byte;
oves : integer;
// constructor init;
procedure sves;
procedure openbogag;
end;
{------------------------------------}
procedure OO.sves;
Begin
writeln('Сдесь будет считаться общий вес');
End;
{------------------------------------}
procedure oo.openbogag;
var f : text;
i,b : byte;
Begin
assign(f,'bagag.txt');
reset(f);
while not eof (f) do
begin
read(f,b);
writeln(b);
end;
close(f);
End;
{------------------------------------}
var
BP : OO;
BEGIN
clrscr;
BP.sves;
BP.openbogag;
readln;
END.
С памятью ошибка
Неповерите... ошибки нет...
Так вот... правильно я начал делать? Общий вес вещей всех пассажиров или общий вес вещей одного пассажира? вот непонятно...
Добавлено через 2 мин.
Наверно всего скорей вес вещей именно одного человека...
вот сделал так. Хочу спросить как можно процедуре sves дать массив мой?
Добавлено через 5 мин.
uses crt;
type
OO = object
kolv : byte;
oves : integer;
// constructor init;
procedure sves;
procedure openbogag;
procedure createmassiv;
end;
{------------------------------------}
procedure OO.sves;
Begin
writeln('Сдесь будет считаться общий вес');
End;
{------------------------------------}
procedure oo.openbogag;
var f : text;
i : byte;
b : byte;
Begin
i:=0;
assign(f,'bagag.txt');
reset(f);
while not eof (f) do
begin
i:=i+1;
read(f,b);
write(b:2,' ');
if i=2 then
begin
writeln;
i:=0;
end;
end;
close(f);
End;
{------------------------------------}
procedure oo.createmassiv;
var j : integer;
i : integer;
f : text;
b : byte;
m : array[1..5] of integer;
Begin
writeln;
i:=0;
j:=1;
assign(f,'bagag.txt');
reset(f);
while not eof (f) do
begin
i:=i+1;
read(f,b);
// write(b:2,' ');
if i=2 then
begin
m[j]:=b;
writeln(m[j]);
inc(j);
i:=0;
end;
end;
close(f);
End;
{------------------------------------}
var
BP : OO;
m : array[1..5] of integer;
BEGIN
clrscr;
BP.sves;
BP.openbogag;
BP.createmassiv;
readln;
END.
Никак... У тебя данные читаются в ЛОКАЛЬНЫЙ массив, описанный в методе createmassiv. Чтобы получить к нему доступ из любого другого метода этого объекта - просто перенеси его описание:
type, а ВСЕ остальные описания массива M убери...
OO = object
kolv : byte;
oves : integer;
// constructor init;
procedure sves;
procedure openbogag;
procedure createmassiv;
private // пусть будет приватным членом
m : array[1..5] of integer;
end;
ии... у меня получилось что то такое...
uses crt;
type
OO = object
kolv : byte;
oves : integer;
// constructor init;
procedure sves;
procedure openbogag;
procedure createmassiv;
private
m : array[1..5] of integer;
end;
{------------------------------------}
procedure OO.sves;
var
i :byte;
summa:integer;
j :byte;
Begin
j:=0;
writeln('Сдесь будем определять кто взял большой вес одежды) ');
writeln;
for i:=1 to 5 do
begin
summa:=summa+m[i];
inc(j);
end;
for i:=1 to 5 do
if m[i] > (summa/j)
then writeln(i,'-й пассажир превысил средний вес вещей.');
End;
{------------------------------------}
procedure oo.openbogag;
var f : text;
i : byte;
b : byte;
Begin
i:=0;
assign(f,'bagag.txt');
reset(f);
while not eof (f) do
begin
i:=i+1;
read(f,b);
write(b:2,' ');
if i=2 then
begin
writeln;
i:=0;
end;
end;
close(f);
End;
{------------------------------------}
procedure oo.createmassiv;
var j : integer;
i : integer;
f : text;
b : byte;
Begin
writeln;
i:=0;
j:=1;
assign(f,'bagag.txt');
reset(f);
while not eof (f) do
begin
i:=i+1;
read(f,b);
// write(b:2,' ');
if i=2 then
begin
m[j]:=b;
writeln(m[j]);
inc(j);
i:=0;
end;
end;
close(f);
End;
{------------------------------------}
var
BP : OO;
BEGIN
clrscr;
BP.openbogag;
BP.createmassiv;
BP.sves;
readln;
END.
А как бы тут можно добавить наследование и полиморфизм?
Во первых, "Это" надо сначала причесать, чтоб оно хотя бы без наследования и полиморфизма на что-то было похоже... А во-вторых, ну пойми же ты: не нужно на такой простой задаче ни полиморфности, ни дерева наследования, ни вообще ООП. Она элементарно решатся другими средствами, и решение получается ПРОЩЕ, чем с Объектами. Это - главный признак того, надо тебе ООП или нет. Ну ладно, допустим, задание такое. Ну хорошо, сделал "ООП" (будем считать наличие слова Object в программе достаточным для того, чтоб она стала Объектно-Ориентированной), остановись на этом. Ты уже и так кашу заварил, потом долго расхлебывать будешь (если конечно, тебе не сдать и забыть) - надо ж будет научиться писать программы с ООП правильно, а не просто чтоб было слово Object...
На всякий случай, чтоб было понятнее, что такое наследование и полиморфизм -
Задача была в том что бы реализовать эту прогу сначала просто с объектами, потом с наследованием а потом еще и с полиморфизмом...
Добавлено через 1 мин.
Да преподаватель такой попался ничего нехочет слушать, вот то что в методичке есть то и делай...
вот вообщем получилось зделать уже и наследование, осталось зделать полиморфизм.... и каким образом его втыкнуть? и что он должен делать)?
program laba13;
type
tm = array[1..5] of integer;
OO = object
m : tm; { object }
kolv : byte; { count of things }
oves : integer; { weight of things }
constructor init(var im:tm);
procedure openbogazh; { open list of thing }
procedure createmassiv(var cm:tm);{ mas of things }
end;
tves = object(OO)
procedure sves(var sm:tm); { find max weight }
end;
{---------------------------------------------------------------}
constructor OO.init;
begin
im:=m;
end;
{---------------------------------------------------------------}
{---------------------------------------------------------------}
procedure tves.sves(var sm:tm);
var
i :byte;
summa:integer;
j :byte;
Begin
j:=0;
writeln;
writeln('3десь будем определять кто взял большой вес одежды) ');
writeln;
for i:=1 to 5 do
begin
summa:=summa+sm[i];
inc(j);
end;
for i:=1 to 5 do
if sm[i] > (summa/j)
then writeln(i,'-й пассажир превысил средний вес вещей.');
End;
{---------------------------------------------------------------}
procedure OO.openbogazh;
var f : text;
i : byte;
b : byte;
Begin
i:=0;
assign(f,'bagag.txt');
reset(f);
while not eof (f) do
begin
i:=i+1;
read(f,b);
write(b:2,' ');
if i=2 then
begin
writeln;
i:=0;
end;
end;
close(f);
End;
{---------------------------------------------------------------}
procedure oo.createmassiv(var cm:tm);
var j : integer;
i : integer;
f : text;
b : byte;
y : byte;
xm: tm;
Begin
writeln;
i:=0;
j:=1;
y:=0;
assign(f,'bagag.txt');
reset(f);
while not eof (f) do
begin
i:=i+1;
read(f,b);
if i=2 then
begin
xm[j]:=b;
inc(y);
writeln('ves veshei ',y,
'-ogo passagira ',xm[j],' kg');
cm[y]:=xm[j];
inc(j);
i:=0;
end;
end;
close(f);
End;
(*-------------------- --------------*)
var
BP : OO;
ves:tves;
BEGIN
writeln('--------------------------------------------------');
BP.openbogazh;
BP.createmassiv(BP.m);
ves.sves(BP.m);
readln;
END.
Давай начнем с малого: Что такое вообще "полиморфизм", ты понимаешь?
собственно в FAQ прочитал.
Возможность определения единого по имени действия (процедуры или функции), применимого одновременно ко всем объектам иерархии наследования, причем каждый объект может "заказывать" особенность реализации этого действия над "самим собой".
Хорошо. Прочитал. А понял?
Ты мой код смотрел, из 17-го сообщения, где есть полиморфная процедура Get, которая работает с любым объектом, унаследованным от единого предка? Вот тебе и "особенности реализации действия над самим собой"...
Да... но что делает эта процедура.(?
Я извеняюсь Volvo что немогу воспользоваться тем что ты написал... хочеться попробывать свое... или хотябы увидеть то что смогу понять. Еще один вопрос это будет похоже на полиморфим, если да то что здесь не так?
program laba15;
type
tm = array[1..5] of integer;
OO = object
m : tm; { object }
kolv : byte; { count of things }
oves : integer; { weight of things }
constructor init(var im:tm);
procedure openbogazh; { open list of thing }
procedure createmassiv(var cm:tm);{ mas of things }
end;
tves = object(OO)
procedure sves(var sm:tm);virtual; { find max weight }
end;
tves2= object(OO)
procedure sves(var sm:tm);virtual;
end;
{---------------------------------------------------------------}
constructor OO.init(var im:tm);
begin
im:=m;
end;
{---------------------------------------------------------------}
{---------------------------------------------------------------}
procedure tves.sves(var sm:tm);
var
i :byte;
summa:integer;
j :byte;
Begin
j:=0;
writeln;
writeln('3десь будем определять кто взял большой вес одежды) ');
writeln;
for i:=1 to 5 do
begin
summa:=summa+sm[i];
inc(j);
end;
for i:=1 to 5 do
if sm[i] > (summa/j)
then writeln(i,'-й пассажир превысил средний вес вещей.');
End;
{--------------------------------------------------------------}
procedure tves2.sves(var sm:tm);
var
i :byte;
sbv:byte;
max:byte;
begin
max:=sm[1];
for i:= 1 to 5 do
if sm[i]>max then
max:=sm[i];
writeln('Найбольший вес вещей = ',max);
readln;
end;
{---------------------------------------------------------------}
procedure OO.openbogazh;
var f : text;
i : byte;
b : byte;
Begin
i:=0;
assign(f,'bagag.txt');
reset(f);
while not eof (f) do
begin
i:=i+1;
read(f,b);
write(b:2,' ');
if i=2 then
begin
writeln;
i:=0;
end;
end;
close(f);
End;
{---------------------------------------------------------------}
procedure oo.createmassiv(var cm:tm);
var j : integer;
i : integer;
f : text;
b : byte;
y : byte;
xm: tm;
Begin
writeln;
i:=0;
j:=1;
y:=0;
assign(f,'bagag.txt');
reset(f);
while not eof (f) do
begin
i:=i+1;
read(f,b);
if i=2 then
begin
xm[j]:=b;
inc(y);
writeln('ves veshei ',y,
'-ogo passagira ',xm[j],' kg');
cm[y]:=xm[j];
inc(j);
i:=0;
end;
end;
close(f);
End;
(*-------------------- --------------*)
var
BP : OO;
ves:tves;
ves2:tves2;
BEGIN
writeln('--------------------------------------------------');
BP.openbogazh;
BP.createmassiv(BP.m);
ves.sves(BP.m);
ves2.sves(BP.m);
readln;
END.