Зравствуйте... Пожалуйста расскажите хотя бы немного о "дальних" указателях и ключевом слове far... Читаю сейчас электронную книгу Г. Шилдта "С для профессиональных программистов". Книга безнадежно старая, и по этому у меня вызывает очень много недоумений. Вот например в ней употребляется это самое ключевое слово far, но до этого я про такую вещь даже не слышал, и в проде как в стандарт АНСИ оно не входит... Пожалуйста объясните как его и где употреблять. И если не трудно поведайте пожалуйста немного о "моделях пямяти" (в этом ничего не понимаю). ЗЫ Использую Борланд С++ 3.1 и хочу написать нечно более менне приличное под ДОС. Огромнейшее спасибо всем кто ответит (если таковые будут).
Приветствую Вас, Hello! конечно не входит. ни одна платформозависимая лажа не может входить в него. это модификатор дальнего перехода то есть за пределы сегмента. в моделях tiny, small не имеет смысла поскольку все в одном сегменте. Ответ отправлен: 07.04.2003, 01:18 Отправитель: akul
Вопрос № 681
Доброе время суток, господа эксперты! Опять у меня вопрос! Надо написать прогу,которая сравнивает 3 матрицы и находит наибольший элемент. В предыдущем вопросе я уже спрашивала, как передавать в функцию размер массива, если размер не известен и вводится с клавиатуры в главной программе. Для массива у меня получилось, а с матрицей- нет. Вот моя простенькая программка. Буду очень благодарна, если откликнетесь!
Приветствую Вас, Ольга! Ну- во первых- после include не надо запятую ставить, потому что это деректива препроцессора. Во вторых- если тебе не известны зарания размерности массива, то ты можешь поступить так- передавать указатель на твою матрицу, а заодно размерности. Разберись, как работают указатели с многомерными массивами, т.е. как такой массив распологается в памяти и какой индекс массива меняется быстрее всего. Когда разберёщся- поймёшь, как обращатся к массиву не через индексацию, а через прямой доступ при помощи адресной арифметики. Пример. int a[7]; тогда a[5] тоже самое, что и *(a+5) int b[10][20] тогда b[4][7] тоже самое, что и *( ((int*)a)+20*4+7)//20-размерность наиболее быстро меняющегося индекса (при просмотре массива в памяти). int c[10][20][30] c[3][4][5]- тоже, что и *( ((int*)c)+5+4*30+3*30*20) с[k][j][i]==*( ((int*)c)+i+j*size_I+k*size_I*size_J) Если
поняла- поздравляю- я в этом и сам уже запутался 8). На самом деле всё просто- надо тебе самой поэкспериментировать- и всё получится. А на чужих советах не будет опыта. Знания может и будут, но только абстрактная теория :(
Ответ отправлен: 09.04.2003, 20:51 Отправитель: Morgion
Вопрос № 682
Уважаемые эксперты! Прошу помощи по еще одному вопросу по VC++.В документации пишут, что 1 интервала таймера = 1 миллисекунде.В программе при срабатывании таймера выдается импульс на внешнее устройство, когда замерил период этих импульсов осциллографом, получилось, что период равен приблизительно 53 мсек.Как это объяснить?И главное исправить! Спасибо.
Приветствую Вас, Sergey! В Windows разрешение таймера различается в разных версиях: Windows 95/98 -- 55 milliseconds Windows NT 3.1 -- 16 milliseconds Windows NT 3.5 and later -- 10 milliseconds поскольку они по-разному обрабатывают аппартные прерывания от таймера. Сделать с этим под Windows вряд-ли что-нибудь удастся, поскольку в самой ОС многое завязано на частоту таймера. С уважением, Avl2k. Ответ отправлен: 09.04.2003, 10:44 Отправитель: Avl2k Отвечает Morgion
Здравствуйте, Sergey! Надо тебе было ассемблерщикам вопрос задать. Дело в том, что стандартный таймер у компа работает с чатотой 18 с чем-то герц (может 19.2). 1/18=0.055...=55мс. Поэтому интервал меньше 55 (53- не важно) мс ты задать не сможешь с помощью SetTimer. Нужно использовать какие-то другие, а какие- не помню :(... Ответ отправлен: 09.04.2003, 20:08 Отправитель: Morgion Отвечает Dzik
Здравствуйте, Sergey! В стандартном режиме таймер срабатывает 18 раз в секунду. Ответ отправлен: 09.04.2003, 07:01 Отправитель: Dzik Отвечает Ramzes
Здравствуйте, Sergey! Посмотрим на вопрос с двух сторон Есть финкция SetTimer(UINT nIDEvent, UINT nElapse, pfn) где nElapse это интервал времени в миллисекундах, по исте- чении которого твоему окну будет посылатся сообщение от таймера. С другой стороны, существует аппаратный таймер, который генерирует прерывание 18.2 раза в секунду, то есть приблизительно с интервалом 54 мкс, что ты и показали твои измерения.
Ответ отправлен: 09.04.2003, 13:10 Отправитель: Ramzes
Форма отправки вопроса
Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook"
и "Microsoft Outlook Express". В программе The Bat!
подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте,
что в некоторых браузерах могут стоять запреты на открытие других
окон, а также "чрезмерное" кэширование данных,
при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet
Explorer 5.0+ или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.