[{"data":1,"prerenderedAt":323},["ShallowReactive",2],{"tag-labels":3,"site-header":4,"article-perulangan-dengan-repeat-until-loop-pada-pascal-id":72},{},{"featuredPost":5,"navigations":29},{"id":6,"title":7,"title_en":8,"slug":9,"excerpt":10,"excerpt_en":11,"has_translation":12,"published_at":13,"reading_time":14,"hidden_from_listing":15,"tags":16,"thumbnail_image":21,"og_image":22,"series":23,"authors":28},110,"Ketika Pilih Framework Cuma Biar Kelihatan Beda","When You Pick a Framework Just to Look Different","ketika-pilih-framework-cuma-biar-kelihatan-beda","Terakhir kali kamu milih framework atau library baru, itu karena masalahmu butuh alat itu, atau karena alatnya kedengaran keren dan belum banyak yang pakai? Pertanyaan ini nggak enak dijawab. Soalnya keputusan teknologi sering diambil dengan alasan yang nggak pernah ditulis di dokumen teknis mana pun.","The last time you chose a new framework or library, was it because your problem needed that tool, or because it sounded cool and few people around you were using it? That question is uncomfortable. Technology decisions are often made for reasons that never appear in any technical document.",true,"2026-10-06T15:25:21.000Z",5,false,[17,18,19,20],"karier","framework","opini","pengalaman",null,"\u002Fog\u002Fketika-pilih-framework-cuma-biar-kelihatan-beda.png",{"id":24,"title":25,"title_en":26,"slug":27},9,"Artikel","Articles","all",[],[30,46,67],{"collection":31,"item":32},"series",{"__typename":31,"title":25,"title_en":26,"slug":27,"children_series":33},[34,38,42],{"title":35,"title_en":36,"slug":37},"Kecerdasan Artifisial","Artificial Intelligence","kecerdasan-artifisial",{"title":39,"title_en":40,"slug":41},"Konsep Dasar Pemrograman","Programming Fundamentals","konsep-dasar-pemrograman",{"title":43,"title_en":44,"slug":45},"Algoritma dan Struktur Data","Algorithms and Data Structures","algoritma-struktur-data",{"collection":31,"item":47},{"__typename":31,"title":48,"title_en":48,"slug":49,"children_series":50},"Tutorial","tutorial",[51,55,59,63],{"title":52,"title_en":53,"slug":54},"Belajar Python","Learning Python","belajar-python",{"title":56,"title_en":57,"slug":58},"Belajar Golang","Learning Go","belajar-golang",{"title":60,"title_en":61,"slug":62},"Belajar Java","Learning Java","belajar-java",{"title":64,"title_en":65,"slug":66},"Belajar Pascal","Learning Pascal","belajar-pascal",{"collection":31,"item":68},{"__typename":31,"title":69,"title_en":69,"slug":70,"children_series":71},"Lab","lab",[],{"article":73,"renderedBody":208,"renderedTakeaway":209,"latestArticles":210,"toc":310},{"id":74,"title":75,"title_en":76,"slug":77,"excerpt":78,"excerpt_en":79,"has_translation":12,"published_at":80,"reading_time":81,"hidden_from_listing":15,"tags":82,"thumbnail_image":21,"og_image":87,"series":88,"authors":201,"body_locale":204,"available_locales":205,"body":207,"takeway":21,"prerequisite":21},71,"Perulangan dengan REPEAT UNTIL loop pada Pascal","Loops with the REPEAT UNTIL Loop in Pascal","perulangan-dengan-repeat-until-loop-pada-pascal","Pada REPEAT UNTIL loop, pengecekan kondisi dilakukan pada akhir perintah dan perulangan akan terus berjalan selama kondisi masih bernilai `false`.","A REPEAT UNTIL loop checks its condition at the end of the statement and keeps running as long as that condition is still false.","2020-11-15T12:34:28.000Z",2,[83,84,85,86],"pascal","perulangan","loop","struktur-kontrol","\u002Fog\u002Fperulangan-dengan-repeat-until-loop-pada-pascal.png",{"id":89,"title":90,"title_en":91,"slug":92,"description":93,"description_en":94,"articles":95,"children_series":180,"parent_series":181},24,"Struktur Kontrol","Control Structures","pascal-struktur-kontrol","Ekspresi boolean, percabangan if-else dan case-of, plus tiga jenis perulangan yang Pascal punya.","Boolean expressions, if-else and case-of branching, and the three kinds of loop Pascal gives you.",[96,117,132,147,161,166],{"id":97,"title":98,"title_en":99,"slug":100,"excerpt":101,"excerpt_en":102,"has_translation":12,"published_at":103,"reading_time":104,"hidden_from_listing":15,"tags":105,"thumbnail_image":21,"og_image":108,"series":109,"authors":110},67,"Expresi Boolean dan Operasi Logika pada Bahasa Pascal","Boolean Expressions and Logical Operations in Pascal","expresi-boolean-dan-operasi-logika-pada-bahasa-pascal","Dalam penyusunan algoritma pemrograman, perlu yang namanya expresi boolean. Expresi boolean dapat berupa operasi logika dan perbandingan.","Building a programming algorithm needs boolean expressions, and a boolean expression can be a logical operation or a comparison.","2020-11-05T14:29:24.000Z",4,[83,106,107,86],"boolean","operator","\u002Fog\u002Fexpresi-boolean-dan-operasi-logika-pada-bahasa-pascal.png",{"id":89,"title":90,"title_en":91,"slug":92},[111],{"authors_id":112},{"id":113,"name":114,"slug":115,"role":116,"profile_picture":21},1,"Daffa Izzuddin","izzudd","Writer",{"id":118,"title":119,"title_en":120,"slug":121,"excerpt":122,"excerpt_en":123,"has_translation":12,"published_at":124,"reading_time":104,"hidden_from_listing":15,"tags":125,"thumbnail_image":21,"og_image":127,"series":128,"authors":129},68,"Percabangan dengan Kondisi IF dan ELSE pada Pascal","Branching with IF and ELSE Conditions in Pascal","percabangan-dengan-kondisi-if-dan-else-pada-pascal","Pada kesempatan kali ini kita akan membahas sebuah kondisi percabangan dengan menggunakan keyword IF ELSE.","This time we'll walk through branching conditions in Pascal using the IF ELSE keyword.","2020-11-09T14:33:48.000Z",[83,126,86],"percabangan","\u002Fog\u002Fpercabangan-dengan-kondisi-if-dan-else-pada-pascal.png",{"id":89,"title":90,"title_en":91,"slug":92},[130],{"authors_id":131},{"id":113,"name":114,"slug":115,"role":116,"profile_picture":21},{"id":133,"title":134,"title_en":135,"slug":136,"excerpt":137,"excerpt_en":138,"has_translation":12,"published_at":139,"reading_time":140,"hidden_from_listing":15,"tags":141,"thumbnail_image":21,"og_image":142,"series":143,"authors":144},69,"Perulangan dengan FOR loop pada Pascal","Loops with the FOR Loop in Pascal","perulangan-dengan-for-loop-pada-pascal","Pada FOR loop kita menginstruksikan komputer untuk menjalankan suatu perintah sebanyak berapa kali secara explisit.","In a FOR loop we tell the computer to run a statement a specific number of times, spelled out up front.","2020-11-11T12:16:50.000Z",3,[83,84,85,86],"\u002Fog\u002Fperulangan-dengan-for-loop-pada-pascal.png",{"id":89,"title":90,"title_en":91,"slug":92},[145],{"authors_id":146},{"id":113,"name":114,"slug":115,"role":116,"profile_picture":21},{"id":148,"title":149,"title_en":150,"slug":151,"excerpt":152,"excerpt_en":153,"has_translation":12,"published_at":154,"reading_time":140,"hidden_from_listing":15,"tags":155,"thumbnail_image":21,"og_image":156,"series":157,"authors":158},70,"Perulangan dengan WHILE DO loop pada Pascal","Loops with the WHILE DO Loop in Pascal","perulangan-dengan-while-do-loop-pada-pascal","WHILE DO loop merupakan perulangan pada Pascal yang menggunakan kondisi berupa ekspresi boolean sebagai penanda perulangannya.","A WHILE DO loop is a Pascal loop that uses a boolean expression as the marker for repeating, and it keeps going as long as that condition is true.","2020-11-13T12:29:04.000Z",[83,84,85,86],"\u002Fog\u002Fperulangan-dengan-while-do-loop-pada-pascal.png",{"id":89,"title":90,"title_en":91,"slug":92},[159],{"authors_id":160},{"id":113,"name":114,"slug":115,"role":116,"profile_picture":21},{"id":74,"title":75,"title_en":76,"slug":77,"excerpt":78,"excerpt_en":79,"has_translation":12,"published_at":80,"reading_time":81,"hidden_from_listing":15,"tags":82,"thumbnail_image":21,"og_image":87,"series":162,"authors":163},{"id":89,"title":90,"title_en":91,"slug":92},[164],{"authors_id":165},{"id":113,"name":114,"slug":115,"role":116,"profile_picture":21},{"id":167,"title":168,"title_en":169,"slug":170,"excerpt":171,"excerpt_en":172,"has_translation":12,"published_at":173,"reading_time":140,"hidden_from_listing":15,"tags":174,"thumbnail_image":21,"og_image":175,"series":176,"authors":177},72,"Percabangan dengan CASE OF pada Pascal","Branching with CASE OF in Pascal","percabangan-dengan-case-of-pada-pascal","CASE OF pada Pascal merupakan percabangan yang menggunakan variable dan nilainya untuk menentukan sebuah kondisi","CASE OF in Pascal is branching that uses a variable and its values to decide which condition applies.","2020-11-17T12:41:17.000Z",[83,126,86],"\u002Fog\u002Fpercabangan-dengan-case-of-pada-pascal.png",{"id":89,"title":90,"title_en":91,"slug":92},[178],{"authors_id":179},{"id":113,"name":114,"slug":115,"role":116,"profile_picture":21},[],{"id":182,"title":64,"title_en":65,"slug":66,"parent_series":183,"children_series":184},14,{"id":113,"title":48,"title_en":48,"slug":49},[185,190,191,196],{"id":186,"title":187,"title_en":188,"slug":189,"cover_image":21},23,"Berkenalan dengan Bahasa Pascal","Getting Started with Pascal","pascal-intro",{"id":89,"title":90,"title_en":91,"slug":92,"cover_image":21},{"id":192,"title":193,"title_en":194,"slug":195,"cover_image":21},25,"Tipe Data Bentukan","Composite Types","pascal-tipe-data-bentukan",{"id":197,"title":198,"title_en":199,"slug":200,"cover_image":21},26,"Pemrograman Prosedural","Procedural Programming","pascal-pemrograman-prosedural",[202],{"authors_id":203},{"id":113,"name":114,"slug":115,"role":116,"profile_picture":21},"id",[206,204],"en","Setelah sebelumnya kita membahas tentang [FOR loop](https:\u002F\u002Finvasikode.com\u002Ffor-loop-pascal\u002F), dan [WHILE DO loop](https:\u002F\u002Finvasikode.com\u002Fwhile-loop-pascal\u002F) pada Pascal. Sekarang kita akan membahas tentang REPEAT UNTIL loop.\n\n## Pengertian REPEAT UNTIL loop pada Pascal\n\nREPEAT UNTIL loop memiliki kemiripan dengan WHILE DO loop. Keduanya sama sama menggunakan ekspresi boolean sebagai kondisinya. Perbedaannya terletak pada letak kondisi, dan juga waktu berhentinya.\n\nPada REPEAT UNTIL loop, pengecekan kondisi dilakukan pada akhir perintah dan perulangan akan terus berjalan selama kondisi masih bernilai `false`. Ini kebalikan dari WHILE DO loop yang pengecekan kondisi berada di awal dan perulangan berjalan selama kondisi bernilai `true`.\n\nMari kita lihat contoh sederhananya, tetap dengan mengaduk adonan roti hehe...\n\n```\n\u002F\u002F dalam bahasa pascal\nrepeat\n  aduk_adonan;\nuntil (roti_mengembang);\n\n\u002F\u002F atau dalam bahasa Indonesia\nulangi\n  aduk_adonan;\nsampai (roti_mengembang);\n```\n\nPada perulangan REPEAT UNTIL tersebut, perintah `aduk_adonan` akan terus berjalan selama roti belum mengembang. Namun ketika roti telah mengembang, perulangan akan berhenti.\n\n## Format Penulisan REPEAT UNTIL loop pada Pascal\n\nSama seperti WHILE DO loop, komponen terpenting dari REPEAT UNTIL loop terletak pada [kondisi](https:\u002F\u002Finvasikode.com\u002Foperasi-logika-pascal\u002F) dan perintah yang akan dijalankan. Untuk format penulisannya sebagai berikut.\n\n```\nrepeat\n  {perintah yang akan dijalankan}\nuntil ({kondisi});\n```\n\nOke supaya lebih paham, kita lanjut dengan membuat program sederhana menggunakan REPEAT UNTIL loop.\n\n## Contoh Penggunaan REPEAT UNTIL loop pada Pascal\n\nPada contoh kali ini kita akan coba membuat program untuk mengeluarkan output bilangan kelipatan 2 dengan mengunakan REPEAT UNTIL loop. Silahkan ketikkan kode berikut.\n\n```pascal\nprogram WhileDoLoop;\nuses crt;\nvar\n  i: integer;\nbegin\n  clrscr;\n  i := 2;\n  writeln('Bilangan kelipatan 2');\n  repeat\n    write(i, ', ');\n    i := i+2; \u002F\u002F menambah i sebanyak 2\n  until(i > 100); \u002F\u002F perulangan sampai i lebih dari 100\n  readln;\nend.\n```\n\nSilahkan kalian jalankan, maka kurang lebih outputnya akan seperti ini.\n\n```\nBilangan kelipatan 2\n2 4 6 8 ... 98 100\n```\n\nPada program tersebut perintah `write(i, ' ')` dijalankan sebanyak 50 kali karena variable i ditambah 2 setiap perulangannya. Setelah variable i lebih dari 100 maka perulangan akan berhenti dan program selesai.\n\nSekarang coba kalian ubah sedikit kondisinya menjadi sebagai berikut.\n\n```pascal\n....\n  until (i >= 100);\n....\n```\n\nKalau sudah coba kalian jalankan. Jika kalian perhatikan, hasil outpunya tidak akan sampai 100, hanya sampai angka 98 saja. Kira kira kenapa?\n\nIni karena saat nilai variable i sudah mencapai angka 100 perulangan telah berhenti. karena `100 >= 100` menghasilkan value `true`. Ini perlu diperhatikan dalam penulisan kondisi, karena jika terjadi kesalahan maka logika program juga akan ikut salah.\n\nOh iya, perulangan REPEAT UNTIL ini juga dapat menghasilkan infinite loop, apabila logikanya selalu bernilai false. Contohnya saja.\n\n```pascal\n....\n  until (false); \u002F\u002F akan menghasilkan infinite loop\n....\n```\n\nJadi selalu ingat untuk memberikan perintah logika agar tidak terjadi infinite loop hehe... :D\n\nSeperti biasanya, silahkan kalian bereksperimen dengan mengubah variable dan kondisi perulangannya. Selamat mencoba...\n\n## Penutup\n\nCukup sekian untuk tutorial kali ini, semoga bermanfaat :D pada tutorial selanjutnya kita akan kembali lagi membahas seputar percabangan seperti IF ELSE yang pernah kita bahas sebelumnya. Namun kali ini akan menggunakan metode yang lain yaitu [percabangan dengan kondisi CASE OF](https:\u002F\u002Finvasikode.com\u002Fcase-of-pascal\u002F).\n","\u003Cp>Setelah sebelumnya kita membahas tentang \u003Ca href=\"https:\u002F\u002Finvasikode.com\u002Ffor-loop-pascal\u002F\">FOR loop\u003C\u002Fa>, dan \u003Ca href=\"https:\u002F\u002Finvasikode.com\u002Fwhile-loop-pascal\u002F\">WHILE DO loop\u003C\u002Fa> pada Pascal. Sekarang kita akan membahas tentang REPEAT UNTIL loop.\u003C\u002Fp>\n\u003Ch2 id=\"pengertian-repeat-until-loop-pada-pascal\">Pengertian REPEAT UNTIL loop pada Pascal\u003C\u002Fh2>\n\u003Cp>REPEAT UNTIL loop memiliki kemiripan dengan WHILE DO loop. Keduanya sama sama menggunakan ekspresi boolean sebagai kondisinya. Perbedaannya terletak pada letak kondisi, dan juga waktu berhentinya.\u003C\u002Fp>\n\u003Cp>Pada REPEAT UNTIL loop, pengecekan kondisi dilakukan pada akhir perintah dan perulangan akan terus berjalan selama kondisi masih bernilai \u003Ccode>false\u003C\u002Fcode>. Ini kebalikan dari WHILE DO loop yang pengecekan kondisi berada di awal dan perulangan berjalan selama kondisi bernilai \u003Ccode>true\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>Mari kita lihat contoh sederhananya, tetap dengan mengaduk adonan roti hehe...\u003C\u002Fp>\n\n\u003Cdiv class=\"code-block-wrapper my-6 not-prose rounded-xl border-2 border-black dark:border-gray-600 shadow-neo overflow-hidden bg-[#24292e] text-[#e1e4e8] transition-all\">\n  \u003Cdiv class=\"code-block-header flex items-center justify-between px-4 py-2.5 bg-[#1f2428] border-b-2 border-black dark:border-gray-600 font-mono text-xs font-bold text-gray-300 select-none\">\n    \u003Cdiv class=\"flex items-center gap-2\">\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ff5f56] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">TEXT\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cbutton type=\"button\" class=\"copy-code-btn flex items-center gap-1.5 px-3 py-1 text-xs font-bold bg-[#2f363d] text-gray-200 border-2 border-black dark:border-gray-500 rounded-lg shadow-neo-sm hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-none hover:bg-gray-700 transition-all cursor-pointer\" data-code=\"%2F%2F%20dalam%20bahasa%20pascal%0Arepeat%0A%20%20aduk_adonan%3B%0Auntil%20(roti_mengembang)%3B%0A%0A%2F%2F%20atau%20dalam%20bahasa%20Indonesia%0Aulangi%0A%20%20aduk_adonan%3B%0Asampai%20(roti_mengembang)%3B\" title=\"Salin kode\">\n      \u003Csvg class=\"w-3.5 h-3.5 copy-icon-svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n        \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Cspan class=\"copy-text\">Copy\u003C\u002Fspan>\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"code-block-content p-4 overflow-x-auto text-sm font-mono leading-relaxed bg-[#24292e]\">\n    \u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\">\u003Ccode>\u002F\u002F dalam bahasa pascal\nrepeat\n  aduk_adonan;\nuntil (roti_mengembang);\n\n\u002F\u002F atau dalam bahasa Indonesia\nulangi\n  aduk_adonan;\nsampai (roti_mengembang);\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>Pada perulangan REPEAT UNTIL tersebut, perintah \u003Ccode>aduk_adonan\u003C\u002Fcode> akan terus berjalan selama roti belum mengembang. Namun ketika roti telah mengembang, perulangan akan berhenti.\u003C\u002Fp>\n\u003Ch2 id=\"format-penulisan-repeat-until-loop-pada-pascal\">Format Penulisan REPEAT UNTIL loop pada Pascal\u003C\u002Fh2>\n\u003Cp>Sama seperti WHILE DO loop, komponen terpenting dari REPEAT UNTIL loop terletak pada \u003Ca href=\"https:\u002F\u002Finvasikode.com\u002Foperasi-logika-pascal\u002F\">kondisi\u003C\u002Fa> dan perintah yang akan dijalankan. Untuk format penulisannya sebagai berikut.\u003C\u002Fp>\n\n\u003Cdiv class=\"code-block-wrapper my-6 not-prose rounded-xl border-2 border-black dark:border-gray-600 shadow-neo overflow-hidden bg-[#24292e] text-[#e1e4e8] transition-all\">\n  \u003Cdiv class=\"code-block-header flex items-center justify-between px-4 py-2.5 bg-[#1f2428] border-b-2 border-black dark:border-gray-600 font-mono text-xs font-bold text-gray-300 select-none\">\n    \u003Cdiv class=\"flex items-center gap-2\">\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ff5f56] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">TEXT\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cbutton type=\"button\" class=\"copy-code-btn flex items-center gap-1.5 px-3 py-1 text-xs font-bold bg-[#2f363d] text-gray-200 border-2 border-black dark:border-gray-500 rounded-lg shadow-neo-sm hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-none hover:bg-gray-700 transition-all cursor-pointer\" data-code=\"repeat%0A%20%20%7Bperintah%20yang%20akan%20dijalankan%7D%0Auntil%20(%7Bkondisi%7D)%3B\" title=\"Salin kode\">\n      \u003Csvg class=\"w-3.5 h-3.5 copy-icon-svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n        \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Cspan class=\"copy-text\">Copy\u003C\u002Fspan>\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"code-block-content p-4 overflow-x-auto text-sm font-mono leading-relaxed bg-[#24292e]\">\n    \u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\">\u003Ccode>repeat\n  {perintah yang akan dijalankan}\nuntil ({kondisi});\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>Oke supaya lebih paham, kita lanjut dengan membuat program sederhana menggunakan REPEAT UNTIL loop.\u003C\u002Fp>\n\u003Ch2 id=\"contoh-penggunaan-repeat-until-loop-pada-pascal\">Contoh Penggunaan REPEAT UNTIL loop pada Pascal\u003C\u002Fh2>\n\u003Cp>Pada contoh kali ini kita akan coba membuat program untuk mengeluarkan output bilangan kelipatan 2 dengan mengunakan REPEAT UNTIL loop. Silahkan ketikkan kode berikut.\u003C\u002Fp>\n\n\u003Cdiv class=\"code-block-wrapper my-6 not-prose rounded-xl border-2 border-black dark:border-gray-600 shadow-neo overflow-hidden bg-[#24292e] text-[#e1e4e8] transition-all\">\n  \u003Cdiv class=\"code-block-header flex items-center justify-between px-4 py-2.5 bg-[#1f2428] border-b-2 border-black dark:border-gray-600 font-mono text-xs font-bold text-gray-300 select-none\">\n    \u003Cdiv class=\"flex items-center gap-2\">\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ff5f56] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">PASCAL\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cbutton type=\"button\" class=\"copy-code-btn flex items-center gap-1.5 px-3 py-1 text-xs font-bold bg-[#2f363d] text-gray-200 border-2 border-black dark:border-gray-500 rounded-lg shadow-neo-sm hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-none hover:bg-gray-700 transition-all cursor-pointer\" data-code=\"program%20WhileDoLoop%3B%0Auses%20crt%3B%0Avar%0A%20%20i%3A%20integer%3B%0Abegin%0A%20%20clrscr%3B%0A%20%20i%20%3A%3D%202%3B%0A%20%20writeln('Bilangan%20kelipatan%202')%3B%0A%20%20repeat%0A%20%20%20%20write(i%2C%20'%2C%20')%3B%0A%20%20%20%20i%20%3A%3D%20i%2B2%3B%20%2F%2F%20menambah%20i%20sebanyak%202%0A%20%20until(i%20%3E%20100)%3B%20%2F%2F%20perulangan%20sampai%20i%20lebih%20dari%20100%0A%20%20readln%3B%0Aend.\" title=\"Salin kode\">\n      \u003Csvg class=\"w-3.5 h-3.5 copy-icon-svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n        \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Cspan class=\"copy-text\">Copy\u003C\u002Fspan>\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"code-block-content p-4 overflow-x-auto text-sm font-mono leading-relaxed bg-[#24292e]\">\n    \u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\">\u003Ccode>program WhileDoLoop;\nuses crt;\nvar\n  i: integer;\nbegin\n  clrscr;\n  i := 2;\n  writeln('Bilangan kelipatan 2');\n  repeat\n    write(i, ', ');\n    i := i+2; \u002F\u002F menambah i sebanyak 2\n  until(i &gt; 100); \u002F\u002F perulangan sampai i lebih dari 100\n  readln;\nend.\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>Silahkan kalian jalankan, maka kurang lebih outputnya akan seperti ini.\u003C\u002Fp>\n\n\u003Cdiv class=\"code-block-wrapper my-6 not-prose rounded-xl border-2 border-black dark:border-gray-600 shadow-neo overflow-hidden bg-[#24292e] text-[#e1e4e8] transition-all\">\n  \u003Cdiv class=\"code-block-header flex items-center justify-between px-4 py-2.5 bg-[#1f2428] border-b-2 border-black dark:border-gray-600 font-mono text-xs font-bold text-gray-300 select-none\">\n    \u003Cdiv class=\"flex items-center gap-2\">\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ff5f56] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">TEXT\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cbutton type=\"button\" class=\"copy-code-btn flex items-center gap-1.5 px-3 py-1 text-xs font-bold bg-[#2f363d] text-gray-200 border-2 border-black dark:border-gray-500 rounded-lg shadow-neo-sm hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-none hover:bg-gray-700 transition-all cursor-pointer\" data-code=\"Bilangan%20kelipatan%202%0A2%204%206%208%20...%2098%20100\" title=\"Salin kode\">\n      \u003Csvg class=\"w-3.5 h-3.5 copy-icon-svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n        \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Cspan class=\"copy-text\">Copy\u003C\u002Fspan>\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"code-block-content p-4 overflow-x-auto text-sm font-mono leading-relaxed bg-[#24292e]\">\n    \u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\">\u003Ccode>Bilangan kelipatan 2\n2 4 6 8 ... 98 100\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>Pada program tersebut perintah \u003Ccode>write(i, &#39; &#39;)\u003C\u002Fcode> dijalankan sebanyak 50 kali karena variable i ditambah 2 setiap perulangannya. Setelah variable i lebih dari 100 maka perulangan akan berhenti dan program selesai.\u003C\u002Fp>\n\u003Cp>Sekarang coba kalian ubah sedikit kondisinya menjadi sebagai berikut.\u003C\u002Fp>\n\n\u003Cdiv class=\"code-block-wrapper my-6 not-prose rounded-xl border-2 border-black dark:border-gray-600 shadow-neo overflow-hidden bg-[#24292e] text-[#e1e4e8] transition-all\">\n  \u003Cdiv class=\"code-block-header flex items-center justify-between px-4 py-2.5 bg-[#1f2428] border-b-2 border-black dark:border-gray-600 font-mono text-xs font-bold text-gray-300 select-none\">\n    \u003Cdiv class=\"flex items-center gap-2\">\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ff5f56] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">PASCAL\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cbutton type=\"button\" class=\"copy-code-btn flex items-center gap-1.5 px-3 py-1 text-xs font-bold bg-[#2f363d] text-gray-200 border-2 border-black dark:border-gray-500 rounded-lg shadow-neo-sm hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-none hover:bg-gray-700 transition-all cursor-pointer\" data-code=\"....%0A%20%20until%20(i%20%3E%3D%20100)%3B%0A....\" title=\"Salin kode\">\n      \u003Csvg class=\"w-3.5 h-3.5 copy-icon-svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n        \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Cspan class=\"copy-text\">Copy\u003C\u002Fspan>\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"code-block-content p-4 overflow-x-auto text-sm font-mono leading-relaxed bg-[#24292e]\">\n    \u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\">\u003Ccode>....\n  until (i &gt;= 100);\n....\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>Kalau sudah coba kalian jalankan. Jika kalian perhatikan, hasil outpunya tidak akan sampai 100, hanya sampai angka 98 saja. Kira kira kenapa?\u003C\u002Fp>\n\u003Cp>Ini karena saat nilai variable i sudah mencapai angka 100 perulangan telah berhenti. karena \u003Ccode>100 &gt;= 100\u003C\u002Fcode> menghasilkan value \u003Ccode>true\u003C\u002Fcode>. Ini perlu diperhatikan dalam penulisan kondisi, karena jika terjadi kesalahan maka logika program juga akan ikut salah.\u003C\u002Fp>\n\u003Cp>Oh iya, perulangan REPEAT UNTIL ini juga dapat menghasilkan infinite loop, apabila logikanya selalu bernilai false. Contohnya saja.\u003C\u002Fp>\n\n\u003Cdiv class=\"code-block-wrapper my-6 not-prose rounded-xl border-2 border-black dark:border-gray-600 shadow-neo overflow-hidden bg-[#24292e] text-[#e1e4e8] transition-all\">\n  \u003Cdiv class=\"code-block-header flex items-center justify-between px-4 py-2.5 bg-[#1f2428] border-b-2 border-black dark:border-gray-600 font-mono text-xs font-bold text-gray-300 select-none\">\n    \u003Cdiv class=\"flex items-center gap-2\">\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ff5f56] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#ffbd2e] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"w-3 h-3 rounded-full bg-[#27c93f] border border-black\u002F40 inline-block\">\u003C\u002Fspan>\n      \u003Cspan class=\"ml-2 font-mono font-bold text-xs uppercase tracking-wider text-gray-300\">PASCAL\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cbutton type=\"button\" class=\"copy-code-btn flex items-center gap-1.5 px-3 py-1 text-xs font-bold bg-[#2f363d] text-gray-200 border-2 border-black dark:border-gray-500 rounded-lg shadow-neo-sm hover:translate-x-0.5 hover:translate-y-0.5 hover:shadow-none hover:bg-gray-700 transition-all cursor-pointer\" data-code=\"....%0A%20%20until%20(false)%3B%20%2F%2F%20akan%20menghasilkan%20infinite%20loop%0A....\" title=\"Salin kode\">\n      \u003Csvg class=\"w-3.5 h-3.5 copy-icon-svg\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n        \u003Cpath stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\">\u003C\u002Fpath>\n      \u003C\u002Fsvg>\n      \u003Cspan class=\"copy-text\">Copy\u003C\u002Fspan>\n    \u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"code-block-content p-4 overflow-x-auto text-sm font-mono leading-relaxed bg-[#24292e]\">\n    \u003Cpre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\">\u003Ccode>....\n  until (false); \u002F\u002F akan menghasilkan infinite loop\n....\u003C\u002Fcode>\u003C\u002Fpre>\n  \u003C\u002Fdiv>\n\u003C\u002Fdiv>\u003Cp>Jadi selalu ingat untuk memberikan perintah logika agar tidak terjadi infinite loop hehe... :D\u003C\u002Fp>\n\u003Cp>Seperti biasanya, silahkan kalian bereksperimen dengan mengubah variable dan kondisi perulangannya. Selamat mencoba...\u003C\u002Fp>\n\u003Ch2 id=\"penutup\">Penutup\u003C\u002Fh2>\n\u003Cp>Cukup sekian untuk tutorial kali ini, semoga bermanfaat :D pada tutorial selanjutnya kita akan kembali lagi membahas seputar percabangan seperti IF ELSE yang pernah kita bahas sebelumnya. Namun kali ini akan menggunakan metode yang lain yaitu \u003Ca href=\"https:\u002F\u002Finvasikode.com\u002Fcase-of-pascal\u002F\">percabangan dengan kondisi CASE OF\u003C\u002Fa>.\u003C\u002Fp>\n","",[211,230,243,256,269,290],{"id":212,"title":213,"title_en":21,"slug":214,"excerpt":215,"excerpt_en":21,"has_translation":15,"published_at":216,"reading_time":217,"hidden_from_listing":15,"tags":218,"thumbnail_image":21,"og_image":221,"series":222,"authors":227},133,"Python Strings: the Badge That Only Worked for One Name","python-strings","The badge script printed the right name for the person who wrote it and the wrong name for everybody else. Slicing counts characters, and a name is words.","2026-10-28T13:00:00.000Z",6,[219,220],"python","string","\u002Fog\u002Fpython-strings.png",{"id":223,"title":224,"title_en":225,"slug":226},30,"Koleksi dan String","Collections and Strings","python-collections",[228],{"authors_id":229},{"id":113,"name":114,"slug":115,"role":116,"profile_picture":21},{"id":231,"title":232,"title_en":21,"slug":233,"excerpt":234,"excerpt_en":21,"has_translation":15,"published_at":235,"reading_time":217,"hidden_from_listing":15,"tags":236,"thumbnail_image":21,"og_image":238,"series":239,"authors":240},132,"Python Tuples: Why All Three Points Are the Same Point","python-tuples","Three points walk into a loop and come out identical. The list was never copied three times; the name was. A tuple makes that bug impossible.","2026-10-28T12:00:00.000Z",[219,237],"tuple","\u002Fog\u002Fpython-tuples.png",{"id":223,"title":224,"title_en":225,"slug":226},[241],{"authors_id":242},{"id":113,"name":114,"slug":115,"role":116,"profile_picture":21},{"id":244,"title":245,"title_en":21,"slug":246,"excerpt":247,"excerpt_en":21,"has_translation":15,"published_at":248,"reading_time":217,"hidden_from_listing":15,"tags":249,"thumbnail_image":21,"og_image":251,"series":252,"authors":253},131,"Python Sets: the Duplicate That Keeps Coming Back","python-sets","A de-duplication loop that works on clean data leaves four tags where there should be two. The bug is case, and the fix is a `set`.","2026-10-28T11:00:00.000Z",[219,250],"set","\u002Fog\u002Fpython-sets.png",{"id":223,"title":224,"title_en":225,"slug":226},[254],{"authors_id":255},{"id":113,"name":114,"slug":115,"role":116,"profile_picture":21},{"id":257,"title":258,"title_en":21,"slug":259,"excerpt":260,"excerpt_en":21,"has_translation":15,"published_at":261,"reading_time":217,"hidden_from_listing":15,"tags":262,"thumbnail_image":21,"og_image":264,"series":265,"authors":266},130,"Python Dictionaries: the Key That Isn't There","python-dictionary","A word counter dies the first time it meets a word twice. The fix is one line; what takes longer is knowing which of a dict's three lookups to reach for.","2026-10-28T10:00:00.000Z",[219,263],"dictionary","\u002Fog\u002Fpython-dictionary.png",{"id":223,"title":224,"title_en":225,"slug":226},[267],{"authors_id":268},{"id":113,"name":114,"slug":115,"role":116,"profile_picture":21},{"id":270,"title":271,"title_en":272,"slug":273,"excerpt":274,"excerpt_en":275,"has_translation":12,"published_at":276,"reading_time":14,"hidden_from_listing":15,"tags":277,"thumbnail_image":21,"og_image":284,"series":285,"authors":287},129,"Biar RAG nggak kena 504: pisahin jalur query dan ingestion","So Your RAG Stops Hitting 504: Split the Query Path From Ingestion","rag-pisah-jalur-query-dan-ingestion","Satu service RAG yang merangkap parsing dan menjawab kueri bakal tumbang pas ada yang upload PDF 200 halaman. Obatnya dua jalur dan satu queue.","One RAG service that both parses uploads and answers queries will fall over the moment someone uploads a 200-page PDF. The cure is two paths and one queue.","2026-10-22T01:30:00.000Z",[278,279,280,281,282,283],"rag","cloud-run","cloud-tasks","gcp","serverless","arsitektur","\u002Fog\u002Frag-pisah-jalur-query-dan-ingestion.png",{"id":286,"title":35,"title_en":36,"slug":37},8,[288],{"authors_id":289},{"id":113,"name":114,"slug":115,"role":116,"profile_picture":21},{"id":291,"title":292,"title_en":293,"slug":294,"excerpt":295,"excerpt_en":296,"has_translation":12,"published_at":297,"reading_time":217,"hidden_from_listing":15,"tags":298,"thumbnail_image":21,"og_image":305,"series":306,"authors":307},128,"Linear atau graf: cara mengatur banyak agent tanpa loop abadi","Linear or Graph: How to Run Many Agents Without an Eternal Loop","multi-agen-linear-atau-grafik","Satu agent dengan dua puluh tool gampang kacau. Begitu beberapa agent saling revisi, kamu butuh graf yang mendukung cycle dan angka yang membuatnya berhenti.","One agent with twenty tools gets messy fast. Once several agents revise each other, you need a graph that allows cycles and a number that makes it stop.","2026-10-21T16:05:00.000Z",[299,300,301,302,303,304],"multi-agent","langgraph","autogen","orkestrasi","checkpoint","llm","\u002Fog\u002Fmulti-agen-linear-atau-grafik.png",{"id":286,"title":35,"title_en":36,"slug":37},[308],{"authors_id":309},{"id":113,"name":114,"slug":115,"role":116,"profile_picture":21},[311,314,317,320],{"text":312,"depth":81,"id":313},"Pengertian REPEAT UNTIL loop pada Pascal","pengertian-repeat-until-loop-pada-pascal",{"text":315,"depth":81,"id":316},"Format Penulisan REPEAT UNTIL loop pada Pascal","format-penulisan-repeat-until-loop-pada-pascal",{"text":318,"depth":81,"id":319},"Contoh Penggunaan REPEAT UNTIL loop pada Pascal","contoh-penggunaan-repeat-until-loop-pada-pascal",{"text":321,"depth":81,"id":322},"Penutup","penutup",1793295835021]