Автор |
Сообщение |
RawRalf Эксперт Предупреждений : 1
|
|
Логической переменной t присвоить значение true или false в зависимости от того, является ли натуральное число k степенью 3 или нет.
Мозг высох! На Дэлфи могу, а на Си -никак!
И еще попросили составить что то типо6
Дано
Результат
Решение
Повторять
Пока
З.Ы. 1 курс, ФПМИ, задачка ко 2ой лабе! Не ржать! =)) |
|
|
|
|
EvilHedgehog Гуру |
|
t = ((log((float)k)/log(3.0)) == (float)floor(log((float)k)/log(3.0))))? true : false; |
|
|
|
|
RawRalf Эксперт Предупреждений : 1
|
|
Спасибо, но я думаю ей все равно она не понравится. |
|
|
|
|
EvilHedgehog Гуру |
|
Ну тогда так:
Код: |
#include <math.h>
void main()
{
bool t;
unsigned k;
printf("Enter k: ");
scanf("%d",&k);
t = (log((float)k)/log(3.0) == (float)floor(log((float)k)/log(3.0)))? true : false;
printf("\n%d\n",t);
}
|
Работать будет же, чего ей еще надо? |
|
|
|
|
perf Продвинутый форумчанин |
|
Цитата: |
t = (log((float)k)/log(3.0) == (float)floor(log((float)k)/log(3.0)))? true : false; |
жирным показано лишнее |
|
|
|
|
EvilHedgehog Гуру |
|
perf
Попросили, чтобы прям было. Наглядность повышает и все такое. Можно еще t как unsigned объявить, еще строчку съекономим
ЗЫ или вообще убрать нафиг это t, кому оно нужно. Чистый функционал:
Код: |
#include <math.h>
void main()
{
unsigned k;
printf("Enter k: ");
scanf("%d",&k);
printf("\nt = %d\n",log((float)k)/log(3.0) == (float)floor(log((float)k)/log(3.0)));
}
|
|
|
|
|
|
Aprelle Гуру |
|
Для цикла и наглядности нужно в цикле t делить на 3 пока не получим дробное число или 1.
Цитата: |
Мозг высох! На Дэлфи могу, а на Си -никак! |
Значит и на дельфях тоже не можешь.
Вообще все языки программирования похожи и различаются только справочником |
|
|
|
|
RawRalf Эксперт Предупреждений : 1
|
|
Цитата: |
Значит и на дельфях тоже не можешь.
Вообще все языки программирования похожи и различаются только справочником |
Если бы мне знать справочник Си
Спасибо! |
|
|
|
|
Mr.Zakk Wylde Crazy Guitarist |
|
RawRalf
Препод - Хиценко? |
|
|
|
|
RawRalf Эксперт Предупреждений : 1
|
|
|
|
|
Nikolai Продвинутый форумчанин |
|
RawRalf писал(а): |
Цитата:
Препод - Хиценко?
Как, откуда?? Она самая!!!
Я тебя знаю?? |
Братья меньшие)))) |
|
|
|
|
RawRalf Эксперт Предупреждений : 1
|
|
Цитата: |
Братья меньшие)))) |
|
|
|
|
|
RawRalf Эксперт Предупреждений : 1
|
|
|
|
|
EvilHedgehog Гуру |
|
Код: |
void main()
{
unsigned k ,r;
printf("Enter k: ");
scanf("%d",&k);
do{ r = k%3; k/=3;}
while (k>1 && !r);
printf("\nt = %d\n",r==0);
}
|
|
|
|
|
|
RawRalf Эксперт Предупреждений : 1
|
|
Спасибо тебе, добрый человек!!!! |
|
|
|
|
Aprelle Гуру |
|
Он не добрый, он коварный
Посмотрел сегодня Идиократию...
куда катится мир ))
и считать ли три в нулевой степени степенью тройки ? |
|
|
|
|
RawRalf Эксперт Предупреждений : 1
|
|
Цитата: |
и считать ли три в нулевой степени степенью тройки ? |
Да не знаю, задам, что при К=1, тоже будет тру! |
|
|
|
|
EvilHedgehog Гуру |
|
Aprelle
Зато оно три в степени минус бесконечность корректно обрабатывает |
|
|
|
|
perf Продвинутый форумчанин |
|
EvilHedgehog писал(а): |
Попросили, чтобы прям было. Наглядность повышает и все такое. Можно еще t как unsigned объявить, еще строчку съекономим |
Дело не в экономии букв, а в избыточности: логическое выражение и так имеет тип bool, т.е. true или false, зачем к нему опять применять булевые проверки.
Для повышения читаемости того выражения гораздо лучше разбить его на части, так:
Код: |
float a = log((float)k)/log(3.0);
float b = floor(log((float)k)/log(3.0));
bool t = (a==b);
|
|
|
|
|
|
Aprelle Гуру |
|
А есть вообще гарантия, что степень для 3 скажем в 15-й вычислится именно как 15.0, а не как 14.999 или 15.001 ??? |
|
|
|
|
|