7-topshiriqning bajarilish tartibi."Ehtimoliy algoritmlarni o‘rganish"
Monte -Karlo usuli yordamida 7.1 -rasmda ko‘rsatilgan rasmning yuzasini aniqlang. Haqiqiy yuzani hisoblang va hisoblangan yuza bilan solishtiring. Nisbiy xatoni aniqlang. Shakl chegarasining tarkibiy qismlarini aniqlang.
7.1 -rasm - Monte -Karlo usuli bilan yuzani topish uchun misol
Topshiriqning bajarilish tartibi
Rasm chegaralarining tarkibiy qismlarini aniqlang: rasmdagi tasvirdan uning chegarasi uch qatordan iborat degan xulosaga kelishimiz mumkin:
Shtrixlangan shaklning taqribiy yuzasini aniqlang. Rasmdan ko‘rinib turibdiki, u ikkita figuradan iborat: radiusi 100 yarimdoira va katetlari 100 va 200 bo‘lgan to‘g‘ri burchakli uchburchak. Bu shuni anglatadiki, shaklning umumiy yuzasi:
Ssh=π/2*10000+100*200/2.
Visual Studio 2019 muhitini ochamiz.
Loyiha yaratish (Создание проекта) oynasida Ilova yaratish oynasining izlash satriga CLR so‘zini kiritamiz. Izlash natijasida kelib chiqqan ilova turlaridan CLR bo‘sh ilovasini tanlaymiz. (Empty project CLR(Net.Framework). Keyingi tugma(Далее)sini bosish natijasida hosil bo‘lgan oynada tahrirlovchining loyiha nomi maydoniga (bu yerda ), loyihaning nomini kiriting, masalan, Project. Joylashuv maydonida siz loyihani joylashtirish yo‘lini belgilashingiz yoki Browse tugmachasi (tugma) yordamida loyihani joylashtirish yo‘lini tanlashingiz mumkin. Odatiy bo‘lib, loyiha C:\Users\User\source\repos deb nomlangan maxsus papkada saqlanadi.
Forma uchun, matn xususiyatining qiymatini o‘zgartiring, masalan, quyidagi ma'lumotlarni kiriting: "Qo‘llanma_7_lab".
Chart1 komponentasini formaga joylashtiring. Anchor xususiyatidan foydalanib, komponentani formaning har tomoniga bog‘lang. Chart1 komponentasi formaning deyarli butun maydonini egallashi kerak, va uning o‘lchamini o‘zgartirganda, uning hajmi mos ravishda o‘zgaradi. Bu grafik o‘lchamlarini forma o‘lchamlari bilan bog‘lashning eng yaxshi usuli emas: balandlik va kenglikdagi rasmning nisbatlarini buzish mumkin. Chizma1 komponentasining hajmini qayta o‘lchash hodisasini ishlov beruvchida qayta hisoblash yaxshidir, bu balandlik va kenglik bo‘yicha bir xil o‘lchamni belgilab, buning uchun mavjud bo‘lgan maydonlar maydonining balandligini yoki kengligini minimal chegarasini qaysi balandlikda belgilab beradi (maydonni qolgan qismini formaga joylashtirilgan qolgan komponentlar egallaydi).
Dastur natijalarini ko‘rsatish uchun formaga bir nechta komponentalarni (5 TextBox komponentasi, 5 Label komponentasi, 3 Button komponentasi va bitta Chart komponenti) joylashtiring (masalan, 7.3 -rasmda ko‘rsatilganidek). Shu bilan birga, Anchor xususiyatidan foydalanib (asosiy komponentga bog‘lash) formaning chapdan chap chetiga joylashgan komponentlarni mahkamlang va o‘ngda joylashgan kompomentalarni o‘ng tomonga bog‘lang. "Shakl", "Hisoblash" va "Chiqish" tugmalari pastki qismiga bog‘langan bo‘lishi kerak. Formaning o‘lchamini o‘zgartirganda, tugmalar kengligini qayta hisoblash yaxshidir, shunda ular formaning pastki chetiga "mahkamlangan" holda, mutanosib ravishda oshadi. Natijada 7.3-rasmdagi Formaga o‘xshash forma hosil bo‘ladi.
7.2 -rasm - Ilova oynasining umumiy ko‘rinishi
TextBox2, TextBox3, TextBox4 va TextBox5 komponentalari uchun ReadOnly xususiyatini (faqat o‘qish uchun) rost qilib belgilang, bu foydalanuvchining komponentaga har qanday ma'lumotlarni kiritishiga to‘sqinlik qiladi. TextBox1 komponentasi uchun ma'lumotlar TextBox komponentasi yordamida klaviaturadan kiritiladi. Ushbu komponentning matn xususiyatlariga qiymatni kiriting"10000" - bu standart qiymat. Bu qiymat dastur ishga tushirilganda ko‘rsatiladi. Ilova ishga tushganda, uni boshqasiga almashtirish mumkin.
Chart1 komponentining Series xususiyatidan foydalanib, Series Collection Editor oynasini chaqiring. Forma chegaralarini ko‘rsatish uchun ketma-ket qo‘shing (forma konturining tarkibiy qismlari soni bo‘yicha). Asl misolda uchta grafik mavjud. Chiziq (chiziq) yoki Spline (ko‘p chiziqli) grafik turini tanlang. Grafika uchun bir xil rangni oling. Tasodifiy nuqtalarni ko‘rsatish uchun yana ikkita nuqta turini qo‘shing (bu misol uchun 5 ta seriya bo‘lishi kerak). O‘zingizning xohishingizga ko‘ra, bu nuqtalarning rangini tanlang, Marker hajmini 1 ga teng belgilang.
Yaratilayotgan loyihaning ob'ekt kodiga kutubxonalar bog‘lanishini qo‘shing:
#pragma once
#include
#include
#include
#define _USE_MATH_DEFINES
Foydalanish bo‘limiga qatorni qo‘shing:
using namespace System::Windows::Forms::DataVisualization::Charting;
"Shakl" tugmachasida sichqonchaning chap tugmasi bilan ikki marta bosing, Chart1 komponentasida formaning konturi chiziladi. Har bir tarkibiy qism (ularning uchtasi bor) o‘z ketma -ketligida chizilgan. Natija chiqqanda ular bir -biriga tegib, bitta kontur hosil qiladi. Kod qismiga quyidagi dastur kodini kiriting:
Series^ plot1 = chart1->Series[0];
Series^ plot2 = chart1->Series[1];
Series^ plot3 = chart1->Series[2];
double y, x;
// Formaning yuqori qismini - radius 100 yarim doira chizilgan
for (int i = -100; i <= 100; i++)
{
x = i;
y = sqrt(10000 - x * x);
plot1->Points->AddXY(x, y);
}
// Biz ikkinchi qismni chizamiz - y = -0,5 (x + 100) to‘g‘ri chiziq
for (int i = -100; i <= 100; i++)
{
x = i; y = -0.5 * (x + 100);
plot2->Points->AddXY(x, y);
}
// X = 100 vertikal chiziq chizish.
for (int i = -100; i <= 0; i++)
{
x = 100;
y = i; plot3->Points->AddXY(x, y);
}
Barcha hisoblash jarayoni "Hisoblash" tugmasini bosish orqali amalga oshiriladi.Tasodifiy sonlar generatoridan foydalanib, kvadrat ichida tasodifiy nuqta koordinatalari sifatida talqin qilingan tasodifiy sonlar juftliklari hosil bo‘ladi.Chart1 komponentasining Point turi (nuqtasi) seriyasida ekranda ko‘rsatiladi. Shu bilan birga, hududga tegishli va tegishli bo‘lmagan nuqtalar sonini hisoblash. Tasodifiy nuqta yaratish jarayoni tugagandan so‘ng, natijalarni hisoblash amalga oshiriladi. Buning uchun "Hisoblash" tugmasining ustiga sichqonchaning chap tugmasini ikki marta bosing va kodning davomiga quyidagi kodni kiriting:
Series^ plot4 = chart1->Series[3];
Series^ plot5 = chart1->Series[4];
int T_vn, T_za, n;
float x, y, S_fig, S_r, er;
// Qayta hisoblash uchun grafiklarni (nuqtalarni) tozalang
plot4->Points->Clear();
plot5->Points->Clear();
if (textBox1->Text != "")
{
// nuqtalar sonini so‘rang
n = Convert::ToInt32(textBox1->Text);
// Nuqta schechigini tozalash
T_vn = 0; T_za = 0;
for (int i = 1; i <= n; i++)
{
// Biz tasodifiy sonlar bir necha yaratish va ularni davolash
// tasodifiy nuqta koordinatalari
x = rand() % 201 - 100; y
= rand() % 201 - 100;
// Biz nuqta qaerga kirganini tekshirib ko‘ramiz: rasmning ichida yoki tashqarisida.
// Bunga qarab, nuqta rangini tanlang.
// Bundan tashqari, biz tashqi va ichki nuqtalarni alohida hisoblaymiz
if
(((x * x + y * y <= 10000) && (y >= 0)) || ((y < 0) && (x <= 100) && (y >= -0.5 * (x + 100))))
{
plot4->Points->AddXY(x, y); T_vn++;
}
else
{
plot5->Points->AddXY(x, y); T_za++;
}
}
textBox2-> Text = Convert::ToString(T_vn);
textBox3->Text = Convert::ToString(T_za);
S_fig = 40000 * T_vn / n;
S_r = 10000 + 3.1415* 10000 / 2;
// Xatolik
er = fabs(S_r - S_fig) / S_r * 100; textBox4->Text
= Convert::ToString(S_fig); textBox5->Text = Convert::ToString(er);
}
else MessageBox::Show(" nuqtalar sonini kiriting", "ma'lumotlarni kiritish xatosi",
MessageBoxButtons::OK, MessageBoxIcon::Exclamation);
Xuddi shunday, uchinchi "chiqish" tugmasi uchun sichqonchaning chap tugmasi bilan ikki marta bosing va dasturdan chiqadigan kodni (avvalgi laboratoriya ishlarida bir necha marta ishlatilgan) ish qismiga joylashtiring.
7.3.-rasm. Ilovaning so‘ngi ko‘rinishi
Do'stlaringiz bilan baham: |