Բովանդակություն:
- Քայլ 1. Օղակի համար
- Քայլ 2. Օղակի համար օգտագործեք մաթեմատիկական խնդիրներ լուծելու համար
- Քայլ 3. Օղակ գծելու համար
- Քայլ 4. Օգտագործեք Loop- ի համար ՝ պատահական կլոր կետ նկարելու համար
- Քայլ 5. Օգտագործեք Loop գծի գծման համար
- Քայլ 6. Loop Nested- ի համար
- Քայլ 7: Մինչև օղակը
- Քայլ 8: Աղբյուր
Video: Programրագրավորման հետաքրքիր ուղեցույց դիզայների համար. Processրագրի գործընթացի վերահսկում- Loop հայտարարություն. 8 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:52
Processրագրի գործընթացի վերահսկում- Loop Statement
Այս գլխից դուք կկապվեք կարևոր և հզոր գիտելիքի կետի ՝ Loop Statement- ի հետ:
Այս գլուխը կարդալուց առաջ, եթե ցանկանում եք ծրագրում նկարել 10 000 շրջանակ, ապա դա կարող եք անել միայն սարսափելի մեթոդով: Այսինքն ՝ գրել 10 000 տող էլիպսային ծածկագիր: Այն ծույլ ծածկագրերի դիզայներները, ովքեր ցանկանում են ամեն կերպ բարելավել արդյունավետությունը, միանշանակ թույլ չեն տա, որ դա տեղի ունենա: Այսպիսով, ստեղծվում է loop հայտարարություն: Այս հայտարարությամբ դուք կարող եք ինտուիտիվ կերպով զգալ համակարգչային ավտոմատացման հզորությունը:
Քայլ 1. Օղակի համար
Կան բազմաթիվ հանգույցային հայտարարություններ, որոնցից ամենատարածվածը For Loop- ն է: Մենք բոլորս գիտենք, որ ֆունկցիայի գծումը շարունակաբար գործում է շրջանառության մեջ: Սկսեք սկզբի առաջին նախադասությունից, այն կիրականացվի վերևից ներքև մինչև վերջին նախադասությունը: Գործողությունը ավարտելուց հետո այն նորից կսկսվի առաջին նախադասությունից: For statement- ը մի փոքր նման է draw draw- ին: Հայտարարության ներսում գտնվող ծածկագիրը կարող է բազմիցս կատարվել:
Ահա դրա քերականական կառուցվածքը.
For (արտահայտություն 1; արտահայտություն 2; արտահայտություն 3) {
Օղակաձև մարմին
}
Ակնհայտ է, որ շրջանակի ներսում նախադասություններն այն են, ինչ մենք ակնկալում էինք, որ բազմիցս կիրականացվեն: 1 արտահայտությունը օգտագործվում է օղակի փոփոխականի առաջին արժեքը սկզբնավորելու և նշանակելու համար: 2 -րդ արտահայտությունը հանգույցի վիճակի համար է: 3 -րդ արտահայտությունը կթարմացնի հանգույցի փոփոխական արժեքը:
Ի՞նչ է հանգույցի փոփոխականը: Այն իրականում համարժեք է տեղական փոփոխականին: Եկեք նայենք ամբողջական գրությանը:
համար (int i = 0; i <10; i ++) {
Օղակաձև մարմին
}
Օղակի գործառույթն իրականացնելու համար հայտարարությունը հիմնականում հենվում է տեղական փոփոխականի վրա, որը կօգտագործվի օղակի ավարտման ժամանակ: Վերոնշյալ օրինակի տեղական փոփոխականը i է: 1 -ին արտահայտությունն ավարտեց տեղական փոփոխականի սկզբնավորումը: Հետագայում, ամեն անգամ, երբ օղակը գործում է մեկ անգամ, այս փոփոխականը պետք է թարմացվի: Վերոնշյալ օրինակի մեջ i ++ արտահայտության 3 -ում օգտագործվում է թարմացման գործառույթը իրականացնելու համար: Դրա միջոցով փոփոխականն ամեն անգամ թարմացվելուց կավելանա 1 -ով: Ի վերջո, օղակի մարմնի ծածկագիրը չի կարող անվերջ հանգչել, այլապես վերջին հայտարարությունները չեն կարող կատարվել: Այսպիսով, մեզ անհրաժեշտ է տերմինալային պայման: Express 2 -ը հենց դրա համար է: Այստեղ ծրագիրը կորոշի ՝ արդյոք ես 10 -ից փոքր եմ, եթե դա այդպես է, ապա շարունակեք վիրահատությունը: Եթե դա այդպես չէ, ապա ցատկեք շրջանակից:
Հետեւաբար, հայտարարության գործողությունների հաջորդականությունը հենց այսպիսին է.
Արտահայտություն 1 (Տեղական փոփոխականի սկզբնավորում)
Արտահայտություն 2 (Բավարարված, ապա շարունակիր գործել)
Օղակաձև մարմին (Առաջին շրջանառություն)
Արտահայտություն 3 (թարմացում)
Արտահայտություն 2 (Բավարարված, ապա շարունակիր գործել)
Օղակի մարմին (երկրորդ շրջան)
Արտահայտություն 3 (Թարմացում)
Արտահայտություն 2 (Բավարարված, ապա շարունակիր գործել)
Օղակաձև մարմին (երրորդ շրջանառություն)…
Արտահայտություն 3 (թարմացում)
Արտահայտություն 2 (Չբավարարված, ապա ցատկիր օղակից)
Դուք կարող եք նմանակել կատարման այս հաջորդականությունը ձեր գլխում մի քանի անգամ: Բայց անհնար է իսկապես հասկանալ ծածկագիրը ՝ առանց այն մեկ անգամ ձեռքով մուտքագրելու: Երբ մենք ցանկանում ենք պարզել մի տարօրինակ հասկացություն, մենք կարող ենք տպել արժեքը մխիթարելում println հայտարարության միջոցով:
Կոդի օրինակ (5-1). Void setup () {
համար (int i = 0; i <10; i ++) {
println («գործարկել»);
}
}
Դուք կարող եք հաշվել վազքի արդյունքի քանակը վահանակում: Այստեղ այն ճշգրիտ է 10. Սա ձեզ ասում է, թե քանի անգամ է կատարվել հանգույցի մարմնի կոդը: Այնուամենայնիվ, մենք դեռ չենք կարող հայտնաբերել, թե իրականում ինչ փոփոխություններ են տեղի ունեցել օղակում: Այսպիսով, մենք կարող ենք փորձել փոխել բնույթը «բախվել փոփոխական« i » - ի հետ և տեսնել, թե ինչ կլինի:
Կոդի օրինակ (5-2). Void setup () {
համար (int i = 0; i <10; i ++) {
println (i);
}
}
Այժմ մենք կարող ենք տեսնել, որ օղակի մարմնի i արժեքը անընդհատ աճում է: Հետագայում, մենք կարող ենք օգտագործել այս արժեքը `օղակի ընթացիկ ընթացքը հասկանալու համար:
Կոդի օրինակում (5-2) i- ի արժեքը փոխվում է 0-ից 9-ի: Իրական հանգույցի ժամանակների համեմատ, թվում է, թե այն միշտ ունի 1 պակաս: Եթե դուք սովոր չեք դրան, ապա հայտարարության փակագծում արտահայտությունը կարող է գրվել հետևյալի վրա.
համար (int i = 1; i <= 10; i ++)
Այսպիսով, ես իրավամբ համապատասխանում եմ հանգույցի ժամանակներին: «<=» -ի իմաստը փոքր է և հավասար: Այսպիսով, երբ ես հավասար եմ 10 -ի, այն դեռ կհամապատասխանի պայմանին: Հետևաբար, այն նորից կգործի ի համեմատ i <10 -ում գրված լինելու հետ: Չնայած այն սկսվում է 1 -ից, ապա հանգույցի ժամանակը դեռ 10 -ն է: Իհարկե, եթե հատուկ բան պետք չէ, ես կցանկանայի ձեզ առաջարկել գրելու եղանակը օրինակ սկզբում: Հետագայում մենք ձեզ կներկայացնենք վեկտորը կամ զանգվածը, որոնք երկուսն էլ ստանում են դրա տարրը իր ենթագրով: Իսկ կանխադրված ենթագրերը բոլորը սկսվում են 0 -ից: Նախնական արժեքը 0 սահմանելը համեմատաբար սովորական պրակտիկա է:
Վերոնշյալ օրինակում, եթե i- ն գրենք 0 -ից բարձր, ապա սյունը կփլուզվի: Քանի որ փոփոխականն անընդհատ աճում է, այն երբեք չի բավարարի այս պայմանը: Սա այնպիսին է, ինչպիսին այն երբեք չի կարող դադարեցվել, որպեսզի ծրագիրը բախվի անվերջ հանգույցի:
For հայտարարության մեջ տեղային փոփոխականները կարող են ոչ միայն հայտարարել պլաստիկի տեսակներ, այլև փոփոխականներ հայտարարել լողացող կետերի տեսակների մեջ: Օրինակ, այն կարող է գրվել որպես (float i = 0; i <10; i + = 0.02):
Քայլ 2. Օղակի համար օգտագործեք մաթեմատիկական խնդիրներ լուծելու համար
Դեռ հիշու՞մ եք մանկության տարիներին մաթեմատիկոս Գաուսի պատմությունը: Այդ ժամանակ Գուասը 10 տարեկան էր: Նրա ուսուցիչը ցանկանում էր առաջադրանք տալ դասարանում, և հարցն այն էր
1+2+3+4……+97+98+99+100=?
Եթե հաշվեք ձեր ձեռքերով, դա ձեզ շատ ժամանակ կպահանջի: Կարծես թե Գուասը արդեն պարզել է թվաբանական հաջորդականության գումարման մեթոդը: Ուստի հարցը տալուց անմիջապես հետո նա հեշտությամբ ասաց պատասխանը, ինչը մեծապես զարմացրել էր իր ուսուցչին:
Հիմա, գուցե, մենք դեռ չենք հիշում, թե որն է թվաբանական հաջորդականության գումարը, բայց պատասխանը կարող ենք ստանալ պարզունակ և բռնի եղանակով: Եվ դա հանգույցի համար է: Քանի որ համակարգիչների համար դա ընդամենը մի փոքր կտոր տորթ է, մենք պետք է հարցը նկարագրենք այն լեզվով, որը կարող է ճանաչվել համակարգչով, այդ դեպքում մենք կարող ենք հեշտությամբ ստանալ մեր պատասխանը:
Կոդի օրինակ (5-3):
void setup () {
int պատասխան = 0;
համար (int i = 1; i <= 100; i ++) {
պատասխան += i;
}
println (պատասխան);
}
Կարծում եմ, որ ձեր ստացած արդյունքը նույնն է, ինչ պատասխանել է Guass- ը. Դա 5050 է:
Խորհուրդներ. Loop- ի մեջ տեղակայված տեղական փոփոխականների անվանումը կարող է փոփոխվել ըստ ցանկության `փոփոխականների անվանման կանոններին համապատասխան: Դուք կարող եք այն գրել (int k = 1; k <= 100; k ++): Եթե կոնկրետ պայմաններ տեղի չունեցան, ապա դա փոփոխականի անունը լռելյայն i է:
Քայլ 3. Օղակ գծելու համար
Մի շարք թվացյալ ձանձրալի անկողնային պարագաներից հետո, վերջապես, մենք կարող ենք գալ ավելի հետաքրքիր հատվածի: Այսինքն օգտագործել հանգույցը նկարներ նկարելու համար: Մենք այժմ կարող ենք մի կողմ դնել այդ հոգնեցուցիչ մաթեմատիկական հաշվարկը: Մենք ՝ դիզայներներս, ավելի զգայուն ենք գրաֆիկայի նկատմամբ:
Օղակի համար օգտագործեք շրջանագծի զանգված նկարելու համար
Երբ մենք ցանկանում ենք օգտագործել loop- ը `կրկնվող տարրերի խումբ ներկայացնելու համար, մենք պետք է նախապես համոզվենք այս տարրերի թվային հարաբերականությամբ, այնուհետև կարող ենք օգտագործել loop- ի համար` այն հարմար իրացնելու փոխարեն `զանգվածային կրկնվող աշխատանք կատարելու փոխարեն: Ենթադրենք, եթե ուզում ենք հորիզոնական ուղղությամբ հավասարաչափ տարածված շրջանագծ նկարել: Նրա վիրտուալ կոորդինատը անփոփոխ է, մինչդեռ հորիզոնական կոորդինատը փոխվում է: Իսկ ձախից աջ ՝ հորիզոնական կոորդինատը անընդհատ աճում է, իսկ աճող տարածությունը ՝ նույնը: Այս պահին մենք կարող ենք i in loop- ի միջոցով օգտագործել յուրաքանչյուր շրջանակի հորիզոնական կոորդինատը ստանալու համար:
Կոդի օրինակ (5-4). Void setup () {
չափը (700, 700);
ֆոն (83, 51, 194);
noStroke ();
}
դատարկ վիճակահանություն () {
համար (int i = 0; i <7; i ++) {
էլիպս (50.0 + i * 100.0, բարձրություն/2.0, 80.0, 80.0);
}
}
50 նշանակում է ձախում առաջին շրջանի մեկնարկային դիրքը: 100 -ը i * 100 -ում ներկայացնում է աճող հեռավորությունը:
Քայլ 4. Օգտագործեք Loop- ի համար ՝ պատահական կլոր կետ նկարելու համար
Վերոնշյալ գրաֆիկական դիրքը կանխատեսելի է: Սա նվազագույնի կհասցնի մեծ հետաքրքրությունը: Մենք կարող ենք օգտագործել պատահական գործառույթը, որին անդրադարձել էինք նախորդ գլխում և փորձել այն գրել գծագրության գործառույթում:
Կոդի օրինակ (5-5):
void setup () {
չափը (700, 700);
ֆոն (0);
noStroke ();
}
դատարկ վիճակահանություն () {
ֆոն (0);
համար (int i = 0; i <10; i ++) {
float randomWidth = պատահական (60.0);
էլիպս (պատահական (լայնություն), պատահական (բարձրություն), պատահական լայնություն, պատահական լայնություն);
}
}
Այստեղ, պատճառը, թե ինչու է շրջանագծի դիրքը անընդհատ փայլում, այն է, որ ամեն անգամ, երբ գործառույթը պատահականորեն գործում է մեկ անգամ, արդյունքը պատահական է: Քանի որ ֆունկցիայի նկարչությունը կանխադրված է 60 վայրկյան վայրկյանում, այնպես որ մեկ վայրկյանում գծված յուրաքանչյուր 10 շրջանակը կփոխի իր դիրքը 60 անգամ: Այս արագ բռնկումը ստիպում է նկարին ավելի քան 10 շրջան ունենալ: Changeրագրում պարզ արժեք փոխելը ձեզ բոլորովին այլ էֆեկտ կբերի: Մենք կարող ենք փոխել հանգույցի ժամանակները ՝ վերանայելով տերմինալի վիճակը: Ստորև բերված նկարի տերմինալային պայմանը i <100 է:
- Ահա ազդեցությունը, երբ տերմինալի վիճակը i <1000 է:
- Պատահական սերմ
- Եթե ես չեմ ուզում, որ շրջանի դիրքը պատահականորեն ստեղծվի, ինչպես նաև նրա բռնկումը, ինչ կարող եմ անել: Մեթոդներից մեկն այն է, որ յուրաքանչյուր շրջանի համար կառուցվի և պահվի անկախ փոփոխականներ և սկզբնականացվի այդ փոփոխականները կարգաբերման ընթացքում: Այս փոփոխականներին նշանակեք պատահական արժեք: Այսպիսով, նկարչության գործառույթն օգտագործելիս վիճակահանության ընթացքում, այն, ինչին մենք կանչում ենք, փոփոխականներում պահվող արժեքն է: Այն ոչ մի պահի չի փոխվի: 10 շրջանակ նկարելու համար կարող ենք պարզապես օգտագործել այս մեթոդը: Բայց ի՞նչ անել, եթե մենք ուզում ենք նկարել 1000 շրջան, կամ 10 000 շրջան: Բավականին անհանգստացնող կլինի, եթե օգտագործենք այս ավանդական մեթոդը `այս փոփոխականները կառուցելու և այն անվանելու համար: Պարտադիր չէ սովորել փոփոխական կառուցման նոր մեթոդ: Ահա ճկուն մեթոդ, որը կարող է օգնել մեզ հասնել այս նպատակին: Այսինքն օգտագործել randomSeed- ը: Այժմ, եկեք նայենք դրա ազդեցությանը օգտագործելուց հետո: Կոդի օրինակ (5-6). [CceN_cpp theme = "dawn"] void setup () {size (700, 700); ֆոն (0); noStroke ();}
-
դատարկ վիճակահանություն () {
ֆոն (0);
պատահական սերմ (1);
համար (int i = 0; i <10; i ++) {
float randomWidth = պատահական (20.0, 60.0);
էլիպս (պատահական (լայնություն), պատահական (բարձրություն), պատահական լայնություն, պատահական լայնություն);
}
} [/cceN_cpp]
Նախկին կոդի համեմատ, այն չունի որևէ փոփոխություն, բացառությամբ այն, որ շրջանագծի շառավիղը 10 -ից փոխում է 30 -ի և անցնում է միայն SeedRandom- ի նախադասությամբ: Այս նախադասությունն ավելացնելուց հետո գրաֆիկը ստատիկ է դառնում:
Հրավիրման ձևաչափ.
պատահական սերմ (ա);
Այս ձևաչափի մեջ a- ի կարգավորումը սերմն է: Դուք պետք է լրացնեք մի ամբողջ թիվ (P5- ում գրեք լողացող կետի արժեքը, այն սխալ չի գնա, այլ վերաբերվեք որպես ամբողջ թիվ): RandomSeed- ի գործառույթն է սերունդը սահմանել պատահական արժեքի համար: Այնուհետև այն կստեղծի տարբեր պատահական զանգված ՝ ըստ տարբեր սերմերի: Դրանից հետո մենք կանչում ենք պատահական գործառույթ, որպեսզի վերադարձի արդյունքը որոշակի լինի: Այստեղ որոշվածը ոչ թե արդյունքի համար է որոշակի արժեք, այլ գեներացվող զանգվածի համար: Ասել է թե ՝ վերադարձի արդյունքը որոշակի է ՝ համեմատած կանչերի ժամանակների հետ:
Կոդի օրինակ (5-7). [CceN_cpp theme = "dawn"] void setup () {
պատահական սերմ (0);
համար (int i = 0; i <5; i ++) {
println (պատահական (10));
}
} [/cceN_cpp]
Այժմ մենք շարունակում ենք println- ի օգտագործումը փորձեր կատարելու համար: RandomSeed- ից օգտվելուց հետո ամեն անգամ, երբ փակում եք ծրագիրը և վերագործարկում ծրագիրը, այն կվերադառնա նույն արդյունքի տողին: Արժեքը կհամապատասխանի հաջորդականությանը մեկ առ մեկ: Եթե ջնջեք այն, ապա ամեն անգամ այն կվերադառնա այլ արժեքի: Ինչու է այն ունի այս կարգավորումը: Դա պայմանավորված է նրանով, որ ծրագրում պատահական արժեքը ինքնին կեղծ պատահական է: Արդյունքը թվում է պատահական, բայց իրականում այն առաջանում է ֆիքսված և կրկնվող հաշվարկի մեթոդով: Այն համարժեք է նախնական արժեք նշանակել randomSeed- ի համար, ապա հետևյալ արդյունքը կհաշվարկվի ըստ այս սերմի: Այնուամենայնիվ, եթե մենք չնշանակենք սերմը, ծրագիրը լռելյայն կօգտագործի համակարգի ներկա ժամանակը սերմ արտադրելու համար: Հետևաբար, յուրաքանչյուր գործողության արդյունքը տարբեր է: Ստորև բերված օրինակը կարող է օգնել ձեզ ավելի լավ հասկանալ randomSeed- ը:
Օրինակ կոդ (5-8). [CceN_cpp theme = "dawn"] void setup () {
չափը (700, 700);
ֆոն (0);
noStroke ();
}
դատարկ վիճակահանություն () {
պատահական սերմ (1);
համար (int i = 0; i <10; i ++) {
float randomWidth01 = պատահական (10, 60);
էլիպս (պատահական (լայնություն), պատահական (բարձրություն), պատահական լայնություն 01, պատահական լայնություն 01);
println (պատահական լայնություն 01);
}
պատահական սերմ (1);
համար (int i = 0; i <10; i ++) {
float randomWidth02 = պատահական (10, 60);
էլիպս (պատահական (լայնություն), պատահական (բարձրություն), randomWidth02, randomWidth02);
println (պատահական լայնություն 02);
}
} [/cceN_cpp]
Փորձեք վերանայել երկրորդ randomSeed- ը (1) randomSeed- ի (0) և համեմատեք վերջնական արդյունքները:
Խորհուրդներ. P5- ում վիճակահանության վերջում մենք պետք է կանչենք noLoop գործառույթը, որպեսզի կարողանանք ստանալ նույն էֆեկտը: Նրա գործառույթն է `ծրագիրը դադարեցնելը: Այն բավականին տարբերվում է բնության վերը նշված աշխատանքային սկզբունքներից:
Քայլ 5. Օգտագործեք Loop գծի գծման համար
RandomSeed- ի օգտագործումը յուրացնելուց հետո կարող ենք փորձել փոխել գծագրման գործառույթը: Օրինակ ՝ շրջանաձև գծագրությունը փոխեք գծային գծագրի: Միայն եթե գծի վերջը մշակենք որոշ փոփոխվող կանոնակարգեր, մենք կարող ենք օգտագործել բազմաթիվ տողեր, որոնք խճճված են `յուրահատուկ օրինակ ստեղծելու համար:
Կոդի օրինակ (5-9):
[cceN_cpp theme = "լուսաբաց"] անվավեր կարգավորում () {
չափը (700, 700);
ֆոն (0);
}
դատարկ վիճակահանություն () {
պատահական սերմ (0);
համար (int i = 0; i <2000; i ++) {
բոց x1 = լայնություն/2.0;
float x2 = պատահական (50.0, 650.0);
կաթված (255, 20);
տող (x1, 50, x2, 650);
}
} [/cceN_cpp]
Ստեղծեք պարզ խոզանակ
Կրկին վերադառնալ օղակի համար: Վերոնշյալ օրինակները ինտերակտիվ չեն: Եթե ցանկանում ենք արդյունքն ավելի հետաքրքիր դարձնել, ապա չենք կարող մոռանալ mouseX- ի և mouseY- ի համատեղումը մեր կոդի մեջ:
Կոդի օրինակ (5-10):
[cceN_cpp theme = "լուսաբաց"] անվավեր կարգավորում () {
չափը (700, 700);
ֆոն (255);
noStroke ();
}
դատարկ վիճակահանություն () {
համար (int i = 0; i <1000; i ++) {
լրացնել (0, 30);
float x = mouseX + պատահական (-50, 50);
float y = mouseY + պատահական (-50, 50);
էլիպս (x, y, 2, 2);
}
} [/cceN_cpp]
Ստեղծվում է «ցրման կետեր» վրձին: Քանի որ յուրաքանչյուր ինտենսիվ մինի կլոր կետ հիմնված է մկնիկի դիրքի վրա, այն կարող է սահմանափակ ուղղություններ տեղափոխել ձախ, աջ, վեր և վար չորս ուղղություններից: Այսպիսով, խոզանակի վերջնական ձևի տարածումը նման է քառակուսիի:
Կոդի օրինակ (5-11):
[cceN_cpp theme = "լուսաբաց"] անվավեր կարգավորում () {
չափը (700, 700);
ֆոն (255);
noStroke ();
}
դատարկ վիճակահանություն () {
համար (int i = 0; i <1000; i ++) {
float ratio = mouseX/(float) լայնություն;
float x = mouseX + պատահական (-50, 50);
float y = mouseY + պատահական (-50, 50);
լրացնել (0, հարաբերակցությունը * 255, 255 * (1 - հարաբերակցությունը), 30);
էլիպս (x, y, 2, 2);
}
}
[/cceN_cpp]
Եթե մենք օգտագործում ենք mouseX- ի արժեքը `ազդելու լրացման գույնի վրա, ապա մենք կստանանք շատ ավելի կախարդական գույնի գրադիենտ:
Քայլ 6. Loop Nested- ի համար
For loop- ը կարող է բնադրվել: Դուք կարող եք կրկին գրել loop for for loop- ի մեջ: Երբ անհրաժեշտ է գծել երկչափ կետային մատրիցա, կարող եք ընտրել այս մեթոդը:
Կոդի օրինակ (5-12):
[cceN_cpp theme = "լուսաբաց"] անվավեր կարգավորում () {
չափը (700, 700, P2D);
ֆոն (202, 240, 107);
}
դատարկ վիճակահանություն () {
լրացնել (0);
համար (int i = 0; i <5; i ++) {
համար (int j = 0; j <5; j ++) {
բոց x = 150 + i * 100;
բոց y = 150 + j * 100;
էլիպս (x, y, 60, 60);
println (i + ":" + j);
}
}
}
[/cceN_cpp]
Ներդրված հանգույցն առաջին անգամ օգտագործելու համար պետք է պարզել դրա տրամաբանական հարաբերությունները: Codeրագրում կոդի ներդրումը միշտ վերևից ներքև է: Հետևաբար, առաջին իրականացվողը, անշուշտ, ծայրահեղ օղակն է: Ամեն անգամ, երբ արտաքին օղակը գործում է մեկ անգամ, ներքին հանգույցը շարունակաբար կգործի, մինչև այն այլևս չբավարարի պայմանը: Դրանից հետո այն կսկսի երկրորդ արտաքին օղակի գործողությունը: Երկրորդ գործողության մեկնարկից հետո ներքին հանգույցը կշարունակվի մինչև այն չկարողանա բավարարել պայմանը: Նման կրկնությունը դա անում է այնքան ժամանակ, մինչև բոլոր պայմանները չբավարարվեն, և այն դուրս թռչի շրջանակից:
Վերոնշյալ ծածկագրում արտաքին հանգույցի օղակի մարմինը գործել է ընդհանուր առմամբ 5 անգամ, իսկ ներքին հանգույցի օղակի մարմինը `25 անգամ: 25 անգամ, i, j արժեքի տարբերության համաձայն, մենք կարող ենք առանձին ապահովել շրջանագծի հորիզոնական և ուղղահայաց կոորդինատները: Ես տեղադրել եմ տպագրության մի հատված, կարող եք դիտել տվյալների ելքը և մտածել դրա փոփոխության մասին: Միայն երկու ներկառուցված հանգույցներով մենք կարող ենք զգալ i, j տվյալների բոլոր համակցությունները:
Խորհուրդներ
Երկրորդ շերտի հանգույցի համար սկզբում սովորաբար խտացրեք Tab- ի հետ: Սա կարող է ավելի հստակ դարձնել ծածկագրի կառուցվածքը: Տարբեր փոփոխական անուններով for loop- ի երկու շերտերում պետք է անվանել տեղական փոփոխականներ: Դրա մեջ ամենից հաճախ օգտագործվում է «i», «j», «k»:
Iկուն օգտագործում «i», «j»
«I», «j» երկու փոփոխական անվանումը ներկայացնում են for loop- ի երկու շերտերի տեղական փոփոխականները: Ստորև բերված օրինակը կխորացնի ձեր ըմբռնումը «i» - ի «j» - ի համար: «I», «j» տարբեր արժեքների համաձայն, մենք կարող ենք պարամետրեր մուտքագրել տարրերը խմբավորելու համար:
Կոդի օրինակ (5-13). [CceN_cpp theme = "dawn"] void setup () {
չափը (700, 700);
ֆոն (0);
noStroke ();
}
դատարկ վիճակահանություն () {
ֆոն (0);
լցնել (250, 233, 77);
համար (int i = 0; i <7; i ++) {
համար (int j = 0; j <7; j ++) {
pushMatrix ();
թարգմանել (50 + i * 100, 50 + j * 100);
// Կարգավորում 1
// բոց անկյուն = մեղք (միլիլ ()/1000.0) * PI/2;
// Կարգավորում 2
// բոց հարաբերակցություն = i/7.0;
// լողացող անկյուն = մեղք (millis ()/1000.0 + հարաբերակցություն * (PI/2)) * PI/2;
// Կարգավորում 3
բոց հարաբերակցություն = (i * 7 + j) /49.0;
float անկյուն = մեղք (millis ()/1000.0 + հարաբերակցությունը * (PI/2)) * PI/2;
պտտել (անկյուն);
rectMode (CENTER);
// Նկարել նկարը 1
ուղիղ (0, 0, 80, 80);
// Նկարել նկարը 2
// ուղղ (0, 0, 100, 20);
// Նկարել նկարը 3
// rect (0, 0, հարաբերակցությունը * 50);
popMatrix ();
}
}
} [/cceN_cpp]
Կոդի բացատրություն
rectMode- ը (CENTER) կարող է փոխել քառակուսու գծագրման մեթոդը: Ուղղահայաց սկզբնաղբյուրի երկու նախնական պարամետրերը օգտագործվում են կղզու ձախ վերին անկյունի կոորդինատը որոշելու համար: Այս հրամանը սկսելուց հետո այս երկու պարամետրերը կօգտագործվեն քառակուսի կենտրոնական կետի կոորդինատը սահմանելու համար:Քանի որ այստեղ մենք գործարկում ենք հայրական պտույտը պտտման միջոցով, ուստի մենք պետք է օգտագործենք այս մեթոդը ՝ կենտրոնական կետը կոորդինատի սկզբնական կետին գծելու համար:
millis () ձեռք է բերում ծրագրի մեկնարկից մինչ օրս ժամանակը: Միավորը ms է: Այս արժեքը կազդի մեղքի ելքային արժեքի փոփոխվող արագության վրա: Եթե մենք ուղղակիորեն գրում ենք millis- ը, փոփոխվող մասշտաբը չափազանց մեծ է: Այսպիսով, մենք պետք է այն բաժանենք 1000.0 -ի:
Կոդի այս բաժնում մենք օգտագործում ենք մեկնաբանության խորհրդանիշ «//» ՝ մի քանի կարգավորումներ թաքցնելու համար: Դուք կարող եք փոփոխել էֆեկտները ՝ սկսելով կամ փակելով: Օրինակ, եթե նախադասությունները սկսենք «Կարգավորում 3» -ի հետևում, մենք պետք է օգտագործենք մեկնաբանության խորհրդանիշ ՝ «Կարգավորում 1» և «Կարգավորում 2» կոդերի բլոկները փակելու համար: Ինչ վերաբերում է տարբեր տեղական փոփոխականներով նմանատիպ ծրագրի կառուցվածքի օրինակներին, ապա կարող ենք գրել այս ձևաչափով: Այսպիսով, մենք չպետք է առանձին պահենք մի քանի ինժեներական փաստաթղթեր: Մենք կարող ենք հաճախ օգտագործել այս հմտությունը պրակտիկայի և ստեղծման ընթացքում և պահպանել որոշ գոհացուցիչ պարամետրերի պարամետրեր:
Դրա մեջ i, j արժեքի ազդեցությունը ծրագրի վրա հիմնականում ներկայացված է «Կարգավորում 1 (կարգավորում 2) (կարգավորում 3)» տեղաշարժով: Ստորև կարող եք համեմատել արդյունքների արդյունքները:
Նկարեք նկար 1: 1 -ի կարգավորում
Նկարեք նկար 1: Կարգավորում 2
Նկարեք նկար 1: Կարգավորում 3
Նկարեք նկար 2: 1 -ի կարգավորում
Նկարեք նկար 2: 2 -ի կարգավորում
Նկարեք 2 -րդ նկարը. 3 -րդ կարգավորում
1 -ի պարամետրում մենք չենք օգտագործել i- ն և j- ը `ազդելու յուրաքանչյուր տարրի պտտման անկյունի վրա: Այսպիսով, մենք կարող ենք տեսնել, որ յուրաքանչյուր տարրի շարժումը նույնն է: 2 -ի պարամետրերում մենք օգտագործել ենք i արժեքը, իսկ i- ն և j- ն ՝ 3. -ում: Վերջապես, նրանք ազդել են գործակից sin- ի հարաբերակցության միջոցով պարամետրերի մուտքագրման վրա: Սա փոխել է անկյունի պարբերական փոփոխությունը: 2 -ի և 3 -ի տեղադրման իրական ազդեցության պատճառով անիմացիոն գրաֆիկայում այնքան էլ ակնհայտ չէ, մենք կարող ենք դա դիտել հետևյալ սքրինշոթից:
Նկար 2 -րդ նկարը (ձախ ՝ կարգավորումը 2, աջը ՝ կարգավորումը 3)
Նկար 3 -րդ նկարը (ձախ ՝ կարգավորումը 2, աջը ՝ կարգավորումը 3)
Առաջին նկարում հարաբերակցությունը օգտագործվում է քառակուսի պտտման անկյունի վրա ազդելու համար: Մինչ երկրորդ նկարը, այն պետք է ուղղակիորեն վերահսկել շրջանագծի շառավիղը: Մենք տեսնում ենք, որ այն օգտագործել է i value նախադասությունը.
բոց հարաբերակցություն = i/7.0;
Նրա ուղղաձիգ տարրի փոփոխությունը հետևողական է: Քանի որ պատկերը վերահսկող հորիզոնական կոորդինատը կախված է միայն i- ի արժեքից, ուստի նույն հորիզոնական կոորդինատով գծերը նույնը կլինեն: Հարաբերակցության, պտույտի անկյունի և շրջանագծի շառավիղի արժեքը նույնպես նույնն է:
Միևնույն ժամանակ, մենք օգտագործում ենք i, j նախադասությունը.
բոց հարաբերակցություն = (i * 7 + j) /49.0;
Այն կարող է նկարագրել «գրադիենտ»: Այստեղ գործոնը բազմապատկելու մեթոդով այն համադրել է տողերի և սյուների ազդեցությունը: Այսպիսով, յուրաքանչյուր տարր տարբեր է:
Քայլ 7: Մինչև օղակը
Օղակի համար կա եղբայր: Դա, իսկ loop- ը: Այն, ինչ loop- ի համար կարող է անել, մինչդեռ loop- ը նույնպես կարող է դա անել: Սակայն creativeCoding- ում while loop- ի հաճախականությունը այնքան մեծ չէ, որքան loop- ի համար:
Կոդի օրինակ (5-14). [CceN_cpp theme = "dawn"] void setup () {
int a = 0;
մինչդեռ (ա <10) {
println (a);
ա ++;
}
} [/cceN_cpp]
While- ի քերականական կառուցվածքը ավելի հեշտ է հասկանալ, քան դրա համար: Մենք կարող ենք փոփոխականներ ստեղծել մինչ while հայտարարությունը: Այնուհետև լրացրեք արտահայտություն քառակուսի փակագծում: Երբ այն բավարարվում է, ապա գործածիր նախադասությունները հանգույցի ներսում: Վերջապես, մենք արտահայտություն ենք դնում օղակի մարմնում ՝ փոփոխականները թարմացնելու համար, այնուհետև, երբ օղակն ավարտված է: Ինչ վերաբերում է ապահովված հանգույցի ժամանակներին, մենք հաճախ օգտագործում ենք հանգույցի համար: Ինչ վերաբերում է անորոշ փոփոխականի արժեքին, խորհուրդ ենք տալիս օգտագործել while loop- ում:
Մտածեք
Փորձեք օգտագործել բոլոր տեսակի հիմնական տարրերը, որոնք փոխարինում են loop- ի գծապատկերային տարրերը `տարբեր տարբեր խոզանակներ ստեղծելու համար:
Համակցեք վերջին գլխում նշված եռանկյունաչափական ֆունկցիայի հետ, փորձեք վերանայել «ցրման կետեր» վրձինը կլոր ձևի խոզանակի մեջ:
Փորձեք կատարել երկչափ կետային մատրիցա միայն for loop- ով:
Հաջորդ գլխի նախադիտում Ինչպես այս դասընթացին, այնպես էլ դուք կգտնեք ձեր սովորած յուրաքանչյուր նոր գիտելիք, խաղալու հնարավորությունը միանգամից շատ կբարձրանա: Isրագիրը պանդորայի արկղ է: Այն ամենը, ինչ դուք կարող եք պատկերացնել, կարող է դա անել ձեզ համար: Այսպիսով, ոչ մի պատճառ չկա, որ մենք չսովորենք այս լեզուն, որը կարող է հաղորդակցվել համակարգիչների հետ: Մեր հաջորդ գլխում մենք ձեզ կներկայացնենք գործընթացի վերահսկման մեկ այլ հայտարարություն: Այն կարող է վերահսկել գործընթացի հոսքը և առաջացնել ավելի բարդ և փոփոխական արդյունքներ: If հայտարարությամբ դուք կարող եք հեշտությամբ ստեղծել ձեր սեփական տեքստային արկածային խաղերը: Այս հոդվածը գալիս է դիզայներ Wenzy- ից: Հարաբերական ընթերցումներ. Հետաքրքիր ծրագրավորման ուղեցույց դիզայների համար. Նախնական հպում մշակելը: Հետաքրքիր ծրագրավորման ուղեցույց դիզայների համար. Ստեղծեք ձեր առաջին մշակման ծրագիրը: - Ստացեք ձեր նկարը վազող (առաջին մաս) Programրագրավորման հետաքրքիր ուղեցույց դիզայների համար - Ստացեք ձեր նկարը վազող (երկրորդ մաս)
Քայլ 8: Աղբյուր
Այս հոդվածը ՝ https://www.elecfreaks.com/11037.html կայքից է
Եթե ունեք հարցեր, կարող եք կապվել : [email protected].
Խորհուրդ ենք տալիս:
Programրագրավորման հետաքրքիր ուղեցույց դիզայների համար. Գործարկեք ձեր պատկերը (մաս երկրորդ) `8 քայլ
Programրագրավորման հետաքրքիր ուղեցույց դիզայների համար. Գործի դրեք ձեր պատկերը (մաս երկրորդ). Մաթեմատիկան, ձեզանից շատերի համար, անօգուտ է թվում: Մեր առօրյա կյանքում ամենից հաճախ օգտագործվողը պարզապես գումարելն է, հանելը, բազմապատկելը և բաժանելն է: Այնուամենայնիվ, ամեն ինչ այլ է, եթե կարողանաք ստեղծել ծրագրով: Որքան շատ բան իմանաք, այնքան ավելի հիանալի արդյունք կստանաք
Դիզայների համար մշակման հետաքրքիր ծրագրավորման ուղեցույց-Գույնի վերահսկում. 10 քայլ
Դիզայների համար մշակման ծրագրավորման հետաքրքիր ուղեցույց. Այս գլխում մենք մտադիր ենք ավելի խորը ուսումնասիրել գիտելիքի այս ասպեկտը
Processրագրավորման մշակման հետաքրքիր ուղեցույց դիզայների համար. MediaԼՄ-ների բեռնում և իրադարձություն. 13 քայլ
Մշակման ծրագրավորման հետաքրքիր ուղեցույց դիզայների համար. MediaԼՄ-ների բեռնում և իրադարձություն. Դրանք առանձին են `պատկեր, աուդիո և վիդեո: Այս գլխում մենք խոսելու ենք այն մասին, թե ինչպես կարելի է մանրամասն բեռնել աուդիո և վիդեո ՝ համատեղելով իրադարձության հետ
Ուղեցույց L298 2Amp Motor Driver Shield- ի համար Arduino- ի համար. 6 քայլ
L298 2Amp Motor Driver Shield- ը Arduino- ի համար. Նկարագրություն L298 2Amp Motor Driver Shield- ը Arduino- ի համար հիմնված է L298 շարժիչի վարորդի ինտեգրալ սխեմայի վրա, լիարժեք կամուրջի շարժիչ: Այն կարող է վարել երկու առանձին 2A DC շարժիչներ կամ 1 2A քայլ շարժիչ: Շարժիչի արագությունը և ուղղությունները կարող են վերահսկվել առանձին
Programրագրավորման հետաքրքիր ուղեցույց դիզայների համար. Գործարկեք ձեր պատկերը (մաս առաջին). 16 քայլ
Programրագրավորման հետաքրքիր ուղեցույց դիզայների համար. Գործարկեք ձեր պատկերը (մաս առաջին). Run! Վազիր: Run! Mingրագրավորումը այնքան էլ դժվար չէ: Հիմնական բանը `գտնել ձեր ռիթմը և դա անել մեկ առ մեկ: Մինչև այս գլուխը կարդալը, հուսով եմ, որ արդեն ծանոթ եք հիմնական գործառույթների գծագրման մեթոդին, կամ գլխապտույտ և շփոթություն կզգաք