ечим
масала: олдинги ёзилган коддан такроран фойдаланиш.
модель (маълумотлар ва уларга ишлов бериш услублари)
Тақдим этиш ( қўлловчи билан интерфейс)
ечим
Тақдим этиш ( қўлловчи билан интерфейс)
Модель и тақдимот
модель
тақдимот
тақдимот
ечим
Масала: доллар курси ўзгариши –ҳақидаги маълумотларни сақлаш ва улардан фойдаланиш.
модель (массив, минимум ва максимумни излаш, олдиндан айтиш)
тақдимот (формулалар, диаграммалар, графиклар, жадваллар)
x
y
z
1
1
4
2
2
5
3
3
6
Модель и тақдимот
масала: арифсктик ифода қийматини ҳисоблаш:
Бутун сонлар
Арифметик амал белгилари + - * /
Модель:
Белгилар сатри
Ҳисоблаш алгоритми:
k = охирги амал тартиб рақами n1 = чап томонининг ыиймати n2 = ўнг томонининг ыиймати Натижа = амал(n1, n2) 22 + 13 – 3 * 8 n1 n2 k функция lastOp ( 6-боб)
Рекурсия!
!
Нима етишмайди?
?
Модель
k = охирги амал тартиб рақами if k < 0: натижа = сатр сонга else: n1 = чап томонининг ыиймати n2 = ўнг томонининг ыиймати Натижа = амал(n1, n2) Псевдокод:
def priority ( op ): if op in "+-": return 1 if op in "*/": return 2 return 100 Амаллар даражалари: def lastOp ( s ): minPrt = 50 # 2 ва 100 орасидаги сон k = -1 for i in range(len(s)): if priority(s[i]) <= minPrt: minPrt = priority(s[i]) k = i return k Охирги амал тартиб рақами: <= Нега <=?
?
model.py: Calc priority lastOp Модуль:
if Enter клавиши босилган бўлса: ифода ҳисоблансин натижа рўйхат бошига қўшилсин if ифода очилувчи рўйхатда бўлмаса: у очилувчи рўйхатга киритилсин Enter клавиши босилишининг ишлов берувчиси : def doCalc ( event ): ... Ишлов берувчини ўрнатиш: Input.bind ( "", doCalc ) «боғлансин»
Enter клавиши
Enter клавиши босилишининг ишлов берувчиси :
from model import Calc def doCalc ( event ): expr = Input.text # ифода ўқилсин x = Calc ( expr ) # ҳисоблансин Answers.insert ( 0, expr + "=" + str(x) ) if not Input.findItem ( expr ): Input.addItem ( expr ) Рўйхатда бўлмаса
Топшириқ
«A»: Дастурни шундай ўзгартиринг-ки у ҳақиқий турдаги сонли ифодаларнинг қийматини ҳисоблайдиган бўлсин.
Топшириқ
«B»: Дастурни шундай ўзгартиринг-ки у қавсли сонли ифодаларни ҳисоблайоладиган бўлсин.
Топшириқ
«С»: Дастурни шундай ўзгартиринг-ки у abs, sin, cos, sqrt.функцияларни ўз ичига олган сонли ифодаларни ҳисоблайоладиган бўлсин.
Топшириқ
«D»: Дастурни шундай ўзгартиринг-ки унинг барча мантиқи TCalculator синфида ва. дастурнинг умумий кўриниши қуйидагича бўлсин.
class TCalculator(TApplication): # здесь должно быть описание класса app = TCalculator() app.run() Нотўғри ифода киритил-ганда хато ҳақидаги хабар чиқарилсин
tkinter.messages моду-лидаги. showerror функция-сидан фойдаланинг.
Топшириқ
«D»: (давоми) Барча ҳисоблашлар натижалари ва хато ҳақидаги хабарлар results.txt: файлига ёзилади
... sin(1.2)*sqrt(1.7)=1.215230290196084 Нотўғри ифода sin(1.2)*sqrt(1.7)qwe Файлга ёзиш процедурасини Tcalculator синфининг log услуби сифатида расмийлаштиринг
Калькулятор
Мустақил!
!
Фильм тугади
ПОЛЯКОВ Константин Юрьевич д.т.н., учитель информатики
ГБОУ СОШ № 163, г. Санкт-Петербург
kpolyakov@mail.ru ЕРЕМИН Евгений Александрович к.ф.-м.н., доцент кафедры мультимедийной дидактики и ИТО ПГГПУ, г. Пермь
eremin@pspu.ac.ru