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

in hive-145157 •  last month 

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

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

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  
Loading...