Basic programming course: Lesson #6 Functions.steemCreated with Sketch.

in Ukraine on Steem7 months ago

Гарний був курс, особливо початківцям. Адже їм нерідко все дається важко, так як перший раз зі всім стикаються. А тут саме основам слід приділяти велике значення. Багато хто не любить псевдокод/алгоритми блок схеми. Але вони вкрай важливі, я сам з цим зіштовхнувся коли розв'язував складну задачу і довелося таки складати блок- схему.

image.png

Розкажіть про свій досвід роботи з програмуванням, це був ваш перший раз? Вам це здалося складним? Яка була ваша улюблена частина курсу?


В останні роки школи у нас з'явився предмет ОІОТ - основи інформатики і обчислювальної техніки, часто цей курс вівся без комп'ютерів, іноді з калькуляторами. А іноді з комп'ютерами. Моїй школі пощастило - в нас комп'ютери були. Мені, як і напевне всім, комп'ютери сподобалися. Дискети лише у вчителя, та й то лиш декілька ігр. А вмикаєш комп'ютер і одразу там Бейсик. То ж так я і познайомився з програмуванням. В ті часи не те що інтернету, книг не було. А якщо була книга -то якийсь один із сотень діалектів Бейсика. Та я ще в школі писав програми, психологічні тести, програма-тест з математики. Не скажу що складно, навпаки було легко. Легко було й в інституті, щоправда я вчився не на програміста, а на вчителя. Тому ми вчили це все не так глибоко. Та й мов тоді було не так багато. Найкраще, і мені найбільше подобається мова С. А от вже С++ давалася мені з труднощами, і сучасний її варіант доволі глибокий - але я вчу ії потроху.
В цьому курсі мені сподобалася третя частина. А, ще мені сподобалася програма PseInt - жаль лиш вона навіть не англомовна. В тертій частині, де мова йде про операції, особливо про логічні операції та логічні змінні. Цікавим біло завдання де треба було розв'язати задачу на логічних змінних а не на if

Додайте функції множення та ділення до калькулятора курсу. Поясніть, як ви це зробили.


#include <stdio.h>

double add(double number1, double number2);
double subtract(double number1, double number2);
double multiply(double number1, double number2);
double divide(double number1, double number2);

int main()
{
    double number1, number2;
    int choice;

    do
    {
        printf("+-----------------------+\n");
        printf("|   Simple Calculator   |\n");
        printf("+-----------------------+\n");
        printf("| 1. Add                |\n");
        printf("| 2. Subtract           |\n");
        printf("| 3. Multiply           |\n");
        printf("| 4. Divide             |\n");
        printf("| 5. Exit               |\n");
        printf("+-----------------------+\n");
        printf("Enter your choice: ");
        scanf("%d", &choice);

        if (choice >= 1 && choice <= 4)
        {
            printf("Enter two numbers: ");
            scanf("%lf %lf", &number1, &number2);
        }

        switch (choice)
        {
            case 1:
                printf("Result: %.2lf\n", add(number1, number2));
                break;
            case 2:
                printf("Result: %.2lf\n", subtract(number1, number2));
                break;
            case 3:
                printf("Result: %.2lf\n", multiply(number1, number2));
                break;
            case 4:
                if (number2 == 0)                
                    printf("Error: Division by zero is not allowed.\n");                
                else                
                    printf("Result: %.2lf\n", divide(number1, number2));                
                break;
            case 5:
                printf("Good bye...\n");
                break;
            default:
                printf("Invalid choice, please try again.\n");
        }
    } while (choice != 5);

    return 0;
}

double add(double number1, double number2)
{    return number1 + number2;  }

double subtract(double number1, double number2)
{    return number1 - number2;  }

double multiply(double number1, double number2)
{    return number1 * number2;  }

double divide(double number1, double number2)
{    return number1 / number2;  }

Перш за все я додав пункти меню для Множення та Ділення, далі в оператор вибору switch() я додав ще два випадки відповідно до пунктів меню. А потім я дописав дві функції. Після створення основної програми, додавання нових пунктів меню - доволі легко. Єдине що слід тепер перевіряти - це ділення на нуль.

99999999.gif

999900000.gif

ФІНАЛЬНИЙ ПРОЕКТ: Створення симулятора банкомату. Спочатку він повинен надіслати користувачеві запит на PIN-код доступу, цей PIN-код – 12345678. Після успішної перевірки PIN-коду він має показати меню, яке дозволяє: 1. переглядати баланс, 2. вносити гроші, 3. знімати гроші, 4. виходити. Касир не повинен дозволяти зняти більше залишку, ніж є. Використовуйте всі вивчені структури та функції.


#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

#define PIN 12345678

void Menu();
void Balance(double balance);
bool check_pin();
double Deposit(double balance);
double Withdraw(double balance);

int main()
{
    if (!check_pin())
    {
        printf("Invalid PIN. Access denied.\n");
        return 0;
    }

    int option;
    double balance = 1000.0;

    do
    {
        Menu();
        printf("Please choose an option: ");
        scanf("%d", &option);

        switch (option)
        {
            case 1:
                Balance(balance);
                break;
            case 2:
                balance = Deposit(balance);
                break;
            case 3:
                balance = Withdraw(balance);
                break;
            case 4:
                printf("Thank you for using our ATM service. Have a great day!\n");
                break;
            default:
                printf("Invalid selection. Please try again.\n");
        }
        printf("\n");
    } while (option != 4);

    return 0;
}

void Menu()
{
    printf("+-----------------------------+\n");
    printf("|         ATM Options         |\n");
    printf("+-----------------------------+\n");
    printf("| 1. Check Account Balance    |\n");
    printf("| 2. Add Funds                |\n");
    printf("| 3. Withdraw Funds           |\n");
    printf("| 4. Exit                     |\n");
    printf("+-----------------------------+\n");
}

void Balance(double balance)
{
    printf("Your current account balance is: $%.2f\n", balance);
}

double Deposit(double balance)
{
    double deposit;
    printf("Enter the amount you wish to deposit: $");
    scanf("%lf", &deposit);

    if (deposit > 0)
    {
        balance += deposit;
        printf("Successfully added $%.2f. Updated balance: $%.2f\n", deposit, balance);
    }
    else
    {
        printf("Invalid deposit amount. Please enter a positive number.\n");
    }

    return balance;
}

double Withdraw(double balance)
{
    double withdraw;
    printf("Enter the amount you wish to withdraw: $");
    scanf("%lf", &withdraw);

    if (withdraw > 0 && withdraw <= balance)
    {
        balance -= withdraw;
        printf("Successfully withdrew $%.2f. Remaining balance: $%.2f\n", withdraw, balance);
    }
    else if (withdraw > balance)
    {
        printf("Insufficient funds. Your current balance is $%.2f.\n", balance);
    }
    else
    {
        printf("Invalid amount. Please enter a positive number.\n");
    }

    return balance;
}

bool check_pin()
{
    int seret;

    printf("Enter your 8-digit PIN to proceed: ");
    scanf("%d", &seret);

    if (seret == PIN)
    {
        printf("Access granted. Welcome!\n\n");
        return 1;
    }

    return 0;
}

999900000.gif

Головна програма починається з з виклику функції перевірки пін-коду, якщо він не вірний - програма завершується.
Далі починається цикл роботи з банкоматом.
На початку виводимо меню - хоч вивід меню не потребує ніякої логіки - лише вивід тексту, використання в цьому місці функції дає можливість зосередитися на роботі циклу, а не виводі меню.
Далі вводимо пункт меню після чого оператор вибору здійснює виконання відповідного коду як реакції на наш вибір.
Можна було б навіть цей вивід зробити викликами функції

case 4:
     printf("Thank you for using our ATM service. Have a great day!\n");
     break;
default:
     printf("Invalid selection. Please try again.\n");
}

Тоді читаючи код ми не відволікаємося на деталі, а сприймаємо роботу циклу на більш високому рівні. Це одна із головних переваг функцій.

switch (option)
{
  case 1:
    Balance(balance);
    break;
  case 2:
    balance = Deposit(balance);
    break;
  case 3:
    balance = Withdraw(balance);
    break;
  case 4:
    GoodByeExit();
    break;
  default:
    InvalidSelecTryAgain();
}

Ще одна вагома перевага у використанні функцій - повторне використання коду, наприклад Deposit() та Withdraw() можна було використати аналогічно для іншого банкомату, чи пристрою що працює з додаванням ти зняттям коштів.

Запрошую прийняти участь,
@daprado1999 @roland222 @hudamalik20 @alexanderpeace @aneukpineung78

Дякую за уроки, сподіваюся зустрінемося в новому, 21 сезоні.

About me

Posted using SteemPro

Sort:  
Loading...