???
Математика на уровне МГУ

Показано с 1 по 18 из 18

Тема: Просьба к программистам

  1. #1
    Добрый хозяин Аватар для CoValent
    Регистрация
    01.11.1997
    Адрес
    Москва, Россия
    Возраст
    57
    Сообщений
    19,336
    Images
    34

    Просьба к программистам

    Есть такой симулятор боевых действий - Armed Assualt (ныне уже II часть). Поскольку его разработчики-чехи постоянно создают карты то тропической Европы, то Чернаруси с Такистаном (то есть создают любые карты вне территории США) - я пробую делать копию острова Оаху, штат Гавайи (да-да, Перл-Харбор и т.п.)

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

    Подробно: есть два текстовых файла, с равным количеством строк (16.777.216 в каждом). Каждая строка состоит из 3-х положительных или отрицательных чисел - X Y Z - с пробелом между ними. Программа должна взять первую строку файла A, взять такую же порядковую строку файла B, сверить число Z в обеих строках и записать такую же порядковую строку в файл C по алгоритму

    записать числовые значения X Y из файла A;
    если в файле A числовое значение Z<0 и в файле B числовое значение Z=0, то записать числовое значение Z из файла A;
    если в файле A числовое значение Z=0 и в файле B числовое значение Z=0, то записать числовое значение Z=0;
    если в файле A числовое значение Z=0 и в файле B числовое значение Z>0, то записать числовое значение Z из файла B.


    после чего перейти к сверке и записи следующей строки, и так до самого окончания файла.

    Графический режим: не требуется.
    Агрументы запуска: могут быть использованы строчные из BAT-файла или любым другим удобным для программиста способом, хоть намертво заданными именами.
    Желательно: индикатор текущего выполнения, любым способом, начиная с номера строки и заканчивая %%.
    Сроки создания: мне кажется, что любой программист способен создать подобное за 5 минут (мне точно не требовалось бОльшего лет 18 назад) - но я могу и потерпеть несколько дней.
    Среда исполнения: законченный исполняемый файл, работающий в любой голой операционной системе Windows или подробные объяснения, как запустить готовый продукт в средах Microsoft Visual C++ / Microsoft .NET Framework 4.
    Что могу за это: легко пожертвую одной из строчек "Credits" и "Special Thanks" у готовой карты.
    Спасибо всем, кто поможет!
    Валентин "CoValent" Логинов

    Errare humanum est, ignoscere divinum (с) Marcus Tullius Cicero



    Правила тут, термины тут, модераторы тут.

  2. #2
    Мастер Аватар для DogEater
    Регистрация
    03.11.2001
    Адрес
    Подмосковье
    Возраст
    52
    Сообщений
    4,442

    Ответ: Просьба к программистам

    А если в файле А Z>0, что писать в C?
    "Прежде чем открыть огонь - оглянись!"
    А.В. Ворожейкин "Сильнее смерти", стр 9.
    "<...>не нужны маркеры противника парням в военном небе Великой Отечественной.
    Послюнявили химический карандаш. Пунктиром отметили маршрут на карте. И вперёд!"
    © DEDA
    1680 x 1050 && i7 2600 (3.4Ghz) && 8 gb DDR3 (1600 Mhz) && gtx 580 && win 7 x64

  3. #3
    Добрый хозяин Аватар для CoValent
    Регистрация
    01.11.1997
    Адрес
    Москва, Россия
    Возраст
    57
    Сообщений
    19,336
    Images
    34

    Ответ: Просьба к программистам

    Цитата Сообщение от DogEater Посмотреть сообщение
    А если в файле А Z>0, что писать в C?
    В файле A не может быть Z>0, так как это файл глубин (в том числе рек и ручьёв), и все значения Z там меняются от отрицательных до 0. Так же, как в файле B не может быть отрицательных значений (это файл высот и там значение Z колеблется от 0 до положительных значений).

    Но если я и там налажаю - а я могу! - то было бы неплохо, чтобы программа об этом оповещала, записывала в файл C Z=0, и отдельным файлом записывала номер строки и саму строку.

    Буду тогда смотреть, где же я в ландшафтере налажал...
    Валентин "CoValent" Логинов

    Errare humanum est, ignoscere divinum (с) Marcus Tullius Cicero



    Правила тут, термины тут, модераторы тут.

  4. #4
    Пилот Аватар для Gelo
    Регистрация
    13.03.2006
    Адрес
    Вятка
    Возраст
    51
    Сообщений
    818

    Ответ: Просьба к программистам

    Проще было бы выложить примеры файлов.
    Чем дольше общаюсь с людьми, тем больше люблю кошек...

  5. #5
    Мастер Аватар для DogEater
    Регистрация
    03.11.2001
    Адрес
    Подмосковье
    Возраст
    52
    Сообщений
    4,442

    Ответ: Просьба к программистам

    Скриптик в целом готов, часов в 19 я его откомпилирую его в ActivePerl и выложу сюда.
    А можно пример данных для тестового прогона?
    "Прежде чем открыть огонь - оглянись!"
    А.В. Ворожейкин "Сильнее смерти", стр 9.
    "<...>не нужны маркеры противника парням в военном небе Великой Отечественной.
    Послюнявили химический карандаш. Пунктиром отметили маршрут на карте. И вперёд!"
    © DEDA
    1680 x 1050 && i7 2600 (3.4Ghz) && 8 gb DDR3 (1600 Mhz) && gtx 580 && win 7 x64

  6. #6
    Добрый хозяин Аватар для CoValent
    Регистрация
    01.11.1997
    Адрес
    Москва, Россия
    Возраст
    57
    Сообщений
    19,336
    Images
    34

    Ответ: Просьба к программистам

    Вот простенький файл у острова 256*256. Нужна ли пара с файлами высот и глубин?
    Вложения Вложения
    Валентин "CoValent" Логинов

    Errare humanum est, ignoscere divinum (с) Marcus Tullius Cicero



    Правила тут, термины тут, модераторы тут.

  7. #7
    Добрый хозяин Аватар для CoValent
    Регистрация
    01.11.1997
    Адрес
    Москва, Россия
    Возраст
    57
    Сообщений
    19,336
    Images
    34

    Ответ: Просьба к программистам

    Понял, нужна... сейчас сделаю.
    Валентин "CoValent" Логинов

    Errare humanum est, ignoscere divinum (с) Marcus Tullius Cicero



    Правила тут, термины тут, модераторы тут.

  8. #8
    Добрый хозяин Аватар для CoValent
    Регистрация
    01.11.1997
    Адрес
    Москва, Россия
    Возраст
    57
    Сообщений
    19,336
    Images
    34

    Ответ: Просьба к программистам

    Вот два файла.
    Вложения Вложения
    • Тип файла: zip test.zip (425.2 Кб, Просмотров: 57)
    Валентин "CoValent" Логинов

    Errare humanum est, ignoscere divinum (с) Marcus Tullius Cicero



    Правила тут, термины тут, модераторы тут.

  9. #9
    Мастер Аватар для DogEater
    Регистрация
    03.11.2001
    Адрес
    Подмосковье
    Возраст
    52
    Сообщений
    4,442

    Ответ: Просьба к программистам

    использование: diffalt.exe <fileA> <fileB>
    в том же каталоге пишется файл результатов result.XXX.txt где XXX - номер процесса, сделано для того что бы избежать перезаписывания.
    в случае возникновения ошибок они записываются в файл error.XXX.txt, ult где XXX - номер процесса.
    формат файла ошибок: номер строки с ошибкой:имя файла:строка содержавшая ошибку целиком
    Если размер файла ошибок равен нулю - значит ошибок не было.
    При работе утилита выдаёт номер обработанной строки в стандартный вывод для контроля исполнения.
    Вложения Вложения
    "Прежде чем открыть огонь - оглянись!"
    А.В. Ворожейкин "Сильнее смерти", стр 9.
    "<...>не нужны маркеры противника парням в военном небе Великой Отечественной.
    Послюнявили химический карандаш. Пунктиром отметили маршрут на карте. И вперёд!"
    © DEDA
    1680 x 1050 && i7 2600 (3.4Ghz) && 8 gb DDR3 (1600 Mhz) && gtx 580 && win 7 x64

  10. #10
    Курсант Аватар для RR_Rumata
    Регистрация
    06.03.2007
    Адрес
    www.redrodgers.com
    Возраст
    45
    Сообщений
    114
    Записей в дневнике
    4

    Ответ: Просьба к программистам

    Кстати не описано что делать, если (A)Z<0 и B(Z)>0.
    Смотрим на Line # 23762.

    2DogEater. В этом случае ты записал 0, хотя (A)Z = -0.0001 (т.е. больше похоже на 0), и в этом случае нужно писать 1 из B.

  11. #11
    Мастер Аватар для DogEater
    Регистрация
    03.11.2001
    Адрес
    Подмосковье
    Возраст
    52
    Сообщений
    4,442

    Ответ: Просьба к программистам

    Цитата Сообщение от f45f Посмотреть сообщение
    Кстати не описано что делать, если (A)Z<0 и B(Z)>0.
    Смотрим на Line # 23762.
    Это в каком файле? А или B? У меня
    Раз не описано, то обрабатываем по умолчанию как ошибку и пишем 0 в файл С.
    Если заказчик опишет что делать в таком случае - сделаем.
    Цитата Сообщение от f45f Посмотреть сообщение
    2DogEater. В этом случае ты записал 0, хотя (A)Z = -0.0001 (т.е. больше похоже на 0), и в этом случае нужно писать 1 из B.
    Если заказчик укажет необходимость такого сравнения(и точность округления) - сделаем.
    "Прежде чем открыть огонь - оглянись!"
    А.В. Ворожейкин "Сильнее смерти", стр 9.
    "<...>не нужны маркеры противника парням в военном небе Великой Отечественной.
    Послюнявили химический карандаш. Пунктиром отметили маршрут на карте. И вперёд!"
    © DEDA
    1680 x 1050 && i7 2600 (3.4Ghz) && 8 gb DDR3 (1600 Mhz) && gtx 580 && win 7 x64

  12. #12
    Добрый хозяин Аватар для CoValent
    Регистрация
    01.11.1997
    Адрес
    Москва, Россия
    Возраст
    57
    Сообщений
    19,336
    Images
    34

    Ответ: Просьба к программистам

    Цитата Сообщение от DogEater Посмотреть сообщение
    ...diffalt.exe <fileA> <fileB>...
    Спасибо, всё работает отлично!

    Живой анекдот: вот после этой операции, как оказалось, я уже не могу посмотреть результат в той же программе, что сделала исходные два файла... она этот формат только пишет, но не читает!

    Ладно, всё равно там вся работа через... не скажу как... но визуализация лишь на предпоследнем шаге, и тоже в аналоговом режиме, а не в цифре...

    Спасибо!

    Что написать в благодарностях?
    Валентин "CoValent" Логинов

    Errare humanum est, ignoscere divinum (с) Marcus Tullius Cicero



    Правила тут, термины тут, модераторы тут.

  13. #13
    Добрый хозяин Аватар для CoValent
    Регистрация
    01.11.1997
    Адрес
    Москва, Россия
    Возраст
    57
    Сообщений
    19,336
    Images
    34

    Ответ: Просьба к программистам

    Цитата Сообщение от f45f Посмотреть сообщение
    Кстати не описано что делать, если (A)Z<0 и B(Z)>0...
    Писать из второго, но писать с ошибкой, ибо по определению (A)Z≤0 и B(Z)≥0.
    Цитата Сообщение от f45f Посмотреть сообщение
    ...Смотрим на Line # 23762.

    2DogEater. В этом случае ты записал 0, хотя (A)Z = -0.0001 (т.е. больше похоже на 0), и в этом случае нужно писать 1 из B.
    У меня в файлах A и B эти строки таковы:

    0.6328 -0.2813 -1.0035
    0.6328 -0.2813 0.0000

    Итоговая строка верна:

    0.6328 -0.2813 -1.0035
    Валентин "CoValent" Логинов

    Errare humanum est, ignoscere divinum (с) Marcus Tullius Cicero



    Правила тут, термины тут, модераторы тут.

  14. #14
    Мастер Аватар для DogEater
    Регистрация
    03.11.2001
    Адрес
    Подмосковье
    Возраст
    52
    Сообщений
    4,442

    Ответ: Просьба к программистам

    Цитата Сообщение от CoValent Посмотреть сообщение
    Писать из второго, но писать с ошибкой, ибо по определению (A)Z≤0 и B(Z)≥0.
    Стоп, не понял. Так делать доп. обработку это случая или нет?
    "Прежде чем открыть огонь - оглянись!"
    А.В. Ворожейкин "Сильнее смерти", стр 9.
    "<...>не нужны маркеры противника парням в военном небе Великой Отечественной.
    Послюнявили химический карандаш. Пунктиром отметили маршрут на карте. И вперёд!"
    © DEDA
    1680 x 1050 && i7 2600 (3.4Ghz) && 8 gb DDR3 (1600 Mhz) && gtx 580 && win 7 x64

  15. #15
    Добрый хозяин Аватар для CoValent
    Регистрация
    01.11.1997
    Адрес
    Москва, Россия
    Возраст
    57
    Сообщений
    19,336
    Images
    34

    Ответ: Просьба к программистам

    Цитата Сообщение от DogEater Посмотреть сообщение
    Стоп, не понял. Так делать доп. обработку это случая или нет?
    Скорее, проверку этих случаев и такое же вынесение в отдельный файлик.

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

    Так что если не сложно...
    Валентин "CoValent" Логинов

    Errare humanum est, ignoscere divinum (с) Marcus Tullius Cicero



    Правила тут, термины тут, модераторы тут.

  16. #16
    Мастер Аватар для DogEater
    Регистрация
    03.11.2001
    Адрес
    Подмосковье
    Возраст
    52
    Сообщений
    4,442

    Ответ: Просьба к программистам

    Для варианта (A)Z≤0 и B(Z)≥0 запись в файл С из файла B плюс запись в ошибку обоих значений.
    Так?
    Кстати таких набралось строк около 800.
    Вложения Вложения
    "Прежде чем открыть огонь - оглянись!"
    А.В. Ворожейкин "Сильнее смерти", стр 9.
    "<...>не нужны маркеры противника парням в военном небе Великой Отечественной.
    Послюнявили химический карандаш. Пунктиром отметили маршрут на карте. И вперёд!"
    © DEDA
    1680 x 1050 && i7 2600 (3.4Ghz) && 8 gb DDR3 (1600 Mhz) && gtx 580 && win 7 x64

  17. #17
    Добрый хозяин Аватар для CoValent
    Регистрация
    01.11.1997
    Адрес
    Москва, Россия
    Возраст
    57
    Сообщений
    19,336
    Images
    34

    Ответ: Просьба к программистам

    Спасибо!

    Там и должно было быть так - я чуть заехал "на море", когда слепил "сушу".
    Валентин "CoValent" Логинов

    Errare humanum est, ignoscere divinum (с) Marcus Tullius Cicero



    Правила тут, термины тут, модераторы тут.

  18. #18
    Мастер Аватар для DogEater
    Регистрация
    03.11.2001
    Адрес
    Подмосковье
    Возраст
    52
    Сообщений
    4,442

    Ответ: Просьба к программистам

    Ну и прекрасно!
    Нехай потопчут нашу рідну Гавайщіну!
    "Прежде чем открыть огонь - оглянись!"
    А.В. Ворожейкин "Сильнее смерти", стр 9.
    "<...>не нужны маркеры противника парням в военном небе Великой Отечественной.
    Послюнявили химический карандаш. Пунктиром отметили маршрут на карте. И вперёд!"
    © DEDA
    1680 x 1050 && i7 2600 (3.4Ghz) && 8 gb DDR3 (1600 Mhz) && gtx 580 && win 7 x64

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •