Вопрос по С++
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Вопрос по С++ - 2008-02-01 18:43:35.403333
|
|
|
BeoWolf11
Сообщений: 76
Оценки: 0
Присоединился: 2008-01-31 21:09:43.920000
|
Вот у меня такой вопрос. Уже 3 часа сижу не могу найти способ зделать прогу на С++ Вот нужна такая прога которая даст все числа А (A<=N) зная что А делится на все цифры из которого оно состоит. Помогите начинающему, плизз
|
|
|
RE: Вопрос по С++ - 2008-02-01 20:33:43.136666
|
|
|
goldstarKZ
Сообщений: 122
Оценки: 0
Присоединился: 2008-01-16 19:02:41.643333
|
"А" иожет быть сколь угодно большим? Если да, то сперва определим разряд, количество цифр - это количество шагов цикла, который будет делить А на каждую цифру из А. Ну можно еще цикл уменьшить убрав повторы цифр и т.д. Способ медленный, дубовый, но думать я сейчас не хочу. П.С. разделить число на цифры можно делением на "единицу разряда", т.е. 123 будем делить как: Целая часть от(123/100) это первое, второе получишь так 123/10-10 (при условии, что число 3 разряда). Короче тупость я тут сморозил. Голова сейчас не варит. П.П.С. Можешь число представить как текст, разбить его по символам, а потом обратно в число. Заодно и длинну текста узнаешь, это будет разряд.
|
|
|
RE: Вопрос по С++ - 2008-02-01 21:28:52.340000
|
|
|
BeoWolf11
Сообщений: 76
Оценки: 0
Присоединился: 2008-01-31 21:09:43.920000
|
Я знаю как разделить цифры: quote:
do { b = A % 10; c = A / 10; } while (c != 0) но мне нужно разделить А на все его цифры без останка. Вот например: N = 25 A<=N даем А = 24 24 / 2 = 12 24 / 4 = 6 как это можно зделать?
|
|
|
RE: Вопрос по С++ - 2008-02-01 21:36:25.846666
|
|
|
goldstarKZ
Сообщений: 122
Оценки: 0
Присоединился: 2008-01-16 19:02:41.643333
|
Судя по твоему куску делишь А на б и ц. Или ты говоришь про то, что А может быть равно 2109871029481094710941?
|
|
|
RE: Вопрос по С++ - 2008-02-01 22:08:57.200000
|
|
|
Genco
Сообщений: 1662
Оценки: 90
Присоединился: 2007-12-16 23:11:22.003333
|
Так нужны ж все такие числа,которые <=N,правильно? bool chk(int a) { int j,b,AA; bool Fl; AA=a; Fl=true; //типо "флаг" while (a!=0) { b=a % 10; //не помню как там,кажетсо это и есть остаток от деления if (b==0) { b=1; } if ((AA % b)!=0) { Fl=False; } a=(a-(a % 10))/10; //или как там сделать целую часть от деления } return Fl; } —— for (i=1; i<=N; i++) { if (chk(i)==true) printf("%d\n",i); } Не компилировал,не перечитывал. //Ща поправил огрехи,даже компилится и пашет
|
|
|
RE: Вопрос по С++ - 2008-02-01 22:10:43.120000
|
|
|
BeoWolf11
Сообщений: 76
Оценки: 0
Присоединился: 2008-01-31 21:09:43.920000
|
НЕТ. А может состоять из максимум 9 цыфр. А b это все его цифры (уже разделеные) А c нам нужен для того чтобы цыкл остаковить. Например: A = 3657 Цикл один раз дает 3657 / 10 из этого выходит что c = 365 Потом еще раз 365 / 10 из этого c = 36 Потом 36 / 10 c = 3 3 / 10 c = 0.3 то есть с уже 0 а цыкл заканчивается тогда когда с = 0 А b это все цифры например A = 3657 Цыкл дает 3657 % 10 из этого b = 7 Потом 365 (из c) % 10 b = 5 36 (из c) % 10 b = 6 0.3 (из с) % 10 b = 3 И вот так находим цифры. Но мой вопрос тотже как узнать если можно разделить А на b?
|
|
|
RE: Вопрос по С++ - 2008-02-01 22:19:00.190000
|
|
|
BeoWolf11
Сообщений: 76
Оценки: 0
Присоединился: 2008-01-31 21:09:43.920000
|
quote:
Так нужны ж все такие числа,которые <=N,правильно? bool chk(int a); { int j,b; bool Fl; Fl=true; //типо "флаг" while (a!=0) { b=a % 10; //не помню как там,кажетсо это и есть остаток от деления if ((Fl % b)!=0) { Fl=False; } a=a-(a % 10); //или как там сделать целую часть от деления } return Fl; } —— for (i=1; i<=N; i++) { if chk(i)==true printf("%d",i); } Не компилировал,не перечитывал. У меня жалуется на строчку if chk(i)==true типа Parse Erorr
|
|
|
RE: Вопрос по С++ - 2008-02-01 22:40:04.020000
|
|
|
kreol
Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
|
quote:
ORIGINAL: BeoWolf11 У меня жалуется на строчку if chk(i)==true типа Parse Erorr В скобки возьми. if (chk(i)==true)
|
|
|
RE: Вопрос по С++ - 2008-02-02 03:22:54.173333
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Нормальную постановку задачи нужно делать… Как быть с числом 10? Делить на нуль?… лови _рабочий_ вариант #include <stdio.h>
#include <conio.h>
int Podhodit( int val )
{
int src = val, digit;
while ( val != 0 )
{
digit = val % 10;
if ( (digit == 0) || (src % digit != 0) ) // было && - ошибка, исправил ;)
return 0;
val /= 10;
}
return 1;
}
int main( void )
{
int a, n;
printf( "N> " );
scanf( "%d", &n );
if ( n <= 0 )
return 1;
for ( a = 1; a <= n; ++a )
if ( Podhodit( a ) )
printf( "%d\n", a );
getch();
return 0;
}
|
|
|
RE: Вопрос по С++ - 2008-02-02 19:37:54.793333
|
|
|
Genco
Сообщений: 1662
Оценки: 90
Присоединился: 2007-12-16 23:11:22.003333
|
Ну или так.Рабочий вариант? вот в этой строчке только: quote:
if ( (digit == 0) && (src % digit != 0) ) будет ошибка деления на 0,потому как остаток от деления не будет считаться.Ну да это мелочь,исправляется в зависимости от условия.
|
|
|
RE: Вопрос по С++ - 2008-02-03 03:11:28.010000
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Ошибся, надо || поставить. 3 ночи всё-таки было, когда писал.
|
|
|
RE: Вопрос по С++ - 2008-05-13 01:55:33.263333
|
|
|
provider
Сообщений: 100
Оценки: 0
Присоединился: 2008-04-12 15:31:33.813333
|
Как создать приложения меню главного окна панели инструментов. Для Windows окна MdiApp. У кого есть рефераты,Examples, скиньте, пожалуйста, на форум. compiler Dev C++ Thank you
|
|
|
RE: Вопрос по С++ - 2008-05-13 09:50:16.350000
|
|
|
redsh
Сообщений: 338
Оценки: 0
Присоединился: 2007-06-17 22:35:25.540000
|
quote:
ORIGINAL: provider Как создать приложения меню главного окна панели инструментов. Для Windows окна MdiApp. У кого есть рефераты,Examples, скиньте, пожалуйста, на форум. compiler Dev C++ Thank you чуваак, тебе уже было сказано, что для решения твоих задач идеально подойдёт прога Visual Basic. если до тебя все ещё не дошло, то наверное, модеры тебя скоро забанят)))
|
|
|
RE: Вопрос по С++ - 2008-05-13 19:51:22.993333
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
"Хорошо" высказался. Только вот непонятно, зачем писать сообщения о помощи, когда после твоих идиотских выходок тебе точно никто помогать не будет. Чел, облегчи жизнь модераторам - уйди сам. А касательно ответа на твой вопрос - покопайся в гугле.
|
|
|
RE: Вопрос по С++ - 2008-05-16 20:50:11.580000
|
|
|
BatonXAK
Сообщений: 1137
Оценки: 0
Присоединился: 2007-03-02 20:44:00.803333
|
Народ помогите переделать код часов с TurboC под DevC++ ! Dev ругается на
int x0,y0;
int x1,y1;
x0 = getx();
y0 = gety();
x1 = x0+l*cos(a*G);
y1 = y0-l*sin(a*G);
lineto(x1,y1); Чем заменить функцию lineto? Весь код:
#include <graphics.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <dos.h>
#include <stdlib.h>
#include <string.h>
#define PATHTODRIVER "C:\\BC5\\BGI"
// выводит вектор заданной длины из текущей точки
// используется для вывода изображения стрелки
void vector(int a, // угол между вектором и осью ОХ
int l) // длина вектора
{
#define G 0.0174532 // коэф. перевода из градусов в радианы
int x0,y0;
int x1,y1;
x0 = getx();
y0 = gety();
x1 = x0+l*cos(a*G);
y1 = y0-l*sin(a*G);
lineto(x1,y1);
}
void clock ()
{
int x0=300,
y0=300; // координаты центра часов
int d=50; // диаметр циферблата
int s=0; // время, кол-во секунд
int m=0; // время, кол-во минут
int as=90; // угол наклона секундной стрелки
int am=90; // угол наклона минутной стрелки
{
circle(x0,y0,d+5);
setfillstyle(SOLID_FILL,8);
bar(400,200,200,400);
setfillstyle(SOLID_FILL,15);
pieslice(300,300,0,360,80);
setcolor(1);
setlinestyle(SOLID_LINE,17,THICK_WIDTH);
}
setcolor(7);
settextstyle(2,HORIZ_DIR,8);
outtextxy(0,70,"=============================================================");
outtextxy(0,0,"=============================================================");
outtextxy(0,80,"===============================================================");
outtextxy(0,457,"===============================================================");
outtextxy(0,430,"===============================================================");
/*============================================*/
/* Расстановка цифр и их цвета */
{
setcolor(BLACK); //чёрный цвет цифр
settextstyle(3,HORIZ_DIR,2);
outtextxy(323,220,"1");
outtextxy(298,350,"6");
outtextxy(227,286,"9");
outtextxy(365,285,"3");
outtextxy(353,247,"2");
outtextxy(353,320,"4");
outtextxy(329,343,"5");
outtextxy(265,343,"7");
outtextxy(240,320,"8");
outtextxy(230,247,"10");
outtextxy(259,221,"11");
outtextxy(285,215,"12");
}
/*===================================*/
/* Расстановка надпесей и цвета */
{
setcolor(2);
settextstyle(3,HORIZ_DIR,5);
outtextxy(20,12,"Chasi izgotovil Baturin C.B.");
setcolor(9);
settextstyle(2,HORIZ_DIR,6);
outtextxy(78,120,"Kurs proekt po PAVU");
setcolor(10);
settextstyle(2,HORIZ_DIR,6);
outtextxy(560,450,"2008g");
outtextxy(90,150,"Clok");
}
/*==================================*/
do
{
/* вывести секундную стрелку */
moveto(x0,y0);
setcolor(12);
vector(as,d);
/* вывести минутную стрелку */
moveto(x0,y0);
setcolor(9);
vector(am,d-10) ;
delay(1000); // задержка
/* стереть стрелки */
setcolor(15); // секундную
moveto(x0,y0);
vector(as,d);
/* минутную */
moveto(x0,y0);
vector(am,d-10);
s++;
if(s > 60)
{
m++;
s = 0;
am -= 6; // шаг движения минутной стрелки 6 градусов
if (am < 0) am = 354;
}
as -= 6;
if (as==90)
{
sound(490);
}
if (as < 0) as = 354;
}
while ( !kbhit () );
}
void main(void)
{
int gdriver = DETECT; // драйвер
int gmode; // режим
int errorcode; // код ошибки
initgraph(&gdriver, &gmode, PATHTODRIVER);
errorcode = graphresult ();
if (errorcode == grOk)
{
clock();
closegraph(); // выход из графического режима
}
else
{
printf("Ошибка: %d\n", errorcode);
puts("Для завершения программы нажмите <Enter>");
getch();
}
}
|
|
|
RE: Вопрос по С++ - 2008-05-16 21:08:15.130000
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
Возьми какую-нибудь библиотечку типа qt или gtk, и рисуй в них. qt – не знаю, в gtk есть замечательный виджет GtkDrawingArea. Или возьми, скажем freeglut, загляни в примеры и сделай как там, заодно с opengl'ем ознакомишься.
|
|
|
RE: Вопрос по С++ - 2008-05-16 21:28:09.063333
|
|
|
BatonXAK
Сообщений: 1137
Оценки: 0
Присоединился: 2007-03-02 20:44:00.803333
|
Незя OpenGL препод ругаться будут надо под graphics !
|
|
|
RE: Вопрос по С++ - 2008-05-16 22:31:15.776666
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
Недавно обсуждался этот вопрос где-то. Поищи. У тебя есть два варианта действий: - либо использовать graphics.h и писать досовую программу. Если очень хочется делать это в Dev-C++, то придётся к нему прикручивать компилятор от TurboC. - либо использовать другую библиотеку. Поверх функций другой библиотеки можно и, быть может, несложно написать wrapper'ы, которые позволят использовать api как в graphics.h. Но тебе придётся всю программу перелопачивать, поскольку нормальные графические приложения работают несколько иначе, чем те, которые используют graphics: они подразумевают цикл получения эвентов и обработку этих эвентов. При использовании Xlib это может выглядеть так: int main ()
{
int stop = 0;
Display *dpy;
/* после всякой инициализации */
while (XPending (dpy) && !stop) {
XEvent e;
XNextEvent (dpy, &event);
switch (e.type) {
case Expose:
/* перерисовка -- не изменение картинки, а именно рисование с нуля */
break;
case KeyPress: {
KeySym key;
XLookupString(&event.xkey, NULL, 0, &key, NULL);
if(key == XK_Escape)
stop = 1;
break;
}
/* и так далее*/
}
}
} При использовании более высокоуровневой библиотеки чем Xlib, while и switch могут прятаться внутри библиотеки, в такой ситуации придётся определять коллбеки – функции, которые будут вызываться, когда появляется тот или иной event, – но сути это не меняет. Тебе придётся подключать какой-то timer-api, который будет вызывать раз в секунду функцию, которая будет пересчитывать положение стрелок и заказывать перерисовку окна. По-моему, проще написать всё в TurboC.
|
|
|
RE: Вопрос по С++ - 2008-05-17 10:19:15.526666
|
|
|
BatonXAK
Сообщений: 1137
Оценки: 0
Присоединился: 2007-03-02 20:44:00.803333
|
У меня просто кусок кода выресовки домика для часов на DEV написан и я нашел исходник часов на Turbo хотел совместить но чевствую придется щаново на DEV писать!
|
|
|
RE: Вопрос по С++ - 2008-05-17 10:27:29.450000
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
quote:
ORIGINAL: BatonXAK Незя OpenGL препод ругаться будут надо под graphics! quote:
ORIGINAL: BatonXAK У меня просто кусок кода выресовки домика для часов на DEV написан и я нашел исходник часов на Turbo хотел совместить но чевствую придется щаново на DEV писать! Я чего-то не понимаю, как эти два твоих высказывания уживаются в твоей голове. "надо под graphics" и "буду делать в dev-c++".
|
|
|
RE: Вопрос по С++ - 2008-05-17 12:09:29.990000
|
|
|
BatonXAK
Сообщений: 1137
Оценки: 0
Присоединился: 2007-03-02 20:44:00.803333
|
Вот так примерно : Кстати как в graphics закрасить треугольник по кардинатам , а то у меня не выходит ! И еще цифры на очерчиваются черными квадратами как исправить? " alt="" />
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <graphics.h>
int main(void)
{
int x=315;
int y=220;
int d=70;
int z=320;
int j=110;
int k=25;
int glaz1=305;
int glaz_1=100;
int glaz2=320;
int glaz_2=100;
int diam_glaz=2;
/* request auto detection */
int gdriver = DETECT, gmode, errorcode;
int midx, midy, i;
/* initialize graphics, local variables*/
initgraph(&gdriver, &gmode, "");
/* read result of initialization */
errorcode = graphresult();
if (errorcode != grOk) /* an error
occurred */
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1); /* terminate with error code */
}
midx = getmaxx() / 2;
midy = getmaxy() / 2;
/* loop through the fill patterns */
for (i=EMPTY_FILL; i<USER_FILL; i++)
{
/* set the fill style */
setfillstyle(i, getmaxcolor());
/* draw the 3-d bar */
// ïðîðèñîâêà âñåé ãðàôèêè
setcolor(getmaxcolor()); // âûáèðàåò öâåò ëèíèè
{
// ïîñòðîåíèå ëèíèÿìè êàðêàñà
line((midy/2)+300,300,(midy/2)+100,300);
line((midy/2)+300,300,(midy/2)+300,140);
line((midy/2)+300,140,(midy/2)+100,140);
line((midy/2)+100,300,(midy/2)+100,140);
line((midy/2)+100,140,(midy/2)+200,60);
line((midy/2)+300,140,(midy/2)+200,60);
// ïðîðèñîêà âñåõ îêðóæíîñòåé
circle(glaz1,glaz_1,diam_glaz+5);
circle(glaz2,glaz_2,diam_glaz+5);
circle(z,j,k+5);
circle(x,y,d+5);
// çàëèâêà äîìèêà
setfillstyle(SOLID_FILL,6);
bar(420,140,220,300);
//çàëèâêà öèôåðáëàòà
setfillstyle(SOLID_FILL,15);
pieslice(315,220,0,360,80);
// çàëèâêà ëèöà êóêóøêè
setfillstyle(SOLID_FILL,14);
pieslice(320,110,0,360,30);
// çàëèâêà ãëàç êóêóøêè
circle(glaz1,glaz_1,diam_glaz+5);
circle(glaz2,glaz_2,diam_glaz+5);
setfillstyle(SOLID_FILL,12);
pieslice(305,100,0,360,9);
setfillstyle(SOLID_FILL,12);
pieslice(320,100,0,360,9);
setcolor(1);
// óñòàíîâêà óëûáêè êóêóøêè
setlinestyle(SOLID_LINE,11,THICK_WIDTH);
arc(midy/+0.76, 120, 160, 20, 8);
{
setcolor(RED);
settextstyle(3,HORIZ_DIR,1);
outtextxy(345,155,"1");
outtextxy(310,270,"6");
outtextxy(245,210,"9");
outtextxy(375,215,"3");
outtextxy(370,180,"2");
outtextxy(360,245,"4");
outtextxy(340,265,"5");
outtextxy(280,260,"7");
outtextxy(260,240,"8");
outtextxy(250,180,"10");
outtextxy(270,155,"11");
outtextxy(305,150,"12");
setfillstyle(SOLID_FILL,8);
setfillstyle(SOLID_FILL,8);
}
}
getch();
}
/* clean up */
closegraph();
return 0;
}
|
|
|
RE: Вопрос по С++ - 2008-05-17 12:40:35.610000
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
А ты уверен, что приведённый кусок кода под Win платформу компилится? Выложи .exe ;). P.S. Может ты под Win98 пишешь? Там дос-приложения с графическим режимом работы видеоадаптера можно было в окошки сворачивать =D
|
|
|
RE: Вопрос по С++ - 2008-05-17 12:51:41.290000
|
|
|
BatonXAK
Сообщений: 1137
Оценки: 0
Присоединился: 2007-03-02 20:44:00.803333
|
Вот http://ifolder.ru/6599238 тока у меня винда 64 битка! Мне чучуть уже осталось понять почему цифры в черных квадратах закрасить часы и реализовать ход часов поможите кто чем может!
|
|
|
RE: Вопрос по С++ - 2008-05-18 09:32:56.343333
|
|
|
BatonXAK
Сообщений: 1137
Оценки: 0
Присоединился: 2007-03-02 20:44:00.803333
|
Ладно я часы уже смастерил подскажите какой функцией перевести из оконного режима в полный экран? что в параметрах компилятора прописать при подключении звука fmod я все распихал по инструкции но линкер не пашет!
|
|
|
RE: Вопрос по С++ - 2008-05-19 17:35:47.430000
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Убери у окна заголовок (SetWindowLongPtr в помощь) заюзай ShowWindow(hwnd, SW_MAXIMIZE). Только я всё равно не понял, как в win приложении может создаться окно без вызовов CreateWindow ?
|
|
|
RE: Вопрос по С++ - 2008-05-19 18:16:21.696666
|
|
|
Genco
Сообщений: 1662
Оценки: 90
Присоединился: 2007-12-16 23:11:22.003333
|
А я проглядел - он разве его создает? я токо рисовалку увидел,вроде токо она и есть.Окно вообще мона программно не создавать // скачал экзешник.окон 2.присоединяюсь к вопросу тогда…правда каспер 2 файла в 1 нашел,мб в этом дело?
|
|
|
RE: Вопрос по С++ - 2008-05-27 09:09:22.436666
|
|
|
BatonXAK
Сообщений: 1137
Оценки: 0
Присоединился: 2007-03-02 20:44:00.803333
|
Я короче часы делаю и при прохождении стрелки один круг они должны звенеть пишу так не звенят!Почему? if (as==90) { FSOUND_Init(44100,32,0); FSOUND_STREAM *stream = FSOUND_Stream_Open("20-Michael Woods-Dan.mp3",FSOUND_2D,0,0); FSOUND_Stream_Play(0,stream); }
|
|
|
RE: Вопрос по С++ - 2008-05-29 04:15:37.873333
|
|
|
provider
Сообщений: 100
Оценки: 0
Присоединился: 2008-04-12 15:31:33.813333
|
#include <conio.h> #include "inc/fmod.h" FSOUND_SAMPLE* handle; int main () { // init FMOD sound system FSOUND_Init (44100, 32, 0); // load and play sample handle=FSOUND_Sample_Load (0,"sample.mp3",0, 0, 0); FSOUND_PlaySound (0,handle); // wait until the users hits a key to end the app while (!_kbhit()) { } // clean up FSOUND_Sample_Free (handle); FSOUND_Close(); } 2 #include <conio.h> #include "inc/fmod.h" FSOUND_STREAM* handle; void main () { //init FMOD sound system FSOUND_Init (44100, 32, 0); //load and play sample handle=FSOUND_Stream_Open("sample.mp3",0, 0, 0); FSOUND_Stream_Play (0,handle); //wait until the users hits a key to end the app while (!_kbhit()) { } //clean up FSOUND_Stream_Close(handle); FSOUND_Close(); } не уверен но папробуй
|
|
|
RE: Вопрос по С++ - 2008-05-29 04:23:51.453333
|
|
|
provider
Сообщений: 100
Оценки: 0
Присоединился: 2008-04-12 15:31:33.813333
|
FSOUND_STREAM *stream; //pointer to a structure needed by fmod BOOL FsoundStarted;//booleean to check if we have to reset the fmod settings //filename : path from the Half-Life folder where is fmod //volume between 0 and 255, loop 1 or 0 //priority : set if the current mp3 must be stopped and immédiately replaced int UTIL_PlayMP3(const char *filename, int volume, int loop, int priority) { //check the current playing position in the mp3 file if ( stream )//if there is an existing stream { int sizemp3 = FSOUND_Stream_GetLength( stream );//MP3 file size in bytes int positionmp3 = FSOUND_Stream_GetPosition( stream );//current playing position in bytes //ALERT(at_console, "Size MP3 %d\nPosition MP3 %d\n", sizemp3, positionmp3); if ( positionmp3 >= sizemp3 - 256 || positionmp3 == 0 || priority ==1)//we are close or at the end, or the test failed, or there is a priority { FSOUND_Stream_Close(stream);//we close the current stream stream = NULL; } else { return 2;// stop and return the information that the mp3 is still playing and can't be stopped and replaced } } //now if there is no existing stream we have to collect info about the mp3 file int length = 0;//length of the mp3 file FILE * mp3; mp3 = fopen(filename, "rb");//we open the mp3 file in read mode binary if (!mp3)//if there is no existing file at this path { return 0;//stop and return the info that there was nothing there } fseek(mp3, 0, SEEK_END);//we go to end of file length = ftell(mp3);//length of mp3 //ALERT(at_console, "MP3 LENGTH %d\n", length); fclose(mp3);//we close the mp3 file //do we have to play in loop? int LoopType = 0; if( loop ) { LoopType = FSOUND_LOOP_NORMAL;//fsound flag } else { LoopType = FSOUND_LOOP_OFF; } if ( stream )//now if there is a stream, we close it and reset the stream structure { FSOUND_Stream_Close(stream); } stream = NULL; if ( !FsoundStarted )//if we did not already initialise fsound { FSOUND_SetOutput(FSOUND_OUTPUT_DSOUND); // Output by DirectSound FSOUND_SetBufferSize(200);//buffer to 200 miliseconds FSOUND_SetDriver(0); // Select DirectSound by défaut FSOUND_Init(44100, 16, 0); // Initialise playback of stream at 44khz 16channels FsoundStarted = 1; } stream = FSOUND_Stream_OpenFile(filename, FSOUND_NORMAL | LoopType, longueur); // Opens the mp3 file FSOUND_Stream_Play(FSOUND_FREE, stream); // Play the mp3 FSOUND_SetSFXMasterVolume(volume);// set the master volume of all streams return 1;//stop and return the info that the mp3 as been successfully started } папробуй и у дачи добавить можно напильником
|
|
|
RE: Вопрос по С++ - 2008-05-29 20:48:37.910000
|
|
|
BatonXAK
Сообщений: 1137
Оценки: 0
Присоединился: 2007-03-02 20:44:00.803333
|
Подскажте какую нибудь функцию для С++ чтобы пишала через встроенный динамик тип sound(); и Beep(); а то эти функции на 64 битке не потдерживаются
|
|
|
RE: Вопрос по С++ - 2008-05-30 17:21:48.043333
|
|
|
provider
Сообщений: 100
Оценки: 0
Присоединился: 2008-04-12 15:31:33.813333
|
вот ещё если что мож понадобится( beep )луче с паузей делать…system("pause"); 1 #include<iostream> #include<windows.h> using namespace std; int main() { cout << (" Warning! Policeman is comming! ") << endl; Beep(523,500); Beep(769,500); Beep(523,500); Beep(769,500); Beep(523,500); Beep(769,500); Beep(523,500); Beep(769,500); Beep(523,500); Beep(769,500); Beep(523,500); Beep(769,500); Beep(523,500); Beep(769,500); Beep(523,500); Beep(769,500); Beep(523,500); Beep(769,500); Beep(523,500); Beep(769,500); Beep(523,500); Beep(769,500); Beep(523,500); Beep(769,500); Beep(523,500); Beep(769,500); Beep(523,500); Beep(769,500); Beep(523,500); Beep(769,500); Beep(523,500); Beep(769,500); Beep(523,500); Beep(769,500); Beep(523,500); Beep(769,500); Beep(523,500); Beep(769,500); Beep(523,500); Beep(769,500); Beep(523,500); Beep(769,500); Beep(523,500); Beep(769,500); system("pause"); return 0; } 2 // sound a tugboat toot using a midi voice from the winmm.lib // in case of Dev C++ link with libwinmm.a via // Project>>Project Options>>Parameters>>Add Lib>>libwinmm.a // BCX generated C code painstakingly modified for Dev C++ // // Sound(Frequency,Duration[,Volume,Voice,Tempo]) // Volume = 0 to 127 (off to loudest) // Voice = 0 to 127 (Shanai = 111, Tuba = 58, Accordion = 21) // more midi voices: // Rock Organ = 18, Marimba = 12, Steel String Guitar = 25 // Choir Aahs = 52, Alto Sax = 65, Bird Tweet = 123, Sitar = 104 // FX 8 (sci-fi) = 103, FX 3 (crystal) = 98, Glockenspiel = 9 // // a Dev-C++ tested Console Application by vegaseat 21nov2004 #include <cmath> #include <windows.h> #include <mmsystem.h> using namespace std; #define SNDQUE 10000 typedef struct _soundtype { double Freq; int Dura; int Vol; int Voice; double Tempo; int sndTid; } soundtype, *LPSOUNDTYPE; static soundtype SndPmtr[SNDQUE+1]; static int gTenter; static int gTwait; static int gTexit; static int gTarray; static BOOL gTsig; static HANDLE gSThread = NULL; double Round (double,int); double Abs (double); int Sound (float,int=0,int=127,int=0,float=1); // changed this from int PlaySnd(void) to: DWORD WINAPI PlaySnd (LPVOID); int main() { // Tugboat whistle sound 95 hertz, 2000ms, 127 = loud, 111 = Shanai // experiment with your own sounds, it's fun … Sound(95,2000,127,111); // 2 second blast Sound( 1,1000, 0,111); // 1 second of silence Sound(95,2000,127,111); // 2 second blast Sound( 1,1000, 0,111); // 1 second of silence Sound(95,2000,127,111); // 2 second blast // wait till que is empty while(Sound(0) != 0) { Sleep(10); } return 0; } double Round (double n, int d) { return (floor((n)*pow(10.0,(d))+0.5)/pow(10.0,(d))); } double Abs (double a) { if (a < 0) return -a; return a; } int Sound (float Freq,int Dura,int Vol,int Voice,float Tempo) { DWORD dwThreadId; if (Freq == 0 && Dura < 1) return gTenter-gTexit; // silence if (Freq == 0) Vol = 0; if (Dura < 5) Dura = 5; gTenter++; gTsig = FALSE; if (gTenter >= SNDQUE) { gTarray = gTenter % SNDQUE+1; } else { gTarray=gTenter; } SndPmtr[gTarray].Freq = Freq; SndPmtr[gTarray].Dura = Dura; SndPmtr[gTarray].Tempo = Tempo; SndPmtr[gTarray].Vol = Vol; SndPmtr[gTarray].Voice = Voice; SndPmtr[gTarray].sndTid = gTenter; if (gSThread == NULL && (Freq == Abs(Freq) || Freq == 0)) { // "PlaySnd" needs casting (void *) gSThread = CreateThread(NULL,0,PlaySnd,(void *)"PlaySnd",0,&dwThreadId); Sleep(1); return 0; } if (Freq != Abs(Freq)) { if (Freq == -1) { Freq = 0; SndPmtr[gTarray].Vol=0; } SndPmtr[gTarray].Freq=Abs(Freq); gTsig=TRUE; while(gSThread!=NULL) { Sleep(10); } gTexit = gTenter-1; gTwait = gTenter-1; gTsig = FALSE; return PlaySnd(0); // needs some kind of argument } return 0; } DWORD WINAPI PlaySnd (LPVOID) { soundtype LocSndPar; int lTarray; while(gTenter > gTexit && gTsig == FALSE) { gTwait++; if (gTwait >= SNDQUE) lTarray = gTwait % SNDQUE+1; else lTarray = gTwait; LocSndPar = SndPmtr[lTarray]; int Note = 0; int Phrase = 0; HMIDIOUT hMidi; midiOutOpen(&hMidi,(UINT)-1,0,0,CALLBACK_NULL); midiOutShortMsg(hMidi,(256*LocSndPar.Voice)+192); // convert frequency to midi note Note = (int)Round((log(LocSndPar.Freq)-log(440.0))/log(2.0)*12+69,0); Phrase = (LocSndPar.Vol*256+Note)*256+144; midiOutShortMsg(hMidi,Phrase); Sleep((int)(LocSndPar.Dura*(1/LocSndPar.Tempo+0.0001))); Phrase = (LocSndPar.Vol*256+Note)*256+128; midiOutShortMsg(hMidi,Phrase); midiOutClose(hMidi); gTexit++; } CloseHandle(gSThread); gSThread = NULL; return 0; } пака удачи…
|
|
|
RE: Вопрос по С++ - 2008-05-30 17:37:45.353333
|
|
|
Actek
Сообщений: 604
Оценки: 0
Присоединился: 2008-02-24 10:24:14.710000
|
делай вставки asm
|
|
|
|
|