Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 27. 02. 2012 22:28

Apendix
Zelenáč
Příspěvky: 3
Reputace:   
 

JAVA-Program matice

Ahoj všichni, mám problém. Dostal jsem ve škole úkol udělat program a nevím si stím rady. Mohl by mi někdo pomoci?

Zadnání:
Napište program, který bude pracovat s maticí NxN. Velikost matice bude odvozena od vstupního textu, čili N = počet znaků vloženého textu. Program bude mít 4 základní funkce:
1. Inicializace matice - Program vyzve uživatele k zadání textu. Poté vytvoří matici NxN a inicializuje ji čísly 1 .. NxN
2. Diagonála - Program provede vynulování hlavní diagonály
3. Dolní trojúhelník - Program vynuluje dolní trojúhelníkovou matici (diagonála musí zůstat nezměněna)
4. Výpis matice - Program vypíše aktuální stav matice

Moje zpracování(dost mozny ze tam mam chyby):

package domaci_ukol;
import java.util.Scanner;
public class Domaci_ukol {

private static String jmenoString;
private static int matice[][];
private static int i;
private static void printMenu() {
System.out.println("Menu:\n"
+ "1 .. Zadat Jmeno\n"
+ "2 .. Inicializace matice\n"
+ "3 .. Diagonala\n"
+ "4 .. Dolni trojuhelnik\n"
+ "5 .. Vypis matice\n"
+ "6 .. Menu\n"
+ "7 .. Konec");
}
// Nacteni INT ze vstupu
private static int readInt() {
int d;
Scanner input = new Scanner(System.in);
d = input.nextInt();
if (d>7)
System.out.println("Volba "+d+". neni definovana");
switch (d){
case 1:
menu1();
break;
case 2:
menu2();
break;
case 3:
menu3();
break;
case 4:
menu4();
break;
case 5:
menu5();
break;
case 6:
printMenu();
break;
case 7:
System.exit(0);
break;
}
return input.nextInt();

}
// Nacteni STRING ze vstupu
private static String readString() {
String input = jmenoString;
i = jmenoString.length();
return input;
}
private static void menu1() {
System.out.println("Zadejte jmeno");
Scanner sc = new Scanner(System.in);
jmenoString = sc.nextLine();
jmenoString = readString();
}
private static void menu2() {
System.out.println("Matice byla inicializovana");
}
private static void menu3() {
System.out.println("Diagonala vynulovana");
}
private static void menu4() {
System.out.println("Dolni trojuhelnik vynulovan");
}
private static void menu5() {

}
public static void main(String[] args) {
printMenu();
readInt();

}

}


Předem děkuji všem za pomoc:)

Offline

 

#2 27. 02. 2012 23:31

RePRO
Místo: Jihlava
Příspěvky: 363
Škola: AI VŠPJ (09-12, Bc.)
Pozice: programátor
Reputace:   11 
Web
 

Re: JAVA-Program matice

Zdravím,
mohl bys prosím Tě upravit ten kód a dát ho do tagu code? Díky.


Srdcem trochu-programátor, duší rádoby-matematik a povoláním analytik-vývojář.

Offline

 

#3 28. 02. 2012 05:40

Apendix
Zelenáč
Příspěvky: 3
Reputace:   
 

Re: JAVA-Program matice

Code:

package domaci_ukol;
import java.util.Scanner;
public class Domaci_ukol {

private static String jmenoString;
private static int matice[][];
private static int i;
private static void printMenu() {
System.out.println("Menu:\n"
+ "1 .. Zadat Jmeno\n"
+ "2 .. Inicializace matice\n"
+ "3 .. Diagonala\n"
+ "4 .. Dolni trojuhelnik\n"
+ "5 .. Vypis matice\n"
+ "6 .. Menu\n"
+ "7 .. Konec");
}
// Nacteni INT ze vstupu
private static int readInt() {
int d;
Scanner input = new Scanner(System.in);
d = input.nextInt();
if (d>7)
System.out.println("Volba "+d+". neni definovana");
switch (d){
case 1:
menu1();
break;
case 2:
menu2();
break;
case 3:
menu3();
break;
case 4:
menu4();
break;
case 5:
menu5();
break;
case 6:
printMenu();
break;
case 7:
System.exit(0); 
break;
}
return input.nextInt();

}
// Nacteni STRING ze vstupu
private static String readString() {
String input = jmenoString; 
i = jmenoString.length();
return input; 
}
private static void menu1() {
System.out.println("Zadejte jmeno");
Scanner sc = new Scanner(System.in);
jmenoString = sc.nextLine();
jmenoString = readString();
}
private static void menu2() {
System.out.println("Matice byla inicializovana"); 
}
private static void menu3() {
System.out.println("Diagonala vynulovana");
}
private static void menu4() {
System.out.println("Dolni trojuhelnik vynulovan"); 
}
private static void menu5() {

}
public static void main(String[] args) {
printMenu();
readInt();

}

}


Předem děkuji všem za pomoc:)

Offline

 

#4 28. 02. 2012 15:42 — Editoval RePRO (28. 02. 2012 15:53)

RePRO
Místo: Jihlava
Příspěvky: 363
Škola: AI VŠPJ (09-12, Bc.)
Pozice: programátor
Reputace:   11 
Web
 

Re: JAVA-Program matice

Zdravím,
tentokrát (výjimečně) budu jenom napovídat, psát kód nebudu. Ten budu psát, pokud budeš hodně v nouzi, takže:

1) Kde je metoda Main? Už jí vidím. Jinak Main bych úplně oddělil... Něco ve smyslu:
 

Code:

    public class Matice 
    {

    }

    public class Domaci_ukol
    {
        public static void main(String[] args)
        {
            // ...
        }
    }

2) Nechápu, proč se někde na školách používá pro čtení třída Scanner. Elegantně a správně se to dělá takto:

Code:

    
     
    System.out.print("Text...");
    
    //  přiřadíme
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
     
    // a dostaneme to z konzole
    String filename = in.readLine();

3) Má to být domácí úkol, takže všechno budeš mít v jedné třídě Matice. Testy se pak provedou ve třídě Domaci_ukol.
4) Kód se snažíme vždycky odsazovat, aby byl srozumitelnější (takhle je to prasácky napsané).
5) Víš, co znamená klíčové slovo static?
6) Nemůžeme dávat názvy metod jako menu1 - menux. K čemu to vede? Víme potom, co která metoda dělá? Raději použijeme něco ve smyslu: inicializace(), nulovaniDiagonaly().
7) Matice bude privátní třídní proměnná a v konstruktoru jí vytvoříme - to bude ta inicializace, jak máme v zadání.
8) Zkus doplnit algoritmy do funkcí, to znamená: Vynulování hlavní diagonály, vynulování dolní trojúhelníkové matice, výpis matice.

Zkus ten kód dát do té podoby, co jsem napsal. Pak se ozvi. :-)


Srdcem trochu-programátor, duší rádoby-matematik a povoláním analytik-vývojář.

Offline

 

#5 28. 02. 2012 16:05

Apendix
Zelenáč
Příspěvky: 3
Reputace:   
 

Re: JAVA-Program matice

Prosimte a jak udelam to aby po zvolení nejake volby v menu se volba udelala a me se zobrazilo menu a mohl jsem pokracovat(zvolit dalsi volbu)?
+nevím jak uděalt matici + plus envím jak udealt aby se vytvarela podle delky Stringu co zadam...ma to byt tak ze zadam String kterej ma 5 znaku a udela se matice 5x5 prvni řádek 1-5 a dal a posledni radek 20-25.
Jsem mega zacatecnik,tak se dodatecne omlouvam za neznalost:/

dík moc

Offline

 

#6 28. 02. 2012 20:48

RePRO
Místo: Jihlava
Příspěvky: 363
Škola: AI VŠPJ (09-12, Bc.)
Pozice: programátor
Reputace:   11 
Web
 

Re: JAVA-Program matice

Píšu z hlavy, nemám tu překladač, podívej se na to. Ale se začátečníkem to bude těžké.

Code:

package domaci_ukol;
import java.util.Scanner;

    public class Matice 
    {
        private double[][] matice;
        private int N;

        // Inicializace matice
        public Matice(int N)
        {
            this.N = N;
            matice = new double[this.N][this.N];
        }

        // Kopírovací konstruktor kvůli zachování matice
        public Matice(Matice A) 
        { 
            matice = A.matice; 
        }

        public void nulovaniDiagonaly()
        {
            // ... Implementace
        }

        public void dolniTrojuhelnik()
        {
            // ... Implementace
        }

        public void vypisMatice() 
        {
            for (int i = 0; i < N; i++) 
            {
                for (int j = 0; j < N; j++) 
                    System.out.printf("%9.4f ", matice[i][j]);
                System.out.println();
            }
        } 
    }

    public class Menu 
    {
        public Menu() 
        {
            // Naše matice
            Matice m = new Matice(5);
            // Naplnění matice ... implementace

            do
            {
                System.out.print("Zadej volbu: ");
                BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
                // A dostaneme to z konzole
                String d = in.readLine();
                switch (d)
                {
                    case 1: 
                        Matice m1 = new Matice(m);
                        m1.nulovaniDiagonaly();
                    break;
                    case 2: 
                        Matice m2 = new Matice(m);
                        m2.dolniTrojuhelnik();
                    break;
                    case 7: System.exit(0);
                    break;
                }
            }
            while (d != 0);
        }
    }

    public class Domaci_ukol
    {
        static void Main(string[] args)
        {
            Menu m = new Menu();
        }
    }

Srdcem trochu-programátor, duší rádoby-matematik a povoláním analytik-vývojář.

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson