Pomozte s programováním v Javě

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Uživatelský avatar
Funstorm007
Level 5
Level 5
Příspěvky: 2029
Registrován: říjen 08
Pohlaví: Muž
Stav:
Offline

Re: Pomozte s programováním v Javě

Příspěvekod Funstorm007 » 07 pro 2011 12:41

Takže, to načítání by mohlo proběhnout nějak takhle:

Kód: Vybrat vše

       public static void main(String[] args) {
         if (args.length > 0) {
            try {
               File vstup = new File(args[0]);
               Scanner sc = new Scanner(vstup);
               PrintStream p = new PrintStream("vystup.txt");
               while (sc.hasNextInt()) {
                  int data = sc.nextInt();
                  int[] a = pocetPrvku(data);
                  int[] b = serazena(a);
                  p.println(a.length + Arrays.toString(a));
                  p.println(b.length + Arrays.toString(b));
                  p.println();
               }
               p.close();
            }
            catch (Exception e) {
               e.printStackTrace();
            }
         }
         else {
            int cislo;
             int pocet;
             int[] pole=new int[100];
            Scanner scan = new Scanner(System.in);
           
            do {
               System.out.print("Zadej dvouciferné číslo: ");
               cislo=scan.nextInt();
               cislo=Math.abs(cislo);
            } while (cislo<10 || cislo>99);
           
              pocet=posloupnost(cislo,pole);
              pocetPrvku(pole,pocet);
              serazena(pole,pocet);
              pocetPrvku(pole,pocet);
         }
      }


S tím, že pokud parametr nebyl zadám, načítá se číslo z klávesnice tím naším způsobem. Problém ale je, že tady se z čísel načtených ze souboru vytvoří proměnná data a tou se naplní pole z metody posloupnost (metoda, která generuje posloupnost). Jenže my tam čistě takovou nemáme. Řešili jsme to přes vícero metod... Čili, prostě a jednoduše potřebujeme naplnit ty pole daty ze souboru.

Jinak, to zkrácení pole uděláš jednoduše takhle:

Kód: Vybrat vše

Arrays.copyOfRange(posloupnost, 0, x);

V tomhle případě vrátí posloupnost od indexu 0 do x. Dobrý ne? :D

Reklama
Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Pomozte s programováním v Javě

Příspěvekod faraon » 07 pro 2011 17:00

Šikovná funkce, ale abych se přiznal, než hledat hodinu v manuálech, to si jí radši za deset minut napíšu sám :lol:

Kód: Vybrat vše

public static int[] zkratit(int[] pole,int delka)
       {
       int i;
       int[] temp=new int[delka];
       for (i=0;i<delka;++i)
           temp[i]=pole[i];
       return temp;
       }
Použití:

Kód: Vybrat vše

       System.out.println(Arrays.toString(pole));
       pole=zkratit(pole,pocet);
       System.out.println(Arrays.toString(pole));
Výsledek:

Kód: Vybrat vše

[10, 11, 12, 13, 15, 17, 23, 24, 29, 30, 34, 48, 53, 54, 58, 69, 73, 83, 85, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[10, 11, 12, 13, 15, 17, 23, 24, 29, 30, 34, 48, 53, 54, 58, 69, 73, 83, 85, 91]
Spodní mez jsem nezadával, ale nebyl by to problém doplnit.

Héj, ty přede mnou tajíš důležité informace :lol: Kdybys hned napsal že existuje Scanner.hasNextInt() tak jsem to mohl mít hotové už včera! A v tom že se ten můj program těžko upravuje se mýlíš, přepracování mi trvalo několik minut. Takže nejdřív rozhodování jestli se bude načítat ze souboru nebo z klávesnice, to obstará main():

Kód: Vybrat vše

      public static void main (String[] args) throws java.lang.Exception
             {
             if (args.length>0)
                {
                FileInputStream fis = new FileInputStream(args[0]);
                DataInputStream dis = new DataInputStream(fis);
                Scanner scan = new Scanner(fis);
                while (scan.hasNextInt())
                      zpracuj(scan.nextInt());
                dis.close();
                }
             else
                zpracuj(dvouciferne());
             }
Funkce je jednoduchá, když existuje prametr, použije se jako název otevíraného souboru ze kterého se berou čísla pro zpracuj(), v opačném případě se zpracuj() zavolá s hodnotou vrácenou metodou dvouciferne().

Samotné metodě zpracuj() je jedno odkud číslo dostane, prostě s ním provede následující sekvenci činností:

Kód: Vybrat vše

      public static void zpracuj (int cislo)
             {
             int pocet;
             int[] pole=new int[30];

             pocet=naplnit(cislo,pole);
             vypsat(pole,pocet);
             seradit(pole,pocet);
             vypsat(pole,pocet);
             }

Tím se vlastně původní main() rozdělil na dvě metody, teď už stačí jen doplnit formátování a ten graf.
Nic jiného nebylo potřeba měnit, všechny ostatní kostky toho Lega pracují stejně jako pracovaly doteď, každá svůj maličký kousek práce :wink: Stejně jako na tomhle historickém reklamním plakátu: http://cm.bell-labs.com/cm/cs/who/dmr/unixblocks.jpg
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

Uživatelský avatar
Funstorm007
Level 5
Level 5
Příspěvky: 2029
Registrován: říjen 08
Pohlaví: Muž
Stav:
Offline

Re: Pomozte s programováním v Javě

Příspěvekod Funstorm007 » 07 pro 2011 22:25

Ale ty to nevypisuješ do souboru ne? Nebo já to tam nikde nevidím...

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Pomozte s programováním v Javě

Příspěvekod faraon » 07 pro 2011 22:37

Přímo ne, ale můžeš to kamkoliv přesměrovat:

Kód: Vybrat vše

bin/java sekvence vstup.txt > vystup.txt

vstup.txt:

Kód: Vybrat vše

63
12
91

vystup.txt:

Kód: Vybrat vše

19 [63, 40, 17, 29, 85, 73, 54, 30, 91, 83, 69, 48, 24, 58, 34, 12, 15, 23, 53]
19 [12, 15, 17, 23, 24, 29, 30, 34, 40, 48, 53, 54, 58, 63, 69, 73, 83, 85, 91]
16 [12, 15, 23, 53, 29, 85, 73, 54, 30, 91, 83, 69, 48, 24, 58, 34]
16 [12, 15, 23, 24, 29, 30, 34, 48, 53, 54, 58, 69, 73, 83, 85, 91]
16 [91, 83, 69, 48, 24, 58, 34, 12, 15, 23, 53, 29, 85, 73, 54, 30]
16 [12, 15, 23, 24, 29, 30, 34, 48, 53, 54, 58, 69, 73, 83, 85, 91]
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

Uživatelský avatar
Funstorm007
Level 5
Level 5
Příspěvky: 2029
Registrován: říjen 08
Pohlaví: Muž
Stav:
Offline

Re: Pomozte s programováním v Javě

Příspěvekod Funstorm007 » 07 pro 2011 22:40

No, jakmile jdou data ze souboru, automaticky se tam také zapisují. Tudíš, chci říct, že to tak bude vždy takže by bylo asi lepší aby se tam ten výstup automaticky zapsal...

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Pomozte s programováním v Javě

Příspěvekod faraon » 07 pro 2011 22:44

A co když zadáš jen název vstupního souboru?
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

Uživatelský avatar
Funstorm007
Level 5
Level 5
Příspěvky: 2029
Registrován: říjen 08
Pohlaví: Muž
Stav:
Offline

Re: Pomozte s programováním v Javě

Příspěvekod Funstorm007 » 07 pro 2011 22:48

No o to právě jde. Abych musel zadávat jen název vstupního souboru. Jakmile spustím program s parametrem přičemž jím bude právě název vstupního souboru tak aby program udělal pouze to, že ty výstupní data zapíše automaticky do souboru "výstup.txt" a tím program končí... Stejně mi to nějak neštymuje. K čemu ta metoda zkratit? To byla jako jen nějaká demonstrace?

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Pomozte s programováním v Javě

Příspěvekod faraon » 07 pro 2011 23:05

To zkratit() je skoro to samé jako to Arrays.copyOfRange() co jsi psal. Jen ukázka že je někdy jednodušší si napsat vlastní metodu než listovat manuály :-D

Takže zadáváš jen vstupní soubor, výstupní je vždy stejný. Tak to stačí malinko upravit metodu zpracuj() a dopsat další co bude kreslit graf:

Kód: Vybrat vše

public static void zpracuj (int cislo, int graf)
             {
             int pocet;
             int[] pole=new int[30];

             pocet=naplnit(cislo,pole);
             if (graf>0)
                {
                seradit(pole,pocet);
                kreslit(pole,pocet);
                }
             else
                {
                vypsat(pole,pocet);
                seradit(pole,pocet);
                vypsat(pole,pocet);
                }
             }

A z main() se zavolá zpracuj(scan.nextInt(),0); pro zápis do souboru nebo zpracuj(dvouciferne(),1); pro kreslení grafu na obrazovku. Dobré bude otevřít soubor už v main(). Místo 0 a 1 by neškodilo nadefinovat symboly a ty tam použít, třeba GRAF a TEXT.

Ale úplně správné by bylo tohle:
java sekvence -i vstup.txt -o vystup.txt
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

Uživatelský avatar
Funstorm007
Level 5
Level 5
Příspěvky: 2029
Registrován: říjen 08
Pohlaví: Muž
Stav:
Offline

Re: Pomozte s programováním v Javě

Příspěvekod Funstorm007 » 07 pro 2011 23:21

Jakmile bude vstup vyvolán ze souboru, JEN se vypíše výstup do souboru a tím program končí. Graf se bude kreslit jen v případě zadávání čísla z klávesnice... Podívej, nevim jak líp to už vysvětlit. Program sputím s parametrem takto java nazev_programu vstup.txt. To funguje. Program načte data ze souboru vstup.txt a jedinou činnost, kterou v tomto případě udělá bude, že vypíše výstup do souboru. Pokud neexistuje, vytvoří ho, pokud existuje, přepíše ho. Víš co je třeba takový malý problém? V případě spuštění programu s parametrem chsi, aby se mi ty dvě posloupnosti oddělovali prázdnou řádkou. To je jednoduché, přidal jsem řádek System.out.println(); do metody zpracuj. Jenže to se pak promítne i ve výstupu na obrazovku...

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Pomozte s programováním v Javě

Příspěvekod faraon » 09 pro 2011 18:04

Tak jak s tím grafem? Já jsem si zatím vytvořil metodu kreslit(int[] pole,int delka), která ho poskládá textově...

Takže vstup s parametrem a načtení ze souboru, v něm mám čísla 15, 18 a 36: java sekvence vstup.txt, obsah souboru vystup.txt je takový:

Kód: Vybrat vše


16 [15, 23, 53, 29, 85, 73, 54, 30, 91, 83, 69, 48, 24, 58, 34, 12]

16 [12, 15, 23, 24, 29, 30, 34, 48, 53, 54, 58, 69, 73, 83, 85, 91]

21 [18, 33, 11, 13, 17, 29, 85, 73, 54, 30, 91, 83, 69, 48, 24, 58, 34, 12, 15, 23, 53]

21 [11, 12, 13, 15, 17, 18, 23, 24, 29, 30, 33, 34, 48, 53, 54, 58, 69, 73, 83, 85, 91]

19 [36, 13, 17, 29, 85, 73, 54, 30, 91, 83, 69, 48, 24, 58, 34, 12, 15, 23, 53]

19 [12, 13, 15, 17, 23, 24, 29, 30, 34, 36, 48, 53, 54, 58, 69, 73, 83, 85, 91]
Přesná podoba formátování je detail co se řeší až na konec, takhle to vyhovuje?

Vstup bez parametru a kreslení grafu: java sekvence, na obrazovce se objeví tohle:

Kód: Vybrat vše

Zadej dvouciferné číslo: 94


                                                    ▄ █
                                                ▄ █ █ █
                                            ▄ █ █ █ █ █
                                            █ █ █ █ █ █
                                          █ █ █ █ █ █ █
                                        █ █ █ █ █ █ █ █
                                      █ █ █ █ █ █ █ █ █
                                    ▄ █ █ █ █ █ █ █ █ █
                                ▄ ▄ █ █ █ █ █ █ █ █ █ █
                              ▄ █ █ █ █ █ █ █ █ █ █ █ █
                            ▄ █ █ █ █ █ █ █ █ █ █ █ █ █
                          █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
                      ▄ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
                  ▄ ▄ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
                ▄ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
          ▄ ▄ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
      ▄ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
  █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
  █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
  1 1 1 1 1 2 2 2 2 3 3 3 4 4 4 5 5 5 6 6 7 8 8 8 8 9 9
  2 4 5 7 9 0 3 4 9 0 4 7 1 3 8 3 4 8 5 9 3 0 3 5 9 1 4
V čistě textovém režimu to vypadá lépe, tam jsou ty sloupce spojité, v terminálu mi je to dělá přerušované, stejně jako v prohlížeči.

Jen pro zajímavost, když jsem ten program ladil, tak abych nemusel pokaždé ručně vypisovat vstupní hodnotu, nechal jsem si jí tam automaticky poslat rourou:
echo 35 | java sekvence
Také jednou kouzlo s příkazovou řádkou :)

Nakonec celý ten zázrak. A jak jsi dopadl ty?

Kód: Vybrat vše

import java.util.*;
import java.lang.*;
import java.io.*;

class sekvence
      {
      static int TEXT=0,GRAF=1;
      static FileInputStream fis;
      static FileOutputStream fos;
      static PrintStream ps;

/******************************************************************************/

      /* načte ze vstupu kladné dvouciferné číslo */
      public static int dvouciferne()
             {
             int cislo;
             Scanner scan = new Scanner(System.in);

             do {
                System.out.print("Zadej dvouciferné číslo: ");
                cislo=scan.nextInt();
                cislo=Math.abs(cislo);
                } while (cislo<10 || cislo>99);

             return cislo;
             }

/******************************************************************************/

      /* zjistí jestli se číslo v poli vyskytuje */
      public static int vyskyt(int cislo,int[] pole,int pocet)
             {
             int i;

             for (i=0;i<pocet;++i)
                 if (cislo==pole[i])
                    return 1;

             return 0;
             }

/******************************************************************************/

      /* vypočítá další číslo v pořadí */
      public static int dalsi(int cislo)
             {
             cislo=cislo*cislo;
             while (cislo>=100)
                   cislo=cislo/10;
             cislo=cislo+1;

             return cislo;
             }

/******************************************************************************/

      /* vyplní pole čísly do prvního opakování */
      public static int naplnit(int hodnota,int[] pole)
             {
             int pocet;

             for (pocet=0;vyskyt(hodnota,pole,pocet)==0;++pocet)
                 {
                 pole[pocet]=hodnota;
                 hodnota=dalsi(hodnota);
                 }

             return pocet;
             }

/******************************************************************************/

      /* vypíše zadaný počet prvků pole do souboru */
      public static void vypsat(int[] pole,int pocet)
             {
             int i;

             ps.println();
             ps.print(pocet+" [");
             for (i=0;i<pocet;++i)
                 ps.print((i>0?", ":"")+pole[i]);
             ps.println("]");
             }

/******************************************************************************/

      /* seřadí pole insertsortem */
      public static void seradit(int[] pole,int pocet)
             {
             int i,j,temp;

             for (i=1;i<pocet;++i)
                 {
                 temp=pole[i];
                 for (j=i;j>0 && pole[j-1]>temp;--j)
                     pole[j]=pole[j-1];
                 pole[j]=temp;
                 }
             }

/******************************************************************************/

      /* nakreslí graf */
      public static void kreslit(int[] pole,int delka)
             {
             int i,j,max;
             float meritko;

             max=pole[0];
             for (i=1;i<delka;++i)
                 if (pole[i]>max)
                    max=pole[i];
             meritko=20/(float)max;
             System.out.println();
             for (i=20;i>=1;--i)
                 {
                 for (j=0;j<delka;++j)
                     {
                     if (pole[j]*meritko>i)
                        if ((pole[j]*meritko-i)<.5)
                           System.out.print(" ▄");
                        else
                           System.out.print(" █");
                     else
                        System.out.print("  ");
                     }
                 System.out.println();
                 }
             for (i=0;i<delka;++i)
                 System.out.print(" "+pole[i]/10);
             System.out.println();
             for (i=0;i<delka;++i)
                 System.out.print(" "+pole[i]%10);
             System.out.println();
             }

/******************************************************************************/

      /* zpracuje sekvenci pro zadané číslo */
      public static void zpracuj (int cislo,int graf)
             {
             int pocet;
             int[] pole=new int[30];

             pocet=naplnit(cislo,pole);
             if (graf>0)
                {
                seradit(pole,pocet);
                kreslit(pole,pocet);
                }
             else
                {
                vypsat(pole,pocet);
                seradit(pole,pocet);
                vypsat(pole,pocet);
                }
             }

/******************************************************************************/

      /* hlavní program */
      public static void main (String[] args) throws java.lang.Exception
             {
             if (args.length>0)
                {
                fis = new FileInputStream(args[0]);
                Scanner scan = new Scanner(fis);
                fos = new FileOutputStream("vystup.txt");
                ps = new PrintStream(fos);
                while (scan.hasNextInt())
                      zpracuj(scan.nextInt(),TEXT);
                fos.close();
                fis.close();
                }
             else
                {
                zpracuj(dvouciferne(),GRAF);
                }
             }

      }

Dalo mi na devět metod včetně main(), to by mělo stačit, když požadovaných bylo minimálně pět.
Pro inspiraci se můžeš kouknout jak to dělají autoři Javy: http://www.docjar.com/html/api/java/io/ ... .java.html
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

Uživatelský avatar
Funstorm007
Level 5
Level 5
Příspěvky: 2029
Registrován: říjen 08
Pohlaví: Muž
Stav:
Offline

Re: Pomozte s programováním v Javě

Příspěvekod Funstorm007 » 12 pro 2011 19:39

Jo, takže vstup ze souboru už funguje OK. Ta kosmetická část výstupního souboru by měla vypadat asi nějak takto:

Kód: Vybrat vše

Neseřazená posloupnost prvního čísla
Seřazená posloupnost prvního čísla

Neseřazená posloupnost druhého čísla
Seřazená posloupnost druhého čísla

Neseřazená posloupnost třetího čísla
Seřazená posloupnost třetího čísla

a tak dále a tak dále. :D

No, graf je sice velmi zajímavý leč nepovolený... :lol: Takže jsem to přepracoval takto:

Kód: Vybrat vše

      public static void kreslit(int[] pole) {
         DrawingTool dt = new DrawingTool(SIRKA, VYSKA, Color.WHITE, true);
         dt.setColor(Color.BLACK);
         int mezeraMeziRadky = VYSKA / RADKY;
         for (int y = 0; y < RADKY; y++) {
            dt.line(0, mezeraMeziRadky * y, SIRKA, mezeraMeziRadky * y);
         }
         dt.setColor(Color.BLUE);
         int sirkaSloupce = (SIRKA / pole.length) - 1;
         for (int i = 0; i < pole.length; i++) {
            int x = i * (sirkaSloupce + 1);
            for (int y = 0; y < sirkaSloupce; y++) {
               dt.line(x + y + 4, VYSKA / 2, x + y + 4, (VYSKA / 2) - (VYSKA / 2 / 100) * pole[i]);
            }
         }
        
      }

+ do celé třídy

Kód: Vybrat vše

          public static int VYSKA = 700;
          public static int SIRKA = 700;
          public static int RADKY = 20;

+ ještě jeden import

Kód: Vybrat vše

import java.awt.*;


Tak nějak by to mělo vypadat až na malý detail... V celkovém grafu musí být neseřazená ale i seřazená posloupnost, tudíž potřebuju do metody kreslit zavolat dvě pole. Nyní tam vstupuje pouze to se seřazenou posloupností a podle toho vypadá i graf. V horní polovině bude neseřazená a v té spodní bude seřazená. Teď je sice v horní seřazená ale to se poladí až tam budou obě.

P.S. aby se ti graf vykreslil, potřebuješ TOTO... :D Stáhni a vlož do složky se samotným programem...

Uživatelský avatar
Funstorm007
Level 5
Level 5
Příspěvky: 2029
Registrován: říjen 08
Pohlaví: Muž
Stav:
Offline

Re: Pomozte s programováním v Javě

Příspěvekod Funstorm007 » 15 pro 2011 09:26

Tak jsem program ještě doladil ale pořád mi do metody kreslit vstupuje pouze jedna poslopnost, konkrétně ta seřazená. Zde je celý program:

Kód: Vybrat vše

   import java.util.*;
   import java.io.*;
   import java.awt.*;

   class xxx {
      
      public static int TEXT=0,GRAF=1;
      public static FileInputStream fis;
      public static FileOutputStream fos;
      public static PrintStream ps;
      
      /**
       * Načte ze vstupu kladné dvouciferné číslo
       * @return
       */
      
      public static int dvouciferne() {
         int cislo;
         Scanner scan = new Scanner(System.in);

         do {
            System.out.print("Zadej dvouciferne cislo: ");
            cislo=scan.nextInt();
            cislo=Math.abs(cislo);
         }
         while (cislo<10 || cislo>99);

         return cislo;
      }
      
      /**
       * Zjišťuje, jestli se číslo v poli už nevyskytuje
       * @param cislo
       * @param pole
       * @param pocet
       * @return
       */
      
      public static int vyskyt(int cislo,int[] pole,int pocet) {
         int i;

         for (i=0;i<pocet;++i)
            if (cislo==pole[i])
               return 1;

         return 0;
      }
      
      /**
       * Počítá další číslo dle zadaného algoritmu
       * @param cislo
       * @return
       */
      
      public static int dalsi(int cislo) {
         cislo=cislo*cislo;
         while (cislo>=100)
            cislo=cislo/10;
         cislo=cislo+1;

         return cislo;
      }
      
      /**
       * Vyplní pole čísly do prvního opakování
       * @param hodnota
       * @param pole
       * @return
       */
      
      public static int naplnit(int hodnota,int[] pole) {
         int pocet;

         for (pocet=0;vyskyt(hodnota,pole,pocet)==0;++pocet) {
            pole[pocet]=hodnota;
            hodnota=dalsi(hodnota);
         }

         return pocet;
      }
      
      /**
       * Vypíše zadaný počet prvků do souboru
       * @param pole
       * @param pocet
       */
      
      public static void vypsatT(int[] pole,int pocet) {
         int i;
               
         ps.print(pocet+" [");
         for (i=0;i<pocet;++i)
            ps.print((i>0?", ":"")+pole[i]);
         ps.println("]");
      }
      
      /**
       * Vypíše zadaný počet prvků na obrazovku
       * @param pole
       * @param pocet
       */
      
      public static void vypsatG(int[] pole,int pocet) {
         int i;
         
         System.out.print(pocet+" [");
         for (i=0;i<pocet;++i)
            System.out.print((i>0?", ":"")+pole[i]);
         System.out.println("]");
      }
      
      /***
       * Seřadí pole metodou InsertSort
       * @param pole
       * @param pocet
       */
      
      public static void seradit(int[] pole,int pocet) {
         int i,j,temp;

         for (i=1;i<pocet;++i) {
            temp=pole[i];
            for (j=i;j>0 && pole[j-1]>temp;--j)
               pole[j]=pole[j-1];
            pole[j]=temp;
         }
      }
      
      /**
       * Kreslí graf
       * @param a
       * @param b
       * @param pocet
       */
      
      public static void kreslit(int[] a, int[] b, int pocet) {
         int VYSKA = 600;
         int SIRKA = pocet*35;
         DrawingTool dt = new DrawingTool(SIRKA, VYSKA, Color.WHITE, true);
         dt.setColor(Color.BLACK);
         int mezeraMeziRadky = VYSKA / 20;
         for (int y = 0; y < 20; y++) {
            dt.line(0, mezeraMeziRadky * y, SIRKA, mezeraMeziRadky * y);
            dt.line(0,VYSKA-1,SIRKA,VYSKA-1);
         }
         dt.setColor(Color.BLUE);
         int sirkaSloupce = ((SIRKA - 10) / pocet) - 1;
         for (int i = 0; i < pocet; i++) {
            int x = i * (sirkaSloupce + 1);
            for (int y = 0; y < sirkaSloupce; y++) {
               dt.line(x + y + 4, VYSKA / 2, x + y + 4, (VYSKA / 2) - (VYSKA / 2 / 100) * a[i]);
            }
         }
        
         dt.setColor(Color.RED);
         for (int i = 0; i < pocet; i++) {
            int x = i * (sirkaSloupce + 1);
            for (int y = 0; y < sirkaSloupce; y++) {
               dt.line(x + y + 4, VYSKA, x + y + 4, (VYSKA) - (VYSKA / 2 / 100) * b[i]);
            }
         }
      }
      
      /**
       * Zpracuje sekvenci pro zadané číslo
       * @param cislo
       * @param graf
       */
      
      public static void zpracuj (int cislo,int graf) {
         int pocet;
         int[] pole=new int[30];

         pocet=naplnit(cislo,pole);
         if (graf>0) {
            vypsatG(pole, pocet);
            seradit(pole, pocet);
            vypsatG(pole, pocet);
            seradit(pole, pocet);
            kreslit(pole, pole, pocet);
         }
         else {
            vypsatT(pole, pocet);
            seradit(pole, pocet);
            vypsatT(pole, pocet);
            ps.println();
         }
      }
      
      /**
       * Hlavní program
       * @param args
       * @throws java.lang.Exception
       */
      
      public static void main (String[] args) throws java.lang.Exception {
         if (args.length>0) {
            fis = new FileInputStream(args[0]);
            Scanner scan = new Scanner(fis);
            fos = new FileOutputStream("vystup.txt");
            ps = new PrintStream(fos);
            while (scan.hasNextInt())
               zpracuj(scan.nextInt(),TEXT);
            fos.close();
            fis.close();
         }
         else
         {
            zpracuj(dvouciferne(),GRAF);
         }
      }

   }


Zdá se, že faraon odjel do egypta zkontrolovat sfingy takže uvítám pomoc od kohokoliv...

Jo, málem bych zapoměl, jak si můžete všimnout, javadoc komentáře nejsou vyplněné jelikož nevím, jak přesně by to mělo fungovat takže kdyby jste mi to mohl někdo objasnit, byl bych velice vděčný... ;)


Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 6 hostů