Си тилида дастурлаш



Download 4,3 Mb.
bet7/9
Sana21.03.2022
Hajmi4,3 Mb.
#505065
1   2   3   4   5   6   7   8   9
Bog'liq
Cи тилида дастурлаш (Назиров Ш.А)

Си тилида Дастурлаш

  • Мавзу 11. Функция графиклари
  • © Ш.А. Назиров, 2011
  • Функция графикларини қуриш
  • Топшириқ: y = 3 sin(x) функция графикини 0 ва 2π интервалида қуриш.
  • Тахлил:
    • Максималь қиймат x = π/2 да ymax = 3
    • Минималь қиймат x = 3π/2 да ymin = -3
  • Муаммо: функция математик система координаталарида берилган, лекин координаталарни пикселларда кўрсатган холда экранда қуриш керак.
  • Координаталарни алмаштириш
  • (x,y)
  • X
  • Y
  • x
  • y
  • Координаталарни математик
  • системаси
  • Координаталарни (пикселларда) экран системаси
  • (xэ,yэ)
  • (0,0)
  • (0,0)
  • a
  • b
  • k – масштаб (тасвирнинг экрандаги бирлик қисмининг узунлиги)
  • xэ = a + kx
  • yэ = b - ky
  • Дастур
  • const a = 50, b = 200, k = 50;
  • const float xmin = 0, xmax =2*M_PI;
  • float x, y, h = 0.01;
  • int xe, ye, w;
  • w = (xmax - xmin)*k;
  • line(a-10, b, a+w, b);
  • line(a, 0, a, 2*b);
  • for (x = xmin; x < xmax; x += h)
  • {
  • y = 3*sin(x);
  • xe = a + k*x;
  • ye = b - k*y;
  • putpixel (xe, ye, 12);
  • }
  • Нима ёмон?
  • ?
  • hx қадамнинг ўзгариши
  • Нуқтанинг экрандаги координаталари
  • ўқларнинг координаталари
  • Графикни қуриш цикли
  • албатта
  • #include
  • Нуқталар қандай бирлаштирилади?
  • Алгоритм:
  • Агар биринчи нуқта
  • (xэ,yэ)нуқтага ўтиш
  • акс ҳолда
  • (xэ,yэ) нуқтада қисм
  • Программа:
  • Харакат вариантини танлаш
  • ўзгарувчи-флаг (фақат 1 ёки 0)
  • int first;
  • ...
  • first = 1;
  • for (x = xmin; x < xmax; x += h)
  • {
  • ...
  • if ( first ) {
  • moveto(xe, ye);
  • first = 0;
  • }
  • else lineto(xe, ye);
  • ...
  • }
  • Бошланғич қиймат
  • Топшириқ
  • "4": y = x2 функция графигини [-3,3] интервалида қуриш.
  • "5": Функция (эллипс) графигини қуриш

Си тилида Дастурлаш

  • Мавзу 12. Процедуралар
  • © Ш.А. Назиров, 2011
  • Процедуралар
  • Топшириқ: Фигурани қуриш:
  • Ўзига хос ҳусусияти: Учта ўхшаш фигуралар.
  • Малум бўлган усуллар билан ечиш мумкинми?
  • ?
  • Нечта координаталарни билиш керак?
  • ?
  • Процедуралар
  • Процедура – бу ёрдамчи алгоритм бўлиб, баъзи харакат, жараёнларни бажариш учун мўлжалланган.
  • Қўлланилиши:
    • Дастурнинг турли жойларида бир хил харакатларни бажариш
    • Яхши тушунарли бўлиши учун дастурни (ёки бошқа процедурани) дастуростиларга бўлиш
  • Қисм топшириқ 1
  • Қисм топшириқ 2
  • Қисм топшириқ 3
  • 1.1
  • 1.2
  • 1.3
  • 2.1
  • 2.2
  • 2.3
  • 3.1
  • 3.2
  • 3.3
  • Топшириқ
  • Процедуралар
  • Ишлаб чиқиш тартиби:
    • Бир хил ёки ўхшаш харакатларни ажратиш (учта фигура)
    • Уларда умумийлик (ўлчови, форма, бурилиш бурчаги) ва фарқни (координаталар, ранг) топиш
    • Фарқни номаълум ўзгарувчи кўринишида ёзиб олиш, улар процедура параметрлари бўлади
  • (x, y)
  • 100
  • 60
  • (x+100, y)
  • (x, y-60)
  • void Tr( int x, int y, int c )
  • {
  • moveto ( x, y );
  • lineto ( x, y-60 );
  • lineto ( x+100, y );
  • lineto ( x, y );
  • setfillstyle ( 1, c );
  • floodfill ( x+20, y-20, 15);
  • }
  • процедура номи
  • процедура танаси
  • координаталар
  • ранг
  • Дастур
  • void main()
  • {
  • ...
  • Tr(100, 100, LIGHTBLUE);
  • Tr(200, 100, LIGHTGREEN);
  • Tr(200, 160, LIGHTRED);
  • ...
  • }
  • (100,100)
  • 100
  • 60
  • маълум параметрлар
  • процедурани чақириш
  • void Tr( int x, int y, int c)
  • {
  • ...
  • }
  • формаль параметрлар
  • процедура
  • Процедуралар
  • Хусусияти:
    • Одатда процедуралар асосий дастурдан юқорида жойлашади
    • Процедура номида формаль параметрлар санаб ўтилади, уларнинг номлари кўрсатилади, чунки ўзгариши мумкин
    • Процедурани чақирганда қавс ичида маълум параметрлар кўрсатилади (сон ёки арифметик ифода) худди шу тартибда
  • void Tr( int x, int y, int c )
  • Tr ( 200, 100, LIGHTGREEN );
  • x
  • y
  • c
  • Процедуралар
  • Хусусияти:
    • Процедура номида хар бир формаль параметрларнинг типи кўрсатилади
    • Процедура ичида параметрлар ўзгарувчи сифатида фойдаланилади
    • Процедурада қўшимча локал ўзгарувчиларни о эълон қилиш мумкин, лекин уларга бошқа процедуралар мурожат эта олмайди
  • void A ( int x, float y, char z ) { ... }
  • void A ( int x, float y, char z ) {
  • int a2, bbc = 345;
  • ... }
  • Локал ўзгарувчилар
  • int a2, bbc = 345;
  • Ўринларни қандай алмаштириш мумкин?
  • 2
  • 3
  • 1
  • Топшириқ: Иккита пиёла ичидаги массани ўрнини алмаштириш
  • Топшириқ: иккита хотира ячейкасидаги маълумот ўрнини алмаштириш.
  • 4
  • 6
  • ?
  • 4
  • 6
  • 4
  • x
  • y
  • c
  • c = x;
  • x = y;
  • y = c;
  • x = y;
  • y = x;
  • 3
  • 2
  • 1
  • c сиз бажариш мумкинми?
  • ?
  • Ўзгарувчи-параметрлар
  • Топшириқ: иккита ўзгарувчи қийматлари ўрнини алмаштирувчи процедура тузиш.
  • Хусусияти: процедурада бажарилган ўзгартиришлар чақирилувчи дастурда маълум бўлиши керак
  • void main()
  • {
  • int x = 1, y = 2;
  • Swap ( x, y );
  • printf ( "x = %d, y = %d", x, y );
  • }
  • void Swap ( int a, int b )
  • {
  • int c;
  • c = a; a = b; b = c;
  • }
  • Бу процедура параметр нусхаси билан ишлайди
  • x = 1, y = 2
  • Ўзгарувчи-параметрлар
  • Қўлланилиши: шундай қилиб процедура (ва функция) бир нечта қиймат қайтариши мумкин
  • Мурожаат қилиш мумкин эмас
    • Swap ( 2, 3 ); // сон
    • Swap ( x+z, y+2 ); // ифода
  • void Swap ( int & a, int & b )
  • {
  • int c;
  • c = a; a = b; b = c;
  • }
  • &
  • Параметрларни ўзгартириш мумкин
  • &
  • Топшириқ
  • "4": Процедурадан фойдаланиб фигура қуринг.
  • "5": Процедурадан фойдаланиб фигура қуринг.
  • a
  • a
  • a
  • 0,866∙a
  • Тенг томонли учбурчак

Си тилида Дастурлаш

  • Мавзу 13. Анимация
  • © Ш.А. Назиров, 2011
  • Анимация
  • Анимация (инг. animation) – тасвирнинг экрандаги харакатио.
  • Топшириқ: 400 га 400 пикселли кўк квадрат ичида чапдан ўнгга 20 га 20 сариқ квадрат харакатлансин. Esc клавишаси босилганда ёки кўк квадрат чегарасига етганда дастур ўз ишини тўхтатсин.
  • Муаммо: объектнинг экрандаги харакати қандай тасвирланади?
  • Боғлиқлиги: (x,y) координаталари орқали объект холати берилади
  • Анимация принципи:
    • (x,y) нуқтада объектни чизамиз
    • бир неча миллисекундларда тўхташ
    • Объектни ўчирамиз
    • (x,y) координатларни ўзгартирамиз
    • 1 қадамга ўтамиз
  • Клавиша босилишини қандай “ушлаб олиш мумкин”?
  • kbhit() – функция (ихтиёрий!) клавишага босилганлини аниқлайди (0 – босилмаган, не 0 – босилган).
  • getch() – функция босилган клавиша кодини аниқлайди: 27 = Esc, 13 = Enter, 32 = пробел, …
  • if ( kbhit() )
  • printf(“Қандайдир клавиша босилган...");
  • else printf(“босилмаган...");
  • if ( kbhit() ) {
  • printf(“Қандайдир клавиша босилган...");
  • c = getch();
  • printf(“Клавиша коди %d", c);
  • }
  • int c;
  • if ( kbhit() != 0 )
  • Циклдан қандай чиқилади?
  • #include
  • void main()
  • {
  • ...
  • while ( x + 20 < 400 )
  • {
  • if ( kbhit() )
  • if ( getch() == 27 ) break;
  • ...
  • }
  • ...
  • }
  • агар клавиша босилса ...
  • kbhit() ва getch() учун
  • Кўк квадрат чегарасидан чиқиб кетмагунча
  • Майдон чегарасидан чиқиб кетмаслиги учун нима қилинади?
  • ?
  • x + 20 < 400
  • Процедура (чизиш ва ўчириш)
  • void Draw( int x, int y, int color )
  • {
  • setfillstyle ( 1, color );
  • bar(x, y, x+20, y+20);
  • }
  • (x, y)
  • (x+20, y+20)
  • Ғоялар
    • Битта процедура чизади ва ўчиради
    • ўчириш = фон ранги билан чизиш
    • Квадрат чегарасини тўхтатиб қўйиш (асосий дастурда)
  • ранг: сариқ чизади, кўк ўчиради
  • color ранги билан бутунлай бўяш
  • Тўртбурчакни бўяш
  • Тўлиқ дастур
  • void Draw ( int x, int y, int color )
  • {
  • ...
  • }
  • void main()
  • {
  • int d = DETECT, m;
  • initgraph ( &d, &m, "c:\\borlandc\\bgi" );
  • int x, y;
  • setfillstyle(1, 9);
  • bar(0, 0, 399, 399);
  • x = 0; y = 240;
  • while ( x + 20 < 400 )
  • {
  • if ( kbhit() )
  • if ( getch() == 27 ) break;
  • Draw ( x, y, YELLOW );
  • delay ( 20 );
  • Draw ( x, y, 9 );
  • x ++;
  • }
  • closegraph();
  • }
  • процедура
  • бошланғич координаталар
  • Esc клавишаси бўйича чиқиш
  • кўк фон
  • 20 мс кутамиз, керак
  • #include
  • График режимни ёқиш
  • "4": Иккита квадрат қарама-қарши томонга харакатланади:
  • "5": иккита квадрат қарама-қарши томонга харакатланади ва кўк квадрат деворидан урилиб қайтади:
  • Топшириқ
  • Клавишаларни бошқариш
  • Топшириқ: Кўк квадрат ичидаги сариқ квадрат стрелка-клавишалари орқали бошқариш. Клавишалар коди:
  • чапга – 75 юқорига – 72 Esc – 27
  • ўнгга – 77 пастга – 80
  • Муаммо: харакат йўналиши қандай ўзгартирилади?
  • Ечим:
  • if нажата клавиша {
  • получить код клавиши - code
  • if (code == 27) break;
  • if (code == 75) x --;
  • if (code == 77) x ++;
  • if (code == 72) y --;
  • if (code == 80) y ++;
  • }
  • ( kbhit() )
  • code = getch();
  • Агар клавиша босилиши рўй берса, ...
  • Esc бўйича чиқиш
  • харакатланиш
  • switch ( code ) {
  • case 75: x --; break;
  • case 77: x ++; break;
  • case 72: y --; break;
  • case 80: y ++;
  • }
  • }
  • Дастур
  • void Draw (int x, int y, int color)
  • {
  • ...
  • }
  • if ( kbhit() ) {
  • ...
  • }
  • Нима ёмон?
  • ?
  • процедура
  • Асосий цикл
  • Клавишага босилишини қайта ишлаш
  • void main()
  • {
  • int x, y, code;
  • ...
  • while ( 1 ) {
  • Draw(x, y, YELLOW);
  • delay(20);
  • Draw(x, y, 9);
  • }
  • }
  • Пирпирашни қандай олиб ташланади?
  • ?
  • "4": Квадрат стрелкаларни босиш орқали харакатланади, лекин кўк квадрат чегарасидан чиқиб кета олмайди:
  • "5": Квадрат узлуксиз харакатланади, стрелкаларни босганда йўналишини ўзгартиради ва кўк квадрат чегарасига урилиб қайтади:
  • Топшириқ
  • Айланиш
  • Топшириқ: Ерни Қуёш атрофида айланишини тасвирлаш.
  • Муаммо: айлана бўйлаб харакатланганда координаталар қандай ўзгартирилади?
  • Ечиш: α бурилиш бурчагини номаълум ўзгарувчи сифатида фойдаланиш (циклда ўзгартириш)
  • (x0, y0)
  • α
  • L
  • (x, y)
  • x = x0 + L·cos(α)
  • y = y0 – L·sin(α)
  • Процедура
  • void Draw( int x, int y, int color )
  • {
  • const r = 10;
  • setcolor ( color );
  • circle ( x, y, r );
  • }
  • ранг: сариқ – чизади, қора – ўчиради
  • Чизиқ ранги аниқланди
  • Ер радиуси
  • (x,y)
  • r
  • Константа ва ўзгарувчилар
  • #include // математик функциялар
  • void main()
  • {
  • const rSun = 60, // Қуёш радиуси
  • L = 150, // Ер орбитаси радиуси
  • x0 = 200, // Қуёш маркази координаталари
  • y0 = 200;
  • int x, y, // Ер координаталари
  • code; // Босилган клавиша коди
  • float a, ha; // бурилиш бурчаги, қадам
  • int d = DETECT, m;
  • initgraph ( &d, &m, "c:\\borlandc\\bgi" );
  • ...
  • }
  • void Draw ( int x, int y, int color )
  • {
  • ...
  • }
  • Асосий цикл
  • circle ( x0, y0, rSun );
  • setfillstyle(1, YELLOW);
  • floodfill ( x0, y0, WHITE );
  • a = 0; // бошланғич бурчак
  • ha = M_PI/180; // 100 мс да 1o қадам
  • while(1) {
  • x = x0 + L*cos(a);
  • y = y0 - L*sin(a);
  • Draw ( x, y, LIGHTBLUE );
  • delay ( 20 );
  • Draw(x, y, 0);
  • a = a + ha;
  • }
  • closegraph();
  • Қуёшни чизиш: Оқ контур, сариқ бўяқ
  • Янги координаталар
  • ha да бурилиш
  • if ( kbhit() )
  • if ( 27 == getch() ) break;
  • Esc да чиқиш
  • #include // sin, cos, M_PI
  • !
  • const M_PI=3.1415926;
  • "4": Қуёшн ва иккита сайёра бир-бирига қарама-қарши йўналишдаги харакатини тасвирланг:
  • "5": Қуёш-Ер-Ой тизими моделини тасвирланг:
  • Топшириқ

Download 4,3 Mb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish