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

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

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

3 страниц V < 1 2 3 >  
 Ответить  Открыть новую тему 
> Object pascal, Какую тему выбрать?
сообщение
Сообщение #21


Бывалый
***

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

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


Да,sorry, raschet - функция
Начну, с маленького введения в футбольную жизнь.
Во всех футбольных комп. играх коэффициент игрока - от 0 до 100 (100 - предел, которого не
может быть)
Цена игрока в нынешнем футболе: коэффициент,например, 90 стоит игрок ~ 19000000 евро
Чем меньше коэффициент, те меньше цена, поэтому так много условий.

С возрастом я сделал так: игрок моложе 23 лет=> цена чуть-чуть больше.
Чтобы удобнее было и нагляднее я сделал целочисленным типом цену, поэтому функция немного
корявая. ( с вещественным можно было бы молодым игрокам цену +10%)



function TFootballer.Raschet(age,k:byte;price:word):word;
begin
if k<30 then price:=k*5
else if k<50 then price:=k*30
else if k<80 then price:=k*70
else price:=k*210;

if age<=22 then if k<50 then price:=price+200
else if k<80 then price:=price+300
else price:=price+500;
end;





Итак получается цена коэф. 90 - 18900 (не хватает 3х нулей, ну это при выводе
на экран поправлю)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #22


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

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

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


1) зачем тебе лишний формальный параметр price? лучше сделай внутри функции такую локальную переменную (а в делфи и она не понадобится).
2) можешь делать +10% а потом округлять до ближайшего целого (trunc/round в помощь)


Добавлено через 42 сек.
кстати... пишешь функцию, а работаешь с ней, как с процедурой


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


Бывалый
***

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

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


Как понять работаешь как с процедурой?
1)Дальше-то что, делать остальные процедуры?
Вот описание команды:

 TTeam=object
namet:string[15];
moneys:word;
squadG:array[1..5] of TFootballer;
squadD:array[1..5] of TFootballer;
squadM:array[1..5} of TFootballer;
squadF:array[1..5] of TFootballer;
procedure Koef;
end;

Здесь тоже процедура или функция?
2) Как массивы игроков вводить?

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


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

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

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


Цитата
Как понять работаешь как с процедурой?

ну грубо говоря:
procedure kvadr(const a: integer; var res: integer);
begin
res:=a*a;
end;
--------
function kvadr (const a: integer): integer;
begin
kvadr:=a*a;
end;

видишь - разные механизмы возвращения результата?

Цитата
Как массивы игроков вводить?

может быть, написать конструктор?


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


Бывалый
***

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

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


Так что переменную price убрать и поставить название функции вместо неё
Или потом присвоить функции значение price?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #26


Бывалый
***

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

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


Всё-таки с конструкторами никак не пойму.

Как я понял,
Конструкторы предназначены для создания конкретного экземпляра объекта.
При этом создается ТВМ , если в объекте присутствуют виртуальные методы.

type     TTeam=object
namet:string[15];
moneys:word;
squadG:array[1..5] of TFootballer;
squadD:array[1..5] of TFootballer;
squadM:array[1..5} of TFootballer;
squadF:array[1..5] of TFootballer;
constructor TO;
destructor Done:virtual;
procedure Koef;virtual;
end;

А какой метод должен быть заменен на constructor? Или просто сделать пустой ?
У нас же нет наследования между командой и игроком.
Что дальше?

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


Гость






Цитата
У нас же нет наследования между командой и игроком.
Зато у тебя в объекте TTeam есть поля, в свою очередь являющиеся объектами... И для того чтобы корректно создать экземпляр типа TType тебе надо написать конструктор, который мало того, что заполняет поля nameT и moneys, так еще и инициализирует содержимое всех массивов (ты же должен их, игроков в смысле, инициализировать при создании экземпляра TTeam? Или ты будешь делать это позже?)...

Понимаешь, тот путь, который ты избрал - не приведет тебя к успеху. Прежде чем начать реализовывать подобную программу, ты должен для себя решить, на каком этапе что делается, как именно инициализируются игроки (или ты вводишь все данные вручную, или поля заполняются рандомно), когда это происходит (до создания экземпляра Команда, во время создания или после, по запросу пользователя; от ответа на этот вопрос зависит, правильно ли ты вообще хранишь игроков, ведь если есть уже массив доступных футболистов, и тебе на этапе создания команды надо просто выбрать из него 11 человек, то не надо хранить массив из TFootballer-ов, достаточно хранить указатели на тех футболистов, которые формируют команду...)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #28


Бывалый
***

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

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


Игроки должны инициализироваться при создании экземпляра Tteam.
Вот какая вещь: когда пользователь входит, ему предлагаются на выбор уже сформированные
команды, из которых он выбирает одну и играет ей.

Получается, что я (а не пользователь) ввожу все данные игроков вручную и когда
создается экземпляр Команда набираютя игроки в эту команду.
Например команда Челси, из тех игроков которые уже есть, при создании экземляра Команды,
выбираются не случайно, а только те игроки, которые должны быть в Челси.

Значит в TFootballer нужно добавить поле "команда"?
И получается, что массивы игроков не надо, а достаточно хранить указатели?
И constructor - процедура, которая и будет набирать игроков? Как её написать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #29


Гость






Вот набросок того, как я себе это представляю:

Прикрепленный файл  __football.pas ( 3.36 килобайт ) Кол-во скачиваний: 291

Прикрепленный файл  football.txt ( 661 байт ) Кол-во скачиваний: 260

 К началу страницы 
+ Ответить 
сообщение
Сообщение #30


Бывалый
***

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

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


Volvo, спасибо конечно за помощь.
Как снег на голову, сразу столько всего..
Сам понимаешь как чужой код разбирать, но тут не сложно, разберусь.
Вопросы будут (а я думаю они будут), напишу.
А пока по первому взгляду могу одно сказать: Pahtakor рулит. good.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #31


Бывалый
***

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

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


Да, вот ещё что. Полиморфизм всё-таки придется делать.
Не подскажете идейку. Была идея с графической визуализацией матча, но я думаю это бессысленно будет

В Graph' е можно как-нибудь на экран вывести значение переменной?
Как, например, writeln'ом? Или только текст?

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


Гость






Цитата
можно как-нибудь на экран вывести значение переменной?
Легко... Только переменная должна быть строкой...

Str используется для преобразования чисел в строку, OutTextXY или просто OutText - для вывода ...

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #33


Бывалый
***

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

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


Вот обещанные вопросы: (я конечно понимаю что вам надоело разжевывать мне всё,но всё же)
1)
 for p := low(Tposition) to high(TPosition) do
if s_position[p] = position then begin
code_position := p;
end;


Как я понимаю, low и high здесь от самого маленького к самому большому.
2) Практически полностью непонятна процедура
из-за функций _toint и _copy (НЕ Понятно что делают)
Как я понял эта процедура считывает игроков из файла

procedure init_footballers(const filename: string);

function _toint(s: string): integer;
var _result, _error: integer;
begin
val(s, _result, _error);
_toint := _result;
end;

function _copy(var s: string; count: integer): string;
begin
_copy := copy(s, 1, pred(count));
delete(s, 1, count);
end;

var
f: text;
s: string;
f_n, f_t, f_p: string; f_a, f_c: integer;
begin
assign(f, filename); reset(f);

count_footballers := 0;
while not seekeof(f) do begin
inc(count_footballers);
readln(f, s);

f_n := _copy(s, pos(' ', s));
f_a := _toint(_copy(s, pos(' ', s)));
f_t := _copy(s, pos(' ', s));
f_p := _copy(s, pos(' ', s));
f_c := _toint(s);

new(
footb_array[count_footballers],
init(f_n, f_a, f_t, f_p, f_c)
);
end;
close(f);
end;


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #34


Гость






Цитата
Как я понимаю, low и high здесь от самого маленького к самому большому.
Именно так... Кстати, я всегда рекомендую пользоваться именно Low/High (особенно при работе с пользовательскими типами): допустим, ты написал
for p := _goalkeeper to _forward do ...

, а потом тебе понадобилось поменять содержимое TPosition, например, ты добавил после _forward еще один тип игрока (это я для примера)... Тебе придется искать по всей программе слово _forward и заменять его на новое значение. А если использовать Low/High - то ничего делать не надо, оно как считало от первого до последнего , так и будет считать...


Цитата
Как я понял эта процедура считывает игроков из файла
Угу... Только кроме того, что строку с данными об игроках надо прочесть, ее еще надо разбить на составляющие: до первого пробела - имя, потом до следующего пробела - возраст (число), потом... Ну, и так далее. Этим и занимаются функции _toint и _copy. Первая - преобразует переданную ей строку в число (такой примитивный аналог дельфийской StrToInt), а вторая - возвращает содержимое переданной строки до определенной позиции, при этом удаляя эту же самую часть из исходной строки, т.е., при исходной строке
s = 'ivanov1 23 spartak goalkeeper 50';

первый вызов _copy(s, pos(' ', s)) вернет 'ivanov', при этом s станет равна '23 spartak goalkeeper 50'... Второй вызов вычленяет строку '50', передаем ее в _toint - получаем, собственно, число 50...

Идея ясна? wink.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #35


Бывалый
***

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

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


Так точно.
Начал по-тихонечку в графику реализовывать.
Как в графе переходить на другую строку?
Пробовал outtextxy , потом y в цикле увеличиваю а на след. строку не переходит! mad.gif
Это я вывожу команду на экран.

Вот ещё что у нас агрегирование между Командой и игроком.
Там надо owner ' ом помечать или что-то описывать или необязательно?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #36


Гость






Цитата
Пробовал outtextxy , потом y в цикле увеличиваю а на след. строку не переходит!
Код в студию...

Цитата
агрегирование между Командой и игроком. Там надо owner ' ом помечать или что-то описывать или необязательно?
code_team в моем коде - это что по-твоему? Не Owner?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #37


Бывалый
***

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

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


1)Ой-ойоой...
Не аккуратненько как-то. (sorry за спешку)


2)Я понял, сейчас бессмысленно выводить на экран состав команды.
Там потом будет перемещение игроков из основного состава в резерв и наоборот, так что сразу надо
делать это.
Я пока не представляю как это реализовать, примерно как меню: выбираешь игрока, нажимаешь Enter,
нажимаешь на другого и они меняются. Там скорее всего массивчиком...
Но как ?

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


Бывалый
***

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

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


1) Когда пытаюсь запустить из модуля процедуру в основной программе, пишет
--==Field identifier expected==--, хотя процедура объявлена в описании объекта
Что такое?

2)Можно ли на экран 2 отдельными процедурами выводить какой-либо текст(рисунок) и
меню одновременно?

3)Как реализовать процедуру изменений в составе?
Я так думаю из файла данные об игроках считать в массив строк,из этого массива перемещать
игроков в другой массив(основной) Но всё равно до конца не понимаю.


И САМОЕ ГЛАВНОЕ, помогите пожалуйста с полиморфизмом и виртуальными методами.
Остальное как нибудь разрулю сам, а это - сомневаюсь.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #39


Гость






cooler, сегодня в Гугле совершенно случайно (искал кое-что другое) набрел на статью, которая в принципе может тебе помочь в написании твоего проекта: Design Your Soccer Engine, and Learn How To Apply Design Patterns
 К началу страницы 
+ Ответить 
сообщение
Сообщение #40


Бывалый
***

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

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


Идея заманчивая, но на каком языке это написано?
Я конечно понимаю, что главное-модель,
но пока главная моя проблема - реализация. Идеи так и прут из головы.
Если бы я хотя бы в Delphi писал, а о надо сначала на pascal и получается я больше мучаюсь с
визуализацией, чем со схемой игры.

Только я так и не понял, что там у них за наблюдатели?
Owen говорит мяч там то, Ronaldo - там то.
Ладно ещё поразбираюсь. Пока подкиньте идейку с простеньким полиморфизмом.
И ответьте пожалуйста на мои вопросы

----------------------

P.S. Да, как я понял игра происходит по их схеме без вмешательства пользователя.
И проект не совсем доработан. Все красиво, еще бы пользователь вмешивался, да счет выводился - цены бы не было.
Реализовать то......
Объекты там описаны.
Но та идея и то что мы пока тут пытались, никак не сходятся у меня в голове в одну.

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

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

 





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