Ukol – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Ukol – Java – Fórum – Programujte.comUkol – Java – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Kawasaki
~ Anonymní uživatel
6 příspěvků
27. 10. 2014   #1
-
0
-

Sestavte program, který vyřeší tuto situaci: Existuje dluh, například 5 000,- Kč a tento dluh musíte splatit – jednotlivé splátky zadávejte z klávesnice, není stanovena minimální ani maximální výše jedné splátky. Splácení končí v okamžiku, kdy součet splátek se rovná nebo je vyšší než dlužná částka. Během splácení potřebujeme vědět, kolik dluhu nám ještě zbývá po odečtení splátky. Po skončení splácení potřebujeme vědět, kolik splátek jsme uskutečnili a zda jsme náhodou nezaplatili více, než byl dluh.

 Nabídněte možnost celý výpočet opakovat.

Nahlásit jako SPAM
IP: 46.135.3.–
Reklama
Reklama
Kawasaki
~ Anonymní uživatel
6 příspěvků
27. 10. 2014   #2
-
0
-

Cau poradil by nekdo ? zatim mam ...


public static void main(String[] args) {


public class Ucet {
    float dluh;
    public void splat(float castka) {
        dluh -= castka;
    }
    public void vypisZustatek() {
        System.out.println(zustatek);
    }
    
    }
}

Nahlásit jako SPAM
IP: 46.135.3.–
27. 10. 2014   #3
-
0
-

Ty uděláš ůkol ale nemáš ho?

Zasláno z mobilního telefonu.

Nahlásit jako SPAM
IP: 89.24.241.–
Kawasaki
~ Anonymní uživatel
6 příspěvků
27. 10. 2014   #4
-
0
-

nechapu tvoji otazku ? : )

Nahlásit jako SPAM
IP: 46.135.3.–
Kawasaki
~ Anonymní uživatel
6 příspěvků
27. 10. 2014   #5
-
0
-

to co mam nefunguje pise mi to             error" { "expected    a to na          public class Ucet {

potom nevim jak cinnost opakovat a jsou tam dalsi ukoly...

jsem zacatecnik bojuju no : D

Nahlásit jako SPAM
IP: 46.135.3.–
Kit+11
Guru
27. 10. 2014   #6
-
0
-

#2 Kawasaki
Metoda main musí být uvnitř třídy.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Kawasaki
~ Anonymní uživatel
6 příspěvků
27. 10. 2014   #7
-
0
-

#6 Kit

sry z toho nejsem chytrejsi : D 

Nahlásit jako SPAM
IP: 46.135.3.–
Kit+11
Guru
27. 10. 2014   #8
-
0
-

#7 Kawasaki 

Zkus tohle:

public class Ucet {
    public static void main(String[] args) {
        Ucet ucet = new Ucet(5000);
        ucet.splatka(200);
        System.out.println(ucet);
    }

    float dluh;

    public Ucet(float dluh) {
        this.dluh = dluh;
    }

    public void splatka(float castka) {
        dluh -= castka;
    }

    public String toString() {
        return "" + dluh;
    }    
}

Na opravdové splácení půjčky se však typy float ani double nehodí.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
27. 10. 2014   #9
-
0
-

Kawasaki nic si z toho nedělej já to pořádně taky neumím do teď

Zasláno z mobilního telefonu.

Nahlásit jako SPAM
IP: 89.24.241.–
ingiraxo+15
Grafoman
28. 10. 2014   #10
-
0
-

#2 Kawasaki
Je to taková lite verze, ale pro inspiraci by to mělo stačit ;-) 

public class Main
{
    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);

        Ucet ucet = new Ucet(10000);
        ucet.pridejDluh("mBanka", 5000);
        ucet.pridejDluh("auto", 85600);

        // - splati dluh pro mBanku ----------------------------------------------

        Dluh dluh = ucet.ziskejDluh("mBanka");
        System.out.println("Dluh pro mBanku je " + dluh.ziskejDluznouCastku());
        while (dluh.ziskejSplaceno() < dluh.ziskejDluznouCastku()) {
            System.out.printf("Splatka (zbyva %d): ", dluh.ziskejDluznouCastku() - dluh.ziskejSplaceno());
            int splatka = sc.nextInt();
            dluh.splatit(splatka);
        }
        ucet.zrusitDluh(dluh);

        System.out.println("\nPocet penez na uctu: " + ucet.ziskejPenize());
        System.out.println("Pocet vracenych penez po preplatku: " + dluh.ziskejPreplatek());
        System.out.println("Pocet splatek: " + dluh.ziskejPocetSplatek());

        // - splati dluh pro mBanku ----------------------------------------------
    }
}

class Ucet
{
    private int penize = 0;
    private Map<String, Dluh> dluhy = new HashMap<String, Dluh>();

    public Ucet(int penize)
    {
        this.penize = penize;
    }

    public void strhniPenize(int penize)
    {
        this.penize -= penize;
    }

    public void pridejDluh(String nazevDluhu, int dluh)
    {
        dluhy.put(nazevDluhu, new Dluh(this, dluh));
    }

    public void zrusitDluh(Dluh dluh)
    {
        dluhy.remove(dluh);
        penize += dluh.ziskejPreplatek();
    }

    public Dluh ziskejDluh(String nazevDluhu)
    {
        return dluhy.get(nazevDluhu);
    }

    public int ziskejPenize()
    {
        return penize;
    }
}

class Dluh
{
    private final Ucet ucet;
    private final int dluznaCastka;
    private int splaceno = 0;
    private int pocetSplatek = 0;

    public Dluh(Ucet ucet, int dluznaCastka)
    {
        this.ucet = ucet;
        this.dluznaCastka = dluznaCastka;
    }

    public void splatit(int splatka)
    {
        splaceno += splatka;
        ucet.strhniPenize(splatka);
        pocetSplatek++;
    }

    public int ziskejDluznouCastku()
    {
        return dluznaCastka;
    }

    public int ziskejPreplatek()
    {
        return -(dluznaCastka - splaceno);
    }

    public int ziskejSplaceno()
    {
        return splaceno;
    }

    public int ziskejPocetSplatek()
    {
        return pocetSplatek;
    }
}
Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Kit+11
Guru
28. 10. 2014   #11
-
0
-

#10 ingiraxo
Tomu říkáš lite verze? Zkus to zredukovat na polovinu.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
ingiraxo+15
Grafoman
28. 10. 2014   #12
-
0
-

#11 Kit
myslíš je to je moc? hodně to prodloužej ty pitomý get/set a přislo mi vhodný dat dluh jako vlastní objekt

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Kit+11
Guru
28. 10. 2014   #13
-
0
-

#12 ingiraxo
Však ty pitomý get/set tam jsou zbytečně navíc. Nejsou k ničemu potřebné.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
ingiraxo+15
Grafoman
28. 10. 2014   #14
-
0
-

ok, tak redukce... sice bych to takto nenapsal, ale do škola je to asi fu*k :) 

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Ucet ucet = new Ucet(10000, 5000);

        System.out.println("Dluh je " + ucet.dluznaCastka);
        
        while (ucet.existujeDluh()) {
            System.out.printf("Splatka (zbyva %d): ", ucet.dluznaCastka - ucet.splaceno);
            int splatka = sc.nextInt();
            ucet.splatit(splatka);
        }
        ucet.zrusitDluh();

        System.out.println("\nPocet penez na uctu: " + ucet.penizeNaUctu);
        System.out.println("Pocet vracenych penez po preplatku: " + ucet.preplatek());
        System.out.println("Pocet splatek: " + ucet.pocetSplatek);
    }
}

class Ucet {
    public int penizeNaUctu = 0;
    public int dluznaCastka = 0;
    public int splaceno = 0;
    public int pocetSplatek = 0;

    public Ucet(int penizeNaUctu, int dluznaCastka) {
        this.penizeNaUctu = penizeNaUctu;
        this.dluznaCastka = dluznaCastka;
    }

    public void splatit(int castka) {
        splaceno += castka;
        pocetSplatek++;
        penizeNaUctu -= castka;
    }

    public void zrusitDluh() {
        penizeNaUctu += preplatek();
    }

    public int preplatek() {
        return -(dluznaCastka - splaceno);
    }

    public boolean existujeDluh() {
        return splaceno < dluznaCastka;
    }
}
Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Kit+11
Guru
28. 10. 2014   #15
-
0
-

#14 ingiraxo
V tom předchozím jsi měl, že "Ucet ma dluh". v tom novém, že "Ucet má dlužnou částku". Hmm, ani jedno mi nevoní. V zadání o účtu není ani slovo, proto by se podle mne v řešení neměl vůbec vyskytovat.

Máš tam moc veřejných proměnných. Měly by být spíš private.

Spíš bych to udělal jako třídu Uver. 

import java.util.Scanner;

class Uver {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Uver uver = new Uver(5000);
        while (uver.zbyva() > 0) {
            System.out.println(uver);
            int splatka = sc.nextInt();
            uver.splatit(splatka);
        }
        System.out.println(uver);
    }

    private int splatek = 0;
    private int splaceno = 0;
    private int dluh;

    public Uver(int dluh) {
        this.dluh = dluh;
    }
    public void splatit(int castka) {
        splaceno += castka;
        splatek++;
    }

    public int zbyva() {
        return dluh - splaceno;
    }

    public String toString() {
        if (zbyva() > 0) {
            return "Zbývá splatit: " + zbyva();
        }
        return "Úvěr byl splacen v " + splatek + " splátkách." +
            (zbyva() < 0 ? (" Přeplatili jsme " + (-zbyva()) + " Kč"):"");
    }
}
Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
ingiraxo+15
Grafoman
28. 10. 2014   #16
-
0
-

#15 Kit
No dobře, to už je ale slovíčkaření. Stejně tak v zadání není žádná zmínka o úvěru ;) Spíš mi to zadání přijde nedotažený úplně do konce.

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Kit+11
Guru
28. 10. 2014   #17
-
0
-

#16 ingiraxo
To sice není, ale ty řešíš dva účty: Běžný a úvěrový (dluh). Přitom se dá ze zadání předpokládat, že to splácí hotově. Je tedy nutné evidovat pouze ten úvěrový.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Kawasaki
~ Anonymní uživatel
6 příspěvků
28. 10. 2014   #18
-
0
-

dekuji za odpovedi ikdyz ne moc napomocne : ) cajk , jn v zadani mohl byt urok vzhledem k tomuze kdo pujcuje bez uroku ? , nicmene zpochybnovani zadani asi nema smysl, takze reseni je takoveto kdyby to nekdo resil nebo to nekomu pomohlo. 




public static void main (String[]args){
        int a; //dluzna castka
        int s; //splátka    
        int rozdil, opakovat; //pomocné proměnné
            
        do{
            System.out.print("Zadej dlužnou částku: ");
            a = VstupDat.ctiInt(); //načte dlužnou částku z klavesnice
            int suma = 0;
            int pocet = 0;
                while(a > 0){
                
                    System.out.print("Zadej splátku: ");
                    s = VstupDat.ctiInt(); //načte splátku z klávesnice
                    pocet++; // hodnotu pocet navýšší o 1
                    suma = suma + s; //udělá součet splátek při splnění dané podmínky
                    rozdil = a - suma; //vypočte zbývající částku
                    System.out.println("Zbývá doplatit: "+rozdil); //vypíše zbývající částku
                    if(a <= suma)
                    break;
                
                    }
            System.out.println("Počet splátek je: "+pocet); //vypíše počet splátek
            System.out.println("Splátky překročily dluh o částku: "+(suma - a)); //vypíše o kolik jsme zaplatili více oproti dlužné částce
            System.out.print("Chcete provést nový výpočet ? ANO = zadejte 1, NE = libovolne číslo: ");
            opakovat = VstupDat.ctiInt();
                
        }while(opakovat == 1); //pokud je podmínka true, cyklus proběhne znovu
        System.out.println("Dekuji za pouziti programu");    //vypíše poděkování za použití programu

Nahlásit jako SPAM
IP: 46.135.3.–
Kit+11
Guru
28. 10. 2014   #19
-
0
-

#18 Kawasaki
Bezúročně půjčuje rodina a přátelé. Dávej zdrojáky přes tlačítko "<? Zdrojový kód", ať se to dá číst.

To, co jsem poslal posledně, řeší tvé zadání - kromě opakování. Proč to zase šmudlíš takovou procedurální špagetou?

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
ingiraxo+15
Grafoman
28. 10. 2014   #20
-
+1
-
Zajímavé
Kit +

#18 Kawasaki
jakmile někdo napíše něco ve smyslu 

int a; //dluzna castka
int s; //splátka    


tak si sakra říkám, jakej by byl problém pojmenovat proměnnou stejné jako komentář a komentář vyhodit

jinak řešení tady už máš, stačilo to celý obalit smyčkou pro opětovné použití

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Kit+11
Guru
28. 10. 2014   #21
-
0
-

#20 ingiraxo
Bohužel si začátečníci velmi často neuvědomují, jak moc je důležité vhodně pojmenovat proměnnou.

V podstatě téměř každý komentář v programu naznačuje nedodělek, chybu nebo třeba zmíněný chybný název proměnné či metody.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
ingiraxo+15
Grafoman
28. 10. 2014   #22
-
0
-

#18 Kawasaki
když už nesmíte používat vlastní objekty/metody, tak to můžeš lehce poupravit na:

import java.util.Scanner;

public class Main
{
    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);

        do {
            System.out.print("Zadej dlužnou částku: ");
            int dluznaCastka = sc.nextInt();
            int splaceno = 0;
            int pocetSplatek = 0;

            while (dluznaCastka > splaceno) {
                System.out.printf("Zadej splátku (zbývá doplatit %d): ", dluznaCastka - splaceno);
                splaceno += sc.nextInt();
                pocetSplatek++;
            }
            System.out.println("Počet splátek: " + pocetSplatek);
            System.out.println("Přeplatek: " + (splaceno - dluznaCastka));
            System.out.print("Nový výpočet? (1 = ANO, 0 = NE)");

        } while (sc.nextInt() > 0);
    }
}

1) proměnné by se měli vytvářet až ve chvíli, kdy jsou potřeba
2) názvy proměných pojmenuj smysluplně, zlepší to čitelnost tobě i ostatním
3) při deklaraci proměnných je i inicializuj na výchozí hodnotu (kolikrát to nevadí (někdy jo), ale je lepší na první pohled vidět, co to obsahuje)
4) používej zkrácený operátory (místo x = x + 1) použij (x += 1)
5) nevím, kde si sebral VstupDat.ctiInt(), ale je lepší použít nativní řešení (např. Scanner), i když to tvoje bude dělat asi to samé

Tohle neber jako kritiku, ale jako rady do budoucna ;-)

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 34 hostů

Podobná vlákna

Ukol — založil joskoo

Úkol — založil Malirka

Ukol — založil Filip

Úkol 5 — založil Filip

Ukol — založil fleury93

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý