» »

Naloga (Java)

Naloga (Java)

Ciklamen ::

Pozdravčič.

Imam eno question, in sicer kako bi:
S pomocjo “risanja” v dvodimenzionalno tabelo narišite stolpicni diagram, ki predstavlja vsebino
tabele PODATKI (tipa int[]).

Malo samo oporne točke bi rabil, kaj uporabit, kako itd. :)

Hvala že v naprej!
- End of the Post ->

sandmat ::

narediš 2d tabelo, ki ima 2. dimenzijo velikosti max(podatki), notri po vrsti filaš kvadratke(ascii: B2) toliko(od 0-n), kjer je n i-ti podatek v podatkih. vsak int v 2d tabeli izpišeš kot char in boš dobil lep histogram

Ciklamen ::

Aja naj še povem, da vsak stolpec histograma vsebuje 3 znake (+++ ali --- ali ***), ter da je največji podatek v PODATKI enak višini histograma, ter razmak med vsakim stolpcem 2 mesti.
- End of the Post ->

sandmat ::

no, pol pa B2 zamenjaj z +++ in še enkrat gor preberi kar sm ti napisal. tisto o višini histograma sm ti tud napisal, kako dobiš.

Ciklamen ::

Najlepša hvala sandmat :)
- End of the Post ->

sandmat ::

np. si že rešil?

Ciklamen ::

Evo na 3/4 sem gotov, samo finese še :)
- End of the Post ->

sandmat ::

glej, da boš pejstnu slikco :D

nightrage ::

Kaj se boš matral z risanjem grafov, če imaš eno luštno knjižnico za te zadeve. link

Ciklamen ::

nightrage, to imamo za seminarsko na faksu, kaj druga, kot spisat kodo ne pride v poštev :)
- End of the Post ->

sandmat ::

sej ne riše grafov ampak jih "piše" :P

Ciklamen ::

 Slikca Diagrama

Slikca Diagrama



Kodo bom zalepil jutri, zaradi varnosti da mi je kdo ne pokrade :P
- End of the Post ->

sandmat ::

uh, ja štekam, kaj naj bi stvar delala. Jst sm ti pejstal neki mal drugačnega na ZS. :) no, upam, da si opravil zagovor, če si ga imel :)

technolog ::

Tole je moja koda, samo ne je prekopirat, ker te bo Fuerst "zašil".

public class Diagram {
    private static final int[] PODATKI = {15, 21, 7, 12, 18};
    private static final int MAX_VISINA = 10;
    private static final int SIRINA_STOLPCA = 3;
    private static final int RAZMAK_MED_STOLPCI = 2;
    private static final char[] POLNILO = {'+', '-', '*', 'o', 'x'};

    public static void main(String[] args) {
        int najvec=Integer.MIN_VALUE;
        for (int i=0; i<PODATKI.length; ++i) najvec=Math.max(najvec, PODATKI[i]);
       
        for (int i=0; i<MAX_VISINA; ++i) {
            for (int j=0; j<PODATKI.length; ++j) {
                if ((int)Math.round(1.0*PODATKI[j]/najvec*MAX_VISINA) >= MAX_VISINA-i) {
                    for (int k=0; k<SIRINA_STOLPCA; ++k) System.out.print(POLNILO[j]);
                    for (int k=0; k<RAZMAK_MED_STOLPCI; ++k) System.out.print(" ");
                } else {
                    for (int k=0; k<RAZMAK_MED_STOLPCI+SIRINA_STOLPCA; ++k) System.out.print(" ");
                }
            }
            System.out.println();
        }
    }
}

Zgodovina sprememb…

Ice-Heki ::

No, jest sm naredu sicer z več metodami (razbil technologov main na več delov) zaradi možnih nadgradenj (pa da sam argumente menjam). Vprašanje je, kaj bomo dobili jutri zjutraj ...

Ciklamen ::

public class Naloga2 {

    private static final int[] Podatki = {15,21,7,12,18};
	private static final int Visina = 10;
    private static final int Sirina = 3;
    private static final int Razmak = 2;
    private static final char[] Polnilo = {'+', '-', '*', '|', 'x'};
 
	public static void main(String[] args) {

		izrisiTabelo();
		int MaxSirinaTabele = 5*3+4*2;
		int skSirStolpca = Sirina + Razmak;
	}
  
	private static char[][] izpisTabele() {
		char[][] izpisTabela = new char[Visina][(Sirina+Razmak)*Polnilo.length];
		
		
		//poišče indeks največjega člena v tabeli.
		int pravaVisina = Visina - 1;
		int indeksNajvecjega = 0;
		indeksNajvecjega = indeksNajvecji();
    
		for(int i = 0; i < Polnilo.length; i++) {
		// Izpisujemo vrstico
			int vrstica = (Podatki[i]/2);
			if(i == indeksNajvecjega) {
				vrstica = pravaVisina; 
		// Izpisujemo Polnilo (od začetnega polnila proti zadnjemu)
			}  
			for(int j = 0; j < vrstica; j ++) {
				izpisTabela[j][i] = Polnilo[i];
			}
		}
		return izpisTabela;
	}
	
	//Preverja, ali je število največje in ga poišče v podatkih ter določi kot največjo vrednost za diagram
	private static int indeksNajvecji() {
		int idNaj = 0;
		for (int d = 0; d < Podatki.length; d++) {
			if (Podatki[d] > idNaj) {
				idNaj = d; //Vračamo indeks in ne vrednost podatka
			}
		}
		return idNaj;
	}

	private static void izrisiTabelo() {
		char[][] izpisTabela = izpisTabele();
		//Izpisujemo višino stolpcev, da ne gredo prek določene vrednosti
		int pravaVisina = Visina - 1; 
		for (int i = pravaVisina; i > 0; i--) {
			for(int j = 0; j < Podatki.length; j++) {
			    //Trikrat se ponovi izpis Polnilo, da dobimo 3 stolpce z polnilom
				for(int l = 0; l < Sirina; l++) {
				  System.out.print(izpisTabela[i][j]);
				}
				//Izpišemo Razmak med stolpci, kot od nas zahteva naloga (ter tudi zaradi lepše preglednosti)
				for(int stolpec = 0; Razmak > stolpec; stolpec++) {
			      System.out.print(" ");
				}
			}
			System.out.println();
		}
	}
}


Ekola, to je moja verzija, ena izmed mnogih rešitev :)
- End of the Post ->


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Java zvezdice

Oddelek: Programiranje
71295 (1099) mihor
»

[android] vstavljanje slike

Oddelek: Programiranje
71234 (1131) messi
»

[android] crash

Oddelek: Programiranje
61332 (1141) messi
»

[JAVA]Kako dostopati do privaten konstante podrazreda iz nadrazreda

Oddelek: Programiranje
71239 (1167) alexa-lol
»

[C++] for {}

Oddelek: Programiranje
291706 (1400) Gundolf

Več podobnih tem