Вопрос № 112222: Здраствуйте у меня такой вопрос:
мне надо написать программу на С, которая после выполнения первой части кода делала бы задержку примерно на 1 мин., а затем выполняла оставшуюся часть кода. Как делать задержку я не знаю, подскажите пожайлуста есл...Вопрос № 112253: Здравствуйте эксперты!
Скажите плиз как сделать, чтобы моя форма при запуске всегда появлялась в центре экрана независимо от установленного разрешения.
Заранее спасибо.
С++Билдер 5...Вопрос № 112257: Здравствуйте,очень нужна помошь в написании курсовой работы. Необходимо решить задачу о пяти обедающих философах:
Представим себе парк,по аллеям которого прогуливаются пять философов.В центре парка расположена столовая,в которой накрыт круглый ст...Вопрос № 112280: Добрый день!
Вопрос касается програмирования GDI. Решил написать свой, так сказать, paint, только расширенный. Но столкнулся с проблемой перерисовки окна. Код приводить не буду, а опишу алгоритм действий на примере рисования лини (LineTo(...)):<b...Вопрос № 112308: помогите написать программу на С++ для Borland 3.1:
Дан произвольный граф. Найти самый короткий путь...
Спасибо)))...Вопрос № 112349: Добрый день уважаемый специалисты. Опять к вам за помощью. Нужно написать 2 проги:
первая: Написать функцию, которая получает в качестве аргументов целое положительное число и систему счисления, в которую это число должно переводится (системы счи...
Вопрос № 112.222
Здраствуйте у меня такой вопрос:
мне надо написать программу на С, которая после выполнения первой части кода делала бы задержку примерно на 1 мин., а затем выполняла оставшуюся часть кода. Как делать задержку я не знаю, подскажите пожайлуста если это вообще возможно. Зарание благодарю.
Отвечает: CruelHity
Здравствуйте, Грибанов Фёдор Александрович!
Если вы пишите в ТС 3,1 и подобных версиях то сущ функция delay()
ее синатксис такой:
#include<dos.h>
void delay (unsigned milliseconds);
Она не совместима с виндовс
поэто в видовс рекомендуеться использовать функцию Sleep:
#include<windows.h>
void Sleep( DWORD dwMilliseconds);
Удачи!
Ответ отправил: CruelHity (статус: 6-ой класс)
Ответ отправлен: 04.12.2007, 01:21
Отвечает: Титов Михаил Анатольевич
Здравствуйте, Грибанов Фёдор Александрович!
Если Вы ограничены использованием только стандартного (ANSI) Си и стандартной библиотеки, то можно организовать цикл, воспользовавщись какой либо функцией семейства time.h отслеживать время и по истечению заданного интервала выйти из цикла.
В приложении пример с использованием функции time(time_t *).
Приложение:
Ответ отправил: Титов Михаил Анатольевич (статус: 4-ый класс)
Ответ отправлен: 04.12.2007, 05:18
Отвечает: Aristos
Здравствуйте, Грибанов Фёдор Александрович!
Если вы работаете под Windows, то есть функция Sleep().
--------- нет ничего невозможного
Ответ отправил: Aristos (статус: 8-ой класс)
Ответ отправлен: 04.12.2007, 11:37
Вопрос № 112.253
Здравствуйте эксперты!
Скажите плиз как сделать, чтобы моя форма при запуске всегда появлялась в центре экрана независимо от установленного разрешения.
Заранее спасибо.
С++Билдер 5
У самой формы есть свойство Position (в Object Inspector). По умолчанию оно выставлено в poDesigned, т. е. форма будет там, где была во время проектирования.
Если в данном поле установить значение poScreenCenter, то форма будет появляться в центре экрана.
Удачи!
Ответ отправил: Vas177 (статус: 2-ой класс)
Ответ отправлен: 04.12.2007, 10:16 Оценка за ответ: 5 Комментарий оценки: Точно есть :) Простите, в следующий раз буду внимательней. Спасибо за ответ
Вопрос № 112.257
Здравствуйте,очень нужна помошь в написании курсовой работы. Необходимо решить задачу о пяти обедающих философах:
Представим себе парк,по аллеям которого прогуливаются пять философов.В центре парка расположена столовая,в которой накрыт круглый стол.На столе стоит миска со спагетти,пять тарелок и пять вилок.Если философ проголодался,он входит в столовую,занимает свободное место за столом,берет две(обязательное условие!) вилки и накладывает на тарелку спагетти.Утолив голод,филосов возвращает вилки на стол и покидает столовую.В случае,если все пять философов одновременно придут в столовую,займут места за столом и возьмут по
вилке,система окажется заблокированной,т.к ни один из философов не сможет приступить к еде.
Требуется организовать систему таким образом,чтобы пять философов не могли одновременно оказаться за столом.Данная задача иллюстрирует конкуренцию между задачами за право монопольного обладания ресурсами.Важным моментом в решении задачи является предотвращение ситуации,когда каждый из философов взял по вилке и,удерживая ее,продолжает ожидать,когда освободиться следующая.
Если кто-нибудь, когда-нибудь сталкивался с такой задачей или имеет информацию по семафорному механизму, и может поделиться ссылками,любой информацией буду очень благодарна.
Отвечает: Терсков Сергей
Здравствуйте, Бондаренко Алена!
Это одна из классических задач параллельного программирования по блокировке ресурсов. Без теории к коду в данном случае не перейти. Посмотрите следующие источники:
Ответ отправил: Терсков Сергей (статус: Практикант)
Ответ отправлен: 05.12.2007, 05:04 Оценка за ответ: 5 Комментарий оценки: Спасибо огромное за информацию,только у меня почему-то первая ссылка некорректно работает.
Вопрос № 112.280
Добрый день!
Вопрос касается програмирования GDI. Решил написать свой, так сказать, paint, только расширенный. Но столкнулся с проблемой перерисовки окна. Код приводить не буду, а опишу алгоритм действий на примере рисования лини (LineTo(...)):
1. На событие WM_CREАTE:
- создаем контекст окна hdc = GetDC (hwnd);
- создаем контекс памяти hdcMem совместимій с hdc;
- зоздаем битмапу совместимую с контекстом окна;
- выбираем битмапу в контекст памяти.
2. На событие WM_LBUTTONDOWN:
- запоминаем координаты, где кликнули мишкой xLBDMousePoint; yLBDMousePoint;
3. На событие WM_MOUSEMOVE (при условии что лев. кнопка нажата):
- запоминаем текущее местоположение мишки xMousePoint, yMousePos;
- вызываем InvalidateRect (hwnd, NULL, true).
4. На событие WM_PAINT если левая кнопка миши нажата:
- в контексте окна ставим точку в начальное положение MoveToEx (hdc, xLBDMousePos, yLBDMousePos)
//если это делать на WM_LBUTTONDOWN, то линия рисуется с 0, 0 почему-то;
- в контекст окна выбираем текущий карандаш //так нада :)) SelectObject (hdc, hCurrentPen);
- в контексте окна рисуем линию LineTo (hdc, xMousePos, yMousePos);
- копируем контекст памяти в контекст устройства с пом. BitBlt (...)
//согласен криво, но это для того, чтобы было видно что я рисую, и одновременно, что я раньше нарисовал (где я рисую)
//для первого раза мы копируем пустоту :))
5. На событе WM_LBUTTONUP:
- рисуем туже линию, только в колнтексте памяти LineTo (hdcMem, xMousePos, yMousePos);
- копируем контекст памяти в контекст окна BitBlt (hdc, ..., hdcMem, ...);
- обновляем окно InvalidateRect (hwnd, NULL, true).
ТАк вот, при рисовании экран очень сильно мерцает, так как в момент отображения рисуемой линии на контексте окна мы еще копируем контекст памяти туда.
ВОПРОС: как избавиться от мерцания?? Может есть какие-то другие алгоритмы рисования ??
Отвечает: Sergey A. Wedensky
Здравствуйте, Dark Edhart!
Ну, во-первых, стоило бы сначала блитить изображение из памяти в окно, а потом поверх рисовать линию. У Вас в п. 4 наоборот, следовательно линию Вы если и увидите, то только мельком в момент ее рисования.
Полностью избавиться от мерцаний можно, сначала полностью подготавливая изображение в памяти, а потом разом выводя его в окно. Для этого может потребоваться еще один контекст в памяти для формирования изображения. [Если размеры изображения велики, его стоит создавать размером лишь с окно и блитить туда нужную часть Вашего битмэпа с учетом скроллинга и пр.]. В него рисуете имеющееся изображение, поверх - текущую рисуемую фигуру. А затем все это уже BitBlt на экран.
Не забудьте также установить кисть заливки фона в 0:
SetClassLong(hWnd, GCL_HBRBACKGROUND, 0);
Иначе по InvalidteRect() все равно будет мигать, т.к. сначала отрисовывается фон. Другой вариант - обрабатывать WM_ERASEBACKGROUND и ничего не рисовать в нем.
Ответ отправил: Sergey A. Wedensky (статус: Студент)
Ответ отправлен: 04.12.2007, 13:00 Оценка за ответ: 5 Комментарий оценки: За п.4 спасибо, исправил...
А вот насчет GCL_HBRBACKGROUND не могу понять, вроде все равно моргает...
Буду пробовать через еще один контекст памяти
Отвечает: Чернов С.В.
Здравствуйте, Dark Edhart!
А вы использовали свойство ControlStyle?
ControlStyle << csOpaque; если к свойству ControlStyle компонента установить csOpaque - то фон компонента перерисовываться не будет.
Я сам когда-то писал программу с библиотекой компонентов, они постоянно перерисовывались, решил проблему мерцания таким образом....
Ответ отправил: Чернов С.В. (статус: 1-ый класс)
Ответ отправлен: 04.12.2007, 14:01 Оценка за ответ: 2 Комментарий оценки: Если я не ошибаюсь, opaque - это значение, отвечающее за режим перерисовки бекграунда для текста и штриховых линий в атрибуте контекста устройства. И в моем случае это не подходит. Хотя попробовал и так:)))не фонтан :))
Вопрос № 112.308
помогите написать программу на С++ для Borland 3.1:
Дан произвольный граф. Найти самый короткий путь...
Отвечает: Терсков Сергей
Здравствуйте, Предеин Денис Дмитроевич!
Конечно можно решить эту задачу простым перебором всех возможных маршрутов, после чего выбрать самый короткий. Но эта задача требует очень много вычислительных мощностей. Поэтому лучше воспользоваться фундаментальным алгоритмом Дейкстры.
Ссылка №1 - описание алгоритма, Ссылка №2 - исходник с реализацией на С++.
Ответ отправил: Терсков Сергей (статус: Практикант)
Ответ отправлен: 05.12.2007, 04:43 Оценка за ответ: 5 Комментарий оценки: спасибо большое... работает...
Вопрос № 112.349
Добрый день уважаемый специалисты. Опять к вам за помощью. Нужно написать 2 проги:
первая: Написать функцию, которая получает в качестве аргументов целое положительное число и систему счисления, в которую это число должно переводится (системы счисления от 2 до 36). Например, при переводе числа 27 в систему счисления 16 должно получиться 1B; 13 в 5-ю - 23; 35 в 18-ю - 1H.
вторая: Игра «кубики». Условие: имеется два игральных кубика со значениями от 1 до 6. Игра происходит с компьютером, кубики бросаются поочередно. Побеждает тот, у кого сумма выпавших очков по итогам пяти бросков больше. Предусмотрите возможность получения первого хода человеком или компьютером. Кубики отображаются с помощью символов. В конце игры необходимо выводить среднюю сумму по броскам для обоих участников.
По первой программе есть разработка, но прога все равно содержит ошибку и пока что упростить просто в С ее не получается.
Надеюсь на вашу помощь. спасибо ;)
Отвечает: Терсков Сергей
Здравствуйте, Белоусов Алексей Леонидович !
По задаче №1 подобный вопрос уже был (№ 74655). Вопрос состоял в переводе десятичного числа в любую систему. Я решал задачу в более общем варианте как у вас.
Функция
string change_calc_system(const string& number, int base_sys, int dest_sys, const string& digits_set);
принимает число в виде строки const string& number в системе исчисления int base_sys и переводит его в систему int dest_sys. При переводе используется набор символов const string& digits_set. Подробнее в приложении...
А второй задаче не вижу особых проблем. Задаем право первого хода (человек или компьютер) и затем пять раз в цикле проводим броски кубиков (используя генератор случайных чисел для компьютера и обычный ввод для человека). Данные бросков аккумулируем в какой-нибудь массив и получаем изн его на выходе средние значения.
Приложение:
Ответ отправил: Терсков Сергей (статус: Практикант)
Ответ отправлен: 05.12.2007, 04:02 Оценка за ответ: 5 Комментарий оценки: Большое спасибо за помощь и оперативность в выполнении ;)