Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562

Как по-русски обозвать целиком эту конструкцию?

23.05.2012, 13:37. Показов 2177. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ту что в круглых скобках в операторе for?
C++
1
2
3
4
for (i=0; i<n; ++i)
{
 cout<<i;
}
В фигурных скобках - тело, вся первая строка - заголовок. А то, что в круглых скобках целиком, но без самого оператора for? Я циклом пользоваться умею, мне нужна только формулировка, как он пишется.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.05.2012, 13:37
Ответы с готовыми решениями:

Как обозвать эту величину?
switch (c). Как обозвать величину c? Семантику её я знаю, меня интересует именно как она называется.

Как по-русски обозвать назначение члена?
typedef struct _CONSOLE_SELECTION_INFO { DWORD dwFlags; COORD dwSelectionAnchor; SMALL_RECT srSelection; }...

Английский язык. Как правильно перевести эту странную конструкцию
В первый раз встречаю такую конструкию: &quot;... has got me by my soul to squeeze.&quot; Полный контекст: &quot;I've got a bad disease ...

28
 Аватар для niceonehere
13 / 13 / 0
Регистрация: 14.04.2012
Сообщений: 158
23.05.2012, 13:45
i=0 стартовое значение счётчика
i<n условие выполнения тела
++i увеличение счётчика в данном случае до выполнения тела а если было i++ то после
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
23.05.2012, 13:52
Не знаю как все вместе называется, знаю что тут есть 3 блока.
Первый - блок инициализации.
Второй - блок условия.
Третий - пост-блок или как-то так(выполняется после тела цикла)
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
23.05.2012, 14:07  [ТС]
Как сформулировать? "Сначала пишется сам оператор, потом обязательно в круглых скобках три блока, потом тело цикла. Телом цикла может быть ровно один простой, или составной оператор, в первом случае после него ставится точка с запятой, во втором точка с запятой после тела цикла не ставится. Порядок блоков: сначала блок инициализации, потом бок условия продолжения, потом блок модификации и между ними точки с запятой"? Получается то ли
C++
1
2
3
4
for (i=1; i<10; ++i)
{
 cout<<i;
}
, то ли
C++
1
2
3
4
for (i=1); (i<10); (++i)
{
 cout<<i;
}
.
0
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
23.05.2012, 14:43
Если сложно описать словами, опишите зрительно. Вроде этого:
Code
1
2
3
4
for(инициализация; выражение; инкремент)
{
  последовательность инструкций
}
А дальше уже расписывать по отдельности.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
23.05.2012, 14:52  [ТС]
Во-первых чаще декремент. Во-вторых какая к чёрту последовательность инструкций? По-нормальному это называется тело цикла. В третьих, надо же описать, где ставить скобки. Кстати,
C++
1
2
3
4
for (p=Start; p!=NULL; p=p->Next)
{
 cout<<p->Data<<",  ";
}
. Ищем инкремент с декрементом и удивляемся. В-третьих выражения бывают разные, а на самом деле там конкретно условие продолжения, которое есть выражение логического типа, или приводимое к логическому типу, истинное в том и только в том случае, когда цикл должен продолжаться и ложное, если его требуется прервать. Написав просто "выражение", ты теряешь и тип, и семантику.
0
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
23.05.2012, 15:13
Цитата Сообщение от taras atavin Посмотреть сообщение
По-нормальному это называется тело цикла
В случае, если тела как такового нет, мне кажется, лучше называть это дело циклом с пустой инструкцией.
Цитата Сообщение от taras atavin Посмотреть сообщение
Во-первых чаще декремент.
Спорно.
Цитата Сообщение от taras atavin Посмотреть сообщение
Написав просто "выражение", ты теряешь и тип, и семантику.
Цитата Сообщение от HighPredator Посмотреть сообщение
А дальше уже расписывать по отдельности.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
23.05.2012, 15:40  [ТС]
Цитата Сообщение от HighPredator Посмотреть сообщение
В случае, если тела как такового нет, мне кажется, лучше называть это дело циклом с пустой инструкцией.
С пустым телом, инструкции могут быть и в блоках инициализации и модификации.

Добавлено через 1 минуту
Цитата Сообщение от HighPredator Посмотреть сообщение
Спорно.
При оптимизации сравнений так даже почти всегда: отрицательные пределы всё таки встречаются редко, в основном положительные, а оптимизированное сравнение всегда выполняется только с нолём.
0
23.05.2012, 15:42

Не по теме:

Слишком толсто. Даже не смешно ни разу. :wall:

0
23.05.2012, 15:42  [ТС]

Не по теме:

Deviaphan, а я не ты, мне народ смешить не надо.

0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
23.05.2012, 15:48
Цитата Сообщение от taras atavin Посмотреть сообщение
При оптимизации сравнений так даже почти всегда: отрицательные пределы всё таки встречаются редко, в основном положительные, а оптимизированное сравнение всегда выполняется только с нолём.
И тебя, разумеется, не смущает, что в большинстве случаев размерность это беззнаковая величина, которая меньше нуля не бывает по определению. size_t и всё такое...
0
23.05.2012, 15:51

Не по теме:

Цитата Сообщение от taras atavin Посмотреть сообщение
По-нормальному это называется тело цикла
по-нормальному это называеться "составной оператор"

0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
23.05.2012, 15:58  [ТС]
Цитата Сообщение от Jupiter Посмотреть сообщение
по-нормальному это называеться "составной оператор"
Допускается и простой, а составные бывают и без циклов.

Добавлено через 3 минуты
Цитата Сообщение от Deviaphan Посмотреть сообщение
И тебя, разумеется, не смущает, что в большинстве случаев размерность это беззнаковая величина, которая меньше нуля не бывает по определению. size_t и всё такое...
Так а я о чём?
C++
1
2
size_t i;
for (i=N; i>0; --i)
, либо искусственно-знаковое сравнение аля
C++
1
2
signed long int i;
for (i=(signed long int)N-1; i>=0; --i)
(когда long int - мемсайз), а сами значения опять таки все неотрицательные.
1
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
23.05.2012, 16:01
Цитата Сообщение от taras atavin Посмотреть сообщение
Так а я о чём?
Код C++
1
2
size_t i;
for (i=N; i>0; --i)
А нулевой элемент массива ты куда дел и почему решил с ним не работать?
И не менее часто последующие значения зависят от предыдущих.
А если они не зависят друг от друга, то добро пожаловать в жестокий мир многопроцессорного программирования.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
23.05.2012, 16:02  [ТС]
Цитата Сообщение от Deviaphan Посмотреть сообщение
А нулевой элемент массива ты куда дел и почему решил с ним не работать?
А в этом варианте перебирается не массив. Счётчик цикла вообще не обязан быть параметром цикла и даже может иметь разрядность раза так в 2 побольше мемсайза.
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
23.05.2012, 16:03
Честно признаюсь, я тоже больше люблю декремент.) Но почти им не пользуюсь, логика работы и не позволяет.(

Добавлено через 46 секунд
Цитата Сообщение от taras atavin Посмотреть сообщение
А в этом варианте перебирается не массив.
А что именно перебирается при помощи индекса, если это не массив?
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
23.05.2012, 16:34  [ТС]
Цитата Сообщение от Deviaphan Посмотреть сообщение
А если они не зависят друг от друга, то добро пожаловать в жестокий мир многопроцессорного программирования.
Например,
C++
1
2
3
4
5
6
7
8
9
10
11
12
for (i=0; i<9; ++i)
{
 for (j=i+1; j<10; ++j)
 {
  if (a[i]>a[j])
  {
   t=a[i];
   a[i]=a[j];
   a[j]=t;
  }
 }
}
и
C++
1
2
3
4
5
6
7
8
9
10
11
12
for (i=9; i>0; --i)
{
 for (j=i-1; j>=0; --j)
 {
  if (a[j]>a[i])
  {
   t=a[i];
   a[i]=a[j];
   a[j]=t;
  }
 }
}
эквивалентны, но параллелизма не терпят. Можно перевернуть и Гаусса, и определитель матрицы и произведение матриц. Если цикл не занимается вводом/выводом, или последовательным доступом (например, к линейному списку), то можно перевернуть и зависимость. Даже в авторасписании бывают перевернутые циклы. А если ты в конкретном случае не можешь перевернуть зависимость, то счастливо отвлечься на изучение математических дебрей.

Добавлено через 8 минут
Цитата Сообщение от Deviaphan Посмотреть сообщение
А что именно перебирается при помощи индекса, если это не массив?
Телом цикла может быть второй цикл и оба вместе могут решать уравнение каким нибудь методом последовательного приближения, тогда внешний цикл перебирает не индекс, а абстрактный счётчик. По идее счёткчик в этом случае не нужен, там должен быть цикл с постусловием достижения некоторого значения невязки, но на него вешают защиту от затягивния в виде составного условия повторения, ложного не только при малой невязке, но и при превышении заданного числа итераций. У меня таких циклов было по шесть штук на проект и крутились они часами.

Добавлено через 11 минут
Ну и, наконец, самый тупой вариант - поиск определённого по счёту элемента линейного списка.
C++
1
2
3
4
5
6
int & larray::operator [] (unsigned int index)
{
 int *p;
 for (p=start, ++index; (index>0)&&(p->next=NULL); p=p->next, --index);
 return *p;
}
Ну и факториал, конечно,:
C++
1
2
3
4
5
6
7
8
9
int factorial(unsigned int x)
{
 int r=1;
 for (; i>0; --i)
 {
  r*=i;
 }
 return r;
}
. Случаи, когда сравнение трогать нельзя, в контексте его оптимизации не рассматриваются. Но там инкремент/декремент врядли не примерно по ровну.
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
23.05.2012, 17:57
Продолжим толстый троллинг.
В чём, с точки зрения оптимизации, разница между j<10 и j>=0 ?
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
23.05.2012, 18:08  [ТС]
Цитата Сообщение от Deviaphan Посмотреть сообщение
В чём, с точки зрения оптимизации, разница между j<10 и j>=0 ?
Даже если не учитывать загрузку лишнего операнда, либо необходимость занять один лишний регистр, сравнение с нолём само по себе быстрей.

Добавлено через 4 минуты
А в случае факториала ещё и избавляемся от лишних операций инициализации специальной величины-счётчика, отведения под неё памяти (r то будет сразу в eax) и освобождения её при завершении функции. Да и в других функциях можно выкрутиться подобным же образом, если параметр сразу равен одному из пределов цикла. И с тем же результатом.

Добавлено через 1 минуту
И тролят здесь меня, упорно уводя от вопроса о наименовании содержимого круглых скобок.
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
23.05.2012, 18:39
Цитата Сообщение от taras atavin Посмотреть сообщение
Даже если не учитывать загрузку лишнего операнда, либо необходимость занять один лишний регистр, сравнение с нолём само по себе быстрей.
1. Что за лишний операнд? Почему ты так уверен в том, что сгенерирован код с использованием test? А ведь этот оператор вызван быть не может, т.к. уловие >=, а не =, поэтому в любом случае будет использовано обычное сравнение. Возможно, что вместо загрузки константы 0 будет использовано xor регистра.
2. соответственно и лишнего регистра нет, т.к. даже 0 придётся загружать в регистр
3. С какой стати сравнение с нулём быстрее?

Цитата Сообщение от taras atavin Посмотреть сообщение
И тролят здесь меня
Потому я и сказал "продолжаем толстый троллинг". Ну нельзя твой вопрос воспринимать всерьёз. И ответить не стебаясь невозможно в принципе.


Цитата Сообщение от taras atavin Посмотреть сообщение
А в случае факториала
Щяс вообще поржём и потроллим знатно.
Привожу два листинга. Код на С++, и сгенерированный ассемблерный код. Я там выделю интересные моменты вот так ****************

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
__declspec(noinline) int factorial(unsigned int i)
{
    int r=1;
    for (; i>0; --i)
    {
        r*=i;
    }
    return r;
}
 
__declspec(noinline) int factorial2(unsigned int i)
{
    int r=1;
    for (int x = 1; x <= i; ++x)
    {
        r*=x;
    }
    return r;
}
 
 
int _tmain(int argc, _TCHAR* argv[])
{
 
    int f1 = factorial( 10 );
 
    std::cout << f1 << std::endl;
    
    
    int f2 = factorial2(10);
    std::cout << f2 << std::endl;
 
    return 0;
}
Assembler
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
; Listing generated by Microsoft (R) Optimizing Compiler Version 16.00.40219.01 
 
    TITLE   T:\r\r\r.cpp
    .686P
    .XMM
    include listing.inc
    .model  flat
 
INCLUDELIB OLDNAMES
 
EXTRN   @__security_check_cookie@4:PROC
EXTRN   __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z:PROC
EXTRN   __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@H@Z:PROC
EXTRN   __imp_?endl@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z:PROC
EXTRN   __imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A:BYTE
PUBLIC  ?factorial2@@YAHI@Z             ; factorial2
; Function compile flags: /Ogtp
; File t:\r\r\r.cpp
;   COMDAT ?factorial2@@YAHI@Z
_TEXT   SEGMENT
?factorial2@@YAHI@Z PROC                ; factorial2, COMDAT
 
; 20   :    int r=1;
; 21   :    for (int x = 1; x <= i; ++x)
; 22   :    {
; 23   :        r*=x;
; 24   :    }
; 25   :    return r;
 
;***************************************************************************************************
;  Вот это весь код, который описывает реализацию факториала с инкрементом
;  Компилятору хватило мозгов всё вычислить в compile-tme
;  Всего дона операция - помещение результата в регистр EAX
    mov eax, 3628800                ; 00375f00H
;***************************************************************************************************
; 26   : }
 
    ret 0
?factorial2@@YAHI@Z ENDP                ; factorial2
_TEXT   ENDS
PUBLIC  ?factorial@@YAHI@Z              ; factorial
; Function compile flags: /Ogtp
;   COMDAT ?factorial@@YAHI@Z
_TEXT   SEGMENT
?factorial@@YAHI@Z PROC                 ; factorial, COMDAT
 
; 9    : {
 
; **************************************************************************************************
;  Код с декрементом.
;  Суммарно 22 операции
    mov ecx, 10                 ; 0000000aH
 
; 10   :    int r=1;
 
    mov eax, 1
    npad    6
$LL3@factorial:
 
; 11   :    for (; i>0; --i)
; 12   :    {
; 13   :        r*=i;
 
    imul    eax, ecx
    dec ecx
    jne SHORT $LL3@factorial
;****************************************************************************************************
; 14   :    }
; 15   :    return r;
; 16   : }
 
    ret 0
?factorial@@YAHI@Z ENDP                 ; factorial
_TEXT   ENDS
PUBLIC  _wmain
; Function compile flags: /Ogtp
;   COMDAT _wmain
_TEXT   SEGMENT
_argc$ = 8                      ; size = 4
_argv$ = 12                     ; size = 4
_wmain  PROC                        ; COMDAT
 
; 31   : 
; 32   :    int f1 = factorial( 10 );
; 33   : 
; 34   :    std::cout << f1 << std::endl;
 
    mov eax, DWORD PTR __imp_?endl@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z
    push    eax
    call    ?factorial@@YAHI@Z          ; factorial
    mov ecx, DWORD PTR __imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A
    push    eax
    call    DWORD PTR __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@H@Z
    mov ecx, eax
    call    DWORD PTR __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z
 
; 35   :    
; 36   :    
; 37   :    int f2 = factorial2(10);
; 38   :    std::cout << f2 << std::endl;
 
    mov ecx, DWORD PTR __imp_?endl@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z
    push    ecx
    call    ?factorial2@@YAHI@Z         ; factorial2
    mov ecx, DWORD PTR __imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A
    push    eax
    call    DWORD PTR __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@H@Z
    mov ecx, eax
    call    DWORD PTR __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z
 
; 39   : 
; 40   :    return 0;
 
    xor eax, eax
 
; 41   : }
 
    ret 0
_wmain  ENDP
_TEXT   ENDS
END
Как говорится, не пытайтесь перехитрить компилятор.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.05.2012, 18:39
Помогаю со студенческими работами здесь

Как обозвать ошибку?
Доброго всем. Ситуация такая - есть сайт на Wordpress, размещен на хостинге 101damain.com - хостинг гавно, знаю. На сайте...

Как обозвать метод?
Класс TDirectory (каталог) имеет метод, делающий каталог по указателю this текущим. Как обозвать этот метод? Реализовать я его реализовал,...

Как обозвать курсовик?
Сделал &quot;личный органайзер&quot; с тайм-менеджерскими штучками. Название &quot;личный органайзер&quot; не очень устраивает преподавателя. Подскажите...

Как обозвать функцию?
Есть родительское окно, функция примает минимальные WindowRactagleы, его дочерних окон и ClientRectagle родительского окна и пересчитывает...

Как обозвать в c# строковый параметр из реестра (По умолчанию)?
Добрый день. Как записан этот параметр в c# ? Есть некий код: public static string Recovery() { ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru