Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Особое условие для цикла


Автор: Vikelf 29.5.2009, 05:35
Доброго времени суток уважаемые форумчане. Пишу программу на С++ в среде Borland C++ Builder 6.0, столкнулся вот с какой проблемой, есть цикл while(...){...} или do{...}while(...) не важно, мне нужно создать условие работы цикла, но я знаю только условие выхода из него (а в этих циклах нужно условие при которых цикл будет работать), условие сложное, что то вроде этого:        (((a>=b)&&(n==1)&&(v==0))||((g<p)|| (g>t)))   вот, при этом условии цикл должен завершаться. Может кто знает как условие для цикла составить, или цикл какой нибудь в котором не условия работы, а условия выхода прописываются. Заранее всем спасибо! smile  smile 

Автор: Andrey44 29.5.2009, 07:00
Sample 1:
Код

while(true)
{
   if((((a>=b)&&(n==1)&&(v==0))||((g<p)|| (g>t))))break;
}

Sample 2:
Код

for(;;)
{
   if((((a>=b)&&(n==1)&&(v==0))||((g<p)|| (g>t))))break;
}

И думаю еще найдется несколько способов.

Автор: azesmcar 29.5.2009, 07:10
http://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%BA%D0%BE%D0%BD%D1%8B_%D0%B4%D0%B5_%D0%9C%D0%BE%D1%80%D0%B3%D0%B0%D0%BD%D0%B0
http://www.metodichka.net/Informatika.php?itemid=62&catid=25

Vikelf выучите наизусть и не задумывайтесь над мелочами

Автор: gosn1ck 29.5.2009, 07:18
ой как много скобочек  smile это бе не паскаль  smile 

Автор: zim22 29.5.2009, 07:41
 smile 
Цитата(gosn1ck @  29.5.2009,  07:18 Найти цитируемый пост)
ой как много скобочек  

много скобочек в Lisp'e

Автор: Rickert 29.5.2009, 07:59
Добавить отрицание и ещё две скобочки.

Автор: gosn1ck 29.5.2009, 12:46
Цитата(zim22 @ 29.5.2009,  07:41)
smile 
Цитата(gosn1ck @  29.5.2009,  07:18 Найти цитируемый пост)
ой как много скобочек  

много скобочек в Lisp'e

это не оффтоп, это легкий намек на изучение приоритета операций в С smile

Автор: zim22 29.5.2009, 14:28
Цитата(gosn1ck @  29.5.2009,  12:46 Найти цитируемый пост)
это не оффтоп, это легкий намек на изучение приоритета операций в С

"по-памяти" чему будет результат равен сказать можете? smile
Код

int a[] = {10, 20, 30};
int b[] = {100, 200, 300};    
int *pa = a;
int *pb = b;
  
int result = *pa++ + ++*pb;  

Автор: azesmcar 29.5.2009, 14:54
Цитата(zim22 @  29.5.2009,  14:28 Найти цитируемый пост)
"по-памяти" чему будет результат равен сказать можете? smile

нууу..это совсем просто.

усложним smile
Код

int v = 0;
int a[] = {1, 2, 3};
v += 1, 2, 3, ++*a = 5 + *(a + 1);

Цитата(Rickert @  29.5.2009,  07:59 Найти цитируемый пост)
Добавить отрицание и ещё две скобочки. 

зачем? для этого примитивные правила преобразования существуют..я ссылку прислал

Автор: zim22 29.5.2009, 18:38
Цитата(azesmcar @  29.5.2009,  14:54 Найти цитируемый пост)
v += 1, 2, 3, ++*a = 5 + *(a + 1);

оператор запятая. что её бояться smile
***
поспешил с выводами: пойду учить матчасть...  smile 

Автор: azesmcar 29.5.2009, 19:10
zim22

весь фокус в том что приоритет оператора = выше оператора ,
если взять в скобки - результат изменится

Автор: mes 29.5.2009, 19:10
Цитата(zim22 @  29.5.2009,  17:38 Найти цитируемый пост)

оператор запятая. что её бояться smile

оператор то запятая, но .. у него  приоритет меньше чем у присваивания.  smile

вот еще примерчик, на эту тему :
Код

   int a,b,c;
   a= (b= (c = 1, 2),3);

   std::cout << a << " "<< b << " "<< c;

Автор: Dov 30.5.2009, 01:57
Ну, вы, блин, даёте!!!    smile  

А вот ещё примерчик.  Что выведет эта программа? Без компилятора слабо???   smile 
Код
int main()
{
    char  str[] = "igzom etibe en ,iktayber";
    char *p     = strrev(str) - strlen(str);
    char *s     = sizeof str + p - 1;

    while(*s++)
        cout << strlen(str)[p++];

    cout << endl; 

    return 0;
}

Автор: mes 30.5.2009, 02:10
Цитата(Dov @  30.5.2009,  00:57 Найти цитируемый пост)
igzom etibe en ,iktayber";

первое что пришло в голову, прочитать корявую фразу наоборот.. дальнейший код смотреть не пришлось smile
 smile 

Автор: azesmcar 30.5.2009, 11:35
Dov

Тут дебагером нужно быть, хоть бы цикл убрал smile  smile 

Автор: Dov 30.5.2009, 11:37
Цитата(mes @  30.5.2009,  02:10 Найти цитируемый пост)
первое что пришло в голову

А если бы было так:
Код
char str[] = "123 Hello, world! 987";

то что бы пришло в голову первым?   smile 

Автор: azesmcar 30.5.2009, 11:47
Dov

Выведет строку наоборот, если привести код немного в божеский вид - должно получится что-то вроде этого
Код

    char  str[] = "igzom etibe en ,iktayber"; //size=24
    char *p     = strrev(str) - 24;
    char *s     = 24 + p;
    while(*s++)
        cout << (p++)[strlen(str)];
    cout << endl; 

проверять то можно? smile 
p.s. это убило..просто шедевр smile отныне так и буду писать
Код

strlen(str)[p++]; 


Добавлено через 1 минуту и 7 секунд
Dov

аааааа smile  smile проверил..

Добавлено через 1 минуту и 28 секунд
mes - а вы все таки попробуйте прочитать, предложение того стоит smile 

Автор: mes 30.5.2009, 14:05
Цитата(azesmcar @  30.5.2009,  10:47 Найти цитируемый пост)
mes - а вы все таки попробуйте прочитать, предложение того стоит

ну так я ж писал, что прочитал :
Цитата(mes @  30.5.2009,  01:10 Найти цитируемый пост)
первое что пришло в голову, прочитать корявую фразу наоборот.. дальнейший код смотреть не пришлось smile
 smile  


Добавлено через 41 секунду
Цитата(Dov @  30.5.2009,  10:37 Найти цитируемый пост)
А если бы было так:

тогда бы пришлось бы смотреть, что делает код.

Добавлено через 11 минут и 7 секунд
Код

    char *p     = strrev(str) - strlen(str); // развернули строку и ушли назад от начала на ее длину
    char *s     = sizeof str + p - 1; // опять добавили длину, значит мы на начале.
    while(*s++) // раз s на начале , значит проходим посимвольно всю строку.
        cout << strlen(str)[p++]; // вспоминаем, что p у нас меньше начала на длину строки, следовательно p[strlen(str)] - начало, а дальше двигаемся по символьно.

 имхо, можно было бы код и по красевей его усложнить, а то слишком много пустой функциональности.  smile 
хотя судя по всему, целью было не предложить интересный код, а донести некую фразу до форумчан smile


Автор: azesmcar 30.5.2009, 14:19
Цитата(mes @  30.5.2009,  14:05 Найти цитируемый пост)
ну так я ж писал, что прочитал :

Значит неверно понял фразу smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)