Приветствую Вас, Гость! Регистрация RSS

Вторник, 22.08.2017
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 5 из 9«123456789»
Форум » Форум mega-avr.ucoz.ru » Вопросы начинающих » первые вопросы (кто собрал программатор, вставил мк- а он не работает)
первые вопросы
ilvzДата: Понедельник, 10.01.2011, 17:51 | Сообщение # 81
Любопытный
Сообщений: 143
Репутация: 2
Город: Almaty
Статус: Отсутствует
Число с плавющей. Первый авриант уже предложений мною где то там наверху "ftoa". Он наименее ресурсоёмкий из стандартных. Для "sprintf" надо подключать библиотеку.
Файл: 0853282.jpg(69Kb)


Сообщение отредактировал ilvz - Понедельник, 10.01.2011, 17:51
 
DenisДата: Понедельник, 10.01.2011, 19:56 | Сообщение # 82
Любопытный
Сообщений: 116
Репутация: 1
Город: Москва
Статус: Отсутствует
ilvz,
Ты имеешь в виду функцию itoa?

Добавлено (10.01.2011, 19:56)
---------------------------------------------
ilvz,
С одной проблемой разобрался следующим образом:

Code
  sprintf(date, "%i%d.%i%d.%i%d",day/10, day%10, month/10, month%10, year/10, year%10); // Форматирование Даты
   sprintf(time, "%i%d:%i%d:%i%d",hour/10, hour%10, min/10, min%10, sek/10, sek%10); // Форматирование Времени
   display_puts( date,12,1,0 );  // Вывод Даты
   display_puts( time,12,2,0 );  // Вывод Времени

Можно ли этот кусок кода оптимизировать?

Вторая проблемам которую пока не могу решить это вывод температуры! Пытаюсь её вывести следующим образом:

Code
sprintf(temp, "%i.%u", n, n%1); // Форматирование Температуры
   display_puts( temp,12,7,0 );  // Вывод Температуры

Но из этого нечего не получается! Как быть?
Помогите решить эту проблему!

 
ilvzДата: Понедельник, 10.01.2011, 20:30 | Сообщение # 83
Любопытный
Сообщений: 143
Репутация: 2
Город: Almaty
Статус: Отсутствует
1) itoa для int , а ftoa для float. Это абревиатура Integer TO Ascii и Float TO Ascii
2) Зачем так сложно. Функция спринтф преобразовывает число целиком. Не надо его бить на части.
3) %1 и будет или 1 или 0. Похоже ты предполагаешь что так можно получить дробную часть!? Нет! Это оператор ИСКЛЮЧИТЕЛЬНО целочисленной арифметики. Если "n" float то тебе нужно...для начала разобраться с данными. Похоже ты хочешь этот кусочек знаний проигнорировать. Не рекомендую. Это то что будет держать за ... всю дорогу. Это фундамент. И без него никуда.

Добавлено (10.01.2011, 20:30)
---------------------------------------------
Это будет важно для ЛЮБОГО языка программирования.

 
DenisДата: Понедельник, 10.01.2011, 20:31 | Сообщение # 84
Любопытный
Сообщений: 116
Репутация: 1
Город: Москва
Статус: Отсутствует
ilvz,
Code
sprintf(date, "%i%d.%i%d.%i%d",day/10, day%10, month/10, month%10, year/10, year%10); // Форматирование Даты  
    sprintf(time, "%i%d:%i%d:%i%d",hour/10, hour%10, min/10, min%10, sek/10, sek%10); /

Как его можно упростить, я уже всё перепробовал!
Если выводить целиком число, то он выводит по одному символу!
 
ilvzДата: Понедельник, 10.01.2011, 20:44 | Сообщение # 85
Любопытный
Сообщений: 143
Репутация: 2
Город: Almaty
Статус: Отсутствует
sprintf(date, "%d.%d.%d",day, month, year);

Добавлено (10.01.2011, 20:43)
---------------------------------------------
В хелпе ещё много про это. Формат, выравнивание и т.д.

Добавлено (10.01.2011, 20:44)
---------------------------------------------
Проще всего и менее ресурсоёмко через itoa & ftoa. Про них тоже есть.

Сообщение отредактировал ilvz - Понедельник, 10.01.2011, 20:41
 
DenisДата: Понедельник, 10.01.2011, 20:46 | Сообщение # 86
Любопытный
Сообщений: 116
Репутация: 1
Город: Москва
Статус: Отсутствует
sprintf(date, "%d.%d.%d",day, month, year);
Этот вариант не работает!!!
Если дату у нас 02.03.09, то переменные соответственно day, month, year. Следовательно day=02, month=03, и year=09.
Вот при таких параметрах твой вариант выводит 2.3.9
И это совсем не то что нужно!
 
ilvzДата: Понедельник, 10.01.2011, 20:52 | Сообщение # 87
Любопытный
Сообщений: 143
Репутация: 2
Город: Almaty
Статус: Отсутствует
Читай хелп. Я же намекал про РАЗНЫЕ ФОРМАТЫ. Люди целый парсер написали для строки между "". Там много чем можно управлять. И ведущим нулём в частности. Я этим не пользуюсь. Попробуй 0 втавить между процентом и Д. Глянул хелп sad Он для тех кто уже знает и умеет. В сети мног доков на русском по этой теме. Если хочешь пользоваться. Лучше изучить.

Сообщение отредактировал ilvz - Понедельник, 10.01.2011, 20:55
 
DenisДата: Понедельник, 10.01.2011, 20:58 | Сообщение # 88
Любопытный
Сообщений: 116
Репутация: 1
Город: Москва
Статус: Отсутствует
Я уже замучился его читать! Это называется смотрю в книгу вижу фигу!
Я практически все варианты перепробовал.
 
ilvzДата: Понедельник, 10.01.2011, 21:01 | Сообщение # 89
Любопытный
Сообщений: 143
Репутация: 2
Город: Almaty
Статус: Отсутствует
Попробуй %0d

Добавлено (10.01.2011, 21:00)
---------------------------------------------
https://secure.wikimedia.org/wikipedia/ru/wiki/Printf

Добавлено (10.01.2011, 21:01)
---------------------------------------------
Это первое, что попалось.

 
DenisДата: Понедельник, 10.01.2011, 21:08 | Сообщение # 90
Любопытный
Сообщений: 116
Репутация: 1
Город: Москва
Статус: Отсутствует
ilvz,
%0d
Тоже не помогает!
 
ilvzДата: Понедельник, 10.01.2011, 21:27 | Сообщение # 91
Любопытный
Сообщений: 143
Репутация: 2
Город: Almaty
Статус: Отсутствует
Сейчас у себя попробую. Через некоторое время отпишу.

Добавлено (10.01.2011, 21:19)
---------------------------------------------
Да ты прав. Поищу.

Добавлено (10.01.2011, 21:27)
---------------------------------------------

Code
sprintf(str,"%02d %03d",5,6);  

Вот, Так нужно. Печатает в две и три позиции сответственно. ( 05 и 006 ) С ведущими нулями.


Сообщение отредактировал ilvz - Понедельник, 10.01.2011, 21:28
 
DenisДата: Понедельник, 10.01.2011, 21:33 | Сообщение # 92
Любопытный
Сообщений: 116
Репутация: 1
Город: Москва
Статус: Отсутствует
ilvz,
Вот это %02d понятно для чего, а для чего %03d?
Там по идеи тоже %02d должно стоять.
 
ilvzДата: Понедельник, 10.01.2011, 21:40 | Сообщение # 93
Любопытный
Сообщений: 143
Репутация: 2
Город: Almaty
Статус: Отсутствует
Да. Это я для примера. Что-бы понятно было что то чего зависит. Без нуля будет заполнять пробелами.

Добавлено (10.01.2011, 21:40)
---------------------------------------------
Без нулей удобно таблицы печатать, выровненные вправо.

 
DenisДата: Понедельник, 10.01.2011, 21:51 | Сообщение # 94
Любопытный
Сообщений: 116
Репутация: 1
Город: Москва
Статус: Отсутствует
ilvz,
Я уже понял.
А по поводу числа с плавающей точкой не смотрел?
 
ilvzДата: Понедельник, 10.01.2011, 21:53 | Сообщение # 95
Любопытный
Сообщений: 143
Репутация: 2
Город: Almaty
Статус: Отсутствует
Я же уже несколько раз писал об этом. Даже картинку выставил.
 
DenisДата: Понедельник, 10.01.2011, 21:59 | Сообщение # 96
Любопытный
Сообщений: 116
Репутация: 1
Город: Москва
Статус: Отсутствует
Так ты же писал не при помощи функции sprintf(), а при помощи ftoa()!!!?
Я что-то не догоняю, через функцию sprintf() это нельзя сделать?
 
ilvzДата: Понедельник, 10.01.2011, 22:04 | Сообщение # 97
Любопытный
Сообщений: 143
Репутация: 2
Город: Almaty
Статус: Отсутствует
И про sprintf тоже. Для вывода флоат через sprintf в настройках компилятора нужно сделать изменения. См. картинку. Формат (простой) %f . Дальше с рюшками попробуй сам.

Добавлено (10.01.2011, 22:04)
---------------------------------------------
См. первый пост на этой стр.

 
DenisДата: Понедельник, 10.01.2011, 22:14 | Сообщение # 98
Любопытный
Сообщений: 116
Репутация: 1
Город: Москва
Статус: Отсутствует
ilvz,
Спасибо!
Я как дурак %f пробовал раз 10, а оказалось дело в компиляторе.
Интересно почему это не где не написано?
 
ilvzДата: Понедельник, 10.01.2011, 22:18 | Сообщение # 99
Любопытный
Сообщений: 143
Репутация: 2
Город: Almaty
Статус: Отсутствует
Code

sprintf(str,"%3.2f",14567.333);

Если целая часть не помещается в формат, то всё равно напечатается в полном объеме.
А вот дробная будет обрезаться по указанному формату. В данном случае будет -> 14567.33

Добавлено (10.01.2011, 22:18)
---------------------------------------------
У Лебедева нав. есть?

 
DenisДата: Понедельник, 10.01.2011, 22:26 | Сообщение # 100
Любопытный
Сообщений: 116
Репутация: 1
Город: Москва
Статус: Отсутствует
Спасибо за помощь проблема решена:
Code
sprintf(temp, "t=%.2f",n);

Добавлено (10.01.2011, 22:26)
---------------------------------------------
ilvz,
Не поверишь нашёл хорошую инструкцию по этому делу в книге по PHP5.

 
Форум » Форум mega-avr.ucoz.ru » Вопросы начинающих » первые вопросы (кто собрал программатор, вставил мк- а он не работает)
Страница 5 из 9«123456789»
Поиск: