|
Редактирование значения типа float, Как организовать такое? |
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 44)
|
Feb 11 2009, 21:00
|

Участник

Группа: Свой
Сообщений: 71
Регистрация: 23-10-08
Из: Набережные Челны
Пользователь №: 41 132

|
Цитата(Alex11 @ Feb 11 2009, 23:54)  А в чем проблема? Чтобы все не сбивалось на экране, хранить придется все равно байт на символ (минимум, пол-байта, если памяти совсем нет), изменять их по стрелочкам, а затем пересчитывать в плавучку, умножая каждую цифру на соответствующий множитель (при каждом нажатии стрелочки вверх или вниз). а алгоритм можете привести? свободной памяти много...
Сообщение отредактировал clpe - Feb 11 2009, 21:01
|
|
|
|
|
Feb 11 2009, 21:26
|

Участник

Группа: Свой
Сообщений: 71
Регистрация: 23-10-08
Из: Набережные Челны
Пользователь №: 41 132

|
Цитата(Methane @ Feb 12 2009, 00:24)  Я делал. Просто вверх/вниз, увеличение скорости изменения по экспоненте (чем дольше нажатие тем быстрее изменяется, в зависимости от текущего значения - если к примеру текущее 0.01 то следующем будет 0.02 а если текущее 100, то 101). Получилось очень прикольно. Но я на семисегментниках делал. На ЖКИ может не так прикольно получится. Ага прикольно когда надо редактировать от 0.00 до 999.99
|
|
|
|
|
Feb 11 2009, 21:39
|

Участник

Группа: Свой
Сообщений: 71
Регистрация: 23-10-08
Из: Набережные Челны
Пользователь №: 41 132

|
Цитата(nl5 @ Feb 12 2009, 00:34)  Иногда делают просто выбор позиции стрелками вправо-влево, и изменение этой позиции стрелками вверх-вниз, с переносом в старшую позицию если переполняется вверх или вниз. По-моему это удобнее, чем переменная скорость, хотя кому как. вот-вот такое есть у кого нибудь?
|
|
|
|
|
Feb 11 2009, 22:27
|

Участник

Группа: Свой
Сообщений: 71
Регистрация: 23-10-08
Из: Набережные Челны
Пользователь №: 41 132

|
Цитата(demiurg_spb @ Feb 12 2009, 01:19)  преобразуйте число в строку функцией ftoa или snprintf, отредактируйте строку кнопочкми и обратно из строки в число atof. Какой алгоритм Вам ещё нужен? Вы же программист и творец, вот и творите, экспериментируйте... Нет ничего более ценного, чем знания и опыт, полученные собственным трудом. В редактировании целого числа проблем никаких нет, а вот при редактировании чисел с запятой  слишком большой код. Одну из позиций точка занимает, нужно перепрыгивать, и начинается путаница.
|
|
|
|
|
Feb 11 2009, 22:32
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(clpe @ Feb 12 2009, 01:27)  В редактировании целого числа проблем никаких нет, А я Вам говорю как раз не о целых числах, а о float. Цитата а вот при редактировании чисел с запятой  слишком большой код. Одну из позиций точка занимает, нужно перепрыгивать, и начинается путаница. Эка проблема! Если считаете это СЛИШКОМ сложным, то я даже и не знаю что и сказать. Терпение и труд всё перетрут. Главное начать, а там глядишь и конец работы начнёт проглядываться. Устал - пойди погуляй с девушкой, да не с одной!:) От того что долго вылупаешься в монитор и тупишь пользы ноль.
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Feb 11 2009, 22:34
|

Участник

Группа: Свой
Сообщений: 71
Регистрация: 23-10-08
Из: Набережные Челны
Пользователь №: 41 132

|
Цитата(demiurg_spb @ Feb 12 2009, 01:32)  А я Вам говорю как раз не о целых числах, а о float. Эка проблема! Если считаете это СЛИШКОМ сложным, то я даже и не знаю что и сказать. Просто с float на МК редко сталкивался...
|
|
|
|
|
Feb 11 2009, 23:34
|

Гуру
     
Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230

|
Цитата(nl5 @ Feb 11 2009, 23:34)  ...и тем труднее остановиться когда надо, и начинается: вверх-вниз-вверх-вниз.. Иногда делают просто выбор позиции стрелками вправо-влево, и изменение этой позиции стрелками вверх-вниз, с переносом в старшую позицию если переполняется вверх или вниз. По-моему это удобнее, чем переменная скорость, хотя кому как. Господи! Сделайте и поиграйтесь. Ваш вариант и есть в общем-то мой. У меня сначала медленно ползет младшая цифра, потом болшее старшая потом еще более старшая итд... В общем скорость нарастает. Вы не читали "машина времени"? Цитата Я уже рассказывал о болезненных и муторных ощущениях, которые вызывает путешествие по Времени. Но на этот раз я к тому же плохо сидел в седле, неловко свесившись набок. Не знаю, долго ли я провисел таким образом, не замечая, как моя Машина дрожит и раскачивается. Когда я пришел в себя и снова посмотрел на циферблаты, то был поражен. На одном из циферблатов отмечались дни, на другом тысячи, на третьем миллионы и на четвертом миллиарды дней. Оказалось, что вместо того, чтобы повернуть рычаги назад, я привел их в действие таким образом, что Машина помчалась вперед, и, взглянув на указатели, я увидел, что стрелка, отмечающая тысячи дней, вертелась с быстротой секундной стрелки, — я уносился в Будущее. По мере движения все вокруг начало принимать какой‑то необыкновенный вид. Дрожащая серая пелена стала темнее; потом снова — хотя я все еще продолжал двигаться с невероятной скоростью — началась мерцающая смена ночи и дня, обычно указывавшая на не очень быстрое движение Машины. Это чередование становилось все медленнее и отчетливее. Сначала я очень удивился. День и ночь уже не так быстро сменяли друг друга. Солнце тоже постепенно замедляло свое движение по небу, пока наконец мне не стало казаться, что сутки тянутся целое столетие. В конце концов над землей повисли сумерки, которые лишь но временам прорывались ярким светом мчавшейся по темному небу кометы. Красная полоса над горизонтом исчезла; солнце больше не закатывалось — оно просто поднималось и опускалось на западе, становясь все более огромным и кровавым. Луна бесследно исчезла. Звезды, медленно описывавшие свои круговые орбиты, превратились из сплошных полосок света в отдельные, ползущие по небу точки. Наконец, незадолго до того, как я остановился, солнце, кровавое и огромное, неподвижно застыло над горизонтом; оно походило на огромный купол, горевший тусклым светом и на мгновения совершенно потухавший. Один раз оно запылало прежним своим ярким огнем, но быстро вновь приобрело угрюмо‑красный цвет. Из того, что солнце перестало всходить и закатываться, я заключил, что периодическое торможение наконец завершилось. Земля перестала вращаться, она была обращена к Солнцу одной стороной, точно так же, как в наше время обращена к Земле Луна. Помня свое предыдущее стремительное падение, я с большой осторожностью принялся замедлять движение Машины. Стрелки стали крутиться все медленней и медленней, пока наконец та, что указывала тысячи дней, не замерла неподвижно, а та, что указывала дни, перестала казаться сплошным кругом. Я еще замедлил движение, и передо мной стали смутно вырисовываться очертания пустынного берега.
|
|
|
|
|
Feb 12 2009, 00:17
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(clpe @ Feb 12 2009, 03:27)  В редактировании целого числа проблем никаких нет, а вот при редактировании чисел с запятой  слишком большой код. Одну из позиций точка занимает, нужно перепрыгивать, и начинается путаница. У нас в приборах редактирование чисел с плавающей точкой реализовано посимвольно. Раскладываете float на символы, выводите на LCD и редактируете символьную строку, следя чтобы десятичная точка была только в одной позиции (заведите семафорчик как признак, что в какой-то позиции уже есть точка). При нажатии кнопки "ввод" преобразуете символьную строку во float, запоминаете значение и затем преобразуете снова в символьную строку для вывода на LCD. При посимвольном редактировании кнопки влево/вправо двигают курсор по символам(знакоместам), а вверх/вниз изменяют значение символа из следующего ряда: "пробел", ".", "0", "1", "2", .... "8", "9". Упомянутый выше автоповтор последней нажатой клавиши (а также увеличивающийся со временем темп автоповтора) относится с функции клавиатуры, а не собственно функции редактирования. Хотя для столь малого набора символов (11 символов) (авто)увеличение темпа автоповтора ИМХО излишнее.
|
|
|
|
|
Feb 12 2009, 10:37
|

Участник

Группа: Свой
Сообщений: 71
Регистрация: 23-10-08
Из: Набережные Челны
Пользователь №: 41 132

|
Цитата(rezident @ Feb 12 2009, 03:17)  При посимвольном редактировании кнопки влево/вправо двигают курсор по символам(знакоместам), а вверх/вниз изменяют значение символа из следующего ряда: "пробел", ".", "0", "1", "2", .... "8", "9". "Пробел", ".", блин а так действительно легче!
|
|
|
|
|
Feb 12 2009, 10:56
|

Участник

Группа: Свой
Сообщений: 71
Регистрация: 23-10-08
Из: Набережные Челны
Пользователь №: 41 132

|
Цитата(_Pasha @ Feb 12 2009, 13:50)  В предельном случае - когда у Вас всего две кнопки (не смейтесь над функционалом) - изменение текущего символа по отпусканию кнопки, автоповтора ессно нету, переход по знакоместам по нажатию двух кнопок. В этом случае отпускание кнопки не влечет за собой изменение символа. Бывали и такие случаи (заказчик ругался, что слишком долго редактировать приходится: в приборе 2 кнопки, а при сдаче прибора выяснилось, что надо редактировать значение от 100 до 10000, а не от 900 до 1000 как он говорил до этого) спасибо возьму на заметку.
|
|
|
|
|
Feb 12 2009, 21:33
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(demiurg_spb @ Feb 12 2009, 01:19)  Преобразуйте число в строку функцией ftoa или snprintf или dtostrf, отредактируйте строку кнопочкми и обратно из строки в число atof. ИМХО, если уж все равно присутствует плавучка, то совсем не нужно конвертировать туда-сюда, достаточно только конвертировать для вывода. А редактирование делать примерно так: Код const float vinput_delta[9] = // шаги приращения для ввода {0.0001f, 0.001f, 0.01f, 0.1f, 1.0f, 10.0f, 100.0f, 1000.0f, 10000.0f}; unsigned char vinput_step; // текущий N шага при редактировании в таблице vinput_delta ................ vinput_data -= vinput_delta[vinput_step]; // уменьшить на текущий шаг(кнопка вниз) ............... vinput_data += vinput_delta[vinput_step]; // увеличить на текущий шаг(кнопка вверх) ............... vinput_step++; // к старшему разряду(кнопка влево) .............. vinput_step--; // к младшему разряду(кнопка вправо) Это конечно упрощенно, но идея я думаю ясна.
|
|
|
|
|
Feb 12 2009, 23:38
|

Чайник, 1 литр
   
Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168

|
Цитата(singlskv @ Feb 13 2009, 00:33)  Код const float vinput_delta[9] Ну это уже совсем того! Редактировать надо строку, о чем выше сказано. А в случае если у автора задача стоит так, что значение меняется только в меню и нигде больше, то операция float->строка вообще не нужна: хранить строку, изменять ее в меню (редактировать просто, выводить на экран просто), и операция строка->float по завершению редактирования для дальнейшего использования.
Сообщение отредактировал SysRq - Feb 13 2009, 00:11
|
|
|
|
|
Feb 13 2009, 07:32
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(_Pasha @ Feb 13 2009, 10:12)  Там главный недостаток - перенос наших "разрядов" в соседние, например 0.09f+0.01f=0.1f Ну никто же не мешает при этом выводить 0.10 В конце концов, обычно, нужно фиксированное кол-во разрядов после запятой. Цитата За этой "ловлей блох" можно потерять немало флеша. А если очень надо, то и пересчитать положение точки при выводе не проблема, и флеша это займет очень не много...
|
|
|
|
|
Feb 13 2009, 07:47
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(Dog Pawlowa @ Feb 13 2009, 10:32)  Если это значение всегда с двумя знаками после точки, то это не float. Представьте, что оно целое, равно float * 100, с точкой между третьим и вторым знаками слева. Такой подсказки достаточно? Если точка всегда в одном месте то тогда действительно можно все в целых, в моем варианте просто меняется: const float vinput_delta[9] = // шаги приращения для ввода {0.0001f, 0.001f, 0.01f, 0.1f, 1.0f, 10.0f, 100.0f, 1000.0f, 10000.0f}; на: const int vinput_delta[] = // шаги приращения для ввода {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000,1000000000};
|
|
|
|
|
Feb 13 2009, 08:37
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(singlskv @ Feb 13 2009, 00:33)  ИМХО, если уж все равно присутствует плавучка, то совсем не нужно конвертировать туда-сюда, достаточно только конвертировать для вывода. А редактирование делать примерно так: [code]const float vinput_delta[9] = // шаги приращения для ввода {0.0001f, 0.001f, 0.01f, 0.1f, 1.0f, 10.0f, 100.0f, 1000.0f, 10000.0f}; ... Это конечно упрощенно, но идея я думаю ясна. Идея-то ясна но, у float в отличие от целочисленных типов есть очень серьёзный недостаток. И заключается он в том, что точного значения числа часто не существует, а есть лишь его приближённая величина. И если прибавлять 0,1 к нулю много-много раз, можно получить что-то подобное 999999,371654651. Этим плох Ваш способ. Не смертельно плох, но всёже...
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Feb 13 2009, 09:12
|

Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581

|
для редактирования float с заранее известным числом знаков после точки и перед нею, я бы сделал почти так, как предлагал singlskv, только перед началом редактирвоания переводил бы float в целое (для двух знаков после точки - умножением на 100) и редактировал бы именно в целых числах (запрет "переноса разряда" легко и незатратно по памяти реализуется), а точку "пририсовывал" бы только при выводе. после завершения редактирования деление на 100 (или на что там умножали вначале) - и получите готовое число. плюсы: 1. функция редактирования любого знака может быть одной для любого разряда: получает "порядок" изменяемого разряда, реализуя контроль и блокировку перехода 9-->10. при этом сама процедура редактирования красиво раскладывается на элементарные действия: выбор разряда - изменение 2. целочисленная арифметика - быстро и экономно 3. не надо делать ресурсоемкие преобразования для вывода float - опять же экономия памяти минусы: - назовите сами
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
|
Feb 13 2009, 10:52
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(ARV @ Feb 13 2009, 11:12)  минусы: - назовите сами  Сам так делал, еще на асме и на 74 пике  У меня была структура "параметры редактирования", которая включала в себя: - количество знакомест при редактировании - количество знаков после запятой (если 0 - точка не выводится) - знаковое/беззнаковое число - минимальное и максимальное допустимое значение. Если при сохранении число выходит за диапазон - сохранение не происходит, выдается злобный сигнал, число заменяется максимумом или минимумом, пользователю предлагается продолжить редактирование. Функции передавался указатель на число и указатель на такую структуру. Таким образом одна процедура использовалась для редактирования самых разнообразных параметров. Недостаток только один - этот метод не подходит, если положение точки не фиксировано.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Feb 13 2009, 11:42
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(Сергей Борщ @ Feb 13 2009, 14:52)  Функции передавался указатель на число и указатель на такую структуру. Таким образом одна процедура использовалась для редактирования самых разнообразных параметров. Недостаток только один - этот метод не подходит, если положение точки не фиксировано. +1 То же самое плюс флаг read_only, селектор источника, откуда берется число (SRAM/EEPROM/FLASH/SPECIAL) SPECIAL - в этом случае будет указатель на функцию, возвращающую требуемое число В особо извращенных случаях добавлялись хинтовые строки для выдачи в UART, что это за параметр еще и на двух языках: английском и матерном родном.  Ужас У человека в цеху несколько необслуживаемых железяк, а пульт программирования один - подошел, воткнулся, исправил, выткнулся - продолжение работы
|
|
|
|
|
Feb 13 2009, 11:57
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(singlskv @ Feb 13 2009, 11:41)  А когда редактируешь строку и потом переводишь в флоат разьве точность не теряется ? Даже если она и "теряется", но лишь единожды, а у Вас на каждое нажатие кнопки. По моему скромному мнению, при помощи atof достигается максимальная точность из возможных... И уж не хуже чем при целочисленном способе редактирования. В этом смысле Ваш вариант самый неудачный. atof - ведь библиотечная функция и отшлифована она не одним поколением программистов, поэтому недоверия у меня она никогда не вызывает.
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Feb 13 2009, 16:28
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(demiurg_spb @ Feb 13 2009, 14:57)  Даже если она и "теряется", но лишь единожды, а у Вас на каждое нажатие кнопки. По моему скромному мнению, при помощи atof достигается максимальная точность из возможных... И уж не хуже чем при целочисленном способе редактирования. В этом смысле Ваш вариант самый неудачный. atof - ведь библиотечная функция и отшлифована она не одним поколением программистов, поэтому недоверия у меня она никогда не вызывает. Ну давайте рассмотрим такой пример на Вашем алгоритме: Было число 1.44999999 Выводим с одним разрядом после запятой: 1.4 хотим уменьшить это число на 1 минимальный шаг(типа чего-нить регулируем) жмем кнопку вниз на младшем разряде получаем: 1.3 жмем ввод ИТОГО: было 1.44999999 стало 1.3 вместо регулирования на 0.1 получили на 0.14999999 Это правильно ?
|
|
|
|
|
Feb 13 2009, 16:58
|

Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581

|
Цитата(singlskv @ Feb 13 2009, 19:28)  Ну давайте рассмотрим такой пример на Вашем алгоритме: Было число 1.44999999 Выводим с одним разрядом после запятой: 1.4 хотим уменьшить это число на 1 минимальный шаг(типа чего-нить регулируем) жмем кнопку вниз на младшем разряде получаем: 1.3 жмем ввод ИТОГО: было 1.44999999 стало 1.3 вместо регулирования на 0.1 получили на 0.14999999 Это правильно ?  это неправильно. однако, если только один знак после запятой в редактируемом параметре - откуда там возьмется "хвостик"? редактируется, как я понимаю, входной параметр для некоего алгоритма, но никак не выходной, т.е. получаемый в результате вычислений... то есть никакого 1.449999 быть не может (не должно по определению)? может быть только 1.4
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
|
Feb 13 2009, 17:52
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(ARV @ Feb 13 2009, 19:58)  это неправильно. однако, если только один знак после запятой в редактируемом параметре - откуда там возьмется "хвостик"? редактируется, как я понимаю, входной параметр для некоего алгоритма, но никак не выходной, т.е. получаемый в результате вычислений... то есть никакого 1.449999 быть не может (не должно по определению)? может быть только 1.4 Ну а если этот пареметр рассчетный(например через деление) ? и его результат получается совсем в другом месте ? А потом нужно его подредактировать? На самом деле эти споры насчет округлений можно вести до бесконечности, ИМХО, правда заключается в единичке младшего разряда который Вы позволили редактировать, +- эта 1 это и есть точность...
|
|
|
|
|
Feb 13 2009, 18:13
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(_Pasha @ Feb 13 2009, 20:58)  А чтоб не спорить, должно быть правило: система параметров прибора должна быть квадратно-гнездовой как и голова воображаемого пользователя. И если на юзера падают результаты промежуточных вычислений, то это не хорошо. Ok, только никуда пока не уходите,  будете связующим звеном между пультом который получает значения по модбас их редактирует и отправляет их обратно(или в другой модуль  ), боюсь без Вашей помощи они квадратно-гнездовым не договорятся...
|
|
|
|
|
Feb 13 2009, 18:30
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(_Pasha @ Feb 13 2009, 21:21)  В таком случае пульт будет не устройство, а должность  И думаю, что в конце концов у пользователя такого пульта может возникнуть сильная жажда сервиса. Вплоть до денег за работу по модернизации. Это еще почему ? получили извне флоат отредактировали отправили назад почему мой вариант будет хуже чем: >ИТОГО: было 1.44999999 стало 1.3 >вместо регулирования на 0.1 получили на 0.14999999 ?
|
|
|
|
|
Feb 13 2009, 18:53
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(_Pasha @ Feb 13 2009, 21:39)  Отредактировали калькулятороподобной клавой - вааще вопросов нету. А 2/4/6 кнопок... фрагмент не вписывается в Геракла (ЦЕ) -4 кнопки -5 семисегментников(+точка) разрядов (но можно сколько надо) -вывод/ввод целых/флоат -ввод/контроль пароля на определенные параметры -режим ввода по приращениям не совпадающим с разрядом -режим задания значений по умолчанию все редактируемые параметры удаленные, через модбас (ЦЕ)
|
|
|
|
|
Feb 13 2009, 22:00
|

Участник

Группа: Свой
Сообщений: 71
Регистрация: 23-10-08
Из: Набережные Челны
Пользователь №: 41 132

|
Цитата(ARV @ Feb 13 2009, 21:54)  +5! и нечего голову всем морочить! редактируйте в символьном виде с клавы типа PS/2 и будет вам счастье  Да была бы вообще тема!!! Цитата(singlskv @ Feb 13 2009, 00:33)  А редактирование делать примерно так:
Это конечно упрощенно, но идея я думаю ясна. Вот такое решение вообще офигенно! Суперрррррр!..........
Причина редактирования: Нарушение п.3.4 Правил форума.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|