Гость Опубликовано 16 ноября, 2001 Жалоба Поделиться Опубликовано 16 ноября, 2001 Подскажите плиз, где грабли: #include #include #include int main() { int pl, p1, p2, v, *m; srand(time(NULL)); cin>>pl; m = new int[pl]; for(int i=0; i<=pl; i++) { m=; } for(int i1=1; i1<=pl; i1++) { v = 1 + rand() % (pl - i1 + 1); p1 = m[v]; m[v] = m[p1 - i1 + 1]; v = 1 + rand() % (pl - i1); p2 = m[v]; m[v] = m[pl - i1]; cout< } return 0; } Если закомментировать строчки с получением случайного числа то работает. А вот под винду такой код катит. Тут же пробовал и под линухом и под фрю - результат Floating point expection Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 19 ноября, 2001 Жалоба Поделиться Опубликовано 19 ноября, 2001 ne vdavayas' v podrobnosti est' takoe soobrazenie: stroka v = 1 + rand() % (pl - i1 + 1); poheritsya (nachent delit' na nol) v sluchae kogda i1 = 1 + p1; toze same proizoidet s v = 1 + rand() % (pl - i1) ; kogda pl == i1 .... kak vidno iz zagolovka zikla "i1 <=pl" takoe vpolne vozmozno. pochemu windows delit na nol i schastliv skazat' mozno. esli ya pravil'no ponimayu ANSI v takih sluchayah a % 0 razreshaet delat' shto ugodno. eze odno zoobrazenie pochemu time(NULL)??? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 20 ноября, 2001 Жалоба Поделиться Опубликовано 20 ноября, 2001 1) m = new int[pl]; // почему просто pl, а не pl+1? 2) m=; // m=i - так наверное? 3) v = 1 + rand() % (pl - i1); //здесь, как сказал kaboom, % на 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 21 ноября, 2001 Жалоба Поделиться Опубликовано 21 ноября, 2001 Всем пасиба. Изменил код на: (и заработало) #include #include #include //#include int main() { int pl, p1, p2, v, c=0; int *m; bool b=false; srand(time(NULL)); do{ cout<<"Vvedite kol-vo igrokov:"; cin>>pl; switch(pl) {case 4: case 8: case 16: case 32: case 64: b=true; break; default: b=false; cout<<"Igrokov mojet biti 4, 8, 16, 32, 64."; break; } }while(b == false); m = new int[pl+1]; for(int i1 = 0; i1<=pl; i1++) { m[i1]=i1; } for(int i = 1; i<=pl; i+=2) { c++; v = 1 + rand() % (pl - i) + 1; p1 = m[v]; m[v] = m[(pl - i)+ 1]; v = 1 + rand() % (pl - i); p2 = m[v]; m[v] = m[pl - i]; cout< // if((c % 16) == 0) // { // cout<<"Press any key to continue"< // } } return 0; } Но опять же под виндой все работает как есть, а под фрю пришлось закомментировать строки (см. выше) так как пишет что файл не найден. Мож кто знает, в чем дело? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 21 ноября, 2001 Жалоба Поделиться Опубликовано 21 ноября, 2001 a vot na etoi ze stranize conferenzii kto-to uze psrashival kak realizovat' pod linux. nikto ne znaet. ya po-pravde skazet' pervii raz slishi pro . podozrevayu shto chem-to pohoze na ncurses. ya bi skorei vsego ponapisal kuchu #ifdef WIN i #ifdef BSD i ispol'zoval bi ili sootvetstvenno. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 23 ноября, 2001 Жалоба Поделиться Опубликовано 23 ноября, 2001 или делай #include , или юзай getchar(); Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 25 ноября, 2001 Жалоба Поделиться Опубликовано 25 ноября, 2001 Пасибо! getchar() сработало! Вопросец по ходу: а че нет единой ANSII спецификации на С++ что под линух, что под виндозу? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.