Доброе время суток. Требуется для курсового написать Генератор случайных чисел с экспоненциальным законом распределения. Формула: p(x) = l * exp(-* x). вот что получилось у меня но проблема в том что ответ всегда равен нолю. в случае если поставить границы для рандома у него всегда одно число ноль. и ответ в результате тоже. void main (){ double p; srand((unsigned long)time(NULL)); double x=rand(); double l=rand(); p=l*exp(-l*x); printf ("%d ,%d ,%d",p,x,l); getch ();} Заранее благодарен.
Хелп. На асме (Tasm) надо накодить прогу, вычисляющую все простые числа в диапазоне от 2 до вводимого с клавы числа. upd: Кое как разобрался, написал ) выкладываю на всякий случай Code: .model tiny .386 .Stack 70h .code start: mov ax,@data mov ds,ax push cs pop ds mov ah,09h ; приглашение к вводу mov dx,offset str1 int 21h mov di,0 ; введенные символы mov si,0 ; номер позиции mov bp,10 ; основание системы r1: mov ah,08h int 21h ;читаем символ cmp al,'0' ;если это служебный символ -> r3 jb r3 cmp al,'9' ;если это не цифра -> r1 ja r1 mov bl,al ;сохраним символ в bl mov ax,di mul bp ;умножаем на 10 mov dl,bl sub dl,'0' ;преобразуем символ в цифру mov dh,0 ;DX - цифра add dx,ax jc r1 ;Если перенос -> переполнение inc si mov di,dx mov dl,bl mov ah,02h int 21h jmp r1 r3: cmp si,0 je r1 cmp al,13 je enter2 ;нажали ввод cmp al,8 jne r1 enter2: mov ah,09h ;новая строка mov dx,offset newline int 21h mov mem,di ;дублируем эталон mov nen,di mov ax,mem ; эталон в AX для работы mov cnt,1 ; счетчик в еденицу mov bl,1 mul bl ; переводим AX в DX:SI main_cycle: ;главный цикл add cnt,1 ; проверяем следующее число mov bx,mem mov ax,cnt cmp ax,bx ; проверены все числа... jg qall mov bx,1 ; переносим AX в DX:AX mul bx mov cx,2 ; делим с тройки internal: push ax push dx ; сохраняем текущее проверяемое число ;mov bx,cx div cx ; делим DX:AX на CX cmp dx,0 ; если остатка нету je main_cycle; то число не простое pop dx pop ax add cx,1 cmp ax,cx jle prime jmp internal prime: mov ah,09h ;выводим простое число mov dx,offset space int 21h mov ax,cnt call print_prime jmp main_cycle qall: mov ax,4c00h;Выход int 21h print_prime proc ;вывод числа push -1 l: xor dx,dx;чистим dx div bp ;делим push dx ;сохраним цифру cmp ax,0 ;остался 0? jne l ;если нет, продолжим mov ah,2h l2: pop dx ;восстановим цифру cmp dx,-1 ;дошли до конца -> выход je qex add dl,'0' ;преобразуем число в цифру int 21h ;выведем цифру на экран jmp l2 ;и продолжим qex: ret endp print_prime str1 db '.-==[Prime Numbers]==-.',10,13 db '> $' space db ' $' newline db 10,13,'$' mem dw 0 nen dw 0 cnt dw 0 end start
Может кому поможет. Курсовая работа: Нахождение интеграла 5 методами с высокой точностью.. Code: function funk(var x:real):real; begin funk:=Ваша функция end; procedure left(var a,b,e:real); var k,s1,s2,p,l,rez:real; i,g,n:integer; begin n:=30; g:=0; repeat s2:=s1; p:=(b-a)/n; l:=0; g:=g+1; for i:=0 to n-1 do begin k:=a+i*p; l:=l+funk(k); end; s1:=l*p; n:=n*2; until abs(s1-s2)<=e; rez:=s1; writeln('rezult ',rez:6:5,' kol-vo itaracij ',g); readln; end; procedure right(var a,b,e:real); var t,s1,s2,h,s,rez:real; n,i,g:integer; begin n:=30; g:=0; repeat s2:=s1; h:=(b-a)/n; s:=0; g:=g+1; for i:=1 to n do begin t:=a+i*h; s:=s+funk(t); end; s1:=s*h; n:=n*2; until abs(s1-s2)<=e; rez:=s1; writeln('rezult ',rez:6:5,' kol-vo itaracij ',g); readln; end; procedure center (var a,b,e:real); var t,s1,s2,h,s,rez:real; n,i,g:integer; begin n:=30; g:=0; repeat s2:=s1; h:=(b-a)/n; s:=0; g:=g+1; for i:=0 to n-1 do begin t:=a+h/2+h*i; s:=s+funk(t); end; s1:=s*h; n:=n*2; until abs(s1-s2)<=e; rez:=s1; writeln('rezult ',rez:6:5,' kol-vo itaracij ',g); readln; end; procedure trap(var a,b,e:real); var t,s1,s2,h,s,rez: real; i,n,g:integer; begin n:=30; g:=0; repeat s2:=s1; h:=(b-a)/n; s:=(funk(a)-funk(b))/2; g:=g+1; for i:=1 to n-1 do begin t:=a+i*h; s:=s+funk(t); end; s1:=h*s; n:=n*2; until abs(s1-s2)<=e; rez:=s1; writeln('rezult ',rez:6:5,' kol-vo itaracij ',g); readln; end; procedure simps(var a,b,e:real); var s,r,s2,s1,h:real; m,n,ch,g:integer; begin n:=30; ch:=1; g:=0; repeat s2:=s1; h:=(b-a)/(n-1); s:=funk(a)+funk(b); g:=g+1; for m:=1 to n-2 do begin r:=a+h*m; s:=s+ch*funk(r); if (ch=4) then ch:=2 else ch:=4; end; s1:=s*h/3; until abs(s2-s1)/s1<e; writeln('rezult ', s1 :6 :5,' kol-vo iteracij ',g); readln; end; var a,b,e:real; vibor:integer; begin repeat writeln('Vvedite metod naxogdeni9 Interala'); writeln('1-Pravilo levix pr9moygolnikov'); writeln('2-Pravilo pravix pr9moygolnikov'); writeln('3-Pravilo srednix pr9moygolnikov'); writeln('4-Naxogdenie integrala metodom simpsona'); writeln('5-Naxogdenie integrala s pomowu pravila Tropesii'); writeln('6-Informasi9 o programme'); readln(vibor); writeln(''); if vibor=6 then begin clrscr; writeln('-===========================================------'); writeln('Ваше имя сюда вобьете'); writeln('-===========================================------'); writeln(''); end; until vibor<=5; clrscr; writeln('-===========================================------'); write('Vvedite a - ');readln(a); writeln(''); writeln('-===========================================------'); write('VVedite b - ');readln(b); writeln(''); writeln('-===========================================------'); write('Vved EPS - ');readln(e); writeln(''); writeln('-===========================================------'); if vibor=1 then begin writeln('Vi vibrali 1. Metod LeVix pr9moygolnikov'); writeln; left(a,b,e); end; if vibor=2 then begin writeln('Vi vibrali 2. Metod PraVix pr9moygolnikov'); writeln; right(a,b,e); end; if vibor=3 then begin writeln('Vi vibrali 3. Metod Srednix pr9moygolnikov'); writeln; center(a,b,e); end; if vibor=4 then begin writeln('Vi vibrali 4.Metod TraPesii'); writeln; trap(a,b,e); end; if vibor=5 then begin writeln('Vi vibrali 5. Metod Simpsona '); writeln; simps(a,b,e); end; readln end. Писал на ABC паскале поетому немного кривовато получилось. Но у меня приняли
Каким образом с помощью MFC реализовать следующее: 1. Приложение должно при нажатии клавиш к примеру 1,2,3, ........ выводить графические фигуры (Проблема в том что какое сообщение вставлять в карту? Это WM_CHAR ? и как потом реализацию отклика на сообщение связать с WM_PAINT ....... так чтобы появлялась нужная фигура) 2. Приложение под управлением таймера выводит на экран графические фигуры с заданным интервалом (Как в void CMyMainWnd::OnTimer(UINT nIDEvent) это можно осуществить ? ) 3. Нужно чтобы с помощью клавиш "вверх - вниз" изменялась частота таймера. Шаблон данных приложений примерно такого вида: #include <afxwin.h> class CMyMainWnd: public CFrameWnd {public: CMyMainWnd() { Create(NULL,"$ - Djigser"); SetTimer(1,1000,NULL); } afx_msg void OnTimer(UINT); DECLARE_MESSAGE_MAP() ~CMyMainWnd() { KillTimer(1); } }; BEGIN_MESSAGE_MAP(CMyMainWnd,CFrameWnd) ON_WM_TIMER() END_MESSAGE_MAP() class CMyApp : public CWinApp {public: CMyApp(){}; virtual BOOL InitInstance() { m_pMainWnd=new CMyMainWnd(); m_pMainWnd->ShowWindow(SW_SHOW); return TRUE; } }; CMyApp theApp; void CMyMainWnd::OnTimer(UINT nIDEvent) { if(nIDEvent==1) { CClientDC dc(this); CBrush brush; brush.CreateSolidBrush(RGB(0,0,255)); CBrush* def_brush = dc.SelectObject(&brush); dc.Ellipse(5,5,50,50); dc.SelectObject(def_brush); brush.DeleteObject(); } } Был бы признателен за оказанную помощь.
Задание используя алгоритмы и контейнеры Stl: создай список из 20 случаных элементов, со значениями от 1 до 19. отсортируй список так что бы сначала шли четные элементы Заранее спасибо
Shawn1x Code: #include <vector> #include <iostream> #include <time.h> #include <algorithm> using namespace std; bool pred( int value ) { return !(value % 2) ; } void print( int value ) { cout << value << '\t'; } void set_and_print( int& value) { cout << ( value = rand() % 20 ) << '\t'; } void main() { const int size = 20; vector<int> vec(size); srand((unsigned)time(NULL)); for_each(vec.begin(), vec.end(), set_and_print); cout << endl; partition(vec.begin(), vec.end(), pred); for_each(vec.begin(), vec.end(), print); cout << endl; }
Народ, помогите пожалуйста. Задача Ферма. Найти квадрат, который в сумме со всеми его собственными делителями дает куб. С рекурсивным алгоритмом . На С++. Заранее огромное спасибо.
очень надо решить задачу до пятницы...на с++...никто почему-то не может...неужели она такая нерешаемая?посмотрите пожалуйста...может кто хоть часть кода сможет написать? Разместить на шахматной доске максимальное количество слонов и ладей так, чтобы они не находились друг у друга "под боем".
Вот дали задачку, надо написать под Delphi в консоль апликатион, что-то не получается написать корректные функции Задание то что накропал Среда ругается на вывоз процедуры, подскажите в чем оплошность?
А к чему создавать тип TPoint, когда он в делфи уже есть? Только, вроде бы, там x и y типа integer, если память не изменяет. Лучше объявите тип TMyPoint. В процедуру Vvod передавайте не var A: TPoint, а лучше var A: array of TMyPoint. Что означает код ? Что за операция -- ? И вообще для чего у вас функция Oprkoef, если она нигде не вызывается? хе, ключевое слово procedure при вызове подпрограммы из тела главной программы не нужно совершенно. ЗЫ. На будущее оформляйте плиз код в тэги [коде][/коде], а не в [квоте][/квоте], читать код сложно
Часть кода может быть таким: Code: program Project2; {$APPTYPE CONSOLE} type TMyPoint = record x, y : real; end; TLine = record k, b : real; end; TMas = array [1..20] of TMyPoint; ////vvod точек procedure Vvod (var A : TMas; n : Integer); var i : integer; begin for i := 1 to n do begin Write ('koordinatu x: '); readln (A[i].x); Write ('koordinatu y: '); readln (A[i].y); end; end; ........ var A : TMas; n, i, j : integer; begin Write ('vvedire kolvo tochek: '); readln(n); Vvod (A,n); readln; end.
Вообщем нада на завтра ответить на 1 из вопросов, облазил гугл, яндэкс, всё безтолку. Помогите пжлст=) Вот собственно и сами вопросы: 1. Ассемблер МП18086 фирмы Intel. Арифметические команды. Команды инкрементирования и декрементирования операндов. 2. Минимизация логических функций с использованием координатных диаграмм Вейча. Свойства и шаги минимизации. Создание выражения и схемы для базиса <Да-Нет>. Заранее огромное-огромное спасибо!
Code: #include <stdio.h> int i; int get(void){ int kv,kub,summ; kv=i*i; kub=i*i*i; summ=kv; for(int h=1;h<=(i*i);h++){ if(kv%h==0) summ+=h; } if(summ==kub) return 0; else get(); return 0; } int main(void){ i=1; get(); printf("%d",&i); return 0; } На тебе! Написано за 5мин.
Вот буду благодарен, уже с этой последний лабой замучался, а завтра уже сдавать C++ 1. Вычислите сумму элементов с нечетными номерами. 2. Преобразуйте массив так, чтобы элементы массива поменялись местами (первый — с последним, второй — с предпоследним и т.д.). 3. Вычислите сумму элементов, находящихся между первым и последним отрицательными элементами. 4. Из данного массива и другого массива того же типа, но другой размерности сформируйте общий массив и вычислите сумму положительных элементов, стоящих на нечетных местах.
Code: int summ=0,massv[size];//чё там у тя for(int x=0;x<=size;x++){ if(x%2==1) summ+=massv[x]; } Code: int massv[size],nsize; bool f=size%2; if(!f) nsize=(size-1)/2; else nsize=size/2; for(int x=0;x<=nsize;x++){ massv[x]=massv[size-x]; }
Ky3bMu4 в циклах везде используешь <= - наверное нужно просто <. К тому же massv[x]=massv[size-x]; не меняет местами элементы.
2 Ky3bMu4 Forcer прав, поправь там. 2 SHLAK Code: int first=-1,last=-1,mass[30],sum=0; for(int i=0;i<30;i++) { if(mass[i]<0) { if(first==-1) { first=i; } last=i; } } for(i=first+1;i<last;i++) { sum+=mass[i]; }
Code: const int size1 = 10, size2 = 5; int mas1[size1] = {1,2,3,-4,5,6,7,8,9,-10}, mas2[size2] = {11,12,13,-14,15}, newsize = size1 + size2, sum = 0; int* mas3 = new int[ newsize ]; for( int i = 0; i < size1; ++i ) { mas3[i] = mas1[i]; if( i % 2 && mas3[i] > 0 ) sum += mas3[i]; } for( int i = 0; i < size2; ++i ) { mas3[size1+i] = mas2[i]; if( (size1+i) % 2 && mas3[size1+i] > 0 ) sum += mas3[size1+i]; } for(int i=0; i < newsize; ++i) cout << mas3[i] << ' '; cout << "\nSum = " << sum << endl; delete [] mas3;