Тема: Робота циклів while (?)

Ось в мене є програма, яка має виводиди мінімальну кількість монет, за допомогою яких можна видати обсяг введеної кількості грошей. Маю монети номіналом 25, 10, 5 та 1 цент.

#include <cs50.h>
#include <stdio.h>
#include <math.h>

float get_my_float(string prompt);
int w;
int main(void)
{
    float m = get_my_float("Change owed: ");
    int coins = round(m * 100);
    
    while(coins > 25)
    {
        w++;
        coins -= 25;
    }
    while(coins > 10)
    {
        w++;
        coins -= 10;
    }
    while(coins > 5)
    {
        w++;
        coins -= 5;
    }
    while(coins > 1)
    {
        w++;
        coins--;
    }
    printf("%i\n", w);
}

float get_my_float(string prompt)
{
    int n;
    do
    {
        n = get_float("%s", prompt);
    }
    while(n < 0 );
    return n;
}

Яке б число я не вводила, програма видає 0, що, звичайно є неправильним. Маю припущення, що я не правильно використала цикли while, але помилка може були і в іншому місці.
Дякую.

Подякували: 0xDADA11C71

2

Re: Робота циклів while (?)

А нащо ви в get_my_float вводите int n?

Подякували: Катерина421

3

Re: Робота циклів while (?)

Після виправлення цієї та ще одної помилки програма запрацювала. Дякую за допомогу

4

Re: Робота циклів while (?)

До речі, цей алгоритм працюватиме лише з цими монетами. Замініть 5 центів на 2 - і 30 буде оптимально набирати як 10+10+10, а не 25+2+2+1.

Подякували: leofun011

5

Re: Робота циклів while (?)

А хіба 3 монети не краще ніж 4?

6

Re: Робота циклів while (?)

Vo_Vik написав:

А хіба 3 монети не краще ніж 4?

Саме так.

7

Re: Робота циклів while (?)

А я не зрозумів умови взагалі та цікаво стало  Хтось пояснить?

8 Востаннє редагувалося Droid 77 (12.10.2020 22:22:27)

Re: Робота циклів while (?)

Інтерпретація умови задачі - банкомат.

9

Re: Робота циклів while (?)

А воно взагалі компілюється? Там же компілятор мав би матюкатись на не визначену змінну.

10

Re: Робота циклів while (?)

Vo_Vik написав:

компілятор мав би матюкатись

Колись давно, коли комп'ютери були великими, а пам'ять маленькою, компілятори повідомляли лише про факт помилки і, в кращому разі, рядок, де її виявили. Про такі повідомлення було нормально казати "матюкається". Але з того часу все дещо змінилося, і повідомлення компілятора значно інформативніші. Не треба так.