Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > запускаем.. и смотрим..


Автор: polosatij 19.7.2005, 17:33


есть такая задача:

представьте себе, мы запускаем нашу програму. программа в свою очередь пишет цифры.
при запуске програмы ПЕРВЫЙ РАЗ первая цифра будет "1".. второй раз, она просто продолжает писать дальше, например первое число уже может быть не "1", а "6".. никогда не известно какая будет последняя цифра (при окончании програмы).

вопрос: как узнать откуда стартовала програма во второй раз? в каком числе smile

можно предлогать любые решения, однако решения "поставить variable в конец программы, допустим на true (чтоб показать её окончание), считаются недействительными. у меня нет конца программы smile есть только вызов "писать цифры"..

надеюсь понятно обьяснил smile

Автор: Earnest 19.7.2005, 19:04
Не очень понятно...
В смысле, функцию "писать цифры" изменить нельзя?

Тогда обернуть ее вызов, запоминая в какой-нибудь переменной последнюю цифру... или сразу писать в постоянную память, если почему-то нельзя сделать обработку в конце программы...

Да и вообще, что значит - нет конца программы - конец программы есть всегда, разве что ее terminate'ом убивают.

В общем, чем больше думаю, тем больше мне непонятно, в чем проблема.

Автор: Петрович 19.7.2005, 19:29
Я бы даже сказал "Совсем не понятно".

Цитата(polosatij @ 19.7.2005, 18:33)
никогда не известно какая будет последняя цифра (при окончании програмы).

Цитата(polosatij @ 19.7.2005, 18:33)
у меня нет конца программы


И еще по поводу отсутствия конца программы. Ты что, изобрел вечный двигатель? smile

Автор: III.nfo 19.7.2005, 19:40
Петрович
Судя по всему, имеется в виду бесконечный цикл, однако смысл подлинно бесконечного цикла не совсем понятен (разве что машину грузить, чтобы не расслаблялась).

polosatij
1. Поясните пожалуйста вашу программу (желательно исходник).
2. Можно делать запоминание следующими методами (на конце должен быть файл, или значение не сохранится)
а) перехват вывода программы (что не очень умно).
б) из функции писать сразу в файл.
в) писать в некий integer последнее значение.
г) при выходе из функции печатания цифр считывать последнее выведенное.
д) скриншот (это в крайнем случае).
Лично я рекомендую б или в.

Автор: ~FoX~ 20.7.2005, 08:59
Цитата(III @ 19.7.2005, 20:40)
Судя по всему, имеется в виду бесконечный цикл

А откуда тогда берется последнее число?

polosatij
Уважаемый поясните задачу, а то совсем не понятно.

Цитата(polosatij @ 19.7.2005, 18:33)
при запуске програмы ПЕРВЫЙ РАЗ первая цифра будет "1".. второй раз, она просто продолжает писать дальше,

Не понятно - дальше - это по порядку или рандомом? И вообще к чему такое условие если надо узнать последнюю цифру?
Каково количество цифр?
По какому алгоритму выбираются цифры?
И самый главный вопрос:............зачем

Автор: Alex101 20.7.2005, 10:42
Цитата(polosatij @ 19.7.2005, 17:33)
надеюсь понятно обьяснил

Совсем непонятно. Пожалуйста, напишите вопрос еще раз и четко объясните:
По какому закону изменяются числа? (если это random, то тут и думать нечего)
Кто должен определить цифру и как?
Модуль этой же программы? (тогда это все бред)
Сторонняя программа? (Но это помимо определения числа, еще и программная реализация)

Автор: polosatij 20.7.2005, 17:30
фуууууууууф.. отвечаю по порядку smile

но задачку решил сам... (немного по другому, пришлось декомпилироватъ и врезать..).. но задачка остаётся в силе...


Цитата(Earnest @ 19.7.2005, 19:04)
В смысле, функцию "писать цифры" изменить нельзя?


да.. она неизменима.. предоставляется системой (про цифры я взял ради упрощения..)


Цитата(Earnest @ 19.7.2005, 19:04)
Тогда обернуть ее вызов, запоминая в какой-нибудь переменной последнюю цифру...


програма заканчивая работу стоит, например, на 5.. ты знаешь, что закончилась програма.. но запуская програму заного, как ты скажешь ей, что последнее число у тебя именно "5" ?

у меня один и тот же метод вызывается несколько раз.. он же скажет, что у тебя число "3" было последнее, когда програма зайдет в него (а програма еще не закончиться).. тоже произойдет с числом "4".. и "5".. представь себе бег по кругу.. и на одном участке програма просто плюсует еще один круг.. но как ей узнать, что ето последний?


Цитата(Earnest @ 19.7.2005, 19:04)
Да и вообще, что значит - нет конца программы - конец программы есть всегда, разве что ее terminate'ом убивают.


взято это из за того => никогда не известно, сколько раз програма будет вызвана юзером.. поетому считаем что програма будет выполнена бесконечное число раз..



Цитата
И еще по поводу отсутствия конца программы. Ты что, изобрел вечный двигатель? 



см. чуть выше smile


Цитата(III @ 19.7.2005, 19:40)
1. Поясните пожалуйста вашу программу (желательно исходник).



не могу.. так как
1. это не моё
2. декомпилировать придётся многие участки.. какие именно, мне лень разбираться, т.к. очень много работы там..


Цитата(III @ 19.7.2005, 19:40)
2. Можно делать запоминание следующими методами (на конце должен быть файл, или значение не сохранится)


на каком конце?
представь себе ты бежишь по кругу.. см. чуть выше smile


Цитата(III @ 19.7.2005, 19:40)
б) из функции писать сразу в файл.


а что мне это даст?

в следуюший раз, когда ты запустишь программу.. она зайдет в тот же самый круг.. а как ты узнаешь, что она перестала работать, и начала работать во второй раз?


Цитата(III @ 19.7.2005, 19:40)
в) писать в некий integer последнее значение.


а дальше?

запустишь програму.. как она поймёт, что это именно последнее значение, а не предпоследнее, например?

Цитата
А откуда тогда берется последнее число?


по логике вешей оно существует.. т.к. програма рано или поздно заканчивается.. его можно узнать..
но вызывая програму во второй раз, как мне сказать, что оно именно последнее? у меня "круг".. если я ему скажу:

count > 0 => то это обозначает ещё, что програма один раз заходила в методу..


Цитата
Не понятно - дальше - это по порядку или рандомом? И вообще к чему такое условие если надо узнать последнюю цифру?


нет.. это не рандом.. это +1

Цитата
И самый главный вопрос:............зачем


нужно узнать, запущема ли програма во второй раз, или всё еще работает в первый..

Добавлено @ 17:40
итак.. обьясняю еще раз:

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

итак.. на этом кругу наша метода.. она говорит: "пробежал круг => +1".

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

мы можем поставить что угодно НО ТОЛЬКО НА КРУГУ.. но вот только, если мы поставим число "5".. как мы узнаем, что это был наш последний круг в предыдущем забеге, а не в этом же?


н-да.. пока объяснял.. вижу, что для этой задачи мало данных.. с такими данными она никак не решается.. smile

ладно.. забудем бредни полосатого... smile

Автор: Akina 20.7.2005, 17:49
Проблема - сохранение истории работы программы, как я понимаю... при том что сама программа этого не умеет...

Насколь я понял, существует способ сообщить программе, с какого места она должна стартовать - так? тогда обернуть ее неким запускателем-детектором, который будет регистрировать "проходы" и сохранять... в реестре, в файле, да пофиг где... или сохранять контекст программы и вместо запуска восстанавливать ее предыдущее состояние - как это делают, скажем, дебаггеры, или как ОС себя сохраняет при гибернации (как вариант запускать в виртуальной машине - там тоже есть режим сохранения контекста, правда всей ОС, да и с сетевыми коннектами проблемы)...

Для более осмысленных ответов пора бы перестать играть в тайны Мадридского двора и вместо каких-то там абстрактных цифирей рассказать, что таки происходит на самом деле. Не боись - авось не перегреемся...

Автор: Петрович 20.7.2005, 19:18
Уфф. Однако замысловато вы излагаете.
Но, всетаки попробую сформулировать Вашу мысль smile.
Насколько я понял, есть программа без исходников. И есть плагин к ней, написанный Вами.
Их взаимодействие таково: программа, после запуска может N-е число раз вызвать функцию из плагина.
При этом, она будет передавать туда некоторое, монотонно возрастающее значение. Плагин должен сохранить значение, которое было передано в него последним, перед завершением основной программы. Соответственно, при первом после запуска программы вызове плагина, он должен как то использовать именно сохраненное число. Сложность задачи в том, что плагину не сообщают о старте/завершении программы.
Вот как Ваш бред, простите откровенность, понял я.
Если это близко к истине, то сначала задам вопрос о том как реализуется Ваш плагин. Это Dll, или что-то другое? От ответа на этот вопрос зависит и способ решения задачи.

Автор: polosatij 21.7.2005, 13:58
Цитата
Уфф. Однако замысловато вы излагаете.


думаете? smile



Цитата
Насколько я понял, есть программа без исходников. И есть плагин к ней, написанный Вами.
Их взаимодействие таково: программа, после запуска может N-е число раз вызвать функцию из плагина.
При этом, она будет передавать туда некоторое, монотонно возрастающее значение. Плагин должен сохранить значение, которое было передано в него последним, перед завершением основной программы. Соответственно, при первом после запуска программы вызове плагина, он должен как то использовать именно сохраненное число. Сложность задачи в том, что плагину не сообщают о старте/завершении программы.
Вот как Ваш бред, простите откровенность, понял я.



правильно поняли smile


Цитата
Если это близко к истине, то сначала задам вопрос о том как реализуется Ваш плагин. Это Dll, или что-то другое? От ответа на этот вопрос зависит и способ решения задачи.



это .java, декомпилировать не позволяют условия..

Автор: Петрович 21.7.2005, 14:32
Цитата(polosatij @ 21.7.2005, 14:58)
это .java

Жаль smile. В .java я не силен, точнее полный профан. Я даже не знаю как там стыкуются с плгинами. smile
Тогда, народ правильно предлагал. Можно сделать некий "пускач" который будет запускаться вместо основной прогрнаммы. Он, в свою очередь, будет фиксировать запуск (в простейшем случае например создавать файл) и запускать само приложение и дожидаться его завершения. После завершения приложения он может фиксировать и факт завершения приложения (если надо). Плагин же может использовать информацию оставленную "пускачем" для определения первого вызова после запуска приложения.
В общем что-то в этом роде.
А можно и по другому. Если плагин работает в контексте процесса основной программы, то он может просто загрузить в память Dll-ку (подключить к процессу) а та в свою очередь получит управления в момент выгрузки.
Возможно в .java есть и другие механизмы.
Например вполть до навешивания хука на завершение процесса.

Автор: Дрон 29.7.2005, 17:14
То, что писал polosatij я вообще не понял, поэтому ориентируюсь на Петровича.

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

Э... Ну так и сохраняем каждое поступившее значение smile
Зачем нам вообще знать о завершении программы?



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)