Форум программистов, компьютерный форум CyberForum.ru

Совершенствование кода - C++

Восстановить пароль Регистрация
 
Raikerian
9 / 9 / 1
Регистрация: 10.05.2011
Сообщений: 101
11.02.2012, 15:11     Совершенствование кода #1
Всем доброго времени суток На C++ я новичок, но эта тема создана не для проверки математического решения задач в моих кодах и не для решения этих же задач. Здесь я хочу спросить как правильнее оформить код чтобы он выглядел более совершенным (красивым). Все таки если учиться писать программы используя C++ то учиться писать их красиво нужно с самого начала (как я считаю).

Сама задача была по площади квадрата найти остальные значения:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// 1-1.cpp: По площади квадрата найти необходимые значения
//
#include <iostream>
#include <math.h>
#include <conio.h>
using namespace std;
int main()
{
        // Русский язык
    setlocale(LC_ALL, "");
    cout << "Введите площадь квадрата: S = ";
    double S;
    cin >> S;
    // a - сторона, d - диагональ, S1 - площадь описанного около квадрата круга
    double a = sqrt(S), d = sqrt(2*S), S1 = 3.14*0.5*a*a;
    // Округление всех чисел до двух знаков после запятой (если требуется)
    a = int(a * 100) / 100.0;
    d = int(d * 100) / 100.0;
    S1 = int(S1 * 100) / 100.0;
    // Вывод данных на экран
    cout << "\nОтветы:" << "\na = " << a << "\nd = " << d << "\nS1 = " << S1 << "\n";
    getch();
    return 0;
}
Собственно вопросы по коду:
1.
C++
1
float a = sqrt(S), d = sqrt(2*S), S1 = 3.14*0.5*a*a;
Адекватно ли сразу при объявлении переменных присваивать им формулы для рассчетов? Или всеже стоит просто объявить переменные, а ниже построчно уже присваивать формулы/значения?

2.
C++
1
2
3
a = int(a * 100) / 100.0;
d = int(d * 100) / 100.0;
S1 = int(S1 * 100) / 100.0;
Стоит ли для этой части округления создавать отдельную функцию/процедуру?

3.
C++
1
cout << "\nОтветы:" << "\na = " << a << "\nd = " << d << "\nS1 = " << S1 << "\n";
Так правильно или вывод каждой переменной стоит оформить cout'ом отдельными строками?

4. Насколько знаю тип float занимает меньше объема памяти чем double, не экономней ли его было использовать здесь?

5. Пожалуй технический вопрос. cin.get() не хочет задерживать экран после выполнения программы, поэтому приходиться использовать getch() подключая отдельную библиотеку. Быть может есть варианты почему cin.get() не работает?

Спасибо за внимание
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.02.2012, 15:11     Совершенствование кода
Посмотрите здесь:

C++ конверт кода
C++ Оптимизация кода
Инжект кода C++
оптимизация кода! C++
Перевод кода в С C++
C++ Строка кода
C++ оптимизация кода
оптимизация кода C++
Адаптация кода C++
Разбор кода C++
C++ Объединить 2 кода
Перенос кода на C++11 C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vladislavchick
35 / 35 / 1
Регистрация: 22.05.2010
Сообщений: 107
11.02.2012, 15:30     Совершенствование кода #2
По-моему, все ОК. Если не устраивают длинные строчки, то пишете так:
C++
1
2
3
double a = sqrt(S), 
       d = sqrt(2*S),
       S1 = 3.14*0.5*a*a;
Добавлено через 1 минуту
для задержки перед cin.get() ставьте cin.sync().

Добавлено через 5 минут
cin.get() не работает, потому что, если уже производился ввод, то в буфере потока cin остается несчитанный символ новой строки, который и дочитывает cin.get(). cin.sync() очищает буфер, поэтому cin.get() брать из потока уже нечего, и он ждет ввода какого-нибудь символа.
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
11.02.2012, 16:21     Совершенствование кода #3
1. да, мало того это хорошая идея - инициализировать сразу после объявления. только лучше каждую переменную на своей строке. более читаемо.

2. опять же из соображений читаемости и очевидности кода - да. что-то вродe a=round(a) гораздо яснее передает суть, чем строка a = int(a * 100) / 100.0; Но программа маленькая и это не критично.

3. если все умещается в пределах экрана, то можно. Иначе либо просто перенести строку с правильным выравниванием, либо сделать еще один cout<<...

4. исходить нужно из соображений требуемой точности, а не экономить память на глупостях.
Raikerian
9 / 9 / 1
Регистрация: 10.05.2011
Сообщений: 101
12.02.2012, 17:30  [ТС]     Совершенствование кода #4
Спасибо за советы вроде со всем разобрался)
Yandex
Объявления
12.02.2012, 17:30     Совершенствование кода
Ответ Создать тему
Опции темы

Текущее время: 11:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru