• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Czy trudno jest zrobić ten program w Javie dla kompletnie początkującego?

Object Storage Arubacloud
0 głosów
439 wizyt
pytanie zadane 24 maja 2018 w Offtop przez james30k Bywalec (2,260 p.)
zmienione kategorie 27 maja 2018 przez james30k
A oto zadanie:

Trzeba stworzyć maszynę, która ma symulować wydawanie reszty przykład: wpisujemy kwotę 170 złotych i automat z puli pieniędzy jakie wpisaliśmy uprzednio musi wydać resztę typu bankot 100 zł x1 20 zł x 3 10zł x1.

6 odpowiedzi

+2 głosów
odpowiedź 24 maja 2018 przez Tomek Sochacki Ekspert (227,510 p.)
Pytanie jeszcze jaki to ma być algorytm i czy wchodzimy w problem wydawania reszty najmniejszą możliwą liczbą nominałów?

Poczytaj sobie np. na: http://www.algorytm.org/inne/problem-wydawania-reszty.html czy ogólnie o "problemie wydawania reszty".
komentarz 24 maja 2018 przez RafalS VIP (122,820 p.)
Wreszcie ktos wspomnial o programowaniu dynamicznym :p Algorytm zachalnny nie zadziala gdy do wydania bedzie 6 a nominaly 5, 3 i 3. Zachalnny wezmie 5 i powie ze sie nie da wydać.
0 głosów
odpowiedź 24 maja 2018 przez niezalogowany
Jeżeli ma to być konsolowy program, to nie. Potrzebujesz z nim pomocy?
komentarz 24 maja 2018 przez james30k Bywalec (2,260 p.)
Troszkę tak, a byłbyś skłonny do tego?
komentarz 24 maja 2018 przez niezalogowany
Tak,

Czy kwota do rozmienienia może mięć końcówkę X groszy czy są to pełne złotówki?
komentarz 24 maja 2018 przez james30k Bywalec (2,260 p.)
Tak może mieć końcówkę również z groszami
komentarz 24 maja 2018 przez niezalogowany
1. Stwórz konsolowe menu. Tzn. jeśli wpiszesz 1 to dodajesz monety, jeśli 2, to rozmieniasz.

2. Menu dla wpłacania. Proponuje stworzyć osobną zmienną dla każdego nominału i przy wpłacaniu zwiększać odpowiednią liczbę.

3. Dla wypłacania od najwyższego nominału który jest dostępny próbuje wypłacić jak największą część kwoty, i stop[niowo schodzi w dół. Możesz to zrobić na switchu w pętli.

4. Dla rozmieniania najpierw wpłacasz odpowiednie monety, a następnie wypłaca ci jak wyżej.
komentarz 24 maja 2018 przez niezalogowany
Napisze coś takiego i Ci potem mogę wysłać
komentarz 24 maja 2018 przez james30k Bywalec (2,260 p.)
Dobrze dziękuję, a ile Ci to zajmie?
komentarz 24 maja 2018 przez niezalogowany
Prawdopodobnie dzisiaj Ci to podeśle
komentarz 24 maja 2018 przez james30k Bywalec (2,260 p.)
Okej to będę czekał w takim razie
0 głosów
odpowiedź 24 maja 2018 przez Aisekai Nałogowiec (42,190 p.)
Zamieniasz całość na grosze - zapisujesz do zmiennej (np grosze). Potem:

-dzielisz przez 50.000 (wartość 500zł banknotu) - wypisujesz wartość dzielenia, zaś grosze=grosze%50000.

-dzielisz przez 10.000 (wartość 100zł banknotu) wypisujesz wartość dzielenia, zaś grosze =grosze%10000.

Itd dla reszty banknotów.
0 głosów
odpowiedź 24 maja 2018 przez marcin99b Szeryf (82,180 p.)
Samo zrobienie programu który działa jest banalnie proste, nawet początkujący da rade

Problemem będzie zrobienie go tak, żeby potencjalny przyszły programista mógł swobodnie rozbudować/edytować program
Zależy czy klient chce jednorazowego prostego programu, czy symulator który ma być rozwijany o nowe funkcje, które niekoniecznie przypadną tobie - mimo że ty masz zrobić najbardziej niezbędną funkcjonalność
0 głosów
odpowiedź 24 maja 2018 przez Artek Stary wyjadacz (11,800 p.)
Jedyne co może sprawić problem to wymyślenie/dobranie algorytmu
0 głosów
odpowiedź 24 maja 2018 przez niezalogowany
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        Kasa kasa = new Kasa();

        while(true) {
            initMenu(kasa);
        }

    }

    public static void initMenu(Kasa kasa) {
        Scanner choice = new Scanner(System.in);

        System.out.println("Wpisz 1 aby wpłacić do Kasy");
        System.out.println("Wpisz 2 aby wypłacić z Kasy");
        System.out.println(sum(kasa));

        int userInput = choice.nextInt();

        if(userInput == 1) {
            contribution(kasa);
        }
        else if(userInput == 2) {
            withdraw(kasa);
        }
        else {
            System.out.println("Niepoprawny wybór");
        }
    }

    public static void contribution(Kasa kasa) {

        System.out.println("Jeśli chcesz wpłacić banknoty 500zł, to wpisz 1");
        System.out.println("Jeśli chcesz wpłacić banknoty 200zł, to wpisz 2");
        System.out.println("Jeśli chcesz wpłacić banknoty 100zł, to wpisz 3");
        System.out.println("Jeśli chcesz wpłacić banknoty 50zł, to wpisz 4");
        System.out.println("Jeśli chcesz wpłacić banknoty 20zł, to wpisz 5");
        System.out.println("Jeśli chcesz wpłacić banknoty 10zł, to wpisz 6");
        System.out.println("Jeśli chcesz wpłacić monety 5zł, to wpisz 7");
        System.out.println("Jeśli chcesz wpłacić monety 2zł, to wpisz 8");
        System.out.println("Jeśli chcesz wpłacić monety 1zł, to wpisz 9");
        System.out.println("Jeśli chcesz wpłacić monety 50gr, to wpisz 10");
        System.out.println("Jeśli chcesz wpłacić monety 20gr, to wpisz 11");
        System.out.println("Jeśli chcesz wpłacić monety 10gr, to wpisz 12");
        System.out.println("Jeśli chcesz wpłacić monety 5gr, to wpisz 13");
        System.out.println("Jeśli chcesz wpłacić monety 2gr, to wpisz 14");
        System.out.println("Jeśli chcesz wpłacić monety 1gr, to wpisz 15");

        Scanner choice = new Scanner(System.in);
        int userInput = choice.nextInt();

        System.out.println("Ile monet/banknotów chcesz wpłacić?");
        Scanner quantity = new Scanner(System.in);
        int quant = quantity.nextInt();

        switch(userInput) {
            case 1:
                kasa.banknot50000 += quant;
                break;

            case 2:
                kasa.banknot20000 += quant;
                break;

            case 3:
                kasa.banknot10000 += quant;
                break;

            case 4:
                kasa.banknot5000 += quant;
                break;

            case 5:
                kasa.banknot2000 += quant;
                break;

            case 6:
                kasa.banknot1000 += quant;
                break;

            case 7:
                kasa.moneta500 += quant;
                break;

            case 8:
                kasa.moneta200 += quant;
                break;

            case 9:
                kasa.moneta100 += quant;
                break;

            case 10:
                kasa.moneta50 += quant;
                break;

            case 11:
                kasa.moneta20 += quant;
                break;

            case 12:
                kasa.moneta10 += quant;
                break;

            case 13:
                kasa.moneta5 += quant;
                break;

            case 14:
                kasa.moneta2 += quant;
                break;

            case 15:
                kasa.moneta1 += quant;
                break;

            default:
                System.out.println("Niepoprawna wartość");
        }

    }

    public static String sum(Kasa kasa) {
        double suma = ((kasa.banknot50000 * 50000) + (kasa.banknot10000 * 10000) + (kasa.banknot5000 * 5000) +
                (kasa.banknot2000 * 2000) + (kasa.banknot1000 * 1000) + (kasa.moneta500 * 500) + (kasa.moneta200 * 200)
                + (kasa.moneta100 * 100) + (kasa.moneta50 * 50) + (kasa.moneta20 * 20) + (kasa.moneta10 * 10) + (kasa.moneta5 * 5)
                + (kasa.moneta2 * 2) + (kasa.moneta1))/100;
        return "W kasie znajduje się: " + suma + "zł";
    }

    public static void withdraw(Kasa kasa) {
        System.out.println("Ile chcesz wypłacić?");
        Scanner howMuch = new Scanner(System.in);
        double sum = howMuch.nextDouble();

        sum *= 100;

        while(sum > 0) {
            if(sum >= 50000) {
                System.out.println("Wypłacono " + (int)((sum - (sum % 50000)) / 50000) + " banknot/ów 500zł");
                kasa.banknot50000 -= (int)((sum - (sum % 50000)) / 50000);
                sum -= (sum - (sum % 50000));
            }

            else if(sum >= 20000) {
                System.out.println("Wypłacono " + (int)((sum - (sum % 20000)) / 20000) + " banknot/ów 200zł");
                kasa.banknot20000 -= (int)((sum - (sum % 20000)) / 20000);
                sum -= (sum - (sum % 20000));
            }

            else if(sum >= 10000) {
                System.out.println("Wypłacono " + (int)((sum - (sum % 10000)) / 10000) + " banknot/ów 100zł");
                kasa.banknot10000 -= (int)((sum - (sum % 10000)) / 10000);
                sum -= (sum - (sum % 10000));
            }

            else if(sum >= 5000) {
                System.out.println("Wypłacono " + (int)((sum - (sum % 5000)) / 5000) + " banknot/ów 50zł");
                kasa.banknot5000 -= (int)((sum - (sum % 5000)) / 5000);
                sum -= (sum - (sum % 5000));
            }

            else if(sum >= 2000) {
                System.out.println("Wypłacono " + (int)((sum - (sum % 2000)) / 2000) + " banknot/ów 20zł");
                kasa.banknot2000 -= (int)((sum - (sum % 2000)) / 2000);
                sum -= (sum - (sum % 2000));
            }

            else if(sum >= 1000) {
                System.out.println("Wypłacono " + (int)((sum - (sum % 1000)) / 1000) + " banknot/ów 10zł");
                kasa.banknot1000 -= (int)((sum - (sum % 1000)) / 1000);
                sum -= (sum - (sum % 1000));
            }

            else if(sum >= 500) {
                System.out.println("Wypłacono " + (int)((sum - (sum % 500)) / 500) + " monetę/monet 5zł");
                kasa.moneta500 -= (int)((sum - (sum % 500)) / 500);
                sum -= (sum - (sum % 500));
            }

            else if(sum >= 200) {
                System.out.println("Wypłacono " + (int)((sum - (sum % 200)) / 200) + " monetę/monet 2zł");
                kasa.moneta200 -= (int)((sum - (sum % 200)) / 200);
                sum -= (sum - (sum % 200));
            }

            else if(sum >= 100) {
                System.out.println("Wypłacono " + (int)((sum - (sum % 100)) / 100) + " monetę/monet 1zł");
                kasa.moneta100 -= (int)((sum - (sum % 100)) / 100);
                sum -= (sum - (sum % 100));
            }

            else if(sum >= 50) {
                System.out.println("Wypłacono " + (int)((sum - (sum % 50)) / 50) + " monetę/monet 50gr");
                kasa.moneta50 -= (int)((sum - (sum % 50)) / 50);
                sum -= (sum - (sum % 50));
            }

            else if(sum >= 20) {
                System.out.println("Wypłacono " + (int)((sum - (sum % 20)) / 20) + " monetę/monet 20gr");
                kasa.moneta20 -= (int)((sum - (sum % 20)) / 20);
                sum -= (sum - (sum % 20));
            }

            else if(sum >= 10) {
                System.out.println("Wypłacono " + (int)((sum - (sum % 10)) / 10) + " monetę/monet 10gr");
                kasa.moneta10 -= (int)((sum - (sum % 10)) / 10);
                sum -= (sum - (sum % 10));
            }

            else if(sum >= 5) {
                System.out.println("Wypłacono " + (int)((sum - (sum % 5)) / 5) + " monetę/monet 5gr");
                kasa.moneta5 -= (int)((sum - (sum % 5)) / 5);
                sum -= (sum - (sum % 5));
            }

            else if(sum >= 2) {
                System.out.println("Wypłacono " + (int)((sum - (sum % 2)) / 2) + " monetę/monet 2gr");
                kasa.moneta2 -= (int)((sum - (sum % 2)) / 2);
                sum -= (sum - (sum % 2));
            }

            else if(sum >= 1) {
                System.out.println("Wypłacono " + sum + " monetę/monet 1gr");
                kasa.moneta1 -= sum;
                sum = 0;
            }
        }

    }

}

class Kasa {
    double banknot50000 = 0;
    double banknot20000 = 0;
    double banknot10000 = 0;
    double banknot5000 = 0;
    double banknot2000 = 0;
    double banknot1000 = 0;
    double moneta500 = 0;
    double moneta200 = 0;
    double moneta100 = 0;
    double moneta50 = 0;
    double moneta20 = 0;
    double moneta10 = 0;
    double moneta5 = 0;
    double moneta2 = 0;
    double moneta1 = 0;
}

To program w którym możesz wpłacać i wypłacać z wirtualnej kasy, powinieneś poradzić sobie z utworzeniem metody rozmieniającej, bazując na metodach do wpłacania (contribution) oraz wypłacania (withdraw). 

Gdybyś miał pytania to pisz.

komentarz 25 maja 2018 przez niezalogowany
Edit:

Program wypłaca "jak chce" a nie z dostępnych nominałów, jutro podmienie na poprawioną wersję.
komentarz 25 maja 2018 przez james30k Bywalec (2,260 p.)

A jak zrobić by program zapisywał hisotirę operacji w pliku tekstowym operation.log. Data, kwota, nominały status?

Podobne pytania

0 głosów
1 odpowiedź 397 wizyt
pytanie zadane 27 maja 2018 w Java przez james30k Bywalec (2,260 p.)
0 głosów
1 odpowiedź 83 wizyt
pytanie zadane 17 listopada 2018 w C i C++ przez Paweł123 Nałogowiec (33,500 p.)
0 głosów
1 odpowiedź 478 wizyt

92,589 zapytań

141,440 odpowiedzi

319,697 komentarzy

61,974 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...