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 sekvenceTaké 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