Meriv çawa fêr dike ka meriv çawa zehmetiyan derbas dike, û di heman demê de dewreyan binivîsîne

Tevî vê rastiyê ku em ê li ser yek ji mijarên bingehîn biaxivin, ev gotar ji bo pisporên pispor hatiye nivîsandin. Armanc ev e ku nîşan bide ka çi têgînên şaş di bernamekirinê de hene. Ji bo pêşdebirên praktîkî, ev pirsgirêk demek dirêj hatine çareser kirin, ji bîr kirin an jî qet nehatine dîtin. Heke hûn ji nişkê ve hewce ne ku hûn di vê mijarê de alîkariya kesek bikin dibe ku gotar bikêr be. Gotar bi materyalên ji pirtûkên cûrbecûr yên li ser bernamekirinê yên Schildt, Stroustrup, Okulov re paralel dike.

Mijara der barê dewreyan de hate hilbijartin ji ber ku pir kes dema ku bernamekirinê master dikin jê têne derxistin.

Ev teknîk ji bo xwendekarên qels hatiye çêkirin. Wekî qaîdeyek, mirovên hêzdar di vê mijarê de nehêle û ne hewce ye ku ji wan re teknîkên taybetî werin peyda kirin. Armanca duyemîn a gotarê ev e ku vê teknîkê ji pola "ji bo hemî xwendekaran dixebite, lê tenê mamosteyek" berbi pola "ji bo hemî xwendekaran, hemî mamosteyan dixebite". Ez îdiaya orîjînaliya mutleq nakim. Heke hûn jixwe metodolojîyek wekhev bikar tînin da ku vê mijarê hîn bikin, ji kerema xwe binivîsin ka guhertoya we çawa cûda dibe. Heke hûn biryar didin ku wê bikar bînin, ji me re bêjin ka ew çawa çû. Ger teknîkek bi heman rengî di pirtûkek de hatî diyar kirin, ji kerema xwe navê xwe binivîsin.


Ez 4 salan li ser vê teknîkê xebitîm, bi xwendekarên ji astên cûda yên perwerdehiyê re ferdî xwend. Bi giştî nêzî pêncî xwendekar û du hezar saet ders hene. Di destpêkê de, xwendekar her dem li ser vê mijarê asê mabûn û derketin. Piştî her xwendekarî, metodolojî û materyal hatin sererast kirin. Di sala borî de, xwendekar êdî li ser vê mijarê sekinîn, ji ber vê yekê min biryar da ku encamên xwe parve bikim.

Çima ewqas name? Demjimêr ew qas seretayî ne!

Wekî ku min li jor nivîsî, ji bo pêşdebiran û ji bo xwendekarên hêzdar, tevliheviya têgîna loops dikare were kêm kirin. Mînakî, hûn dikarin dersek dirêj bidin, serê serê xwe û çavên jîr bibînin. Lê gava ku meriv hewl dide ku pirsgirêkek çareser bike, gêjbûn û pirsgirêkên nediyar dest pê dikin. Piştî dersê, xwendekar belkî tenê têgihîştinek qismî hebû. Rewş ji ber wê yekê girantir dibe ku xwendekar bi xwe nikarin dengê xwe bidin ka bi rastî xapandina wan çi ye.
Rojekê min fêm kir ku xwendekar mînakên min wekî hieroglif dibînin. Ango, mîna perçeyên nivîsê yên nayê dabeş kirin ku tê de hewce ye ku hin tîpa "efsûnî" lê zêde bikin û ew ê bixebite.
Carinan min dît ku xwendekar difikirin ku ji bo çareserkirina pirsgirêkek taybetî hûn hewce ne tiştekî din sêwiranek ku min hîn nekiriye. Her çend çareserî tenê guheztinek piçûk a nimûneyê hewce dike.

Ji ber vê yekê min fikir kir ku divê balê ne li ser hevoksaziya biwêjan be, lê li ser ramana refaktorkirina koda dubare bi karanîna lûkan be. Gava ku xwendekar vê ramanê bi dest xistin, her hevoksaz dikare bi pratîka hindik were pêşve xistin.

Ez kê û çima hîn dikim?

Ji ber ku îmtîhanên têketinê tune ne, ders dikarin hem xwendekarên bihêz û hem jî pir qels bin. Hûn dikarin di gotarê de li ser xwendekarên min bêtir bixwînin Portreya xwendekarên qursa êvarê
Min hewl da ku her kesê ku dixwaze bernamekirinê fêr bibe dikare wê fêr bibe.
Dersên min ferdî têne kirin û xwendekar ji bo her yekê pereyê xwe dide. Wusa dixuye ku xwendekar dê lêçûn xweştir bikin û hindiktirîn daxwaz bikin. Lêbelê, mirov ne ji bo zanînê bi xwe, lê ji bo pêbaweriya fêrbûna xwe, ji bo hestek pêşkeftinê û ji bo pejirandina pispor (mamoste) bi mamosteyek zindî re diçin dersên rû bi rû. Ger xwendekar di fêrbûna xwe de pêşveçûnê hîs nekin, ew ê derkevin. Bi gelemperî, ders dikarin werin saz kirin ku xwendekar di zêdebûna hejmara strukturên naskirî de pêşkeftinê hîs bikin. Ango, pêşî em bi hûrgulî dixwînin, paşê em ji bo xwendinê, paşê dema ku dikin, û niha me hezar û yek şev amade ye, ku tê de çerxên tenê du mehan têne xwendin, û di dawiyê de - xwendekarek ku nivîsandiye. pirtûkxaneyek standard di bin dîktatoriyê de. Lêbelê, ji bo çareserkirina pirsgirêkên pratîkî, hûn ne tenê hewceyê zanîna materyalê, lê di serîlêdana wê de û di lêgerîna agahdariya nû de jî serxwebûnê hewce ne. Ji ber vê yekê, ji bo qursên rû-bi-rû, ez difikirim ku prensîba rast ev e ku meriv hindiktirîn hîn bike û lêkolîna serbixwe ya nuwazeyan û mijarên têkildar teşwîq bike. Di mijara loopan de, ez avakirina dema ku herî kêm e dihesibînim. Hûn dikarin prensîbê jê fam bikin. Bi zanîna prensîbê, hûn dikarin hem ji bo xwe û hem jî dema ku xwe bikin master bikin.

Ji bo bidestxistina serdestiya materyalê ji hêla xwendekarên qels ve, vegotina hevoksaziyê têrê nake. Pêdivî ye ku meriv karên hêsan, lê cûrbecûrtir bide û mînakan bi hûrgulî vebêje. Di dawiyê de, leza pêşkeftinê ji hêla şiyana xwendekar ve veguheztina vegotinan û lêgerîna nimûneyan ve sînorkirî ye. Ji bo xwendekarên jîr, piraniya peywiran dê bêzar bin. Dema ku hûn bi wan re dixwînin, hûn ne hewce ne ku di çareserkirina 100% pirsgirêkan de israr bikin. Materyalên min dikarin li ser werin dîtin githubê min. Rast e, depo bêtir dişibihe grimoire ya şerkeran - ji min pê ve kes dê fêm neke ka li ku ye, û heke hûn kontrolê têk bibin, hûn dikarin dîn bibin

Methodolojiya pratîk-oriented e

Teorî bi mînaka çareserkirina pirsgirêkê tê ravekirin. Di dersa bingehîn a bernamesaziyê de ku şax û lûf têne fêr kirin, ne gengaz e ku meriv bi tevahî demjimêrek li ser yek mijarek dersek kêrhatî bide. 15-20 deqe ji bo ravekirina têgehê bes e. Zehmetiyên sereke di dema pêkanîna karên pratîkî de derdikevin.
Mamosteyên destpêkê dikarin di yek dersê de operator, şax, loop û rêzan bişkînin. Lê xwendekarên wan dê bi pirsgirêka asîmîlekirina van agahiyan re rû bi rû bimînin.
Pêdivî ye ku ne tenê materyalê bêje, lê her weha pêdivî ye ku guhdaran jî jê fêm bikin.

Rastiya serweriya mijarekê bi awayê ku xwendekar bi xebata serbixwe re mijûl dibe diyar dibe.
Ger xwendekarek bêyî alîkariya mamosteyek pirsgirêkek li ser mijarekê çareser bike, wê demê mijar bi ser ket. Ji bo misogerkirina xwe-ceribandinê, her peywir di tabloyek bi senaryoyên ceribandinê de têne diyar kirin. Karûbar xwedî rêzek zelal in. Derketina peywiran nayê pêşniyar kirin. Ger peywira heyî pir dijwar be, wê hingê çûna ser ya din bêkêr e. Ew hê bêtir tevlihev e. Ji bo ku xwendekar karibe karê tevlihev ê heyî serwer bibe, çend teknîk bi karanîna mînaka pirsgirêka yekem jê re têne rave kirin. Bi rastî, tevahiya naveroka mijarê bi teknîkên ji bo derbaskirina dijwariyan tê. Cycles bêtir bandorek alî ye.

Karê yekem her dem mînakek e. Ya duyemîn hinekî cûda dibe û yekser piştî ya yekem di bin çavdêriya mamosteyek de "serbixwe" tête kirin. Hemî peywirên paşerojê bi mebesta ku bala xwe bidin tiştên piçûk ên cihêreng ên ku dikarin bibin sedema têgînên xelet in.

Ravekirina nimûneyê diyalogek e ku tê de xwendekar hewce dike ku vegere belavok û pejirandina xaçerê ku pê ewle bibe ku wî beşek ji materyalê serdest kiriye.

Ez ê banal bim û bibêjim ku mînaka yekem li ser mijarê pir girîng e. Ger we materyalek ji bo xebata serbixwe ya berfireh hebe, kêmasiyên mînaka yekem dikarin werin rast kirin. Ger ji xeynî nimûneyê tiştek din tune be, wê hingê xwendekar bi îhtîmalek mezin dê mijarê negire.

Dema an ji bo?

Yek ji mijarên nakokî bijartina avakirinê ye ji bo nimûne: dema an ji bo. Carekê, hevalek min a pêşdebirê pratîkî ku bê ezmûnek hînkirinê tunebû, saetek min qanih kir ku têgihîştina for-ê ya herî hêsan e. Argumentên ku "her tişt di wê de zelal e û di cihê xwe de hatî destnîşan kirin" hate berhev kirin. Lêbelê, sedema bingehîn a dijwariyên ji bo destpêkek rastîn ramana çerxê bixwe ye, û ne nivîsandina wê. Ger mirov ji vê ramanê fam neke, wê demê ew ê bi hevoksaziyê re zehmetiyê bibîne. Hema ku fikir tê fêm kirin, pirsgirêkên sêwirana kodê bi serê xwe winda dibin.

Di materyalên min de, temaya loopan li dû mijara şaxkirinê ye. Wekheviya derveyî ya ger û dema ku rê dide me ku em analojîyek rasterast derxînin: "Gava ku şerta di serî de rast be, wê hingê laş tê darve kirin." Tenê taybetmendiya çerxê ev e ku laş gelek caran tê darve kirin.

Argumana min a duyemîn ev e ku dema ku ji bo formatkirinê kêmtir hewce dike. Kêm formatkirin tê wê wateyê ku kêm xeletiyên ehmeqî yên bi kêş û parantezê winda dibin. Destpêker hîna têra baldarî û hûrgulî pêş nexistine ku bixweber ji xeletiyên hevoksaziyê dûr bikevin.
Argumana sêyemîn di gelek pirtûkên baş de wekî argumana yekem tê ravekirin.

Ger xwendekar bi hêsanî îfadeyan biguherîne, wê hingê hûn dikarin ji bo derbasbûnê biaxivin. Wê hingê xwendekar wê tiştê ku ew çêtirîn jê hez dike hilbijêrin. Ger veguhertin dibe sedema dijwariyan, wê hingê çêtir e ku hûn bala xwe nekişînin. Bila xwendekar pêşî her tiştî bi karanîna dema çareser bike. Gava ku we mijara lûkan serdest kir, hûn dikarin çareseriyan ji nû ve binivîsin da ku hûn veguheztina dema ku ji bo pratîk bikin.
Loopên postcondition heywanek pir kêm in. Ez qet wext li ser wê derbas nakim. Ger xwendekarek li ser ramanên naskirina şêweyan û veguheztina îfadeyan serwer be, ew dikare bêyî arîkariya min jê fêm bike.

Dema ku mînaka yekem ji xwendekarên bihêz re destnîşan dikim, ez balê dikişînim ser vê yekê ku di mînaka yekem de girîng e ku ne tenê çareseriyê, lê di heman demê de tevahiya zincîra kiryarên ku rê li ber encam girtiye were tomar kirin. Xwendekarên tembel dikarin nivîsandinê paşguh bikin û tenê algorîtmaya paşîn kopî bikin. Pêdivî ye ku ew bawer bin ku rojek dê karek dijwar derkeve pêşiya wan. Ji bo çareserkirina wê, hûn ê hewce ne ku gavên wekî di vê nimûneyê de bişopînin. Ji ber vê yekê girîng e ku hemî qonaxan tomar bikin. Di pirsgirêkên jêrîn de dê gengaz be ku tenê guhertoya dawî ya çareseriyê bihêle.

Fikra sereke ya otomasyonê ev e ku em komputerek spartin ku ji bo kesek karê rûtîn bike. Yek ji teknîkên bingehîn lûpên nivîsandinê ye. Dema ku di bernameyekê de li pey hev çend kirinên dubarekirî yên wekhev têne nivîsandin tê bikar anîn.

Eşkere ji nepenî çêtir e

Dibe ku ramanek baş xuya bike ku meriv heman hevokê gelek caran di yekem karê vegerandinê de nîşan bide. Bo nimûne:

Hurray, ew dixebite!
Hurray, ew dixebite!
Hurray, ew dixebite!
Hurray, ew dixebite!
Hurray, ew dixebite!
Hurray, ew dixebite!
Hurray, ew dixebite!
Hurray, ew dixebite!

Ev vebijark xirab e ji ber ku nirxa jimare di dergehê de nayê dîtin. Ev pirsgirêk ji bo destpêk e. Wê kêm nebînin. Di destpêkê de, ev peywira yekem bû, û peywira derxistina rêzek hejmaran bi rêza hilkişînê ya duyemîn bû. Pêwîst bû ku têgînên zêde "çerxa N-dem" û "çerxa ji A heya B" werin destnîşan kirin, ku di eslê xwe de heman tişt in. Ji bo ku saziyên nehewce çênebin, min biryar da ku tenê mînakek bi derketina rêzek hejmaran nîşan bidim. Kêm kes dikarin fêr bibin ka meriv çawa di serê xwe de jimarvanek digire û di serê xwe de bêyî amadekariyê tevlêbûna bernameyekê model dike. Hin xwendekar pêşî li ser mijara dewreyan bi modela derûnî re rû bi rû dimînin.
Piştî çend pratîkê, ez peywira dubarekirina heman nivîsê bi serbixwe didim çareser kirin. Ger hûn pêşî jimareyek xuyang bidin û dûv re jî yekî nedîtbar bidin, xwendekar dê kêmtir pirsgirêkên wan hebin. Carinan îşareta "hejmar li ser ekranê nenivîse" bes e.

Yên din wê çawa rave dikin?

Di piraniya materyalên perwerdehiyê yên li ser Înternetê de, hevoksaziya çerxê wekî beşek ji "dersekê" tê dayîn. Mînakî, li ser developer.mozilla.org (niha), çend avahîyên din li gel demajoya while têne şirove kirin. Di vê rewşê de, tenê sêwiran bixwe di forma şablonan de têne dayîn. Encama destpêkirina wan bi peyvan tê ravekirin, lê nîgarek tune. Bi dîtina min, pêşkêşkirina mijarê bi vî rengî bikêrhatina van materyalan bi sifirê zêde dike. Xwendekar dikare kodê ji nû ve binivîsîne û bi xwe bimeşîne, lê dîsa jî ji bo berhevdanê pêdivî bi standardek heye. Ma hûn çawa dikarin fêm bikin ku mînakek rast ji nû ve hatî nivîsandin heke tiştek tune ku encam pê re were berhev kirin?
Dema ku tenê şablonek bê mînak tê dayîn, ji xwendekar re hîn dijwartir dibe. Meriv çawa fam dike ku perçeyên kodê rast di şablonê de têne danîn? Hûn dikarin hewl bidin ku binivîsin bi avakî, û paşê birevin. Lê heke standard tune ku encamê berhev bike, wê hingê destpêkirin jî dê ne alîkar be.

Di qursa C++ ya li ser Intuitive de, hevoksaziya loopê di rûpela sêyemîn a Lektora 4-ê de li ser mijara "operator" tê veşartin. Dema ravekirina hevoksaziya lûkan, giraniyek taybetî li ser têgeha "operator" tê danîn. Peyv wekî komek rastiyan wekî "sembol; ev gotinek e", "{} gotineke hevedudanî ye", "bedena lûkê divê bêjeyek be". Ez ji vê nêzîkbûnê hez nakim ji ber ku xuya dike ku têkiliyên girîng li pişt yek termê vedişêre. Parvekirina koda çavkaniyê ya bernameyekê di vê astê de ji hêla pêşdebirên berhevker ve hewce ye ku taybetmendiya ziman bicîh bîne, lê ne ji hêla xwendekaran ve wekî nêzîkbûna yekem. Kesên nûhatî bernamesaziyê kêm kêm bi hûrgulî ne ku ew qas baldar bin li ser şertan. Ew mirovek kêm e ku yekem car peyvên nû tîne bîra xwe û fam dike. Hema bêje tu kes nikare peyvek ku ew nû fêr bûye rast bi kar bîne. Ji ber vê yekê, xwendekar gelek xeletiyên mîna "Min dema nivîsand(a<7);{, lê bername naxebite, distînin.
Bi dîtina min, di destpêkê de çêtir e ku meriv hevoksaziya çêkirinê yekser bi parantezê bide. Vebijarka bêyî parantezê divê tenê were ravekirin heke xwendekar pirsek taybetî hebe: "çima parantez tune û ew dixebite."

Di pirtûka Okulov a 2012-an de "Bingehên Bernamekirinê", danasîna lûpkan bi nimûneya for dest pê dike, paşê ji bo karanîna wê pêşniyaran dide, û dûv re yekser diçe beşa ezmûnî ya dersê. Ez fêm dikim ku pirtûk ji bo wê hindikahiya xwendekarên pir jêhatî ku kêm caran têne dersên min hatî nivîsandin.

Di pirtûkên populer de, encama perçeyên kodê her dem tê nivîsandin. Ji bo nimûne, Shildt ya "Java 8. The Complete Guide" 2015 edition. Pêşîn, şablonek tê dayîn, dûv re bernameyek mînak û yekser piştî wê - encama darvekirinê.

Wekî mînakek, dema ku berevajî dike bihesibînin
jimartin ji 10-an dest pê dike, û tam 10 rêzikên "pîvan" têne xuyang kirin:

//Продемонстрировать применение оператора цикла while
class While {
    public static void main(String args []) {
        int n = 10;
        while (n > 0) {
            System.out.println("такт " + n);
            n--;
        }
    }
}

Piştî ku were xebitandin, ev bername bi vî rengî deh "cycles" derdixe:
такт 10
такт 9
такт 8
такт 7
такт 6
такт 5
такт 4
такт 3
такт 2
такт 1

Nêzîkatiya danasîna şablonek, bernameyeke mînak û encama bernameyê jî di pirtûka "Javascript for Kids" de û di qursa js ya w3schools.com de jî tê bikar anîn. Forma rûpela malperê tewra dihêle ku ev mînak înteraktîf be.

Pirtûka Stroustrup ya 2016 Prensîb û Pratîka Bikaranîna C++ hîn bêtir çû. Pêngava yekem ev e ku meriv rave bike ka çi encam divê were bidestxistin, û piştî wê metna bernameyê tê xuyang kirin. Wekî din, ew ne tenê bernameyek rasthatî wekî mînak digirin, lê gerokek li dîrokê didin. Ev dibe alîkar ku meriv balê bikişîne ser wê: "Binerin, ev ne tenê nivîsek bêkêr e. Hûn tiştekî watedar dibînin."

Wekî mînakek dubarekirinê, bernameya yekem a ku li ser makîneyek bernameyek hilanîn (EDSAC) hatî darve kirin binihêrin. Ew ji hêla David Wheeler ve li Laboratory Computer ya Zanîngeha Cambridge, Englandngilîztan di 6ê Gulana 1949 de hate nivîsandin. Ev bername navnîşek sade ya çargoşeyan hesab dike û çap dike.
0 0
1 1
2 4
3 9
4 16
...
98 9604
99 9801

Li vir, her rêzek hejmarek li dûv tîpek ('t') û çargoşeya wê hejmarê dihewîne. Guhertoya C++ ya vê bernameyê wiha xuya dike:

//Вычисляем и распечатываем таблицу квадратов чисел 0-99
int main()
{
    int i = 0; // Начинаем с нуля
    while(i < 100){
        cout << i << 't' << square(i) << 'n';
        ++i;
    }
}

Balkêş e ku di vê pirtûkê de şêweya hevoksaziyê nehatiye vegotin. Stroustrup di pirtûka mamosteyê de (wergerandin) tekez dike ku ew rêzê li aqilê xwendekarên xwe digire. Dibe ku şiyana ku di çend mînakan de nimûneyek were nasîn wekî diyardeyek hişmendiyek wusa tête hesibandin.

Wekî ku ez xwe rave dikim

Nêzîkatiya Stroustrup: danasîna encamê, dûv re çareserkirina pirsgirêkê, û dûv re jî analîzek serbixwe ji hêla xwendekar ve - ya herî fikirdar xuya dike. Ji ber vê yekê, min biryar da ku ez wê wekî bingeh bigirim, lê bi mînakek kêmtir dîrokî vebêjim - peywira derxistina "tabloya naverokê". Ew lengerek naskirî çêdike, da ku hûn dûv re bibêjin "peywira li ser tabloya naverokê bi bîr bîne" û da ku xwendekar vê yekê tam bi bîr bînin. Di mînaka xwe de, min hewl da ku pêşî li du xeletiyên herî gelemperî bigire. Piştre ez ê li ser wan bi hûrgulî binivîsim.

Di vê xebatê de em bi teknîkên ji bo çareserkirina pirsgirêkên tevlihev têne nas kirin. Pêdivî ye ku biryara destpêkê primitive û hêsan be. Welê, hingê hûn dikarin bifikirin ka meriv çawa vê çareseriyê baştir bike.
Введение
Глава 1
Глава 2
Глава 3
Глава 4
Глава 5
Глава 6
Глава 7
Заключение

Li gorî çavdêriyên min, nêzîkatiya "şablon-mînak-encam" di navhevokên cihêreng de hîn jî rê li ber vê yekê vedike ku xwendekar çerxê wekî hieroglifekê dihesibînin. Ev xwe di wê yekê de diyar kir ku wan fêm nekir çima şertek nivîsandina li wir heye, meriv çawa di navbera i++ û i- û tiştên din ên xuya eşkere de hilbijêrin. Ji bo ku ji van têgînên xelet dûr nekevin, divê nêzîkatiya axaftina li ser çerxeyan girîngiyê bide wateya dubarekirina kiryarên yekane û tenê wê hingê bi karanîna avahiyek fermîkirina wan. Ji ber vê yekê, berî ku hevoksaziya loopê bidin, hûn hewce ne ku pirsgirêk bi serê xwe çareser bikin. Çareseriya primitive ji bo pirsgirêka tabloya naverokê wiha xuya dike:

Console.WriteLine("Введение");
Console.WriteLine("Глава 1");
Console.WriteLine("Глава 2");
Console.WriteLine("Глава 3");
Console.WriteLine("Глава 4");
Console.WriteLine("Глава 5");
Console.WriteLine("Глава 6");
Console.WriteLine("Глава 7");
Console.WriteLine("Заключение");

Çawa dikare çêtir bibe?
Li şûna kiryarên monoton bi çerxa.
Kîjan kiryar li pey hev bêyî guhertin têne dubare kirin?
Di vê perçeyê de tune. Lêbelê, fermanên ji bo nîşandana peyva "Beş" bi hejmareke pir dişibin hev.
Ji ber vê yekê, qonaxa paşîn ew e ku cûdahiya di navbera perçeyan de bibînin. Tenê di vê peywirê de her tişt eşkere ye, wê hingê ne fermanên yekane dê bêne dubare kirin, lê blokên kodê yên 5 rêzan an jî zêdetir. Pêdivî ye ku hûn ne tenê di navnîşa fermanan de, lê di nav avahiyên şax an lûkê de bigerin.
Di nimûneyê de, ferqa di navbera fermanan de di hejmara piştî peyva "Beş" de ye.
Dema ku cûdahî hate dîtin, hûn hewce ne ku şêwaza guherînê fam bikin. Parçeya cûda hejmar e? Bi berdewamî zêde dibe an kêm dibe? Nirxa hejmarekê di navbera du tîmên li kêleka hev de çawa diguhere?
Di nimûnê de hejmara piştî peyva “Beş” bi 1-an zêde dibe. Cûdahî tê dîtin, qalib derdikeve holê. Naha hûn dikarin perçeya cihêreng bi guhêrbar biguhezînin.
Pêdivî ye ku hûn guhêrbarek weha berî ya yekem perçeyên dubarekirî ragihînin. Ji guhêrbareke wisa re bi gelemperî I an j an jî tiştekî berfirehtir tê gotin. Divê nirxa wê ya destpêkê bi nirxa yekem a ku li ser ekranê tê xuyang kirin wekhev be. Di nimûneyê de, nirxa yekem 1 e.
Çi nirxa destpêkê divê were girtin da ku rêza hejmarên "100, 101, 102, 103, 104, 105" were xuyang kirin?
Di vê rêzê de hejmara yekem 100 e.
Piştî her fermana derketinê, divê hûn nirxa vê guhêrbar 1 zêde bikin. Ev yekîne gavê guherînê ye.
Di rêza hejmarên "100, 102, 104, 106" de dê çi gav be?
Gav 2 di vê rêzê de.
Piştî ku perçeya cihêreng bi guhêrbar veguhezîne, kod dê wiha xuya bike:

Console.WriteLine("Введение");
int i;
i = 0;
Console.WriteLine("Глава " + i);
i = i + 1;
Console.WriteLine("Глава " + i);
i = i + 1;
Console.WriteLine("Глава " + i);
i = i + 1;
Console.WriteLine("Глава " + i);
i = i + 1;
Console.WriteLine("Глава " + i);
i = i + 1;
Console.WriteLine("Глава " + i);
i = i + 1;
Console.WriteLine("Глава " + i);
i = i + 1;
Console.WriteLine("Заключение");

Piştî ku di kodê de teknîka "nimûneya guhêrbar îfade bike", hûn çend komên tevgerên wekhev ên ku li pey hev diçin digirin. Naha kirinên dubarekirî dikarin bi lekeyek veguhezînin.

Rêzeya çareserkirina pirsgirêkek ku hûn hewce ne ku loopan bikar bînin ji gavên jêrîn pêk tê:

  1. Bi gelek fermanên cihê "serî" çareser bikin
  2. Nimûneyek bibînin
  3. Nimûneya guherbarekê îfade bikin
  4. Sêwirana wekî çerxekê

Paşê, ji bo ku xwendekar xwe di rewşa "Ez her tiştî fam dikim, lê nikarim bibêjim" de xwe nebîne, şertên nû têne destnîşan kirin:
- jimarvan her gav guhêrbarek e ku ji bo şopandina jimareya gavên di xelekekê de hewce ye. Bi gelemperî jimareyek jimareyek ku bi astengiyê re tê berhev kirin.
- gavê dijber - danasîna şêwaza guheztina dijber.
- asteng - hejmarek an guhêrbarek ku jimarvan pê re tê berhev kirin da ku algorîtma dawî be. Nirxa dijber diguhere da ku nêzî sînor bibe.
- laşê loop - komek fermanên ku dê bêne dubare kirin. Dema ku ew dibêjin "ferman di hundurê lûkê de tê nivîsandin," mebesta wan laş e.
- dubarekirina lûkê - pêkanîna yek-carî ya laşê loop.
- rewşa lûkê - îfadeyek mentiqî ya ku diyar dike ka dê dubarekirinek din were darve kirin. (Dibe ku li vir bi strukturên şaxkirinê re tevliheviyek hebe)
Pêdivî ye ku hûn ji vê yekê re amade bibin ku di destpêkê de xwendekar dê ji bo mebestên din terman bikar bînin. Ev hem ji bo kesên bihêz û hem jî yên qels derbas dibe. Avakirina zimanekî hevpar hunerek e. Naha ez ê bi kurtî binivîsim: hûn hewce ne ku peywira "bi <term> perçeya kodê ronî bikin" saz bikin û van şertan bixwe di axaftinê de rast bikar bînin.
Piştî veguheztina bi lûkê, perçeyek tê wergirtin:

Console.WriteLine("Введение");
int i = 0;
while (i < 7) {
    Console.WriteLine("Глава " + i);
    i = i + 1;
}
Console.WriteLine("Заключение");

Nerazîbûna sereke

Di nav xwendekaran de têgihiştinek xelet a populer ev e ku ew çalakiyan di hundurê kulpekê de bi cîh dikin ku hewce ye tenê carekê were kirin. Mînak bi vî rengî:

;
int i = 0;
while (i < 7) {
    Console.WriteLine("Введение")
    Console.WriteLine("Глава " + i);
    i = i + 1;
    Console.WriteLine("Заключение");
}

Xwendekar hem di destpêkê de hem jî di pirsgirêkên tevlihev de her dem dikevin nav vê pirsgirêkê.
Nîşana sereke di vê rewşê de:

Divê hûn çend caran fermanê dubare bikin: carekê an çend caran?

Fermanên çapkirina peyvên "Destpêk" û "Encam" û ragihandin û destpêkirina guhêrbar i ne wek kirinên din ên dubarekirî ne. Ew tenê carekê têne darve kirin, ku tê vê wateyê ku ew hewce ne ku li derveyî laşê loopê bêne nivîsandin.

Pêdivî ye ku her sê qonaxên çareseriyê di kodê de bimînin da ku hûn di rewşên dijwar de paşê wan binihêrin. Ji bo ku destwerdanê nekin her du vebijarkên pêşîn şîrovekirin bes e.
Divê bala xwendekaran bikişîne ser van rastiyan:
- Di rewşek lûkê de, hejmar û sînorek bi gelemperî têne berhev kirin. Berhevkar dikare di laşê lûkê de biguhezîne, lê sînor nikare. Ji bo şikandina vê qaîdeyê, hûn hewce ne ku sedemên mecbûrî formule bikin.
- Fermanên ji bo nîşandana peyvên "Destpêk" û "Encam" li derveyî laşê lûkê ne. Pêdivî ye ku em wan 1 carî bikin. "Destpêk" - berî dubarekirina çalakiyan, "Encam" - piştî.
Di pêvajoya yekkirina vê mijarê de, serwerkirina yên din, û her weha mijûlbûna bi dijwariyan de, ji bo xwendekarên bihêz jî kêrhatî ye ku vê pirsê bipirsin: "Ev çalakî çend caran hewce ye ku were kirin? Yek an gelek?

Pêşxistina jêhatîbûnên zêde

Di pêvajoya xwendinê de, xwendekar jî jêhatiya teşhîskirin û çareserkirina pirsgirêkan pêş dixin. Ji bo pêkanîna teşhîsê, pêdivî ye ku xwendekar encama ku tê xwestin pêşkêş bike û bi encama rastîn re bide ber hev. Çalakiyên rastkirinê bi cûdahiya di navbera wan de girêdayî ye.
Ji ber ku xwendekar di vê qonaxê de hîna jî di derheqê encama "xwestin" de hindik in, ew dikarin li ser daneyên testê bisekinin. Wekî qaîdeyek, di vê qonaxê de kes hîn fam nake ka çi dikare xelet bibe û meriv çawa bi wê re mijûl dibe. Ji ber vê yekê, ez di defterê de ravekirina pirsgirêkên tîpîk û çend awayên çareserkirina wan dinivîsim. Hilbijartina ya herî guncaw karê xwendekar bi xwe ye.
Ji bo pirsa "gelo ya ku li bendê bû?", "Niha kîjan ji van rewşan qewimî?", "Çareseriya sepandî alîkarî kir?"

  1. Hejmara çalakiyan 1 kêmtir an jî ji ya hêvîkirî zêdetir e. Çareserî:
    - nirxa destpêkê ya jimarvan bi 1 zêde bikin.
    - operatora danberheva hişk (< an >) bi ya ne hişk (<= an >=) biguhezînin.
    - nirxa sînor biguherînin 1.
  2. Çalakiyên di lûkê de bê rawestan, bêdawî têne kirin. Çareserî:
    - Ger ew winda be fermanek guheztina dijber lê zêde bike.
    - Fermana guheztina kontra rast bikin da ku nirxa wê nêzî sînor bibe.
    - Ger ew di laşê lûkê de be fermana guhartina astengiyê derxînin.
  3. Hejmara çalakiyan di çerçoveyê de ji 1 kêmtir an jî ji ya hêvîkirî zêdetir e. Çalakiya di çerçoveyê de carekê jî nehat kirin. Pêşî hûn hewce ne ku hûn nirxên rastîn ên guhêrbaran berî destpêkirina lûkê bibînin. Çareserî:
    - nirxa destpêkê ya astengiyê biguherînin
    - nirxa destpêkê ya hejmarê biguherînin

Pirsgirêka 3 bi gelemperî guhêrbarek xelet bikar tîne an jî jimarvan li sifirê venegere.

Piştî vê ravekirinê, xwendekar hîn jî dibe ku di derheqê ka loop çawa dixebitin xwedan têgînên cûda cûda bin.
Ji bo hilweşandina yên herî gelemperî, ez karên jêrîn didim we:

  1. Li kîjan sînor, nirxa jimareya destpêkê, an gavê dijber ji hêla bikarhêner ve tê navnîş kirin.
  2. Tê de nirxa jimare divê di hin îfadeyên hejmarî de were bikar anîn. Tête pêşniyar kirin ku di îfadeya radîkal de an jî di navdêrê de jimarvanek bikar bînin da ku cûdahî nehêlek be.
  3. Di vê yekê de ku nirxa jimare li ser ekranê nayê xuyang kirin dema ku lûp dimeşe. Mînakî, nîşandana hejmareka pêwîst ya perçeyên nivîsê yên yeksan an xêzkirina jimarek bi grafikên kurikê.
  4. Di nav de hûn hewce ne ku pêşî hin çalakiyên dubare bikin, û paşê yên din.
  5. Ku hûn hewce ne ku berî û piştî dubarekirinê çalakiyên din bikin

Ji bo her peywirê hûn hewce ne ku daneyên testê û encama hêvîdar peyda bikin.

Ji bo ku hûn fêm bikin ka hûn dikarin çiqas zû tevbigerin, hûn hewce ne ku şert û mercên van pirsgirêkan bixwînin û bipirsin: "Ew ji nimûneyê çawa cûda ne?", "Ji bo çareserkirina wan di nimûneyê de çi divê were guheztin?" Ger xwendekar bi wate bersiv bide, wê hingê bila bi kêmanî yek di polê de çareser bike, ya mayî jî bi serê xwe li malê. Ger çareserî serketî be, wê hingê em dikarin dest bi ravekirina şert û mercên di hundurê lûkan de bikin.
Ger pirsgirêkên we hene ku hûn bi tena serê xwe pirsgirêkan çareser bikin, hûn hewce ne ku hûn di dersê de her tiştî bixebitin. Ji bo ku çareser kirina pirsgirêkê neyê bîra xêzkirina kewek, ez pêşniyar dikim ku pêşî pirsgirêkê bi rengek ne-gerdûnî çareser bikin. Ango, da ku çareserî ceribandina yekem derbas bike û avakirina loopê bikar neyîne. Welê, wê hingê veguherînan bicîh bikin ku bigihîjin gerdûnîbûna çareseriyê.

Loops û şax

Bi dîtina min, kêrhatî ye ku meriv mijara "çerxên di nav şaxan" de ji hev cuda bide. Ji ber vê yekê ku paşê hûn dikarin cûdahiya di navbera kontrolkirina şertek pir caran û kontrolkirina wê de bibînin.
Karên ji bo hevgirtinê dê li ser derxistina hejmarên ji A heya B bin, ku ji hêla bikarhêner ve têne navnîş kirin:
- her tim bi rêza bilindbûnê.
- Li gorî nirxên A û B hilkişin an daketin.

Mijara "şaqkirina di nav xelekan de" divê tenê piştî ku xwendekar teknîkan bi dest xistiye were veguheztin: "guheztina nimûneyek bi guhêrbar" û "guheztina kiryarên dubarekirî bi çerxekê."
Sedema sereke ya karanîna şaxên di hundurê lûpkan de anomaliyên di şêwazê de ne. Di navîn de ew li gorî daneyên destpêkê dişikîne.
Ji bo wan şagirtên ku dikarin bi berhevkirina teknîkên sade li çareyekê bigerin, bes e ku bibêjin "şaqkirin dikare di hundurê lûtkeyan de were nivîsandin" û pirsgirêkê "mînak" bi tevahî bide ku serbixwe çareser bike.
Nimûne kar:

Bikarhêner hejmara X dinivîse. Di stûnekê de jimareyên ji 0 heta 9’an nîşan bidin û li hember jimareya ku bi X re ye nîşaneya '+' deynin.

Ger 0 hatibe nivîsandin0+
1
2
3
4
5
6
7
8
9

Ger 6 hatibe nivîsandin0
1
2
3
4
5
6+
7
8
9

Ger 9 hatibe nivîsandin0
1
2
3
4
5
6
7
8
9+

Ger 777 hatibe nivîsandin0
1
2
3
4
5
6
7
8
9

Ger ravekirinek kurt ji bo nivîsandina bi lûkê têrê nake, wê hingê hûn hewce ne ku çareseriyek gerdûnî ji heman pirsgirêkê re bêyî lûkê bi dest bixin.
Hûn ê yek ji du vebijarkan bistînin:
Xwestin

string temp;
temp = Console.ReadLine();
int x;
x = int.Parse(temp);
if (x==0) {
    Console.WriteLine(0 + "+");
} else {
    Console.WriteLine(0);
}
if (x==1) {
    Console.WriteLine(1 + "+");
} else {
    Console.WriteLine(1);
}
if (x==2) {
    Console.WriteLine(2 + "+");
} else {
    Console.WriteLine(2);
}
if (x==3) {
    Console.WriteLine(3 + "+");
} else {
    Console.WriteLine(3);
}
if (x==4) {
    Console.WriteLine(4 + "+");
} else {
    Console.WriteLine(4);
}
if (x==5) {
    Console.WriteLine(5 + "+");
} else {
    Console.WriteLine(5);
}
if (x==6) {
    Console.WriteLine(6 + "+");
} else {
    Console.WriteLine(6);
}
if (x==7) {
    Console.WriteLine(7 + "+");
} else {
    Console.WriteLine(7);
}
if (x==8) {
    Console.WriteLine(8 + "+");
} else {
    Console.WriteLine(8);
}
if (x==9) {
    Console.WriteLine(9 + "+");
} else {
    Console.WriteLine(9);
}

Derîmkan

string temp;
temp = Console.ReadLine();
int x;
x = int.Parse(temp);
if (x==0) {
    Console.WriteLine("0+n1n2n3n4n5n6n7n8n9");
}
if (x==1) {
    Console.WriteLine("0n1+n2n3n4n5n6n7n8n9");
}
if (x==2) {
    Console.WriteLine("0n1n2+n3n4n5n6n7n8n9");
}
if (x==3) {
    Console.WriteLine("0n1n2n3+n4n5n6n7n8n9");
}
if (x==4) {
    Console.WriteLine("0n1n2n3n4+n5n6n7n8n9");
}
if (x==5) {
    Console.WriteLine("0n1n2n3n4n5+n6n7n8n9");
}
if (x==6) {
    Console.WriteLine("0n1n2n3n4n5n6+n7n8n9");
}
if (x==7) {
    Console.WriteLine("0n1n2n3n4n5n6n7+n8n9");
}
if (x==8) {
    Console.WriteLine("0n1n2n3n4n5n6n7n8+n9");
}
if (x==9) {
    Console.WriteLine("0n1n2n3n4n5n6n7n8n9+");
}

Ez di pêş de, dema ku li ser mijara şaxkirinê dixwînim, peywirek weha didim.
Ger xwendekar vebijarkek "mimkûn" derkeve, wê hingê hûn hewce ne ku ji wan re bibêjin ku ji heman pirsgirêkê re gelek çareserî hene. Lêbelê, ew di berxwedana xwe ya li hember guhertinên di hewcedariyê de cûda dibin. Pirsê bipirsin: "Heke ez neçar bûm ku hejmareke din lê zêde bikim divê çend cîh di kodê de werin rast kirin?" Di guhertoya "mimkûn" de, hûn ê hewce bikin ku şaxek din lê zêde bikin û li 10 deverên din jimareyek nû lê zêde bikin. Di "xwestin" de bes e ku meriv tenê şaxek lê zêde bike.
Erkê saz bikin ku vebijarka "xwestî" ji nû ve hilberîne, dûv re di kodê de nimûneyek bibînin, veguheztinek guhêrbar pêk bînin û xelekek binivîsin.
Ger ramanek we heye ka meriv çawa vê pirsgirêkê bêyî dor bi rengek din çareser dike, ji kerema xwe di şîroveyan de binivîsin.

Loops di nav Loops de

Di vê mijarê de hûn hewce ne ku bala xwe bidin tiştên jêrîn:
- jimarvan ji bo lûkên hundir û derve divê guhêrbarên cihê bin.
- Pêdivî ye ku jimarvana lûleya hundurîn gelek caran were vesaz kirin (ango, di laşê lûleya derve de).
- Di karên derxistina nivîsê de, hûn nekarin pêşî herfekê di çend rêzan de binivîsin, dûv re jî ya duyemîn. Divê hûn pêşî hemî tîpên rêza yekem, paşê hemî tîpên rêza duyemîn û hwd.

Çêtir e ku meriv bi ravekirina girîngiya vegerandina jimarvan li ser sifirê dest bi ravekirina mijara lûpên di nav lûpan de bike.
Nimûne kar:

Bikarhêner du hejmaran dike: R û T. Du rêzên tîpên "#" çap bikin. Di rêza yekem de divê tîpên R hebin. Di rêza duyemîn de perçeyên T hene. Ger hejmarek neyînî be, peyamek çewtiyê nîşan bide.

R=5, T=11#####
############

R=20, T=3#####################
###

R=-1, T=6Nirxa R divê ne-neyînî be

R=6, T=-2Nirxa T divê ne-neyînî be

Eşkere ye ku ev pirsgirêk jî herî kêm du çareserî hene.
Xwestin

string temp;
int R;
int T;
temp = Console.ReadLine();
R = int.Parse(temp);
temp = Console.ReadLine();
T = int.Parse(temp);
int i = 0;
while (i < R)
{
    Console.Write("#");
    i = i + 1;
}
Console.WriteLine();
i = 0;
while (i < T)
{
    Console.Write("#");
    i = i + 1;
}

Dibe #1

string temp;
int R;
int T;
temp = Console.ReadLine();
R = int.Parse(temp);
temp = Console.ReadLine();
T = int.Parse(temp);
int i = 0;
while (i < R)
{
    Console.Write("#");
    i = i + 1;
}
Console.WriteLine();
int j = 0;
j = 0;
while (j < T)
{
    Console.Write("#");
    j = j + 1;
}

Cûdahî ev e ku di çareseriya "mimkûn" de, guhêrbarek duyemîn hate bikar anîn da ku xeta duyemîn derxe. Divê hûn israr bikin ku heman guhêrbar ji bo her du lûkan bikar bînin. Ev tixûb dikare bi vê rastiyê were rast kirin ku çareseriyek bi yek jimarvanek ji bo du qonaxan dê bibe mînakek têgîna "vesazkirina jimare". Fêmkirina vê termê dema ku pirsgirêkên jêrîn çareser bikin hewce ye. Wekî lihevkirinek, hûn dikarin her du çareseriyên pirsgirêkê biparêzin.

Pirsgirêkek tîpîk a bi karanîna yek guhêrbarek dijber ji bo du lûkan wiha xuya dike:
R=5, T=11#####
######

Hejmara tîpên di rêza duyemîn de bi nirxa T re nagunce. Ger ji bo vê pirsgirêkê hewcedariya we bi alîkariyê hebe, wê hingê hûn hewce ne ku li têbîniyên li ser pirsgirêkên tîpîk ên lûpkan binêrin. Ev nîşana #3 ye. Ger hûn yekser berî çerxa duyemîn derkeftinek nirxa dijber lê zêde bikin tê teşhîs kirin. Bi vesazkirinê ve hatî rast kirin. Lê çêtir e ku meriv vê gavê nebêje. Divê xwendekar hewl bidin ku bi kêmanî hîpotezek çêbikin.

Bê guman, çareseriyek din heye. Lê min di nav xwendekaran de qet nedîtiye. Di qonaxa çerxên xwendinê de, çîroka li ser wê dê balê bikişîne. Dema ku hûn li ser fonksiyonên string fêr bibin hûn dikarin paşê vegerin ser wê.
Dibe #2

string temp;
int R;
int T;
temp = Console.ReadLine();
R = int.Parse(temp);
temp = Console.ReadLine();
T = int.Parse(temp);
Console.WriteLine(new String('#', R));
Console.WriteLine(new String('#', T));

Peywira pêwîst a din:

Hejmarên ji 0 heta 9 nîşan bidin. Divê her hejmar li ser rêza xwe be. Hejmara reqemên rêzekê (W) ji klavyeyê tê nivîsandin.

W=10
1
2
3
4
5
6
7
8
9

W=100000000000
1111111111
2222222222
3333333333
4444444444
5555555555
6666666666
7777777777
8888888888
9999999999

Ger xwendekarek teknîka guheztina guhêrbarek bi dest xistibe, wê hingê ew ê pir zû bi ser bikeve. Pirsgirêkek gengaz dê dîsa di vesazkirina guhêrbar de be. Ger hûn nikaribin veguherînê bi rê ve bibin, ev tê vê wateyê ku hûn bi lez bûn û hewce ne ku pirsgirêkên hêsantir çareser bikin.

Spas ji bo baldariya we. Kanalê biecibînin û bibin abone.

PS Heke hûn di nivîsê de çewtî an xeletiyan bibînin, ji kerema xwe min agahdar bikin. Ev dikare bi bijartina beşek nivîsê û pêlkirina "⌘ + Enter" li ser Mac, û "Ctrl / Enter" li ser klavyeyên klasîk, an bi navgîniya peyamên taybet ve were kirin. Ger ev vebijark nebin, di şîroveyan de li ser xeletiyan binivîsin. Sipas ji were!

Tenê bikarhênerên qeydkirî dikarin beşdarî anketê bibin. Têketinji kerema xwe.

Anket ji bo xwendevanên bê karma

  • 20,0%Ez bi profesyonelî hîn dikim, +12

  • 10,0%Ez bi profesyonelî ders didim, -11

  • 70,0%Ez hîn nakim, +17

  • 0,0%Ez ders nadim, -10

  • 0,0%Other0

10 bikarhêneran deng dan. 5 bikarhêner jî betal bûn.

Source: www.habr.com

Add a comment