Цикли в Java
Цикълът е част от програма, която се повтаря много пъти.
В java има два типа цикли: типът "while" и типът "n-times".
Първият тип "до" е предназначен да повтаря някакво действие, докато не бъде изпълнено дадено условие. Пример: увеличете число с 5, докато стане трицифрено.
Вторият тип "n-times" е предназначен да повтаря някои действия предварително определен брой пъти. Пример: умножете число само по себе си 4 пъти.
Цикъл while (оператори while и do...while)
Операторът while повтаря посочените действия, докато параметърът му е верен.
Например, такъв цикъл ще бъде изпълнен 4 пъти и на екрана ще се покаже "1 2 3 4":
Такъв цикъл никога няма да бъде изпълнен и нищо няма да се покаже на екрана:
Такъв цикъл ще се изпълнява за неопределено време и на екрана ще се покаже "1 2 3 4 5 6 7 ...":
Условието, което определя дали цикълът ще се повтори отново, се проверява преди всяка стъпка от цикъла, включително преди първата. Казват, че има предварителна проверка на състоянието.
Има цикъл while с условие след проверка. За да го напишете, се използва конструкция от do ... while изрази.
Такъв цикъл ще бъде изпълнен 4 пъти и на екрана ще се покаже "2 3 4 5":
Такъв цикъл ще бъде изпълнен 1 път и на екрана ще се покаже "2":
Тялото на цикъла do...while се изпълнява поне веднъж. Този оператор е удобен за използване, когато някакво действие в програмата трябва да се извърши поне веднъж, но при определени условия ще трябва да се повтори многократно.
Вижте следната програма (тя отгатва произволно цяло число от интервала [1; 10] и моли потребителя да го познае, като въвежда опции от клавиатурата, докато потребителят познае числото, програмата ще му кажеподкана, отчитаща повече или по-малко познато число от въведеното от потребителя):
Направете следните промени в програмата:
Програмата трябва да преброи броя опити, необходими на потребителя, за да познае числото. И накрая да отчете колко опита са направени.
Програмата трябва да измисля число не от сегмента [1;10], а цяло число от сегмента от [−10;10], с изключение на нулата. В същото време се опитайте да гарантирате, че разпределението на произволните числа, генерирани от програмата, е равномерно (т.е. в случай на изпадане на нула, тя не може просто да бъде заменена с друго число, например с 1, защото тогава 1 ще изпадне с два пъти по-голяма вероятност от останалите числа).
Програмата трябва да подкани потребителя, че е направил грешка в знака, ако програмата е познала положително число, а потребителят е въвел отрицателно. И обратно.
Тип цикъл "n-пъти" (изявление за)
Операторът for съдържа три параметъра. Първото се нарича инициализация, второто е условие за повторение, а третото е итерация.
В първия параметър обикновено се избира някаква променлива, с помощта на която ще се брои броят на повторенията на цикъла. Нарича се брояч. На брояча се дава някаква първоначална стойност (те показват от каква стойност ще се промени).
Във втория параметър е посочено някакво ограничение на брояча (те показват до каква стойност ще се промени).
Третият параметър определя израз, който променя брояча след всяка стъпка от цикъла. Обикновено това е увеличение или намаление, но можете да използвате всеки израз, където на брояча ще бъде присвоена нова стойност.
Преди първата стъпка от цикъла на брояча се присвоява начална стойност (извършва се инициализация). Това се случва само веднъж.
Преди всяка стъпкацикъл (но след инициализация) условието за повторение се проверява, ако е вярно, тогава тялото на цикъла се изпълнява още веднъж. В същото време тялото на цикъла може да не се изпълни дори веднъж, ако условието е невярно по време на първата проверка.
След завършване на всяка стъпка от цикъла и преди началото на следващата (и, следователно, преди проверка на условието за повторение), се извършва итерация.
Следната програма отпечатва числа от 1 до 100 на екрана:
Следната програма отпечатва числа от 10 до −10 на екрана:
Представената програма показва нечетни числа от 1 до 33:
Представената програма ще изчисли сумата от елементите на фрагмента на последователността 2, 4, 6, 8, ... 98, 100. И така:
Следната програма ще повиши числото от променливатаa на естествена степен от променливатаn :
Представената програма ще покаже първите 10 елемента от редицата 2n+2, където n=1, 2, 3…:
Представената програма ще покаже първите 10 елемента от редицата 2an−1+3, където a1=3:
В един цикъл можете да зададете няколко брояча наведнъж. В този случай няколко израза в итерация и в инициализация са разделени със запетаи. Можете да посочите само едно условие за повторение, но то може да бъде израз, съдържащ няколко брояча наведнъж.
Представената програма ще покаже първите 10 елемента от редицата 2an−1–2, където a1=3:
Представената програма ще покаже следната последователност "0 -1 -4 -9 -16 -25":
Ранно прекъсване на цикъла (изявление за прекъсване)
Както цикълът тип "while", така и цикълът тип "n-times" могат да бъдат прекратени предсрочно, ако операторътbreak бъде извикан в тялото на цикъла. В този случай ще настъпи моментално излизане от цикъла, дори текущата стъпка няма да бъде завършена (т.е. ако след паузаса присъствали други изявления, те няма да бъдат изпълнени).
В резултат на следния пример на екрана ще се показват само числата "1 2 3 4 End":
Когато програмата изпълни цикъла за пети път (влиза в цикъла с брояч, равен на 5), тя незабавно ще бъде проверена и условието, при което операторът break ще бъде изпълнен, ще бъде вярно. Останалата част от тялото на цикъла (изход към екрана) вече няма да се произвежда: програмата незабавно ще продължи към изпълнението на операциите, посочени след цикъла и след това.
С помощта на оператора break можете да прекъснете съзнателно безкраен цикъл. Пример (екранът ще покаже „100 50 25 12 6 3 1 0“ и след това цикълът ще спре):
Има смисъл операторът break да се извиква само когато възникне някакво условие, в противен случай цикълът ще бъде прекратен предсрочно на първата си стъпка.
В горния пример изходът в цикъла никога няма да бъде показан на екрана и когато променливатаa се покаже след цикъла, се оказва, че стойността му никога не се е променяла, т.е. ще се покаже “a=25” (и нищо друго).
Забележете също, че променливата е декларирана преди началото на цикъла. Когато една променлива се декларира в параметрите на цикъла, тя се оказва недостъпна извън него, а в случая се изискваше друго - да се разбере каква стойност ще има броячът след края на цикъла.
Напишете програма, която извежда всички четирицифрени числа в редицата 1000 1003 1006 1009 1012 1015 ….
Напишете програма, която показва първите 55 елемента от редицата 1 3 5 7 9 11 13 15 17 ….
Напишете програма, която извежда всички неотрицателни елементи от редицата 90 85 80 75 70 65 60 ….
Напишете програма, която показва първите 20 елемента от редицата 2 4 8 16 32 64 128 ….
Отпечатайте всички членове на редицата 2an-1–1, където a1=2, които са по-малки от 10000.
Отпечатайте всички двуцифрени членове на редицата 2an-1+200, където a1= -166.
Напишете програма, която изчислява факториела на естествено число n, което потребителят въвежда от клавиатурата.
Показване на всички положителни делители на естествено число, въведено от потребителя от клавиатурата.
Проверете дали естественото число, въведено от потребителя от клавиатурата, е просто. Опитайте се да не извършвате ненужни действия (например, след като сте намерили поне един нетривиален делител, вече е ясно, че числото е съставно и не е необходимо да продължавате проверката). Също така имайте предвид, че най-малкият делител на естествено число n, ако изобщо съществува, задължително се намира в сегмента [2; √n].
Напишете програма, която показва първите 12 елемента от редицата 2an-2-2, където a1=3 и a2=2.
Покажете първите 11 члена на редицата на Фибоначи. Напомняме ви, че първият и вторият член на редицата са равни на единици, а всеки следващ е сбор от двата предходни.
За естествено число, въведено от потребителя от клавиатурата, изчислете сумата от всичките му цифри (не се знае предварително колко цифри ще има в числото).
В град N пътуването с трамвай се извършва на хартиени билети за откъсване. Всяка седмица трамвайното депо поръчва свитък с билети от местната печатница с номера от 000001 до 999999. „Щастлив“ билет е този, при който сборът от първите три цифри на номера е равен на сбора от последните три цифри, както например на билети с номера 003102 или 567576. Трамвайното депо реши да подари сувенир на собственика на всеки късметлийски билет и сега обмисля колко сувенири ще са необходими. Използвайте програмата, за да преброите колко късметлийски билетав една ролка?
City N разполага с голям склад с 50 000 различни рафта. За удобство на работниците, ръководството на склада реши да поръча плоча с номер от 00001 до 50000 за всеки рафт в местната печатница, но когато плочите бяха отпечатани, се оказа, че печатната преса не отпечата номер 2 поради неизправност, така че всички плочи, които съдържат една или повече двойки в числата (например 00002 или 20202), трябва да бъдат отпечатани повторно. Напишете програма, която ще преброи колко от тези грешни табели са били в дефектна партида.
Електронният часовник показва времето във формат от 00:00 до 23:59. Изчислете колко пъти на ден се случва да се покаже симетрична комбинация отляво на дебелото черво за тази отдясно на дебелото черво (например 02:20, 11:11 или 15:51).
В американската армия числото 13 се смята за нещастно, а в японската - 4. Преди международните учения от Щаба на Българската армия решиха да изключат номерата на военната техника, съдържащи числата 4 или 13 (например 40123, 13313, 12345 или 13040), за да не затрудняват чуждите колеги. Ако армията има на разположение 100 000 единици военна техника и всяка бойна машина има номер от 00001 до 99999, тогава колко номера ще трябва да бъдат изключени?