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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.83
Stesh
0 / 0 / 0
Регистрация: 30.04.2010
Сообщений: 27
#1

Оформление и оптимизация кода - C++

01.08.2006, 19:09. Просмотров 2977. Ответов 12
Метки нет (Все метки)

Собссно, сабж и есть, покритикуйте пожалуйста мой код, подскажите, что где неправильно...т.е нерационально, чем можно заменить, что лучше использовать...Чтобы учится на ошибках надо их знать...
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
void CDLineDlg::OnOK() 
{
UpdateData (TRUE);
CString out; 
CTimeSpan diff;
CTime currt = CTime::GetCurrentTime();
 
int nD = currt.GetDay(); 
int nM = currt.GetMonth(); 
int nY = currt.GetYear();
 
int drD = m_DTP.GetDay(); 
int drM = m_DTP.GetMonth(); 
int drY = m_DTP.GetYear();
 
int difY=nY-drY;
int difM=nM-drM;
int difD=nD-drD;
 
if (difY>50)
{
MessageBox("C введённой вами даты прошло больше 50 лет! На фига вам линеечка!","Ошибка!!!",MB_OK);
}
if ((nY { 
MessageBox("Указанная вами дата не должна быть больше сегодняшнего числа","Ошибка!!!",MB_OK);
}
 
else
{
if ((difM 0))
{
difY=difY-1;difM=difM+12;
}
if ((difD {
bool vis =checkvisokos(nY);
int res= dayInMonth(nM-1,nY,vis);
difY=difY-1;
difM=difM+12;
difM=difM-1;
difD=difD+res;
}
 
if ((difD 0))
{
bool vis =checkvisokos(nY);
int res= dayInMonth(nM-1,nY,vis);
difM=difM-1;
difD=difD+res;
}
 
CString out =Out(difY,difM,difD,m_Sig);
MessageBox(out,"zuzu",MB_OK);
 
}
 
}
int CDLineDlg::dayInMonth(int numb_month, int year,bool visflag)
{ 
int dIm =0;
 
if ((numb_month==1)||(numb_month==3)||(numb_month==5)||(numb_month==7)||(numb_month==8)||(numb_month==10)||(numb_month==12))
{
dIm=31; 
}
else 
if ((numb_month==4)||(numb_month==6)||(numb_month==9)||(numb_month==11))
{
dIm=30;
}
else 
if (visflag==true) 
{
dIm=28;
} 
else 
{
dIm=29;
}
return dIm;
 
} 
 
bool CDLineDlg::checkvisokos(int god)
{
int r;
div_t divr;
divr=div(god,4);
r=divr.rem;
if ( r ==0) 
{ return true; 
} 
else 
{
return false;
}
}
 
int CDLineDlg::whattype(int c)
{ 
int type;
if ((c==1)||(c==21)||(c==21)||(c==31)||(c==41)||(c==51))
{
type=1;//ед.число
}
else if ( ((c>=5)&&(c=25)&&(c=35)&&(c=45)&&(c {
type =3;//мн.число
}
else
{
type= 2;//род.падеж
}
 
return type;
}
 
CString CDLineDlg::Out(int resY,int resM,int resD, CString sig)
{
CString sdifY,sdifM,sdifD,output;
 
sdifY.Format("%d", resY);
sdifD.Format("%d", resD);
sdifM.Format("%d", resM);
 
output=sig+":";
 
 
if (resY!=0) 
{
int Yt = whattype(resY);
switch (Yt)
{
case 1: {output+=sdifY+" год ";break;}
case 2: {output+=sdifY+" года ";break;}
case 3: {output+=sdifY+" лет ";break;}
}
}
 
if (resM!=0) 
{
int Mt = whattype(resM);
switch (Mt)
{
case 1: {output+=sdifM+" месяц и ";break;}
case 2: {output+=sdifM+" месяца и ";break;}
case 3: {output+=sdifM+" месяцев и ";break;}
}
}
 
if (resD!=0) 
{
int Dt = whattype(resD);
switch (Dt)
{
case 1: {output+=sdifD+" день.";break;}
case 2: {output+=sdifD+" дня.";break;}
case 3: {output+=sdifD+" дней.";break;}
}
} 
 
return output;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.08.2006, 19:09     Оформление и оптимизация кода
Посмотрите здесь:

Оформление кода - C++
Здравствуйте, программно получаю строки с неоформленным html кодом, можно ли как-то строки программно обрабатывать и придавать html коду...

Правильное оформление кода - C++
Возникло несколько вопросов по оформлению 1. Важны ли комментарии к коду? 2. Предположим, есть у меня три класса. Выполняют разную...

Оформление кода на С++ (стандарты кодирования) - C++
Добрый день, написал лабораторную на с++, а преподаватель не хочет принимать из-за стандартов оформления, дак вот, как привести программу к...

Оформление выполненного кода в виде шаблона функции - C++
Задание: в одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) максимальный элемент массива; 2) сумму...

Оптимизация кода - C++
main: #include <iostream> #include <conio.h> #include "keyBuffer.h" #include "pause.h" #include <windows.h> const char...

Оптимизация кода - C++
Как сравнить 2 строки. Вот как их задавал в ходе программы string h,b; ... char * text = NULL; if ( OpenClipboard(0) ) { ...

Оптимизация кода - C++
Программа ищет одинаковые файлы в папке где сама находится(по маске или расширению), по хэшу, и перемещает все копии в отдельную папку. ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
VladConn
1 / 1 / 2
Регистрация: 17.10.2007
Сообщений: 1,119
01.08.2006, 20:13     Оформление и оптимизация кода #2
Вот так считается число дней в феврале:
if (year mod 4 != 0)
{use 28 for days in February}
else if (year mod 400 == 0)
{use 29 for days in February}
else if (year mod 100 == 0)
{use 28 for days in February}
else
{use 29 for days in February}
На VB6:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Function GetFebDays(ByVal pintYear As Integer) As Integer
    Dim intReturn As Integer
    
    If pintYear Mod 4 <> 0 Then
            intReturn = 28
    ElseIf pintYear Mod 400 = 0 Then
            intReturn = 29
    ElseIf pintYear Mod 100 = 0 Then
            intReturn = 28
    Else
            intReturn = 29
    End If
    
    GetFebDays = intReturn
End Function
Успехов
Stesh
0 / 0 / 0
Регистрация: 30.04.2010
Сообщений: 27
01.08.2006, 22:14  [ТС]     Оформление и оптимизация кода #3
VladConn (01.08.2006)
Вот так считается число дней в феврале:
if (year mod 4 != 0)
{use 28 for days in February}
else if (year mod 400 == 0)
{use 29 for days in February}
else if (year mod 100 == 0)
{use 28 for days in February}
else
{use 29 for days in February}
Спасибо, только чёт ничего не понятно - зачем сначала mod 4, потом 400, потом 100...А чем этот код лучше?
VladConn
1 / 1 / 2
Регистрация: 17.10.2007
Сообщений: 1,119
01.08.2006, 22:27     Оформление и оптимизация кода #4
А тем, что если год делится нацело на 4, то это совсем не значит, что он будет високосным...
Stesh
0 / 0 / 0
Регистрация: 30.04.2010
Сообщений: 27
01.08.2006, 22:58  [ТС]     Оформление и оптимизация кода #5
тьфу, точно...
Stesh
0 / 0 / 0
Регистрация: 30.04.2010
Сообщений: 27
01.08.2006, 23:28  [ТС]     Оформление и оптимизация кода #6
только mod -это видимо VB -шное ...тут наверное надо modf()
VladConn
1 / 1 / 2
Регистрация: 17.10.2007
Сообщений: 1,119
02.08.2006, 00:11     Оформление и оптимизация кода #7
Видимо...
boombastik
7 / 7 / 0
Регистрация: 13.02.2007
Сообщений: 1,255
02.08.2006, 22:49     Оформление и оптимизация кода #8
В C++ есть оператор "остаток от деления"

Например,

int mod = 5 % 3;



Удачи,

Владимир
Stesh
0 / 0 / 0
Регистрация: 30.04.2010
Сообщений: 27
02.08.2006, 23:30  [ТС]     Оформление и оптимизация кода #9
ага, спасибо ...я так и сделала:
C++
1
2
3
4
if (god % 400 == 0 || god % 4 == 0 && god % 100 != 0)
    { return true;} 
else 
    {return false;}
VladConn
1 / 1 / 2
Регистрация: 17.10.2007
Сообщений: 1,119
02.08.2006, 23:52     Оформление и оптимизация кода #10
Stesh,
Вы уверены в правильности вашего кода? Логика должна быть такой:
Если год делится на 400, то он високосный. Иначе, если он делится на 100 или не делится на 4, то невисокосный. Иначе - високосный.
Т.е. важен порядок проверки. У вас там он не указан. Скобок по-моему маловато. Я бы сделал через последовательность If-ов.
Vadim_ig
0 / 0 / 0
Регистрация: 05.01.2010
Сообщений: 235
21.08.2006, 17:51     Оформление и оптимизация кода #11
to VladConn
Что-то я никак логики рассчета високостного года не пойму, разве не каждый четвертый? (всегда думал так).

300-й получается не високостный (не делится на 400, но делится на 100), а 296, 304 и 400-й - високостные??? Или каждые 400 лет високостный пропускается?


to Stesh
C++
1
2
3
4
5
6
7
int CDLineDlg::whattype(int c)
{
    int last = c % 10;
    if (lalt == 1) return 1;
    if (last >=5) return 3;
    return 2;
}
boombastik
7 / 7 / 0
Регистрация: 13.02.2007
Сообщений: 1,255
22.08.2006, 16:56     Оформление и оптимизация кода #12
Вадим, почитайете где-нибудь про разницу между Юлианским и Григорианским календарями, например вот здесь:

http://ru.wikipedia.org/wiki/Юлианский_календарь

http://ru.wikipedia.org/wiki/Григорианский_календарь



С уважением,

Владимир
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.08.2006, 19:23     Оформление и оптимизация кода
Еще ссылки по теме:

Оптимизация кода - C++
Пожалуйста форумчане как можно сократить этот код Особенно от 27 до 90 строки #include &lt;iostream&gt; using namespace std; int main() ...

Оптимизация кода - C++
В общем дело такое, мне нужно 2 одинаковые программы(небольшие), только одна программа должна быть неоптимизированная, а другая, точно...

оптимизация кода - C++
Добрый вечер всем. У меня такая проблема: написал прогу, необходимо продемонстрировать ее работу. Т.е. есть L2 список, дек и массив деков,...

Оптимизация кода - C++
Есть вот такой кусочек кода integer h (integer k,n) {return k–n*3 ;} . . . . . z = h (k1, n2) ; Подскажите - как его можно...

Оптимизация кода - C++
В С++ я совсем недавно, вот задали задачку: Перемножить 2 матрицы MxМ, элементами которых являются матрицы NxN. Код я вроде написал,...


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

Или воспользуйтесь поиском по форуму:
Vadim_ig
0 / 0 / 0
Регистрация: 05.01.2010
Сообщений: 235
22.08.2006, 19:23     Оформление и оптимизация кода #13
Почитал. Действительно век живи век учись.
Ну и еще по сабжу
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CString CDLineDlg::Out(int resY,int resM,int resD, CString sig)
{
    CString sdifY,sdifM,sdifD,output;
 
    sdifY.Format("%d", resY);
    sdifD.Format("%d", resD);
    sdifM.Format("%d", resM);
 
    output=sig+":";
 
    static CString yearNames[] = {"год", "года", "лет"};
    static CString monthNames[] = {"месяц", "месяца", "месяцев"};
    static CString dayNames[] = {"день", "дня", "дней"};
 
    if (resY!=0)  output+=sdifY + yearNames[whattype(resY)] + " ";
    if (resM!=0) output+=sdifM + monthNames[whattype(resM)] + " ";
    if (resD!=0) output+=sdifD + dayNames[whattype(resD)] + " ";
 
    return output;
}
Yandex
Объявления
22.08.2006, 19:23     Оформление и оптимизация кода
Ответ Создать тему
Опции темы

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