Rada s úkolem k zápočtu – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Rada s úkolem k zápočtu – Java – Fórum – Programujte.comRada s úkolem k zápočtu – Java – Fórum – Programujte.com

 

Laky
~ Anonymní uživatel
1 příspěvek
29. 10. 2014   #1
-
0
-

Zdravim a preji pekny den, mam na Vas velikou prosbu, zacal jsem studovat na VS a mame ukol v jazyce JAVA, nikdy jsem bohuzel neprogramoval, takze jsem uplny amater a z zapoctu mame zadani se kterym se uz dlouho peru, Vam se to bude urcite zdat trivialni, ale jak rikam, nikdy jsem toto nedelal, tak jsem chtel moc poprosit o pomoc. Zadani je: Výpočet - tabulka Představte si nějaký výpočetní model - jednoduchou tabulku v Excelu, ve které jsou uvedena data pro výpočet potřebných hodnot. Může se jednat o studijní výsledky žáků, finanční výpočty na jednotlivá čtvrtletí nebo podobné výpočty. Důležité je mít nějaká data a dokázat z nich něco vypočíst.

Vytvořte program v jazyce JAVA, který bude implementovat navržený výpočetní model.

Definujte vhodné datové struktury. Doporučují pole prvků daných typů. Využijte alespoň jedno dvourozměrné pole pro vlastní data tabulky. Pole popisků může byt jednorozměrné, využijte například metody, které jsme si ukázali v hodině. Definujte procedury pro vstup (zadání hodnot z klávesnice) a výstup hodnot (výpis tabulky v textovém režimu). Definujte procedury a funkce (cca 5 procedur nebo funkci, vyzkoušejte obojí) pro práci s daty - výpočet průměrné hodnoty, součtu apod. Definujte hlavní program, který bude vhodně volat příslušné procedury a funkce. Svůj program doplňte komentáři přímo v prostředí programu. Okomentujte jednotlivé procedury a funkce, jejich parametry a návratové hodnoty (komentáře /**). Složitější výpočty okomentujte na řádku (komentář //).

Výstup: Soubor *.java odevzdejte ke kontrole přes systém Moodle. Byl bych moc vdecny za pomoc, mockrat Vam dekuji

Nahlásit jako SPAM
IP: 90.180.73.–
JoDiK
~ Anonymní uživatel
987 příspěvků
29. 10. 2014   #2
-
+1
-
Zajímavé
Kit +

#1 Laky
A jak si prosímtě představuješ tu pomoc? Jako vytvořit za tebe ten program a poslat ho na ten Moodle?

Chceš říct, že dnes studium na vysoké škole vypadá tak, že tam ani nemusíš chodit, prostě dostaneš takovéto zadání a termín, do kdy to máš odevzdat? Jako že žádné přednášky, žádné cvičení - jen jakýsí e-learning?

Ale přece i v takovém případě máš na moodle výukové materiály (za nás to byly papírový skripta) a online výukové kurzy s konkrétními příklady s postupně zvyšující se obtížností k řešení (za nás normální cvičení).

Takže jestli jsi úplně mimo, tak prostě začni od začátku - co to je algoritmus, zdrojový kód, překladač, vytvoř "Ahoj světe" a až se zarazíš a nebudeš vědět jak dál, s důvěrou se obrať, vlož sem kód svého programu, popiš co a jak nefunguje a věřím, že ti někdo rád poradí...

Nahlásit jako SPAM
IP: 88.103.228.–
Kit+15
Guru
29. 10. 2014   #3
-
0
-

#1 Laky
Slovo "amatér" znamená, že to děláš s láskou, ze zájmu. Tak se do toho pusť a ukaž nám, co už máš hotového.

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.
RePRO0
Super člen
29. 10. 2014   #4
-
0
-

Jestli chceš mít jednou magisterský titul, tak to prostě musíš zvládnout sám. Hlavně se snaž. Sežeň si kvalitní doučování, nebo pozvi kámoše na pivko do hospody, který ti to vysvětlí a pomůže ti s danou problematikou.

Nahlásit jako SPAM
IP: 95.82.185.–
Software: C; C++; C#; Pascal; Delphi; Java Webdesign: PHP; MySQL; CSS; jQuery; Ajax; Javascript; OOP
ingiraxo+15
Grafoman
29. 10. 2014   #5
-
0
-

#1 Laky
chápu, že si nikdy neprogramoval, ale nechodíš si přece do školy sednou a odpočívat.. na cvikách musíte probírat to, z čeho máte následně zápich a musíš mít i ukázky, příklady z cvik, takže to zkus prohrabat a něco sesmolit ;-)

následně ti potom poradíme, co je špatně nebo by mělo být jinak apod.

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
ingiraxo+15
Grafoman
29. 10. 2014   #6
-
0
-

#1 Laky
Tak mi to nedalo a při večeři jsem něco zkusil vymyslet, nevim jestli to nějak pomůže (aspoň jako inspirace), ale aspoň jsem se zabavil na chvíli :-)

Zadání je celkem volný, takže jsem si udělal jednoduchou "tabulku" texťáku (viz. níže) a tu si jen načetl, vyseparoval hodnoty a vložil do objektů. Základní operace vypiš všechno, součet toho a toho...

Jedná se o kovárnu (nenapadlo mě nic jinýho v tu chvíli), který vyrábí zbraně/štíty za stejné ceny (neuvěřitelné! - mohl bych doplnit i rozšíření, ale asi by to bylo nad rámec zadání). A tato kovárna ma nějaké roční a měsíční vyrobené kusy.

Datový soubor, který načítám (všimni si, že není úplný, chybí některé měsíce a některé jsou přeházené: 

Rok;Měsíc;Prodaných zbraní
2010;1;45
2010;2;22
2010;8;64
2010;4;78
2011;5;36
2010;6;50
2010;7;18
2010;3;25
2010;9;94
2010;10;102
2010;11;0
2010;12;81
2011;1;25
2011;2;52
2011;3;74
2010;5;26
2011;6;60
2011;7;28
2011;8;75
2011;9;64
2011;10;2
2011;11;99
2011;12;72


Dále tu máme kód.. pro splnění jednoho *.java souboru jsem to taky nacpal do jednho (normálně bych to rozdělil pro přehlednost, ale zas tak dlouhý to neni - není problém si to rozdělit)

Něco jsem se pokusil okomentovat a udělat nějaké "základní" ošetření... není problém to rozšířit o další práci s načtenýmy daty.

Nevím, co všechno jste na cviku braly a nebraly, ale v zásadě to je jedno ;-)

joo.. a očekávám teda těch 300kč na účet :-P

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;

import cz.demo.Smithy.Calculation.MonthData;

/* Kovárna a její vyrobené a prodané kusy mečů, palcátů, štítů apod. */
public class Smithy
{
    private String name; // název kovárny
    private Calculation calculation; // hromadná kalkulace za X let

    /* Kalkulace roků, měsíců z datového souboru */
    public static class Calculation
    {
        public static final int PRICE_FOR_PIECE = 20; // cena za jeden kus výrobku

        private Map<Short, MonthData[]> yearsData = new HashMap<Short, MonthData[]>(); // data za všechna léta
        private int totalUnitsSold; // počet všech prodaných kusů
        private int totalSales; // cena za všechny prodané kusy

        /* Konstruktor :-O */
        public Calculation(String fileDataName) throws FileNotFoundException
        {
            List<MonthData> dataList = prepareData(fileDataName);
            applyDataList(dataList);
            calculateTotalData();
        }

        /* Připraví data z datového souboru (převede data do objektů) a vrátí všechny měsíce všech let */
        private List<MonthData> prepareData(String fileName) throws FileNotFoundException
        {
            File file = new File(fileName);
            List<MonthData> dataList = new ArrayList<MonthData>();

            try (BufferedReader br = new BufferedReader(new FileReader(file))) {
                String line;
                int lineCounter = 0; // stačil by bool, ale je to fu*k

                while ((line = br.readLine()) != null) {
                    // první řádek je název sloupců, ten nás těžce nezajímá..
                    if (lineCounter > 0) {
                        String[] tokens = line.split(";"); // delimiter

                        // vytvoříme objekt jednoho měsíce, protože pracujeme s měsíci
                        MonthData data = new MonthData();
                        data.year = Short.valueOf(tokens[0]);
                        data.month = Month.getByIndex(Byte.valueOf(tokens[1]));
                        data.unitsSold = Integer.valueOf(tokens[2]);

                        dataList.add(data);
                    }
                    lineCounter++;
                }
            } catch (FileNotFoundException e) {
                throw e;

            } catch (IOException e) {
                e.printStackTrace();
            }
            return dataList;
        }

        /* Vytvoří pole měsíců jednoho roku */
        private MonthData[] prepareYearMonths(short year)
        {
            MonthData[] data = new MonthData[12];

            for (byte i = 0; i < 12; i++) {
                MonthData md = new MonthData();
                md.year = year;
                md.month = Month.getByIndex((byte) (i + 1)); // získáme si Enum, protože práce s čísly je nezajímavá
                data[i] = md;
            }
            return data;
        }

        /* Aplikuje výstupní seznam všech měsíců všech let do mapy kalkulace */
        private void applyDataList(List<MonthData> dataList)
        {
            Collections.sort(dataList); // je potřeba seřadit data podle roku a měsíců pro snažší práci
            yearsData.clear();

            for (MonthData md : dataList) {
                if (yearsData.containsKey(md.year)) {
                    yearsData.get(md.year)[md.month.number - 1] = md;
                } else {
                    MonthData[] arr = prepareYearMonths(md.year);
                    arr[md.month.number - 1] = md;
                    yearsData.put(md.year, arr);
                }
            }
        }

        /* Vypočte celkové přijmy a prodané kusy */
        private void calculateTotalData()
        {
            for (Entry<Short, MonthData[]> entry : yearsData.entrySet()) {
                for (MonthData md : entry.getValue()) {
                    totalUnitsSold += md.unitsSold;
                    totalSales += md.unitsSold * PRICE_FOR_PIECE;
                }
            }
        }

        /* Informace pro tržby jednoho měsíce. Je to reprezentace jenoho řádku v datovém souboru */
        public static class MonthData implements Comparable<MonthData>
        {
            private short year;
            private Month month;
            private int unitsSold;

            @Override
            public String toString()
            {
                return String.format("%d - %s - %d", year, month, unitsSold);
            }

            @Override
            public int compareTo(MonthData o)
            {
                // seřadí podle roku
                if (o.year > year) {
                    return 1;
                } else if (o.year < year) {
                    return -1;
                }
                // seřadí podle měsice
                if (o.month.number > month.number) {
                    return -1;
                } else if (o.month.number < month.number) {
                    return 1;
                }
                return 0;
            }
        }

        /* Enum mesíců, protože práce s indexy (1-12) je na prd... */
        public enum Month
        {
            JANUARY(1, "Leden"),
            FEBRUARY(2, "Únor"),
            MARCH(3, "Březen"),
            APRIL(4, "Duben"),
            MAY(5, "Květen"),
            JUNE(6, "Červen"),
            JULY(7, "Červenec"),
            AUGUST(8, "Srpen"),
            SEPTEMBER(9, "Září"),
            OCTOBER(10, "Říjen"),
            NOVEMBER(11, "Listopad"),
            DECEMBER(12, "Prosinec");

            private byte number;
            private String alias;

            private Month(int number, String alias)
            {
                this.number = (byte) number;
                this.alias = alias;
            }

            /* Získá podle indexu měsíce Enum měsíce */
            public static Month getByIndex(byte number)
            {
                for (Month m : values()) {
                    if (m.number == number) {
                        return m;
                    }
                }
                throw new IllegalArgumentException("Invalid month (" + number + ") number!");
            }

            /* Budeme používat náš alias a né name(), který vrací název fieldu */
            @Override
            public String toString()
            {
                return alias;
            }
        }
    }

    /* Super hustej konstruktor kovárny ;-D */
    public Smithy(String name)
    {
        this.name = name;
    }

    /* Načte datový soubor a vypočte kalkulaci */
    private boolean loadDataFile(String fileDataName)
    {
        try {
            calculation = new Calculation(fileDataName);
            return true;

        } catch (FileNotFoundException e) {
            System.out.println("Jéje, soubor " + fileDataName + " nebyl nalezen :-(");
        }
        return false;
    }

    /* Hlavní metoda main() */
    @SuppressWarnings("resource")
    public static void main(String[] args)
    {
        // scanner pro čtení z konzole.. wau!
        Scanner sc = new Scanner(System.in);

        // vytvoříme si kovárnu a nějak jí pojmenujem
        Smithy smithy = new Smithy("Kovárna U Tří bratří");

        System.out.print("Zadej cestu k datovému souboru: ");
        // načte datový soubor a vypočte kalkulaci
        if (smithy.loadDataFile(sc.nextLine())) {

            // vypíšem nějaký info o kovárně a kalkulaci
            System.out.println("\nVítejte v kovárně: " + smithy.name);
            System.out.println("Náše bilance za poslední " + smithy.calculation.yearsData.size() + " roky je:");
            System.out.println(" - Počet prodaných kusů: " + smithy.calculation.totalUnitsSold);
            System.out.println(" - Celkový příjem: " + smithy.calculation.totalSales + " Kč\n");

            // projdeme všechny roky a měsíce pro výpis dat
            for (Entry<Short, MonthData[]> entry : smithy.calculation.yearsData.entrySet()) {
                System.out.println("Rok: " + entry.getKey());

                for (MonthData md : entry.getValue()) {
                    System.out.printf(" - %s - %d => %d Kč%n", md.month, md.unitsSold, md.unitsSold
                            * Calculation.PRICE_FOR_PIECE);
                }
                System.out.println();
            }
        }
        System.out.println("by ingiraxo");
    }
}

Hmm možná jsem to mohl dát jako odkaz... :o)

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, 24 hostů

Podobná vlákna

Program k zápočtu — založil Martin Pomichálek

Pomoc s úkolem v C — založil Thill

Pomoc s úkolem — založil Malirka

Problém s úkolem c++ — založil Michal

Moderátoři diskuze

 

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