Другие языки программирования и технологии

Можно ли более лаконично написать код этой маленькой программы ?

Друзья, изучаю самостоятельно с ++.Только вначале пути . Сделал простую программу, которая по значению радиуса окружности определяет ее площадь, длину и диаметр . Нужно мнение специалистов, возможно ли написать код лаконичнее и не набыдлокодил ли я ?) Прошу проявить понимание, так как я новичок :) Замечания приветствуются . Всем спасибо за ответы заранее :) Вот исходный код программы, не знаю, можно ли тут его иначе размещать, тем не менее :

#include

int main()
{
int r;
double p = 3.14;
double s;
double l;
double d;

std::cout << " Enter value of radius ";
std::cin >> r;
s = (p*r*r);
std::cout << " S == " << s<< " ";

l = (2 * p*r);
std::cout << " L == " << l << " ";

d = (l / p);
std::cout << " D == " << d << " ";

system("pause");

}
Нормальный код для новичка. Мелкие замечания:
- переменные обычно лучше называть длиннее; но в этом случае используются общепринятые математические обозначения, так что сойдет.
- если программа не использует ничего, кроме STL, принято добавлять using namespace std и опускать std:: дальше по коду; но в больших проектах это наоборот считается признаком быдлокода. Так что нейтрально.
- в cmath есть константа M_PI, представляющая Пи с максимально доступной точностью. 3.14 вместо Пи - это плохо. Тем более плохо держать это в переменной, а не в константе.
- s = (p*r*r); - скобки явно не нужны. Как и в других выражениях.
- бессмысленно сначала умножать на Пи, а потом делить.
- system("pause") - это точно быдлокод: для простой паузы вызывать другую программу, с чтением, проверкой прав, созданием отдельного пространства адресов и т. д. Если нужна пауза - читай строку; если нужно задержать программу на экране после работы - запускай ее в соответствующем окружении.
Алексей Батухтин
Алексей Батухтин
93 161
Лучший ответ
Необязательно все переменные описывать в начале, это не Паскаль.
Можно прямо по ходу дела:
double s = (p*r*r);
Тогда будет ощутимо лаконичнее.
#include "iostream"
using namespace std;
int main(){
const float pi=3.14159265; float r; cout<<"R: "; cin>>r;
cout<<"S="<< pi*r*r<<", L="<<2*pi*r<<", D="<<2*r<< endl;
cin.get(); cin.get();}
Алексей Гарькин тип float лучше не использовать (на x86, как на других платформах -- не знаю), если нет необходимости хранить гигантское количество чисел.
немного можно сократить.
double s = p*r*r; // рекомендуется объявлять переменную там, где она нужна, и сразу инициализировать. Не нужны скобки (p*r*r).
Аналогично переменные l и d.
Дмитрий Кижаев
Дмитрий Кижаев
58 065
Игорь Горбачев Благодарю за дельный совет, я думал так нельзя делать :)
Дмитрий Кижаев system("pause"); // это кошмар. Запуск внешней программы чтобы сделать ожидание нажатия кнопки
работать будет.
один вопрос. почему радиус типа int?
РИ
Рома Ильзов
43 174
Игорь Горбачев Я собирался вводить только целые числа, без запятой, поэтому . Она работает, мне интересно, можно ли еще лучше написать ?)
1. диаметр проще посчитать из радиуса, чем из длины окружности.
2. если результаты вычислений используются только для вывода, использовать переменные ни к чему.
3. в вычислениях скобки лишние. ошибки в этом нет, но с толку может сбить при беглом взгляде - приходится останавливаться и смотреть подробнее, в общем, снижает читаемость кода.
4. По дизайну - лучше выводить в разные строки.
5. Ну и по математике - процессору все равно, что считать, число пи можно и поточней определить.