| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > запускаем.. и смотрим.. |
| Автор: polosatij 19.7.2005, 17:33 |
| есть такая задача: представьте себе, мы запускаем нашу програму. программа в свою очередь пишет цифры. при запуске програмы ПЕРВЫЙ РАЗ первая цифра будет "1".. второй раз, она просто продолжает писать дальше, например первое число уже может быть не "1", а "6".. никогда не известно какая будет последняя цифра (при окончании програмы). вопрос: как узнать откуда стартовала програма во второй раз? в каком числе можно предлогать любые решения, однако решения "поставить variable в конец программы, допустим на true (чтоб показать её окончание), считаются недействительными. у меня нет конца программы надеюсь понятно обьяснил |
| Автор: Earnest 19.7.2005, 19:04 |
| Не очень понятно... В смысле, функцию "писать цифры" изменить нельзя? Тогда обернуть ее вызов, запоминая в какой-нибудь переменной последнюю цифру... или сразу писать в постоянную память, если почему-то нельзя сделать обработку в конце программы... Да и вообще, что значит - нет конца программы - конец программы есть всегда, разве что ее terminate'ом убивают. В общем, чем больше думаю, тем больше мне непонятно, в чем проблема. |
| Автор: Петрович 19.7.2005, 19:29 | ||||
Я бы даже сказал "Совсем не понятно".
И еще по поводу отсутствия конца программы. Ты что, изобрел вечный двигатель? |
| Автор: III.nfo 19.7.2005, 19:40 |
| Петрович Судя по всему, имеется в виду бесконечный цикл, однако смысл подлинно бесконечного цикла не совсем понятен (разве что машину грузить, чтобы не расслаблялась). polosatij 1. Поясните пожалуйста вашу программу (желательно исходник). 2. Можно делать запоминание следующими методами (на конце должен быть файл, или значение не сохранится) а) перехват вывода программы (что не очень умно). б) из функции писать сразу в файл. в) писать в некий integer последнее значение. г) при выходе из функции печатания цифр считывать последнее выведенное. д) скриншот (это в крайнем случае). Лично я рекомендую б или в. |
| Автор: ~FoX~ 20.7.2005, 08:59 | ||||
А откуда тогда берется последнее число? polosatij Уважаемый поясните задачу, а то совсем не понятно.
Не понятно - дальше - это по порядку или рандомом? И вообще к чему такое условие если надо узнать последнюю цифру? Каково количество цифр? По какому алгоритму выбираются цифры? И самый главный вопрос:............зачем |
| Автор: Alex101 20.7.2005, 10:42 | ||
Совсем непонятно. Пожалуйста, напишите вопрос еще раз и четко объясните: По какому закону изменяются числа? (если это random, то тут и думать нечего) Кто должен определить цифру и как? Модуль этой же программы? (тогда это все бред) Сторонняя программа? (Но это помимо определения числа, еще и программная реализация) |
| Автор: polosatij 20.7.2005, 17:30 | ||||||||||||||||||||||
| фуууууууууф.. отвечаю по порядку но задачку решил сам... (немного по другому, пришлось декомпилироватъ и врезать..).. но задачка остаётся в силе...
да.. она неизменима.. предоставляется системой (про цифры я взял ради упрощения..)
програма заканчивая работу стоит, например, на 5.. ты знаешь, что закончилась програма.. но запуская програму заного, как ты скажешь ей, что последнее число у тебя именно "5" ? у меня один и тот же метод вызывается несколько раз.. он же скажет, что у тебя число "3" было последнее, когда програма зайдет в него (а програма еще не закончиться).. тоже произойдет с числом "4".. и "5".. представь себе бег по кругу.. и на одном участке програма просто плюсует еще один круг.. но как ей узнать, что ето последний?
взято это из за того => никогда не известно, сколько раз програма будет вызвана юзером.. поетому считаем что програма будет выполнена бесконечное число раз..
см. чуть выше
не могу.. так как 1. это не моё 2. декомпилировать придётся многие участки.. какие именно, мне лень разбираться, т.к. очень много работы там..
на каком конце? представь себе ты бежишь по кругу.. см. чуть выше
а что мне это даст? в следуюший раз, когда ты запустишь программу.. она зайдет в тот же самый круг.. а как ты узнаешь, что она перестала работать, и начала работать во второй раз?
а дальше? запустишь програму.. как она поймёт, что это именно последнее значение, а не предпоследнее, например?
по логике вешей оно существует.. т.к. програма рано или поздно заканчивается.. его можно узнать.. но вызывая програму во второй раз, как мне сказать, что оно именно последнее? у меня "круг".. если я ему скажу: count > 0 => то это обозначает ещё, что програма один раз заходила в методу..
нет.. это не рандом.. это +1
нужно узнать, запущема ли програма во второй раз, или всё еще работает в первый.. Добавлено @ 17:40 итак.. обьясняю еще раз: имеется круг. представляем, мы забегаем в этот круг. если оббегаем его - прибавляем единицу.. при пробеге в 5 кругов получаем 5 единиц. при забеге первый раз (мы можем забежать туда первый раз, включаем комп) наш отчёт начинается с чифры "1".. итак.. на этом кругу наша метода.. она говорит: "пробежал круг => +1". теперь представим, что програма зашла в круг и прошла 5 раз.. наше число становится равным "5".. мы знаем, что проргамма закончена.. но мы знаем об этом, не компьютер (т.к. нельзя в плаг-ин врезать, где же у неё конец). мы можем поставить что угодно НО ТОЛЬКО НА КРУГУ.. но вот только, если мы поставим число "5".. как мы узнаем, что это был наш последний круг в предыдущем забеге, а не в этом же? н-да.. пока объяснял.. вижу, что для этой задачи мало данных.. с такими данными она никак не решается.. ладно.. забудем бредни полосатого... |
| Автор: Akina 20.7.2005, 17:49 |
| Проблема - сохранение истории работы программы, как я понимаю... при том что сама программа этого не умеет... Насколь я понял, существует способ сообщить программе, с какого места она должна стартовать - так? тогда обернуть ее неким запускателем-детектором, который будет регистрировать "проходы" и сохранять... в реестре, в файле, да пофиг где... или сохранять контекст программы и вместо запуска восстанавливать ее предыдущее состояние - как это делают, скажем, дебаггеры, или как ОС себя сохраняет при гибернации (как вариант запускать в виртуальной машине - там тоже есть режим сохранения контекста, правда всей ОС, да и с сетевыми коннектами проблемы)... Для более осмысленных ответов пора бы перестать играть в тайны Мадридского двора и вместо каких-то там абстрактных цифирей рассказать, что таки происходит на самом деле. Не боись - авось не перегреемся... |
| Автор: Петрович 20.7.2005, 19:18 |
| Уфф. Однако замысловато вы излагаете. Но, всетаки попробую сформулировать Вашу мысль Насколько я понял, есть программа без исходников. И есть плагин к ней, написанный Вами. Их взаимодействие таково: программа, после запуска может N-е число раз вызвать функцию из плагина. При этом, она будет передавать туда некоторое, монотонно возрастающее значение. Плагин должен сохранить значение, которое было передано в него последним, перед завершением основной программы. Соответственно, при первом после запуска программы вызове плагина, он должен как то использовать именно сохраненное число. Сложность задачи в том, что плагину не сообщают о старте/завершении программы. Вот как Ваш бред, простите откровенность, понял я. Если это близко к истине, то сначала задам вопрос о том как реализуется Ваш плагин. Это Dll, или что-то другое? От ответа на этот вопрос зависит и способ решения задачи. |
| Автор: polosatij 21.7.2005, 13:58 | ||||||
думаете?
правильно поняли
это .java, декомпилировать не позволяют условия.. |
| Автор: Петрович 21.7.2005, 14:32 | ||
Жаль Тогда, народ правильно предлагал. Можно сделать некий "пускач" который будет запускаться вместо основной прогрнаммы. Он, в свою очередь, будет фиксировать запуск (в простейшем случае например создавать файл) и запускать само приложение и дожидаться его завершения. После завершения приложения он может фиксировать и факт завершения приложения (если надо). Плагин же может использовать информацию оставленную "пускачем" для определения первого вызова после запуска приложения. В общем что-то в этом роде. А можно и по другому. Если плагин работает в контексте процесса основной программы, то он может просто загрузить в память Dll-ку (подключить к процессу) а та в свою очередь получит управления в момент выгрузки. Возможно в .java есть и другие механизмы. Например вполть до навешивания хука на завершение процесса. |
| Автор: Дрон 29.7.2005, 17:14 | ||
То, что писал polosatij я вообще не понял, поэтому ориентируюсь на Петровича.
Э... Ну так и сохраняем каждое поступившее значение Зачем нам вообще знать о завершении программы? |