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

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Хочу понять ООП. есть задача, что нужно делать и как правильно нужно делать
noskovgleb
сообщение 13.12.2009 1:00
Сообщение #1


Новичок
*

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

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


Сама задача выглядит вот так:
Дан файл "Багаж пассажиров", который содержит данные о количестве вещей и их общем весе для каждого пассажира. Выделить пассажиров, данные которых превышают средние показатели файла.
Объясните пожалуста... код мне впринципе ненужен!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.12.2009 1:16
Сообщение #2


Гость






Цитата
что нужно делать и как правильно нужно делать
Нужно пройти по всему файлу, посчитать сумму багажа всех пассажиров и их количество, найти среднее значение, а потом пройти еще раз и вывести (ну, или еще что-нибудь сделать) с теми данными, которые превышают среднее значение.

Только при чем здесь ООП? Оно только мешать будет, не того уровня задача, чтоб решать Объектно-Ориентированно.
 К началу страницы 
+ Ответить 
noskovgleb
сообщение 13.12.2009 1:26
Сообщение #3


Новичок
*

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

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


у меня такое задание в методичке по ООП)) а это нужно что б информация о каждом багаже хранилась в Массиве объектов?

Сообщение отредактировано: noskovgleb - 13.12.2009 1:47
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.12.2009 1:53
Сообщение #4


Гость






У тебя по условию информация в файле хранится, а не в массиве. А уж куда ты ее прочитаешь - дело твое...
 К началу страницы 
+ Ответить 
noskovgleb
сообщение 13.12.2009 10:53
Сообщение #5


Новичок
*

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

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


А считать с помощью метода который будет в объекте?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.12.2009 11:58
Сообщение #6


Гость






Опять же, смотря что за объект... Можно сделать объект - Пассажир, который будет хранить только информацию об одном пассажире + массив таких объектов, тогда можно читать файл и не из метода, а простой функцией.

Можно сделать Массив в виде объекта, тогда читать файл можно будет из метода этого объекта.

Ты определись, что именно ты будешь делать, а потом вопросы задавай.
 К началу страницы 
+ Ответить 
noskovgleb
сообщение 15.12.2009 19:24
Сообщение #7


Новичок
*

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

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


Вот если я начал где то так, что б лучше всего делать дальеш?
   
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.





Добавлено через 1 мин.
Только оно выдает ошибку и я непойму что оно хочет.

Сообщение отредактировано: noskovgleb - 15.12.2009 19:24
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 15.12.2009 19:59
Сообщение #8


Гость






Цитата
Только оно выдает ошибку и я непойму что оно хочет.
Какую ошибку оно выдает? Когда? На этапе компиляции ошибки быть не должно, а уж при запуске - я не знаю, что там у тебя творится, тебе виднее. Ты видишь свой монитор, а не я...
 К началу страницы 
+ Ответить 
noskovgleb
сообщение 16.12.2009 22:33
Сообщение #9


Новичок
*

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

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


С памятью ошибка
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
andriano
сообщение 16.12.2009 22:41
Сообщение #10


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

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


Цитата(noskovgleb @ 16.12.2009 22:33) *

С памятью ошибка

Ну постарайся вспомнить.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
noskovgleb
сообщение 16.12.2009 22:47
Сообщение #11


Новичок
*

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

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


Неповерите... ошибки нет...
Так вот... правильно я начал делать? Общий вес вещей всех пассажиров или общий вес вещей одного пассажира? вот непонятно...

Добавлено через 2 мин.
Наверно всего скорей вес вещей именно одного человека...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
noskovgleb
сообщение 16.12.2009 23:48
Сообщение #12


Новичок
*

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

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


вот сделал так. Хочу спросить как можно процедуре 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.




Сообщение отредактировано: noskovgleb - 16.12.2009 23:50
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 17.12.2009 0:24
Сообщение #13


Гость






Никак... У тебя данные читаются в ЛОКАЛЬНЫЙ массив, описанный в методе createmassiv. Чтобы получить к нему доступ из любого другого метода этого объекта - просто перенеси его описание:
type
OO = object
kolv : byte;
oves : integer;
// constructor init;
procedure sves;
procedure openbogag;
procedure createmassiv;

private // пусть будет приватным членом
m : array[1..5] of integer;
end;
, а ВСЕ остальные описания массива M убери...
 К началу страницы 
+ Ответить 
noskovgleb
сообщение 17.12.2009 0:47
Сообщение #14


Новичок
*

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

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


ии... у меня получилось что то такое...

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.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
noskovgleb
сообщение 17.12.2009 10:42
Сообщение #15


Новичок
*

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

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


А как бы тут можно добавить наследование и полиморфизм?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 17.12.2009 11:00
Сообщение #16


Гость






Во первых, "Это" надо сначала причесать, чтоб оно хотя бы без наследования и полиморфизма на что-то было похоже... А во-вторых, ну пойми же ты: не нужно на такой простой задаче ни полиморфности, ни дерева наследования, ни вообще ООП. Она элементарно решатся другими средствами, и решение получается ПРОЩЕ, чем с Объектами. Это - главный признак того, надо тебе ООП или нет. Ну ладно, допустим, задание такое. Ну хорошо, сделал "ООП" (будем считать наличие слова Object в программе достаточным для того, чтоб она стала Объектно-Ориентированной), остановись на этом. Ты уже и так кашу заварил, потом долго расхлебывать будешь (если конечно, тебе не сдать и забыть) - надо ж будет научиться писать программы с ООП правильно, а не просто чтоб было слово Object...
 К началу страницы 
+ Ответить 
volvo
сообщение 17.12.2009 13:56
Сообщение #17


Гость






На всякий случай, чтоб было понятнее, что такое наследование и полиморфизм -

вот решение твоей задачи (Показать/Скрыть)


А теперь скажи, оно тебе надо, на простейшем примере так извращаться?
 К началу страницы 
+ Ответить 
noskovgleb
сообщение 19.12.2009 12:19
Сообщение #18


Новичок
*

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

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


Задача была в том что бы реализовать эту прогу сначала просто с объектами, потом с наследованием а потом еще и с полиморфизмом...

Добавлено через 1 мин.
Да преподаватель такой попался ничего нехочет слушать, вот то что в методичке есть то и делай...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
noskovgleb
сообщение 26.12.2009 17:58
Сообщение #19


Новичок
*

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

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


вот вообщем получилось зделать уже и наследование, осталось зделать полиморфизм.... и каким образом его втыкнуть? и что он должен делать)?
 
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.




Сообщение отредактировано: noskovgleb - 26.12.2009 17:59
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 26.12.2009 18:29
Сообщение #20


Гость






Давай начнем с малого: Что такое вообще "полиморфизм", ты понимаешь?
 К началу страницы 
+ Ответить 

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

 



- Текстовая версия 28.04.2024 21:58
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"