Сторінка 1

суботу, 28 січня 2017 р.

Складання та виконання алгоритмів з повтореннями та розгалуженнями для опрацювання величин

Увага! Під час роботи з комп'ютером дотримуйтеся правил безпеки і санітарно-гігієнічних норм.
Види навчальної діяльності
Обговорюємо
      1. Як описати алгоритмічну структуру розгалуження мовами програмування Free Pascal та Python?
      2. Як описати алгоритмічну структуру повторення мовами програмування Free Pascal та Python?
      3. Як описати операції над величинами різних типів мовами програмування Free Pascal та Python?
      4. Для чого на електронних формах використовують елементи управління перемикач, прапорець, список?
      Виконуємо самостійно
      • Завдання 1. В Україні за споживання електроенергії визначено такий порядок оплати залежно від спожитого обсягу: вартість 1 кВт при споживанні електроенергії до 100 кВт за місяць – 0,71 грн., від 100 кВт до 600 кВт – 1,29 грн., понад 600 кВт – 1,64 грн. Деяким споживачам надається пільговий обсяг безоплатного користування електроенергію, наприклад, 30 кВт. Якщо така пільга є, то її віднімають від спожитого обсягу, а далі розрахунок здійснюється за прийнятими тарифами. Розробіть у середовищі програмування Lazarus проект Оплата за електроенергію, у якому користувач вносить у текстове поле обсяг спожитої електроенергії, та позначає за допомогою елементів управління (визначте самостійно) наявність пільги. Після натиснення кнопки Розрахувати отримує у вікні повідомлення суми для оплати за електроенергію. Орієнтовний вигляд екранної форми і результати виконання програми у вікнах повідомлень:
        Проаналізуйте програмний код, де враховується пільговий обсяг електроенергії:
      • procedure TForm1.Button1Click(Sender: TObject);
        var result, outgo, privilege, price1, price2, price3: real;
        begin
             privilege:=30;
             price1:=0.71;
             price2:=1.29;
             price3:=1.64;
             outgo:=StrToFloat(Edit1.Text);
             if CheckBox1.Checked = True then outgo:=outgo-privilege;
             if outgo < 100 then
                result:=price1*outgo
             else if (outgo >= 100) and (outgo < 600) then
                result:=price2*outgo
             else
                result:=price3*outgo;
             MessageDlg('Сума для оплати за електроенергію:' + #13#10 + FloatToStr(result) + ' грн.', mtInformation, [mbOk], 0);
        end;
      • Завдання 2У магазині на деякі товари (молоко, фрукти, овочі, печиво) прийняли систему знижок: товар, який не проданий за тиждень, наступного тижня дешевшає на 10%, ще через тиждень – на 20% і т.д. Розробіть у середовищі Lazarus проект Знижки, у якому користувач обирає товар й у текстове поле вносить номер тижня покупки
        Після натиснення кнопки Розрахувати у вікні повідомлення – отримує ціну товару на дату покупки
        Візьміть до уваги, що відсотки знижки розраховуються, починаючи із другого тижня за формулою:
        Проаналізуйте рядки програмного коду, де вибираються товари, і як обчислюється ціна товару зі знижкою, в залежності від порядкового номера тижня:
      • procedure TForm1.Button1Click(Sender: TObject);
        var n, i: integer;
            price, p_milk, p_fruits, p_vegetables, p_cookies:real;
            result: string;
        begin
           n:=StrToInt(Edit1.Text);
           p_milk:=30;
           p_fruits:=55;
           p_vegetables:=25;
           p_cookies:=15;
           if ComboBox1.ItemIndex = 0 then
                  price:=p_milk
           else if ComboBox1.ItemIndex = 1 then
                  price:=p_fruits
           else if ComboBox1.ItemIndex = 2 then
                  price:=p_vegetables
           else
                  price:=p_cookies;
        
           if n >= 2 then
              begin
                 i:=2;
                 while i <= n do
                       begin
                            price:=price*(100-i*10)/100;
                            i:=i+1;
                       end;
                 result:='Ціна товару зі знижкою: ' + FloatToStr(price) + ' грн.' + #13#10 + 'на ' + IntToStr(n) + ' тижні.';
              end
           else
               result:='Ціна товару: ' + FloatToStr(price) + ' грн.' + #13#10 + 'Знижка відсутня.';
           MessageDlg(result, mtInformation, [mbOk], 0);
        end;
      • Завдання 3. Один дідусь у селі вирішив розводити кроликів. Він знає, що ще в ХІІІ ст. Леонардо Пізанський вивів формулу закону розмноження кроликів, яка визначає ряд чисел, що отримали назву чисел Фібоначчі: 1, 1, 2, 3, 5, 8… Можна помітити, що починаючи з третього числа, кожне наступне дорівнює сумі двох попередніх, тобто має місце формула: 
        Розробіть проект у середовищі програмування мовою Python, за яким після натиснення кнопки Розрахувати за введеним у текстове поле порядковим номером, що визначає послідовність етапу розмноження кроликів, у вікні повідомлення буде відображено відповідне число Фібоначчі. Наприклад, програма може мати такий вигляд екранної форми і відповідний результат:
        Скористуйтеся програмним кодом, поданим нижче, для аналізу роботи алгоритму повторення:
      • import tkinter
        from tkinter import ttk
        from tkinter import messagebox
        main = tkinter.Tk()
        main.title('Кролеферма')
        
        # створення об'єкта для отримання значення з текстового поля: Етап розведення кроликів
        n_var = tkinter.StringVar()
        
        # опрацювання події натиснення кнопки
        def button_click():
            
            # отримання значення введеного рядка Етап розведення кроликів і присвоєння змінній n
            n = int(n_var.get())
            
            fibonacci = 0
            fib1 = 1
            for i in range(n):
                fib2 = fib1
                fib1 = fibonacci
                fibonacci = fib1 + fib2
        
            # виведення повідомлення кількість кроликів на вибраному етапі розведення    
            tkinter.messagebox.showinfo('Число кроликів', str(fibonacci))
                
        #створення текстового напису Введіть номер тижня та його розміщення на головній формі
        label = tkinter.Label(text='Етап розведення кроликів')
        label.pack()
        
        #створення текстового поля Етап розведення кроликів та його розміщення на головній формі
        edit = tkinter.Entry(main, textvariable=n_var)
        edit.pack()
        
        #створення кнопки та розміщення об'єкта на головній формі
        button = tkinter.Button(main, text='Отримати число кроликів', command=button_click)
        button.pack()
        
        #запуск опрацювання подій програми
        main.mainloop()
      • Завдання 4Члени математичного гуртка ознайомились із поняттям факторіала числа – добутку натуральних чисел від 1 до даного числа: 
        Розробіть проект у середовищі програмування мовою Python, з допомогою якого можна буде порівняти значення факторіала числа та його квадрата. Спроектуйте інтерфейс екранної форми і вікна повідомлення (наприклад, як на зразку)
        і проаналізуйте програмний код для реалізації завдання:
      • import tkinter
        from tkinter import ttk
        from tkinter import messagebox
        main = tkinter.Tk()
        main.title('Порівняння')
        
        # створення об'єкта для отримання значення з текстового поля: Введіть число
        n_var = tkinter.StringVar()
        
        # опрацювання події натиснення кнопки
        def button_click():
            
            # отримання значення введеного рядка Етап розведення кроликів і присвоєння змінній n
            n = int(n_var.get())
            # початкове значення факторіала = 1
            factorial = 1
            # result - змінна для зберігання результатів порівнння, початкове значення - порожній рядок
            result = ''
            # знаходження факторіала введеного числа
            for i in range(2, n+1):
                factorial = factorial * i
            # порівняння квадрата і факторіала введеного числа 
            if factorial > n*n: 
                result = '>'
            elif factorial < n*n:
                result = '<'
            else:
                result = '='
            # виведення повідомлення про порівняння факторіала числа та його квадрата    
            tkinter.messagebox.showinfo('Порівняння', 'Факторіал числа дорівнює: ' + str(factorial) + '\nКвадрат числа дорівнює: ' + str(n*n) + '\nФакторіал числа ' + str(result) + ' Квадрат числа')
                
        #створення текстового напису Введіть число та його розміщення на головній формі
        label = tkinter.Label(text='Введіть число')
        label.pack()
        
        #створення текстового поля Введіть число та його розміщення на головній формі
        edit = tkinter.Entry(main, textvariable=n_var)
        edit.pack()
        
        #створення кнопки та розміщення об'єкта на головній формі
        button = tkinter.Button(main, text='Порівняти', command=button_click)
        button.pack()
        
        #запуск опрацювання подій програми
        main.mainloop()
      Домашнє завдання
      • Опрацювати підручник: §25 с. 170-177