Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / help / 12 сообщений из 12, страница 1 из 1
26.06.2013, 16:13:16
    #38311530
Vitasya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
help
Объясните пожалуйста по-простому каким же образом тут результатом будет 137 ??

public class Test {
public static void main(String[] s) {
for (int i = 2; i < 10; i = (i++) + i--, i++) {
System.out.print(--i);
}
}
}
...
Рейтинг: 0 / 0
26.06.2013, 16:35:25
    #38311586
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
help
2 2-1=1(print) 1+1+2-1=3, 3+1=4 -> следующая итерация
4 4-1=3(print) 3+1+4-1=7, 7+1=8 -> следующая итерация
8 8-1=7(print) 7+1+8-1=15, 15+1=16 >=10, выход из цикла

x++ - инкремент после использования переменной
++x - инкремент до использования переменной
то же самое с минусами
...
Рейтинг: 0 / 0
26.06.2013, 17:04:55
    #38311650
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
help
Похоже, не совсем правильно, хотя результат верный.
Скорее всего, i = (i++) + i-- надо интерпретировать как i = i + (i+1):
- первый аргумент для сложения i, значение i увеличили
- второй аргумент для сложения i=i+1, значение i уменьшили
- i присвоили результат операции сложения, то есть i+(i+1)

2 2-1=1(print) 1+2=3, 3+1=4 -> следующая итерация
4 4-1=3(print) 3+4=7, 7+1=8 -> следующая итерация
8 8-1=7(print) 7+8=15, 15+1=16 >=10, выход из цикла

Короче, лучше не пишите такой код :)
...
Рейтинг: 0 / 0
26.06.2013, 17:31:51
    #38311692
Vitasya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
help
ivanra,

спасибо за разъяснение..)это просто вопрос из тестов, хочу понять
...
Рейтинг: 0 / 0
26.06.2013, 17:37:05
    #38311698
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
help
Vitasyaivanra,
спасибо за разъяснение..)это просто вопрос из тестов, хочу понять
Тестов??? Умение вычислять значение i+++++i, по-моему, достаточно бесполезный скил.
...
Рейтинг: 0 / 0
26.06.2013, 18:13:04
    #38311743
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
help
VitasyaОбъясните пожалуйста по-простому каким же образом тут результатом будет 137 ??
Код: java
1.
2.
3.
for (int i = 2; i < 10; i = i * 2) {
	System.out.print(i - 1);
}
...
Рейтинг: 0 / 0
26.06.2013, 18:22:18
    #38311752
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
help
BlazkowiczУмение вычислять значение i+++++i, по-моему, достаточно бесполезный скил.Ну, уж точно для участника IOCCC :
http://www.ioccc.org/2011/dlowe/dlowe.c
Код: plaintext
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.
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <stdio.h>
#include <math.h>
#include <time.h>
#define _ float

                  _ CRUSH(_*LEG,int ARM,_*FINGER) {
         _ GORE; for(GORE=0,--ARM; ARM>=0; --ARM)GORE+=FINGER[ARM]*ARM
     [LEG]; return GORE; } _*BITE(){ _*BRAIN=calloc(sizeof(_),1<<17);int TOE
  =getc(stdin),EYE,SKULL=0; while((EYE=getc(stdin))!=EOF){ ++BRAIN[(TOE<<8) +
 EYE]; ++SKULL; TOE=EYE; } if(SKULL)for(TOE=0; TOE<8<<13; ++ TOE)BRAIN [TOE]/=
 SKULL; return BRAIN; } _ CHEW(_*GUT,_ BONE[][1<<16]){ int GRR; for(GRR=0; GRR<
 6; ++GRR){ GUT[GRR+256*256]=powf(1+expf(-CRUSH(BONE[GRR],1<<16,GUT)),-1); BONE
 [6][50+GRR]=GUT[256*256+GRR]*(1.-GUT[(8<<13)+GRR]); } BONE[6][81]=1/(1 +expf(-
 CRUSH(GUT+(1<<16),6,BONE[6]))); return BONE[6][82]=BONE[6][81]*(1.-BONE[6][81]
 ),BONE[6][81]; } _ GNAW(_ FLESH,_ LEG[][2<<15],_*EYE){ int UG,MMM; LEG[6][13]=
 FLESH-CHEW(EYE,LEG); LEG[6][14]=LEG[6][ 82]*LEG[6][13]; for(UG=0; UG<6; ++UG){
 LEG[6][34]=LEG[6][UG+(1<<7)-14]*LEG[6][7<<1]*LEG[6][UG]; for(MMM=0; MMM<4<<14;
 ++MMM)LEG          [UG][MMM]+=LEG[6][34]*.3*EYE[MMM]; LEG[6][UG]+=.3*LEG[6][14
  ]*EYE[               256*256+UG]; } return powf(LEG[6]          [13],2); } _
  **EAT(               char*TOMB){ DIR*BONE = opendir(               TOMB); int
  BRAIN=               0; struct dirent*TOOTH; _**BODY               =0; while
 (BONE?(TOOTH=        readdir(BONE)):0){ if(  TOOTH->                d_name[0]
 !=46){ char*MOAN=malloc(strlen(TOMB)+strlen(TOOTH->d_name       )+1); sprintf(
 MOAN, "%s%s",TOMB,TOOTH ->d_name); if(freopen(MOAN, "r",stdin)){ BODY=realloc(
 BODY,sizeof(_*)*(BRAIN+1)); BRAIN ++ [BODY]=BITE(); } } } return BODY=realloc(
 BODY,(1+BRAIN)*sizeof(_*)),BODY[BRAIN]=0,BODY; } int main(int GRR,char **UGH){
 _ BRAINS[7][1<<16],***CORPSES; int PUS,OOZE,UG; for(srand(time(0)),PUS=0; PUS<
  7; ++PUS)for(OOZE=0; OOZE<4<<14; ++OOZE)BRAINS[PUS][OOZE]=rand()/(_)RAND_MAX
   -.5;fread(BRAINS,sizeof(BRAINS),1,stdin); if(*UGH[1]==45){ GRR-=2; CORPSES
    =malloc(                                                         sizeof(_
    **)*GRR                                                           ); for(
     PUS=0;                                                             PUS<
    GRR; ++             PUS)CORPSES[PUS]=EAT(UGH[2+PUS]);             for(UG=
     0; UG<atoi       (&(UGH[1][1])); ++UG){ BRAINS[6][97]=       0; for(PUS
      =0; PUS<GRR; ++PUS)for(OOZE=0; CORPSES[PUS][OOZE]; ++OOZE)BRAINS [6][
        97]+=GNAW(1.-(_) PUS/(GRR-1),BRAINS,CORPSES[PUS][OOZE]); fprintf(
         stderr,"%d: %f\n",UG,BRAINS[6][97]); } fwrite( BRAINS, sizeof(
          BRAINS),1,stdout); } else for(UG=1; UG<GRR; ++UG)if(freopen(
              UGH[UG],"r",stdin))fprintf(stderr,"%s %f\n",UGH[UG],
                       CHEW(BITE(),BRAINS)); return 0; }


P.S.
Offtop
...
Рейтинг: 0 / 0
04.07.2013, 21:25:26
    #38321199
Vitasya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
help
Объясните пожалуйста почему результатом будет 3 ?
public class example{
public static void main(String[] args){
int h = 5; do while(h-->15); while(--h>4);
System.out.println(h);
}
}
...
Рейтинг: 0 / 0
05.07.2013, 10:23:45
    #38321495
maxkar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
help
Vitasya,

А почему не должна? h уменьшили два раза. 5-2=3.
...
Рейтинг: 0 / 0
05.07.2013, 15:17:41
    #38322028
Vitasya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
help
maxkar,

Хорошо а если тут результат будет 3?
public class example{
public static void main(String[] args){
int h = 11;
do while(h-->15);
while(--h>4);
System.out.println(h);
}
}

то здесь уже результат станет 4? почему так?

public class example{
public static void main(String[] args){
int h = 10;
do while(h-->15);
while(--h>4);
System.out.println(h);
}
}
...
Рейтинг: 0 / 0
05.07.2013, 16:26:04
    #38322189
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
help
Вот этот цикл
Код: java
1.
do while(h-->15); while(--h>4);


можно представить как
Код: java
1.
do while(h-->15) {} while(--h>4);


это конечно хак и никто так не пишет, но на самом деле это допустимая конструкция, и факт в том, что второй while в конце цикла игнорирует результат сравнения в первом.
А теперь отнимайте по 2 от 11 и от 10 и поймете почему результаты будут разные
...
Рейтинг: 0 / 0
05.07.2013, 17:58:08
    #38322311
Vitasya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
help
ivanra,

да вот что-то никак не дойдёт((
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / help / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]