Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[c] program ktory zamienia kwote na ilosc monet

Ostatnio zmodyfikowano 2014-07-12 21:34
Autor Wiadomość
ow.verysweet
Temat założony przez niniejszego użytkownika
[c] program ktory zamienia kwote na ilosc monet
» 2014-07-12 18:36:44
Czesc, nie moge sobie poradzic z tym programem, operator modulo nie dziala. Ma ktos jakis pomysl?:)

C/C++
#include <cs50.h>
#include <math.h>
#include <stdio.h>

int przechowywacz;
float liczenie;

int main()
{
    printf( "Give me dolars ; \n" );
    liczenie = GetFloat();
   
   
    float quarter = 25;
    float dime = 10;
    float nickel = 5;
    float pennie = 1;
   
   
    liczenie = liczenie * 100;
    liczenie =( int ) liczenie;
    liczenie = liczenie / quarter;
    przechowywacz = przechowywacz + liczenie;
    liczenie = liczenie % quarter;
   
    liczenie = liczenie / dime;
    przechowywacz = przechowywacz + liczenie;
    liczenie = liczenie % dime;
   
    liczenie = liczenie / nickel;
    przechowywacz = przechowywacz + liczenie;
    liczenie = liczenie % nickel;
   
    liczenie = liczenie / pennie;
    przechowywacz = przechowywacz + liczenie;
   
   
    printf( " Najmniejsza ilosc monet %d\n", przechowywacz );
   
}
P-113696
pekfos
» 2014-07-12 18:37:54
fmod().
P-113698
ow.verysweet
Temat założony przez niniejszego użytkownika
» 2014-07-12 18:52:25
C/C++
#include <cs50.h>
#include <math.h>
#include <stdio.h>

int przechowywacz;
float liczenie;

int main()
{
    printf( "Give me dolars ; \n" );
    liczenie = GetFloat();
   
   
    float quarter = 25;
    float dime = 10;
    float nickel = 5;
    float pennie = 1;
   
   
    liczenie = liczenie * 100;
    liczenie =( int ) liczenie;
    liczenie = liczenie / quarter;
    przechowywacz = przechowywacz + liczenie;
    liczenie = fmod( liczenie, quarter );
   
    liczenie = liczenie / dime;
    przechowywacz = przechowywacz + liczenie;
    liczenie = fmod( liczenie, dime );
   
    liczenie = liczenie / nickel;
    przechowywacz = przechowywacz + liczenie;
    liczenie = fmod( liczenie, nickel );
   
    liczenie = liczenie / pennie;
    przechowywacz = przechowywacz + liczenie;
   
   
    printf( "Najmniejsza ilosc monet %d\n", przechowywacz );
   
}

oblicza nieprawidlowo, dlaczego? program polega na tym ,ze ktos podaje np 0.31 program mnozy razy 100, zamienia na int ,zeby bylo mozna bylo normalnie dalej dzielic, dzieli przez 0.25 (monete), dodaje to co wychodzi do licznika i dzieli ta zmienna znowu przez mniejsza monete (0.10) i tak dalej. Po skompilowaniu wyszlo
Give me dolars ;
0.31
Najmniejsza ilosc monet 1


P-113701
Moorfox
» 2014-07-12 18:57:32
C/C++
liczenie = liczenie * 100;
liczenie =( int ) liczenie;
liczenie = liczenie / quarter;
przechowywacz = przechowywacz + liczenie; // <-- pierwszy blad
liczenie = fmod( liczenie, quarter );
podpowiedz dlaczego
C/C++
int przechowywacz;

TZN. moze to byc blad ale nie musi xd. Zalezy od kompilatora bo to zmienna globalna
P-113703
ow.verysweet
Temat założony przez niniejszego użytkownika
» 2014-07-12 19:17:41
co zrobic aby bylo dobrze? nie mozna dodac int do float, tak? :s
P-113704
Moorfox
» 2014-07-12 19:21:16
Chodzi mi o to, że nie na 100% twoja zmienna globalna w twoim kompilatorze musi byc inicjalizowana 0
A robisz przechowywacz = przechowywacz + liczenie  jesli przechowywacz nie bedzie 0 to przechowywacz + liczenie <=> zmienna_nie_zainicjalizowana + liczenie
Ale to nie bedzie chyba ten bład programu przez co zle ci wychodzi, nawet nie musi byc to blad w twoim kompilatorze
P-113705
Moorfox
» 2014-07-12 19:27:19
Prawdziwmy błąd jest tutaj uznajmy ze przechowywacz = 0;
C/C++
liczenie = liczenie / quarter;
przechowywacz = przechowywacz + liczenie;
liczenie = fmod( liczenie, quarter );
Powiedzmy liczenie podalismy 0,31 wiec wynosi w tym momencie 31

liczenie = 31/25 = 1
przechowywacz = 0+1 = 1
liczenie = 1%25 //<-- blad powinno byc 31%25 a ty wczesniej przypisales liczenie wlasnie ta jedynek// dzielac 31/25
P-113706
ow.verysweet
Temat założony przez niniejszego użytkownika
» 2014-07-12 21:26:02
bo ja chcialem wlasnie ,zeby w tej linijce

liczenie = fmod( liczenie, quarter );

wychodzilo modulo( zwykle liczenie % quarter nie dziala nie wiem dlaczego:/) tak ,zeby bylo liczenie = 6 (31 % 25 = 6)
i dostalem cynk ,ze jest taka funkcja ktora naprawia ten blad :) o to Ci chodzi?
P-113715
« 1 » 2
  Strona 1 z 2 Następna strona