Урок 9 Цикли с условие или брояч.
Всички задачи, които реализирахме с SmallBasic до сега се изпълняват еднократно. Ако потребителят иска да изпълни отново алгоритъма, той трябва да стартира отново програмния код.
От теорията за алгоритмите знаем, че когато в него са включени определен брой еднотипни операции е необходимо да използваме друг вид алгоритмични структури, наречени цикли.
Характерно за тях е,че те имат обособени 4 части“
Едно изпълнение на тялото на цикъла се нарича итерация.
Ако броят на повторенията на тялото е предварително известен циклите се наричат индуктивни, а ако не е известен те са итерактивни.
В циклите с условие казахме, че проверката за край може да стои след тялото или преди него, докато в циклите с брояч те са заедно.
В зависимост от мястото на условието имаме цикли с предусловие /условието е преди тялото/ и цикли с постусловие /условието е след тялото. ,
Когато броят на действията, който се повтарят е предварително известен, по удобно средство за програмна реализация на алгоритъма е трети вид цикъл - цикъл с брояч.
Ще разгледаме програмни реализации чрез трите вида цикли.
Задача: Напишете програма която извежда в текстовия прозорец естествените числа от 1 до 20.
Решението на задачата е чрез неявен цикъл с условен преход. В инициализацията освен определяне стойност на брояча, поставяме и етикет, с който отбелязваме от къде започва повторението на действията / в случая действието е само едно/.
Резултатът от изпълнението е :
Нека решим задачата с явен цикъл с брояч. Ще променим само извеждането. То ще стане последователно, на един ред.
Въвеждаме следния код:
For i=1 To 20
TextWindow.Write(i+ " ")
EndFor
Нашият програмен код вече заема 3 реда.В първия определяме началната и крайната стойност на брояча, във втория се намира тялото на цикъла като за да извежда числата на един ред използваме операцията Write и за да не се залепят числата оставяме един празен интервал, а третия ред определя къде да продължи програмата след като се изпълнят указаните в първия ред повторения, т.е. той определя къде свършва тялото.
След изпълнение на програмата поучихме следното:
Нека направим малка промяна в условието на задачата. Да напишем програма, която извежда числата от 100 до 1 през 10 .
Програмият код ще бъде
For i=100 To 1 Step -10
TextWindow.WriteLine(i)
EndFor
Сега броячът е със намаляваща стъпка 10. Когато стъпката е единица, тя не се посочва.
След изпълнение на програмата поучихме следното:
Сега ще решим задачата с цикъл, в който условието за край седи преди тялото.
i=100
While (i>1)
TextWindow.WriteLine(i)
i=i-10
EndWhile
Така написания код ще даде същия резултат. Цикълът While се изпълнява докато условието е вярно. Когато броячът получи стойност по-малка от 1, действието спира и управлението се предава на реда след EndWhile. В нашия случай това е края на програмата.
Ето и друг вариант на решението
i=100
et:
If I>1 Then
TextWindow.WriteLine(i)
i=i-10
Goto et
EndIf
Тук условието е преди тялото на цикъла, но се използва отново етикет, който да указва мястото, от което да се започне повтарянето. . За да се избегне получаване на безкраен цикъл, трябва в тялото на цикъла да имате поне едно действие, което да променя стойността на условието, което се проверява от цикъла.
Нека да напишем програма, която да извежда таблицата за умножение с 5:
TextWindow.WriteLine("Таблица за умножение“)
num = 5
For a = 1 to 10
TextWindow.WriteLine(a + " x " + num + " = " + a * num)
EndFor
С изпълнението на програмата ще получим следното:
Ще решим следните задачи:
1.Променете програмния код така, че потребителя да въвежда с кое число желае да изведе таблица за умножение
TextWindow.WriteLine("Таблица за умножение")
TextWindow.Write("въведете число ")
num= TextWindow.ReadNumber()
For a = 1 to 10
TextWindow.WriteLine(a + " x " + num + " = " + a * num)
EndFor
В ред 2 извеждаме съобщение за потребителя, че трябва да въведе число, а в ред 3 го съхраняваме в променлива с име num. Ако потребителят въведе 5, резултатът ще бъде същ. Ако потребителят въведе 7 ще бъде получено:
2. Променете програмния код така, че потребителя да може да получи повече от една таблици за умножение.
За да осигурим възможност програмата да извежда и друга таблица, ще използваме цикъл, който ще се изпълнява докато желанието на потребителя е такова
Нека направим още малко промени в нашия код.
Например – всяка нова таблица да се появява в отделен прозорец. И потребителя да потвърди с въвеждането на малка буква у
За да бъде всяка следваща таблица в нов прозорец е необходимо да изчистим текстовия прозорец след While.
В трети ред можем да добавим логически израз OR т.е.
While (otg="Y") Or (otg="y") и програмата ще работи, независимо от това какво въвежда потребителя – У или у.
Задачи са самостоятелна работа
1. Напишете програма която намира xn , като потребителя въвежда стойности за х и n.
2. Напишете програма, която намира сумата от първите n естествени числа, n се въвежда от клавиатурата.
3. Съставете програма, която отпечатва съобщението „Това е ШЕГА“ 10 пъти.
4. Съставете програма за пресмятане средно аритметичното и средно геометричното на N числа.
5. Решете задачата от урок 6 за генериране на 6 случайни числа от 1 до 49 с използването на цикъл.
След този урок вие трябва да можете :