1-Misol. y=x2+2 funksiya uchun Furye qatori koeffitsentlarini toping
Dastur kodi
#include
#include
using namespace std;
double f(double x)
{
return x*x+2;
}
int main()
{
float a,b,h,S=0, x;
cin>>a>>b;
int nn=30;
h=(b-a)/nn;
x=a;
for(int i=0; i
{
x+=h;
S+=f(x); //S=S+x*x+2
}
S*=h;
double a0=S/M_PI;
cout<<"a0= "<
//an va bn koeffitsentni hisoblash
x=a;
double an=0;
double bn=0;
for(int n=1; n<=10; n++)
{
for(int i=0; i
{
x+=h;
an+=f(x)*cos(n*x);
bn+=f(x)*sin(n*x);
}
an*=cos(n*x)*h/M_PI;
bn*=sin(n*x)*h/M_PI;
cout<<"a"<
cout<<"b"<
}
}
Natija
2-Misol. y=x2+2 funksiya uchun Furye qatori garmonikalarining eng katta amplitudasini aniqlash dasturini tuzing.
Dastur kodi
#include
#include
using namespace std;
double f(double x)
{
return x*x+2;
}
int main()
{
float a,b,h,S=0, x;
cin>>a>>b;
int nn=30;
h=(b-a)/nn;
x=a;
for(int i=0; i
{
x+=h;
S+=f(x); //S=S+x*x+2
}
S*=h;
double a0=S/M_PI;
cout<
x=a;
double an=0;
double bn=0;
for(int n=1; n<=10; n++)
{
for(int i=0; i
{
x+=h;
an+=f(x)*cos(n*x);
bn+=f(x)*sin(n*x);
}
an*=cos(n*x)*h/M_PI;
bn*=sin(n*x)*h/M_PI;
An=sqrt(an*an+bn*bn);
maxxA=0;
if(maxxA
}
Cout<
Mustaqil yechish uchun topshiriqlar
Quyidagi funksiyalarni Furye qatorlariga yoyish algoritmi va dasturini tuzing
y=sinx
y=x2+2x+3
y=e2x+2
y=2x+4
y=cosx
y=x2+3x+3
y=ex+5
y=3x+4
y=tgx
y=x3+2x+5
y=e2x+10
y=2x-6
y=sin 22x
y=x4-5x+3
y=e2x+10
y=6x+8
y=cos 2x
y=x2-5x+3
y=e2x
y=2x
8.2 Laboratoriya mashg’uloti
Mavzu: Axborotlar oqimini segmentlarga ajratish. Dinamik darsturlash. Chiziqli model.
Ishning maqsadi: Dinamik dasturlashga doir masalalarga algoritm va dastur tuzish
Kerakli jihozlar: Kompyuter, proyektor, doska, C++ dasturlash tili
1-masala. Sizga butun kvadrat matritsa (n×n) berilgan. Toshbaqa yuqori chap katakda va pastki o'ng katakga yurish kerak. Bir harakatda toshbaqa qo'shni o'ng yoki qo'shni pastki katakchaga yurishi mumkin. Maksimal yig'indi bilan toshbaqaning yo'lini topish talab qilinadi.
Kirish maʼlumotlari:
2
|
1
|
3
|
5
|
4
|
0
|
1
|
1
|
1
|
1
|
0
|
1
|
0
|
1
|
2
|
7
|
Variantlarning to'liq ro'yxati universal echimdir. Ro'yxatni amalga oshirish tamoyillari va uning imkoniyatlarini ko'rib chiqing. 4×4 o‘lchamdagi stol bo‘sh. Har qanday yo'l uchta pastga va o'ngga uchta harakatdan iborat. Boshqacha qilib aytganda, 6 ta qadam berilgan, ulardan uchtasi pastga siljish uchun, qolgan uchtasi o'ngga o'tish uchun teriladi.
Oltitadan uchta harakatni tanlash usullari soni ( ) toshbaqa yo'llari sonini aniqlaydi. Umuman olganda, ..
Ushbu misol uchun toshbaqaning 20 ta yo'li bor:
Yo'lning yig'indisini (xarajatini) topishda, jami 100 ta operatsiya uchun beshta qo'shish operatsiyasi talab qilinadi.
Keling, million tezlikka ega kompyuter uchun masalani hal qilish vaqtini hisoblaylik:
Jadval o'lchami
|
Yo'l uzunligi
|
Yo'llar soni
|
Qo'shish operatsiyalari soni
|
Masalani hal qilish uchun taxminiy vaqt
|
|
6
|
20
|
100
|
0,00001 сек
|
|
14
|
3432
|
44616
|
0,045с
|
|
60
|
|
|
200 000 yil
|
Shunday qilib, variantlarni to'liq ro'yxatga olish imkoniyati cheklangan.
Keling, masalani hal qilishning boshqa usulini ko'rib chiqaylik. Kichikroq o'lchamdagi jadval uchun kichik masalani aniqlaymiz.
Natija quyidagicha
2
|
3
|
6
|
11
|
6
|
6
|
7
|
12
|
7
|
8
|
8
|
13
|
7
|
9
|
11
|
20
|
Masalani yechish algoritmi:
B[4×4] matritsasini kiritamiz.
Birinchi qator va birinchi ustun elementiga 0 ni belgilaymiz.
0
|
0
|
0
|
0
|
0
|
0
|
2
|
3
|
|
|
0
|
6
|
6
|
|
|
0
|
|
|
|
|
0
|
|
|
|
|
Dastur kodi:
// “Toshbaqa” masalasi
//Mksimal yo’lni hisoblash masalasi
#include
#include
using namespace std;
int max(int a1, int b1)
{
if (a1>b1) return a1; else return b1;
}
int main()
{
setlocale(0,"");
int n=4;
const
int a[4][4]=
{
{ 2, 1, 3, 5 },
{ 4, 0, 1, 1 },
{ 1, 1, 0, 1 },
{ 0, 1, 2, 7 }
};
cout<<"Berilgan matritsa="<
for(int i=0; i
for(int j=0; jcout<cout<int b[5][5];
for(int i=0; i{
b[i][0]=0; b[0][i]=0;
}
for(int i=1; ifor(int j=1; jb[i][j]=max(b[i-1][j], b[i][j-1])+a[i-1][j-1];
cout<for(int i=0; ifor(int j=0; jcout<cout<}
Yechimning vaqt murakkabligi 0(n×m) ga teng. Har bir massiv B maksimal ikkita amalni (taqqoslash va qo'shish) talab qiladi.
300x300 massiv uchun operatsiyalarning umumiy soni 1000000 dan kam, ya'ni. million tezlikda ishlaydigan kompyuter vazifani bir soniyadan kamroq vaqt ichida bajarishi mumkin.
2-masala. sonlar ketma-ketligi berilsin.
Eng katta uzunlikdagi ortib boruvchi qatorni toping.
Kirish ma'lumotlari: 1, 5, 3, 7, 1, 4, 10, 15.
Chiqish ma'lumotlari: 1, 3, 4, 10, 15.
“Dag’al” kuch usuli.
1 (1) - 1 bitta kichik ketma-ketlik uchun.
1,2 (1; 2; 1, 2) - 3 uchun uchta kichik ketma-ketlik mavjud.
1,2,3 da (1; 2; 3; 1, 2; 1,3; 2,3; 1,2,3) - 7 ta kichik ketma-ketlik.
1,2,3,….,n uchun alohida pastki ketma-ketliklar soni ga teng.
Kichik vazifalarga ajratish
Fikr birinchi i elementlar orasidan eng katta ortib boruvchi ketma-ketlikni toping.
#include
using namespace std;
int main()
{
int a[8] = {1,5,3,7,1,4,10,15};
int n=8;
int p[8],d[8]={0};
int k=0;
int max;
for (int i=0; i{ max=0;
for (int j=0; j{if (a[j]max)) max=d[j];
}
d[i]=max+1;
}
for (int i=0; icout<for (int i=0; imax=d[1];
for (int i=0; icout<
}
3-masala. n butun soni berilgan. n sonni natural sonlar yig‘indisi sifatida ifodalash usullari sonini toping.
Kirish ma'lumotlari: butun son
Kirish ma'lumotlari: berilgan sonni natural sonlar yig'indisi sifatida ko'rsatish usullari soni.
#include
#include
using namespace std;
int main()
{
int n=5;
int f[10][10]={0};
for (int i=0; i
f[i][i]=1;
for (int k=0; k<=i-1; k++){
f[i][k]=0;
for (int j=0; j<=k; j++)
f[i][k]=f[i][k]+f[i-k][j];}
}
for (int i=0; i
for (int j=0; jcout<<" "<}
Dastur natijasi
Demak, 5 sonini natural sonlar yig’indisi (1+2+2+1+1=7) yo’llar bilan ifodalash mumkin.
4-masala. n butun soni berilgan. Rekursiv formulalar yordamida n sonni natural sonlar yig‘indisi sifatida ifodalash usullari sonini toping.
Kirish ma'lumotlari: butun son
Kirish ma'lumotlari: berilgan sonni natural sonlar yig'indisi sifatida ko'rsatish usullari soni.
#include
#include
using namespace std;
int main()
{
int n=6;
int f[100][100]={0};
for (int i=0; i
for (int i=0; i
for (int k=1; kfor (int k=i+1; k}
for (int i=0; i
cout<<" n= "<
}
Mustaqil yechish uchun topshiriqlar
Topshiriq 1. N - raqamli omadli chiptalar sonini hisoblash talab qilinadi. Eslatib o'tamiz, agar chipta raqamlarining birinchi yarmining yig'indisi ikkinchi yarmining yig'indisiga teng bo'lsa, chipta omadli deb ataladi. Misol uchun, 064109 chiptasi omadli, chunki 0+6+4=1+0+9.
Ma'lumotlarni kiritish. INPUT.TXT kirish faylining bitta satrida N (N ≤ 100) juft natural son - chiptadagi raqamlar soni mavjud.
Chiqish. OUTPUT.TXT chiqish faylining yagona qatorida bitta butun sonni - N-raqamli omadli chiptalar sonini chiqarish kerak.
Misol
№
|
INPUT.TXT
|
OUTPUT.TXT
|
1
|
4
|
670
|
2
|
6
|
55252
|
3
|
12
|
39581170420
|
Topshiriq: N sonlar ketma-ketligi berilgan. Undan elementlarning minimal sonini olib tashlash kerak, shunda qolganlari qat'iy ortib boruvchi ketma-ketlikni hosil qiladi.
Do'stlaringiz bilan baham: |