Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Вопрос по С++

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Вопрос по С++
Имя
Сообщение << Старые топики   Новые топики >>
Вопрос по С++ - 2008-02-01 18:43:35.403333   
BeoWolf11

Сообщений: 76
Оценки: 0
Присоединился: 2008-01-31 21:09:43.920000
Вот у меня такой вопрос. Уже 3 часа сижу не могу найти способ зделать прогу на С++
Вот нужна такая прога которая даст все числа А (A<=N) зная что А делится на все цифры из которого оно состоит.
Помогите начинающему, плизз
Post #: 1
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 разряда). Короче тупость я тут сморозил. Голова сейчас не варит.
П.П.С. Можешь число представить как текст, разбить его по символам, а потом обратно в число. Заодно и длинну текста узнаешь, это будет разряд.
Post #: 2
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
как это можно зделать?
Post #: 3
RE: Вопрос по С++ - 2008-02-01 21:36:25.846666   
goldstarKZ

Сообщений: 122
Оценки: 0
Присоединился: 2008-01-16 19:02:41.643333
Судя по твоему куску делишь А на б и ц. Или ты говоришь про то, что А может быть равно 2109871029481094710941?
Post #: 4
RE: Вопрос по С++ - 2008-02-01 22:08:57.200000   
Genco

Сообщений: 1662
Оценки: 90
Присоединился: 2007-12-16 23:11:22.003333
Так нужны ж все такие числа,которые <=N,правильно?
bool chk(int a)
{
&nbsp; int j,b,AA;
&nbsp; bool Fl;
&nbsp; AA=a;
&nbsp; Fl=true;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //типо "флаг"
&nbsp; while (a!=0)
&nbsp; {
&nbsp;&nbsp;&nbsp; b=a % 10;&nbsp;&nbsp;&nbsp; //не помню как там,кажетсо это и есть остаток от деления
&nbsp;&nbsp;&nbsp; if (b==0) { b=1; }
&nbsp;&nbsp;&nbsp; if ((AA % b)!=0) {
&nbsp;&nbsp;&nbsp;&nbsp;Fl=False; }
&nbsp;&nbsp;&nbsp; a=(a-(a % 10))/10;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //или как там сделать целую часть от деления
&nbsp;&nbsp;}
&nbsp;return Fl;
}
——
for (i=1; i&lt;=N; i++)
{
&nbsp;&nbsp; if (chk(i)==true)
&nbsp;&nbsp;&nbsp;&nbsp; printf("%d\n",i);
}
Не компилировал,не перечитывал.
//Ща поправил огрехи,даже компилится и пашет
Post #: 5
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?
Post #: 6
RE: Вопрос по С++ - 2008-02-01 22:19:00.190000   
BeoWolf11

Сообщений: 76
Оценки: 0
Присоединился: 2008-01-31 21:09:43.920000
quote:

Так нужны ж все такие числа,которые &lt;=N,правильно?
bool chk(int a);
{
&nbsp; int j,b;
&nbsp; bool Fl;
&nbsp; Fl=true;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //типо "флаг"
&nbsp; while (a!=0)
&nbsp; {
&nbsp;&nbsp;&nbsp; b=a % 10;&nbsp;&nbsp;&nbsp; //не помню как там,кажетсо это и есть остаток от деления
&nbsp;&nbsp;&nbsp; if ((Fl % b)!=0) {
&nbsp;&nbsp;&nbsp;&nbsp;Fl=False; }
&nbsp;&nbsp;&nbsp; a=a-(a % 10);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //или как там сделать целую часть от деления
&nbsp;&nbsp;}
&nbsp;return Fl;
}
——
for (i=1; i&lt;=N; i++)
{
&nbsp;&nbsp; if chk(i)==true
&nbsp;&nbsp;&nbsp;&nbsp; printf("%d",i);
}
Не компилировал,не перечитывал.

У меня жалуется на строчку &nbsp;&nbsp; if chk(i)==true&nbsp; типа&nbsp;Parse Erorr
Post #: 7
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)
Post #: 8
RE: Вопрос по С++ - 2008-02-02 03:22:54.173333   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Нормальную постановку задачи нужно делать… Как быть с числом 10? Делить на нуль?… лови _рабочий_ вариант

#include &lt;stdio.h&gt; #include &lt;conio.h&gt; int Podhodit( int val ) { int src = val, digit; while ( val != 0 ) { &nbsp;&nbsp;&nbsp; digit = val % 10; &nbsp;&nbsp;&nbsp; if ( (digit == 0) || (src % digit != 0) ) // было &amp;&amp; - ошибка, исправил ;) &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return 0; &nbsp;&nbsp;&nbsp; val /= 10; } return 1; } int main( void ) { int a, n; printf( "N&gt; " ); scanf( "%d", &amp;n ); if ( n &lt;= 0 ) &nbsp;&nbsp;&nbsp; return 1; for ( a = 1; a &lt;= n; ++a ) &nbsp;&nbsp;&nbsp; if ( Podhodit( a ) ) &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf( "%d\n", a ); getch(); return 0; }
Post #: 9
RE: Вопрос по С++ - 2008-02-02 19:37:54.793333   
Genco

Сообщений: 1662
Оценки: 90
Присоединился: 2007-12-16 23:11:22.003333
 Ну или так.Рабочий вариант? вот в этой строчке только:
 
quote:

if ( (digit == 0) &amp;&amp; (src % digit != 0) )
будет ошибка деления на 0,потому как остаток от деления  не будет считаться.Ну да это мелочь,исправляется в зависимости от условия.
Post #: 10
RE: Вопрос по С++ - 2008-02-03 03:11:28.010000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Ошибся, надо || поставить. 3 ночи всё-таки было, когда писал.
Post #: 11
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
Post #: 12
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. если до тебя все ещё не дошло, то наверное, модеры тебя скоро забанят)))
Post #: 13
RE: Вопрос по С++ - 2008-05-13 18:49:15.633333   
provider

Сообщений: 100
Оценки: 0
Присоединился: 2008-04-12 15:31:33.813333
ты чувак ты чё такой по жизни умный забанят не забанят ,,,тебя не колышет отвали и то что хочет тот и учет балбес ты …..и подсекала ,пусть меня луче забанят, зато от тупого подальше как ты, если ни знаешь как ответить то промолчи луче, ты ещё и баран….
">"&gt;
Post #: 14
RE: Вопрос по С++ - 2008-05-13 19:51:22.993333   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
"Хорошо" высказался. Только вот непонятно, зачем писать сообщения о помощи, когда после твоих идиотских выходок тебе точно никто помогать не будет. Чел, облегчи жизнь модераторам - уйди сам.

А касательно ответа на твой вопрос - покопайся в гугле.
Post #: 15
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 &lt;graphics.h&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; #include &lt;dos.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; #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 &gt; 60) { m++; s = 0; am -= 6; // шаг движения минутной стрелки 6 градусов if (am &lt; 0) am = 354; } as -= 6; if (as==90) { sound(490); } if (as &lt; 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("Для завершения программы нажмите &lt;Enter&gt;"); getch(); } }
Post #: 16
RE: Вопрос по С++ - 2008-05-16 21:08:15.130000   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
Возьми какую-нибудь библиотечку типа qt или gtk, и рисуй в них. qt – не знаю, в gtk есть замечательный виджет GtkDrawingArea.
Или возьми, скажем freeglut, загляни в примеры и сделай как там, заодно с opengl'ем ознакомишься.
Post #: 17
RE: Вопрос по С++ - 2008-05-16 21:28:09.063333   
BatonXAK

Сообщений: 1137
Оценки: 0
Присоединился: 2007-03-02 20:44:00.803333
Незя OpenGL препод ругаться будут надо под graphics !
Post #: 18
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.
Post #: 19
RE: Вопрос по С++ - 2008-05-17 10:19:15.526666   
BatonXAK

Сообщений: 1137
Оценки: 0
Присоединился: 2007-03-02 20:44:00.803333
У меня просто кусок кода выресовки домика для часов на DEV написан и я нашел исходник часов на Turbo хотел совместить но чевствую придется щаново на DEV писать!
Post #: 20
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++".
Post #: 21
RE: Вопрос по С++ - 2008-05-17 12:09:29.990000   
BatonXAK

Сообщений: 1137
Оценки: 0
Присоединился: 2007-03-02 20:44:00.803333
Вот так примерно :
Кстати как в graphics закрасить треугольник по кардинатам , а то у меня не выходит !
И еще цифры на очерчиваются черными квадратами как исправить?
" alt="" />

#include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; #include &lt;graphics.h&gt; 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&lt;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; }
Post #: 22
RE: Вопрос по С++ - 2008-05-17 12:40:35.610000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
А ты уверен, что приведённый кусок кода под Win платформу компилится? Выложи .exe ;).

P.S. Может ты под Win98 пишешь? Там дос-приложения с графическим режимом работы видеоадаптера можно было в окошки сворачивать =D
Post #: 23
RE: Вопрос по С++ - 2008-05-17 12:51:41.290000   
BatonXAK

Сообщений: 1137
Оценки: 0
Присоединился: 2007-03-02 20:44:00.803333
Вот http://ifolder.ru/6599238 тока у меня винда 64 битка!

Мне чучуть уже осталось понять почему цифры в черных квадратах закрасить часы и реализовать ход часов поможите кто чем может!
Post #: 24
RE: Вопрос по С++ - 2008-05-18 09:32:56.343333   
BatonXAK

Сообщений: 1137
Оценки: 0
Присоединился: 2007-03-02 20:44:00.803333
Ладно я часы уже смастерил подскажите какой функцией перевести из оконного режима в полный экран?

что в параметрах компилятора прописать при подключении звука fmod я все распихал по инструкции но линкер не пашет!
Post #: 25
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 ?
Post #: 26
RE: Вопрос по С++ - 2008-05-19 18:16:21.696666   
Genco

Сообщений: 1662
Оценки: 90
Присоединился: 2007-12-16 23:11:22.003333
 А я проглядел - он разве его создает? я токо рисовалку увидел,вроде токо она и есть.Окно вообще мона программно не создавать  // скачал экзешник.окон 2.присоединяюсь к вопросу тогда…правда каспер 2 файла в 1 нашел,мб в этом дело?
Post #: 27
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);
}
Post #: 28
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();
}

не уверен но папробуй


Post #: 29
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 &nbsp; //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 &gt;= 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 &nbsp; //do we have to play in loop? int LoopType = 0; if( loop ) { LoopType = FSOUND_LOOP_NORMAL;//fsound flag } else { LoopType = FSOUND_LOOP_OFF; } &nbsp; if ( stream )//now if there is a stream, we close it and reset the stream structure { FSOUND_Stream_Close(stream); } stream = NULL; &nbsp; 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 &nbsp; FSOUND_SetSFXMasterVolume(volume);// set the master volume of all streams &nbsp; return 1;//stop and return the info that the mp3 as been successfully started } &nbsp;папробуй и у дачи добавить можно напильником
Post #: 30
RE: Вопрос по С++ - 2008-05-29 20:48:37.910000   
BatonXAK

Сообщений: 1137
Оценки: 0
Присоединился: 2007-03-02 20:44:00.803333
Подскажте какую нибудь функцию для С++ чтобы пишала через встроенный динамик тип sound(); и Beep(); а то эти функции на 64 битке не потдерживаются
Post #: 31
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;

      }


  пака удачи…
Post #: 32
RE: Вопрос по С++ - 2008-05-30 17:37:45.353333   
Actek

Сообщений: 604
Оценки: 0
Присоединился: 2008-02-24 10:24:14.710000
делай вставки asm
Post #: 33
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Вопрос по С++







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.