Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.03.2013, 19:07   #1
AcTiV
Пользователь
 
Регистрация: 25.12.2012
Сообщений: 40
По умолчанию Критика моего кода

хочу посмотреть на свой код с другой стороны, критерии:
-синтаксис
-читаемость
-быстродействие
ну что там еще есть

PHP код:

#include "stdafx.h"
#include "iostream"
#include "Windows.h"
#include "Math.h"
using namespace std;


//глобальные переменные и константы
const double PI 3.14159265;

//=====================начало функции калькулятора=======================//
void Calculator ()
{
    
//переменные
    
float xy;    
    
int SelectToOption;
    
//основа функции калькулятор
    
cout << "\nФункция калькулятор" << endl;
    
cout << "Выберите действие калькулятора:" << endl;
    
cout << "1 - умножение\n2 - деление\n3 - додавание\n4 - отнимание" << endl;
    
cin >> SelectToOption;
    
//умножение
    
if ( SelectToOption == 1)
    {
        
cout << "Вы выбрали действие умножение" << endl;
        
cout << "Введите первое число: " ;
        
cin >> x;
        
cout << "Введите второе число: " << endl;
        
cin >> y;
        
cout << "Умножение " << << " на " << << " равно " << << endl;
    }
    
//деление
    
else if (SelectToOption == )
    {
        
cout << "Вы выбрали действие деление" << endl;
        
cout << "Введите первое число: " ;
        
cin >> x;
        
cout << "Введите второе число: " ;
        
cin >> y;
        
cout << "Деление " << << " на " << << " равно " << << endl;
    }
    
//додавание
    
else if ( SelectToOption == )
    {
        
cout << "Вы выбрали действие додавание" << endl;
        
cout << "Введите первое число: " ;
        
cin >> x;
        
cout << "Введите второе число: " << endl;
        
cin >> y;
        
cout << "додавание " << << " и " << << " равно " << << endl;
    }
    
//отнимание
    
else if ( SelectToOption == )
    {
        
cout << "Вы выбрали действие отнимание" << endl;
        
cout << "Введите первое число: " ;
        
cin >> x;
        
cout << "Введите второе число: " << endl;
        
cin >> y;
        
cout << "отнимание " << << " и " << << " равно " << << endl;
    }
    else 
    {
        
cout << "Неправильный ввод. Функции под номером " << SelectToOption << " нету\n" << endl;
        
Calculator();
    }
}
//=====================================конец функции калькулятора====================//



//====================================начало математических функций================//
void MathFunction ()
{
    
//переменные
    
int SelectToMathF;    //выбор функции
    
double l;            //переменная для мат. функций
    /*
    1 - sin        2 - cos        3 - tg        4 - ctg        5  - arcsin        6 - arccos        7 - arctg        8 - arcctg
    9 - Ln        10 - Log10    11 - Sqrt        12 - Exp
    */

    
cout << "Вы выбрали раздел математичесие функции" << endl;
    
cout << "Для выбора функции, напишите ее номер (  )" << endl;
    
cout << "Список математических функций:\n" 
        
<< "1)Sin \n2)Cos \n3)Tg \n4)Ctg \n5)ArcSin \n6)ArcCos \n7)ArcTg \n8)ArcCtg \n9)Ln \n10)Log10 \n11)Sqrt \n12)Exp \n" << endl;
    
cout << "Введите номер функции: " ;
    
cin >> SelectToMathF;
    
//=======определяет что выбрал пользователь==========//
    //функция синус
    
if (SelectToMathF == 1)
    {
        
cout << "Вы выбрали математическую функцию Sin" << endl;
        
cout << "Напишите число для Sin(x): " ;
        
cin >> l;
        
cout << "Sin(x) = " << sin(l) << endl;
    }
    
//функция косинус
    
else if (SelectToMathF == 2)
    {
        
cout << "Вы выбрали математическую функцию Cos" << endl;
        
cout << "Напишите число для Cos(x): " ;
        
cin >> l;
        
cout << "Cos(x) = " << cos(l) << endl;
    }
    
//функция тангенс
    
else if (SelectToMathF == 3)
    {
        
cout << "Вы выбрали математическую функцию Tg" << endl;
        
cout << "Напишите число для Tg(x): " ;
        
cin >> l;
        
cout << "Tg(x) = " << tan(l) << endl;
    }
    
//функция котангенс
    
else if (SelectToMathF == 4)
    {
        
cout << "Вы выбрали математическую функцию Ctg" << endl;
        
cout << "Напишите число для Ctg(x): " ;
        
cin >> l;
        
cout << "Ctg(x) = " << tan(l) << endl;
    } 

Последний раз редактировалось AcTiV; 01.03.2013 в 19:11.
AcTiV вне форума Ответить с цитированием
Старый 01.03.2013, 19:08   #2
AcTiV
Пользователь
 
Регистрация: 25.12.2012
Сообщений: 40
По умолчанию

PHP код:
    //функция арксинус
    
else if (SelectToMathF == 5)
    {
        
cout << "Вы выбрали математическую функцию ArcSin" << endl;
        
cout << "Напишите число для ArcSin(x): " ;
        
cin >> l;
        
cout << "ArcSin(x) = " << asin(l) << endl;
    }
    
//функция арккосинус
    
else if (SelectToMathF == 6)
    {
        
cout << "Вы выбрали математическую функцию ArcCos" << endl;
        
cout << "Напишите число для ArcCos(x): " ;
        
cin >> l;
        
cout << "ArcCos(x) = " << acos(l) << endl;
    }
    
//функция арктангенс
    
else if (SelectToMathF == 7)
    {
        
cout << "Вы выбрали математическую функцию ArcTg" << endl;
        
cout << "Напишите число для ArcTg(x): " ;
        
cin >> l;
        
cout << "ArcTg(x) = " << atan(l) << endl;
    }
    
//функция арккотангенс
    
else if (SelectToMathF == 8)
    {
        
cout << "Вы выбрали математическую функцию ArcCtg" << endl;
        
cout << "Напишите число для ArcCtg(x): " ;
        
cin >> l;
        
cout << "ArcCtg(x) = " << (PI/2)-atan(l) << endl;            
    }
    
//функция натуральный логарифм
    
else if (SelectToMathF == 9)
    {
        
cout << "Вы выбрали математическую функцию Ln" << endl;
        
cout << "Напишите число для Ln(x): " ;
        
cin >> l;
        if (
0)
        {
            
cout << "Ln(x) = " << log(l) << endl;        
        }
        else
        {
            
cout << "Ввденное число меньше нуля" << endl;
            
MathFunction();
        }
    }
    
//функция десятичный логарифм
    
else if (SelectToMathF == 10)
    {
        
cout << "Вы выбрали математическую функцию Log" << endl;
        
cout << "Напишите число для Log(x): " ;
        
cin >> l;
        if(
0)
            
cout << "Log10 (десятичный) = " << log10(l) << endl;
        else
        {
            
cout << "\n\t\t\tНЕПРАВИЛЬНЫЙ ВВОД" << endl;
            
MathFunction();
        }
    }
    
//функция корень
    
else if (SelectToMathF == 11)
    {
        
cout << "Вы выбрали математическую функцию Sqrt" << endl;
        
cout << "Напишите число для Sqrt(x): " ;
        
cin >> l;
        if(
0)
            
cout << "Sqrt = " << sqrt(l) << endl;
        else
        {
            
cout << "\n\t\t\tНЕПРАВИЛЬНЫЙ ВВОД" << endl;
            
MathFunction();
        }
    }
    else if (
SelectToMathF == 12)
    {
        
cout << "Вы выбрали математическую функцию Exp" << endl;
        
cout << "Напишите число для Exp(x): " ;
        
cin >> l;
        if(
0)
            
cout << "Exp = " << exp(l) << endl;
        else
        {
            
cout << "\n\t\t\tНЕПРАВИЛЬНЫЙ ВВОД" << endl;
            
MathFunction();
        }
    }
    else
    {
        
cout << "\n\t\t\tНЕПРАВИЛЬНЫЙ ВВОД" << endl;
        
MathFunction();
    }
}
//===============================конец математических функций=========================// 

Последний раз редактировалось AcTiV; 01.03.2013 в 19:11.
AcTiV вне форума Ответить с цитированием
Старый 01.03.2013, 19:10   #3
AcTiV
Пользователь
 
Регистрация: 25.12.2012
Сообщений: 40
По умолчанию

PHP код:
//=============================начало геометрических формул=============================//
void FormulsOfGeometrix ()
{
    
//переменные
    
double l;    //кут
    
double h;    //высота
    
double a;    //
    
double b;    //стороны
    
double c;    //
    
double p;    //периметр
    
double r;    //радиус
    
int SelectToForOfGeom;    //переменная для сравнивания с вводом пользователя
    //для паралелограмма
    
int yes 1no 0YesOrNo;

    
cout << "Вы выбрали раздел 3. Геометрические формулы" << endl;
    
cout << "Что бы выбрать, просто введите номер формулы и нажмите Enter" << endl;
    
cout << "Список формул: \n"
        
<< "1)Площадь квадрата\n"
        
<< "2)Площадь прямоугольника\n"
        
<< "3)Площадь паралелограмма\n"
        
<< "4)Площадь ромба\n"
        
<< "5)Площадь трапеции\n"
        
<< "6)Площадь круга\n"
        
<< "7)Площадь эллипса\n"
        
<< "8)Площадь Равнобедренный треугольника\n"
        
<< "9)Площадь Равносторонний треугольника\n" << endl;

    
cin >> SelectToForOfGeom;
    
//определяет что выбрал пользователь
    //формула квадрата
    
if (SelectToForOfGeom == 1)
    {
        
cout << "Вы выбрали площадь квадрата" << endl;
        
cout << "Введите сторону квадрата: " ;
        
cin >> a;
        if (
0)    
            
cout << "Площадь квадрата = " << pow(a2) << endl;
        else
        {
            
cout << "\nНЕПРАВИЛЬНЫЙ ВВОД. Сторона квадрата меньша или равна 0\n" << endl;
            
FormulsOfGeometrix();
        }
    }
    
//формула прямоугольника
    
else if (SelectToForOfGeom == )
    {
        
cout << "Вы выбрали площадь прямоугольника" << endl;
        
cout << "Введите первую сторону: " ;
        
cin >> a;
        
cout << "Введите вторую сторону: " ;
        
cin >> b;
        if ((
&& b) > 0)
            
cout << "Площадь прямоугольника = " << << endl;
        else
        {
            
cout << "\nНЕПРАВИЛЬНЫЙ ВВОД. Сторона квадрата меньша или равна 0\n" << endl;
            
FormulsOfGeometrix();
        }
    }
    
//формула Параллелограмма
    
else if (SelectToForOfGeom == 3)
    {
        
cout << "Вам известна высота и сторона? (1 - да, 2 - нет)" << endl;
        
cin >> YesOrNo;
        
//известна ширина и высота
        
if (YesOrNo == 1)
        {
            
cout << "Введите высоту: " ;
            
cin >> h;
            
cout << "Введите ширину: " ;
            
cin >> a;
            if ((
&& h) > 0)
                
cout << "Площадь паралелограмма = " << << endl;
            else
            {
                
cout << "НЕПРАВИЛЬНЫЙ ВВОД. Стороны должныть быть больше чем 0" << endl;
                
FormulsOfGeometrix();
            }
        }
        
//известно 2 стороны и кут
        
else
        {
            
cout << "Введите длину: " ;
            
cin >> a;
            
cout << "Введите ширину: " ;
            
cin >> b;
            
cout << "Введите кут (sin): " ;
            
cin >> l;
            
//проверяем что стороны не меньше 0
            
if ((&& && l) > )
                
cout << "Площадь паралелограмма = " << sin(l) << endl;
            else
            {
                
cout << "НЕПРАВИЛЬНЫЙ ВВОД. Стороны должныть быть больше чем 0" << endl;
                
FormulsOfGeometrix();
            }
        }
    }
    else
    {
        
cout << "\n\t\t\tНЕПРАВИЛЬНЫЙ ВВОД" << endl;
        
FormulsOfGeometrix();
    }
}
//============================конец геометрических формул=============================//



//первая функция, название программы, идея и операции которые будет исполнять программа
void Hello ()
{
    
cout << "\t\t  =================================================" << endl;
    
cout << "\t\t  ||   \t\t   Добрый День\t\t\t ||" << endl;
    
cout << "\t\t  ||          Это мой первый большой проэкт\t ||" << endl;
    
cout << "\t\t  ||    Math.Function by AcTiV"
        
<< "  V 1.0 (Console)\t ||" << endl;
    
cout << "\t\t  =================================================\n\n" << endl;
}
//=====================================================================================// 
AcTiV вне форума Ответить с цитированием
Старый 01.03.2013, 19:27   #4
Morpho
Пользователь
 
Регистрация: 22.07.2012
Сообщений: 29
По умолчанию

Вместо кучи else if можно было бы использовать switch..
Morpho вне форума Ответить с цитированием
Старый 01.03.2013, 19:34   #5
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Цитата:

Код:
const double PI = 3.14159265;
Уберите. В Math.h уже есть PI, а так же некоторые другие константы, посмотрите сами (они там сделаны через препроцессор #define).

Ну и кроме того, не могу не согласится с комментарием выше.

Вот собственно пример того, как надо делать:

Код:
switch(SelectToOption)
{
   case 1:
      cout << "Вы выбрали действие умножение" << endl;
      ...
      break;
   case 2:
      cout << "Вы выбрали действие деление" << endl;
      ...
      break;
   default://если ни один из кэйсов не выбран
      cout << "Такого действия нет. Попробуйте еще раз." << endl;
      ...
      break;
}
Могу отметить, что вы хотя бы читабельно код оформляете. Многим [новичкам] этого не хватает.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс

Последний раз редактировалось ROD; 01.03.2013 в 19:44.
ROD вне форума Ответить с цитированием
Старый 01.03.2013, 20:31   #6
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

ROD прав. Самый оптимальный вариант, на мой взгляд, использовать switch
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 02.03.2013, 14:02   #7
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

Названия переменных не фонтан.
SelectToForOfGeom - это как переводить-то? Если уж называете переменными длинным именем, то не сокращайте слова. К тому же ваш инглиш мне не понятен.
И не нужно создавать переменных с именем вроде YesOrNo. Неужели нельзя создать yes, и если она = 1, то да, если 0, то нет. Вот объясните мне, что можно подумать, увидев такую переменную? В моем понимании в ней должны храниться не числа, а именно 'yes' или 'no'.

И уберите магические числа! 1,2,3,4 в условиях. Какую смысловую нагузку они несут? Я б никогда не подумала, что 11 - это корень, если б не было комментов. Но хороший код должен быть понятен без комментов. В С++ есть такая чудная штука как define. Советую воспользоваться
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать

Последний раз редактировалось ACE Valery; 02.03.2013 в 14:06.
ACE Valery вне форума Ответить с цитированием
Старый 02.03.2013, 14:18   #8
AcTiV
Пользователь
 
Регистрация: 25.12.2012
Сообщений: 40
По умолчанию

я учту ваши пожелания насчет улучшения кода
AcTiV вне форума Ответить с цитированием
Старый 02.03.2013, 14:50   #9
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от ACE Valery Посмотреть сообщение
. В С++ есть такая чудная штука как define. Советую воспользоваться

Не советую.
_Bers вне форума Ответить с цитированием
Старый 02.03.2013, 15:23   #10
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
Не советую.
А, если не секрет, по чему?


Код:
#define FUNC_SUM 1
#define FUNC_SUB 2
#define FUCN_MUL 3
#define FUCN_DIV 4


switch(SelectToOption)
{
   case FUNC_SUM:
      ...
      break;
   case FUNC_SUB:
      ...
      break;
   case FUNC_MUL:
      ...
      break;
   case FUNC_DIV:
      ...
      break;
}
По моему читабельное и понятнее, чем "Магические числа" посреди кода, а самое главное - их легко и просто заменить - всегда знаешь точно где они определены.

Переменные использовать - не рационально (хотя компилятор может эту проблему решить, а может и не решить).
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какие элементы кода могут тормозить загрузку моего сайта? Pyatachok HTML и CSS 3 08.11.2012 23:05
Хочу понять в чем ошибка моего кода FreeCat Общие вопросы C/C++ 11 09.06.2012 03:13
CreateRemoteThread и выполнение моего кода в чужом процессе Человек_Борща Win Api 4 11.05.2012 11:16
Прошу помощи в проверке моего перевода небольшого фрагмента кода от Си к делфи! SkAndrew Общие вопросы Delphi 11 16.08.2009 16:37
Ч чём ошибка моего кода сохранения и загрузки? AngelOfDeath Общие вопросы Delphi 3 08.04.2008 13:55