, Я хочу немного продвинуть эту программу? . Предложения приветствуются

Это программа на языке c, которая вводит число и сообщает, из каких нот она состоит. Я хочу сделать это заранее, например, если я ввожу 300, она должна спросить, хотите ли вы в 100, 50, 20, 10, 5. , 2с, 1с. Я хочу спросить, какую функцию мне следует использовать для выполнения этой задачи и как? и я также хочу заменить тип данных массивом, пожалуйста, расскажите мне, как это сделать? и как я могу встроить c grpahics в мою программу?

      
#include<stdio.h>
#include<conio.h>
int main()
{
    long amount;
    long note5000, note1000, note500, note100, note50, note20, note10, coin5, coin2, coin1;
    clrscr();


    note5000 = note1000 = note500 = note100 = note50 = note20 = note10 = coin5 = coin2 = coin1 = 0;


    printf("Enter the amount: ");
    scanf("%ld", &amount);


    if(amount >= 5000)
    {
    note5000 = amount/5000;
    amount -= note5000 * 5000;
    }
    if(amount >= 1000)
    {
    note1000 = amount/1000;
    amount -= note1000 * 1000;
    }
    if(amount >= 500)
    {
    note500 = amount/500;
    amount -= note500 * 500;
    }
    if(amount >= 100)
    {
    note100 = amount/100;
    amount -= note100 * 100;
    }
    if(amount >= 50)
    {
    note50 = amount/50;
    amount -= note50 * 50;
    }
    if(amount >= 20)
    {
    note20 = amount/20;
    amount -= note20 * 20;
    }
    if(amount >= 10)
    {
    note10 = amount/10;
    amount -= note10 * 10;
    }
    if(amount >= 5)
    {
    coin5 = amount/5;
    amount -=coin5 * 5;
    }
    if(amount >= 2)
    {
    coin2 = amount/2;
    amount -=coin2 * 2;
    }
    if(amount >= 1)
    {
    coin1 = amount;
    }

    printf("Total number of notes = \n");

    textcolor(GREEN);
    cprintf("5000=%ld\r\n", note5000);
    textcolor(MAGENTA);
    cprintf("1000=%ld\r\n", note1000);
    textcolor(MAGENTA);
    cprintf("500=%ld\r\n", note500);
    textcolor(MAGENTA);
    cprintf("100=%ld\r\n", note100);
    textcolor(MAGENTA);
    cprintf("50=%ld\r\n", note50);
    textcolor(MAGENTA);
    cprintf("20=%ld\r\n", note20);
    textcolor(MAGENTA);
    cprintf("10=%ld\r\n", note10);
    textcolor(MAGENTA);
    cprintf("5=%ld\r\n", coin5);
    textcolor(MAGENTA);
    cprintf("2=%ld\r\n", coin2);
    textcolor(MAGENTA);
    cprintf("1=%ld\r\n", coin1);

    getch();

    return 0;
}





1 ответ

Кажется, ваша программа предназначена только для положительного ввода. Итак, вы можете подумать об использовании unsigned longкак тип, чтобы выразить этот факт уже в коде. В противном случае вы можете захотеть добавить обработку и для отрицательного ввода. В любом случае вы можете определять массивы следующим образом:

      long array[desired_size];

В вашем случае вы также можете связать предполагаемое значение с массивом. Итак, вы можете предпочесть структуру для:

      struct NoteOrCoin
{
    unsigned long value;
    unsigned long count;
};

Затем вы можете создать массив следующим образом:

      struct NoteOrCoin array[] = {
    { 5000, 0 },
    { 1000, 0 },
    /* other notes and coins */
};

Обратите внимание, что я опустил здесь размер массива, он будет выведен из инициализатора.

Теперь вы можете легко выполнять итерацию цикла for по массиву - что, как я полагаю, вы действительно намереваетесь ...

Боковое примечание: включение цвета в структуру позволяет также выводить в цикле:

      struct NoteOrCoin
{
    unsigned long value;
    unsigned long count;
    char const* color; // or whatever the type for your color constants is
                       // (I assumed ANSI escape codes)
};
struct NoteOrCoin array[] = { { 5000, 0, GREEN }, /* other notes and coins */ };
Другие вопросы по тегам