Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 1032
от 23.03.2008, 06:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 482, Экспертов: 54
В номере:Вопросов: 8, Ответов: 18

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>


Вопрос № 127672: Здравствуйте эксперты! Скажите пжлста: 1) у меня два параллельных потока в программе. Если я хочу "притормозить" главный поток и поставлю Sleep(1000), то второй поток продолжит работу? 2) как управлять вторым потоком? устан...
Вопрос № 127695: Как в C++ очистить экран консольного приложения ? (нужно что-то аналогичное clrscr в Pascal)...
Вопрос № 127703: Добрый день уважаемые специалисты! Как всегда к вам за помощью в решении. Нужно сделать: Цифровой счетчик, это переменная с ограниченным диапазоном. Значение которой сбрасывается, когда ее целочисленное значение достигает определенного м...
Вопрос № 127704: Дано натуральное число n. Получить максимальную цифру в числе. ...
Вопрос № 127731: Как на C++ в консольном приложении поставить курсор в произвольное место ? (аналогично gotoxy в Pascal)...
Вопрос № 127761: Условие: В банк положили $50. Каждый месяц начисляется 2%. Сколько месяцев потребуется что-бы сумма удвоилась? (т.е стала равна $100) Хотелось бы увидеть код....
Вопрос № 127797: Здравствуйте Мне нужна помощь в решении задачи на Си, именно на Си. А не на си++ Найти n первых натуральных чисел равных сумме факториалов своих цифр. ...
Вопрос № 127847: привет дорогие друзья айтишники!!! давно наблюдал за вашей рассылкой и вот решил принять участие. -разрулите, please, мне как создавать менюшки в консольных приложениях -скиньте, please, нормальную ссылку на книгу "фигурнов - IB...

Вопрос № 127.672
Здравствуйте эксперты!

Скажите пжлста:
1) у меня два параллельных потока в программе. Если я хочу "притормозить" главный поток и поставлю Sleep(1000), то второй поток продолжит работу?
2) как управлять вторым потоком? установка свойства Suspended в true и false никакого эффекта не дает.

C++Builder 5
Заранее спасибо
Отправлен: 17.03.2008, 08:21
Вопрос задал: Муратов Радик Анатольевич (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: kool
Здравствуйте, Муратов Радик Анатольевич!
1) Если Sleep поставить в одном из потоков, то другой продолжит свою работу
Удачи!

---------
I am.
Ответ отправил: kool (статус: Практикант)
Ответ отправлен: 17.03.2008, 12:11
Оценка за ответ: 5

Отвечает: Ross
Здравствуйте, Муратов Радик Анатольевич!

Если вы хотите, чтобы главный поток дождался окончания какой-то операции в побочном потоке, лучше вместо Sleep использовать объект ядра "событие" (пример в приложении).

Если хотите подробнее разобраться в синхронизации потоков, прочитайте в книге Дж Рихтер "Создание эффективных Win32 приложений" часть2, гл 7-9. Книгу могу выслать на мыло.

Приложение:

---------
Доступно только то, что видимо (c) Б. Керниган

Ответ отправил: Ross (статус: Студент)
Ответ отправлен: 17.03.2008, 13:19
Оценка за ответ: 5
Комментарий оценки:
Спасибо большое. Мне именно нужно было чтобы главный поток дождался окончания какой-то операции в побочном потоке. Только почему-то забыл указать это в вопросе

Отвечает: Aristos
!!!
Здравствуйте, Муратов Радик Анатольевич!

1) Функция Sleep откладывает выполнение вызвавшего потока на указанное количество милисекунд.
Что это означает? В системе выполняются множество потоков (у каждого приложения минимум один(два потока - рабочий и пользователя, если мы говорим о Windows)). Если процессор один, то эти потоки по очереди выполняются определенное количество миллисекунд (упрощенно). При вызове Sleep выполнение потока приостонавливается, и начинает выполняться следующий по очереди, но это не обязательно будет другой поток в приложении.
Когда очередь выполнения вновь доходит до приостановленного потока, то если время простоя не вышло Windows его пропускает. По истечении указанного времени Windows снова будет выполнять поток (в свою очередь).

2) Взаимодействие между потоками организуется с помощью, так называемых, объектов синхронизации. В windows это критические секции (cri tical section), события (event), мьютексы (mutex) и семафоры (semaphore). Почитайте доступную вам документацию по этим объектам.

это просто уточнение
-----
∙ Отредактировал: Виктор Пырлик (Профессионал)
∙ Дата редактирования: 18.03.2008, 08:13

---------
нет ничего невозможного
Ответ отправил: Aristos (статус: 10-ый класс)
Ответ отправлен: 17.03.2008, 13:30
Оценка за ответ: 5


Вопрос № 127.695
Как в C++ очистить экран консольного приложения ? (нужно что-то аналогичное clrscr в Pascal)
Отправлен: 17.03.2008, 11:13
Вопрос задал: Юрий Анатольевич (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Сандров Алекс
Здравствуйте, Юрий Анатольевич!

можно использовать функцию system (#include "stdlib.h")

она выполняет системные вызовы, как бы их делали из командной строки

system("cls"); //очистит экран
Ответ отправил: Сандров Алекс (статус: 6-ой класс)
Ответ отправлен: 17.03.2008, 11:28
Оценка за ответ: 5

Отвечает: Dr_Andrew
Здравствуйте, Юрий Анатольевич!
Как вариант к предыдущему ответу: если Вы используете компилятор от фирмы Inprise / Borland (Turbo C++, Borland C++, BCB и т.п.), то можете использовать их функцию clrscr();
Подключается #include <conio.h>
Ответ отправил: Dr_Andrew (статус: 7-ой класс)
Ответ отправлен: 17.03.2008, 12:00

Отвечает: Warobushek
Здравствуйте, Юрий Анатольевич!
Можно поступить еще проще - использовать стандартную функцию с прототипом
void clrscr(void);
(#include <conio.h>)
Ответ отправил: Warobushek (статус: 1-ый класс)
Ответ отправлен: 17.03.2008, 12:02

Отвечает: Попов А.С.
Здравствуйте, Юрий Анатольевич!
можно использовать функцию system("cls");
или такую функцию с ассемблерной вставкой (может не отработать корректно)

inline void cls(void)
{
__asm
{
mov ah,00h
mov al,03h
int 10h
}
}
Ответ отправил: Попов А.С. (статус: Студент)
Ответ отправлен: 17.03.2008, 18:27


Вопрос № 127.703
Добрый день уважаемые специалисты!
Как всегда к вам за помощью в решении.
Нужно сделать:
Цифровой счетчик, это переменная с ограниченным диапазоном. Значение которой сбрасывается, когда ее целочисленное значение достигает определенного максимума (например, k принимает значения в диапазоне от 0..100). В качестве примера такого счетчика можно привести цифровые часы, счетчик километража. Описать класс такого счетчика. Дать возможность установления максимального и минимального значений, увеличения счетчика на 1, возвращения текущего значения.

Всем кто поможет большое спасибо и хорошие оценки :)
Разные варианты решения приветствуются ;)
Отправлен: 17.03.2008, 12:07
Вопрос задал: Белоусов Алексей Леонидович (статус: 4-ый класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ross
Здравствуйте, Белоусов Алексей Леонидович !

Вот мой вариант решения.

Приложение:

---------
Доступно только то, что видимо (c) Б. Керниган

Ответ отправил: Ross (статус: Студент)
Ответ отправлен: 17.03.2008, 12:58
Оценка за ответ: 5
Комментарий оценки:
Спасибо за оперативность и помощь. Вариант решения понравился как раз то что было нужно. И отдельное спасибо за комментарии в задаче, с ними намного легче разобраться что к чему :)

Отвечает: Dr_Andrew
Здравствуйте, Белоусов Алексей Леонидович !
Ну что ж, а вот мой вариант класса счётчика (TCounter).
Он содержит члены:
int iValue; - хранит текущее значение счётчика
int iMinValue; - хранит минимальное значение счётчика
int iMaxValue; - хранит максимальное значение счётчика
void SetMaxValue(int); - устанавливает максимальное значение счётчика
void SetMinValue(int); - устанавливает минимальное значение счётчика
int GetValue(); - возвращает текщее значение счётчика
void IncrementValue(); - увеличивает значение счётчика на 1
bool CheckMaxValue(); - проверяет, не достигло ли текщее значение счётчика максимального уровня
void SetToZero(); - обнуляет счётчик.
Подробнее см. в приложении.

Приложение:

Ответ отправил: Dr_Andrew (статус: 7-ой класс)
Ответ отправлен: 17.03.2008, 15:01
Оценка за ответ: 5
Комментарий оценки:
Спасибо. Как раз другой вариант решение это хорошо можно будет сравнить решение и много чего полезного почерпнуть. Спасибо :)

Отвечает: Попов А.С.
Здравствуйте, Белоусов Алексей Леонидович !
Вариант решения с шаблонами смотрите приложении
(проверено на VC6 и mingw)

Приложение:

Ответ отправил: Попов А.С. (статус: Студент)
Ответ отправлен: 17.03.2008, 18:05
Оценка за ответ: 5
Комментарий оценки:
Спасибо. Тоже оригинальный вариант решения задачи в котором есть много интересного. Спасибо :)


Вопрос № 127.704
Дано натуральное число n. Получить максимальную цифру в числе.

Приложение:

Отправлен: 17.03.2008, 12:10
Вопрос задал: Dolgopolov (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Попов А.С.
Здравствуйте, Dolgopolov!
Решение смотрите в приложении

Приложение:

Ответ отправил: Попов А.С. (статус: Студент)
Ответ отправлен: 17.03.2008, 17:17
Оценка за ответ: 5


Вопрос № 127.731
Как на C++ в консольном приложении поставить курсор в произвольное место ? (аналогично gotoxy в Pascal)
Отправлен: 17.03.2008, 14:27
Вопрос задал: Юрий Анатольевич (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Zloi_goh
Здравствуйте, Юрий Анатольевич! С помощью следующей функции:
BOOL SetConsoleCursorPosition(
HANDLE hConsoleOutput, //хэндл вывода на консоль
COORD dwCursorPosition //координаты курсора
);
COORD имеет следующий формат:
typedef struct _COORD {
SHORT X; //координата Х
SHORT Y; //координата У
} COORD, *PCOORD;

---------
Лучше идти чем бежать, лучше стоять чем идти, лучше сидеть чем стоять, лучше лежать чем сидеть, лучше умереть чем лежать.
Ответ отправил: Zloi_goh (статус: 1-ый класс)
Ответ отправлен: 17.03.2008, 15:08

Отвечает: Ross
Здравствуйте, Юрий Анатольевич!

Добавлю, что вы легко можете написать свою функцию gotoxy (см. приложение). В компиляторе Borland C ее прототип также находится в файле conio.h

Приложение:

---------
Доступно только то, что видимо (c) Б. Керниган

Ответ отправил: Ross (статус: Студент)
Ответ отправлен: 17.03.2008, 21:27


Вопрос № 127.761
Условие:
В банк положили $50. Каждый месяц начисляется 2%. Сколько месяцев потребуется что-бы сумма удвоилась? (т.е стала равна $100)
Хотелось бы увидеть код.
Отправлен: 17.03.2008, 16:48
Вопрос задал: Ivan ivanich ivasyuk (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Попов А.С.
Здравствуйте, Ivan ivanich ivasyuk!
Решение в приложении

Приложение:

Ответ отправил: Попов А.С. (статус: Студент)
Ответ отправлен: 17.03.2008, 17:05
Оценка за ответ: 5

Отвечает: Терсков Сергей
Здравствуйте, Ivan ivanich ivasyuk!
Первоначальная сумма вклада не имеет значения. Если каждый месяц ко вкладу (N) начисляется сумма по процентной ставке (p), то через m месяцев вклад будет составлять: N*(p+1)^m. Вам нужно чтобы сумма удвоилась, поэтому обозначим удвоение через множитель Q. Получается уравнение:

N*(p+1)^m = Q*N

Сокращаем N (поэтому первоначальная сумма вклада не имеет значения) и выводим m. Получается что m логарифм Q по основанию p+1. Переводим основание логарифма к десятичному и получаем нужную нам формулу:

m = lg(2)/lg(p+1)

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

Приложение:

Ответ отправил: Терсков Сергей (статус: Практикант)
Ответ отправлен: 18.03.2008, 03:21


Вопрос № 127.797
Здравствуйте
Мне нужна помощь в решении задачи на Си, именно на Си. А не на си++

Найти n первых натуральных чисел равных сумме факториалов своих цифр.

Отправлен: 17.03.2008, 20:29
Вопрос задал: Зыков Николай Павлович (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Терсков Сергей
Здравствуйте, Зыков Николай Павлович!
Вариант решения вашей задачи именно на языке С смотрите в приложении.

Приложение:

Ответ отправил: Терсков Сергей (статус: Практикант)
Ответ отправлен: 18.03.2008, 04:24

Отвечает: Попов А.С.
Здравствуйте, Зыков Николай Павлович!
Решение смотрите в приложении

Приложение:

Ответ отправил: Попов А.С. (статус: Студент)
Ответ отправлен: 18.03.2008, 05:06


Вопрос № 127.847
привет дорогие друзья айтишники!!!
давно наблюдал за вашей рассылкой и вот решил принять участие.

-разрулите, please, мне как создавать менюшки в консольных приложениях
-скиньте, please, нормальную ссылку на книгу "фигурнов - IBM для пользователя"

заранее спасибо, -=di
Отправлен: 18.03.2008, 01:46
Вопрос задал: сазанович дмитрий викторович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Терсков Сергей
Здравствуйте, сазанович дмитрий викторович!
1. Меню в консоли бывают разные. Это может быть просто выбор пунктов меню путем ввода их номеров. Либо это меню отрисованные с помощью псевдографики. Их можно создавать вручную, а можно использовать какие-либо библиотеки (например TurboVision).

2. Фигурнов - IBM для пользователя
Ответ отправил: Терсков Сергей (статус: Практикант)
Ответ отправлен: 18.03.2008, 04:58
Оценка за ответ: 5


Вы имеете возможность оценить этот выпуск рассылки.
Нам очень важно Ваше мнение!
Оценить этот выпуск рассылки >>

Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2008, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.72.6 beta от 22.03.2008
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное