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 10. 01. 2016 20:36

Adell
Zelenáč
Příspěvky: 7
Reputace:   
 

Naprogramování pole

Zdravím,
programování mi nejde úplně nejlíp, ale chodím do třídy, kde to nejde skoro nikomu, tak moc prosím o jakoukoliv pomoc. Dostali jsme za úkol vytvořit pole, načtené ze souboru, kam uživatel zadá různé hodnoty, které si vymyslí. Program je pak převede do pole. Pole bude rozděleno úhlopříčkou z pravého horního rohu. Z levé horní části se vybere 3 nejmenší číslo. Z pravá dolní půlky se vybere 3 největší číslo. Obě čísla se i s indexy míst vypíší na obrazovku. Neumím to moc dobře vysvětlit. V programování jsem opravdu začátečník a uvítala bych každou radu. Největší problém mám s načtením pole z .txt souboru a vybrání správného čísla.
Předem děkuji za jakoukoliv odpověď

Offline

  • (téma jako vyřešené označil(a) gladiator01)

#2 10. 01. 2016 22:50

check_drummer
Příspěvky: 4652
Reputace:   101 
 

Re: Naprogramování pole

↑ Adell:
Ahoj, jde o dvojrozměrné pole (tj. matici)? je předem dána velikost pole a nebo ji máte nějak vydedukovat? V jakém to má být jazyce?


"Máte úhel beta." "No to nemám."

Offline

 

#3 11. 01. 2016 16:10

Adell
Zelenáč
Příspěvky: 7
Reputace:   
 

Re: Naprogramování pole

velikost dvojrozměrného pole máme vydedukovat a má to být v jazyku java

Offline

 

#4 11. 01. 2016 21:08 Příspěvek uživatele Xellos byl skryt uživatelem Xellos. Důvod: Java? ale fuj

#5 12. 01. 2016 16:31

check_drummer
Příspěvky: 4652
Reputace:   101 
 

Re: Naprogramování pole

A je dán formát, v jakém budou ta čísla v souboru uložena? Např. co řádek souboru, to řádek v poli?...
Čísla mohou být jen přirozená?


"Máte úhel beta." "No to nemám."

Offline

 

#6 12. 01. 2016 17:06

Adell
Zelenáč
Příspěvky: 7
Reputace:   
 

Re: Naprogramování pole

Jo, jeden řádek v souboru je jeden řádek v poli. Čísla mohou být pouze celá, záporná i kladná.
příklad: uživatel zadá do textového dokumentu čísla(pole zadává přesně takto):
5,3,8
-2,4,12
50,-15,1
program vypíše:
3.nejmenší je 4 leží na souřadnici 2x2
3.největší je 8 leží na souřadnici 1x3 (nebo 3x1, nejsem si jistá, které se píše první)

Offline

 

#7 12. 01. 2016 18:28

Xellos
Příspěvky: 524
Škola: MFF CUNI, Bc. (13-16)
Reputace:   36 
 

Re: Naprogramování pole

↑ check_drummer:

Presny format nie je nutne treba (staci aby boli cele), len si treba napisat vlastny parser.

Priklad pre citanie zo standardneho vstupu, este ostava presmerovat zo suboru.

Offline

 

#8 13. 01. 2016 09:52

Honzc
Příspěvky: 4551
Reputace:   241 
 

Re: Naprogramování pole

↑ Adell:
Já tedy nevím, ale mně 3.nejmenší číslo vychází 1 (a ne 4)

Offline

 

#9 13. 01. 2016 10:37

Adell
Zelenáč
Příspěvky: 7
Reputace:   
 

Re: Naprogramování pole

Pole bude rozděleno úhlopříčkou z pravého horního rohu. Z levé horní části se vybere 3 nejmenší číslo. Číslo se vybírá jen z poloviny, proto 4. 1 v té půlce, z které vybírám nejmenší číslo ani neni

Offline

 

#10 13. 01. 2016 22:04

check_drummer
Příspěvky: 4652
Reputace:   101 
 

Re: Naprogramování pole

↑ Adell:
A bude ta matice vždy čtvercová?
Umíš načíst řádek ze vstupu?
Znáš základy javy? Umíš rozparsovat daný řetězec do pole?


"Máte úhel beta." "No to nemám."

Offline

 

#11 14. 01. 2016 19:19

Adell
Zelenáč
Příspěvky: 7
Reputace:   
 

Re: Naprogramování pole

Předpokládám, že matice bude čtvercová, takže ANO. Řádek načíst a vložit do pole umím, ale nevím, jak na další řádky pole, ani jestli je to ten správný způsob. Já to píšu takhle:
public static void main(String[] args) {
        String adr="C:\\temp\\";
        String text="";
        String[] poleS=null;
        try{
        BufferedReader vst2=new BufferedReader(new FileReader(adr+"pole.txt"));
        text=vst2.readLine();
        poleS=text.split(" ");
        vst2.close();
        }catch(IOException E){
            System.out.println("Chyba IO!");
        }
        int[] pole=new int[poleS.length];
        for(int i=0;i<pole.length;i++){
            pole[i]=Integer.parseInt(poleS[i]);
            System.out.print(pole[i]+" ");
        }
    }
Jenže pak nevím, jak dál. Tady jsem skončila a ať napíšu cokoliv tak to nefunguje. Možná na to existuje nějaký jiný lepší způsob, ale ten já najít neumím. Nebo ho ani neznám.

Offline

 

#12 14. 01. 2016 22:52

check_drummer
Příspěvky: 4652
Reputace:   101 
 

Re: Naprogramování pole

↑ Adell:
No já javu neovládám, spíš jsem chtěl poradit jak na to algoritmicky. A co ti nejde - načíst druhý řádek?


"Máte úhel beta." "No to nemám."

Offline

 

#13 15. 01. 2016 09:29

gladiator01
Místo: Jindřichův Hradec
Příspěvky: 1587
Škola: ZČU FAV - SWI
Pozice: absolvent
Reputace:   53 
Web
 

Re: Naprogramování pole

↑ Adell:
musíš číst v cyklu (to znamená, že mezi BufferedReader vst2 a vs.close bude cyklus a zpracování řádku) dokud nedojdeš na konec souboru a v každém kole si ten řádek uložit (resp. ho zpracovat a uložit čísla).  Takhle čteš jenom jeden řádek.

Na internetu jsou tucty návodů na práci se soubory.


Naděje jako svíce jas, potěší srdce štvané, čím temnější je noční čas, tím zářivěji plane.
VIVERE - MILITARE EST (Seneca)
Vím, že nic nevím. - Sokrates

Offline

 

#14 15. 01. 2016 11:45

Adell
Zelenáč
Příspěvky: 7
Reputace:   
 

Re: Naprogramování pole

no, já si načtu první řádek a pak nevím, co s ním. Jak ho někam uložit, nebo jak načíst další pomocí jednoho cyklu. Já javu taky moc neovládám, nevybírala jsem si v čem budu programovat a neučím se ji moc dlouho a když najdu nějaký návod na internetu, tak ho většinou nepochopím, což není správně a pracovat s něčím, co nechápu se mi nechce.

Offline

 

#15 15. 01. 2016 19:32 — Editoval gladiator01 (15. 01. 2016 19:33)

gladiator01
Místo: Jindřichův Hradec
Příspěvky: 1587
Škola: ZČU FAV - SWI
Pozice: absolvent
Reputace:   53 
Web
 

Re: Naprogramování pole

Code:

public class Main {

    public static void main(String[] args) {
        String adr = "";
        String text = "";

               //seznam radku - kazdy radek je pole hodnot rozparsovanych split()
        List<String[]> poleS = new ArrayList<String[]>();
        
        try {
            BufferedReader vst2 = new BufferedReader(new FileReader(adr
                    + "pole.txt"));
                       //dokud se nedojde nakonec souboru
                       //tak cteme radku a ukladame jednotlive hodnoty
            while ((text = vst2.readLine()) != null) {
                poleS.add(text.split(" "));
            }

            vst2.close();

        } catch (IOException E) {
            System.out.println("Chyba IO!");
        }

        int[][] pole = new int[poleS.size()][poleS.get(0).length];
        int delka = pole.length; //delka pole je delka seznamu
        int sirka = pole[0].length; //sirka - delka jednoho radku

        for (int i = 0; i < delka; i++) {

            for (int j = 0; j < sirka; j++) {
                
                pole[i][j] = Integer.parseInt(poleS.get(i)[j]);

                System.out.print(pole[i][j] + " ");
            }
            System.out.println();
        }

    }
}

co je za strukturu arraylist a jak se pouziva si najdi, já nemam cas. a nepouzivej absolutní cesty.


Naděje jako svíce jas, potěší srdce štvané, čím temnější je noční čas, tím zářivěji plane.
VIVERE - MILITARE EST (Seneca)
Vím, že nic nevím. - Sokrates

Offline

 

#16 22. 01. 2016 14:28

Adell
Zelenáč
Příspěvky: 7
Reputace:   
 

Re: Naprogramování pole

A mohla bych se ještě zeptat co přesně dělá řádek:
int[][] pole = new int[poleS.size()][poleS.get(0).length];
pole[i][j] = Integer.parseInt(poleS.get(i)[j]);       
tam jen to get

Offline

 

#17 22. 01. 2016 18:26

gladiator01
Místo: Jindřichův Hradec
Příspěvky: 1587
Škola: ZČU FAV - SWI
Pozice: absolvent
Reputace:   53 
Web
 

Re: Naprogramování pole

každý prvek toho seznamu poleS je pole o několika prvcích (jednotlivá čísla na řádku)

int[][] pole = new int[poleS.size()][poleS.get(0).length];
vytvori nove 2d pole s poctem radku o delce toho seznamu a sloupcu o delce prvniho radku seznamu
(poleS.get(0).length je delka prvniho radku - velikost toho pole)

poleS.get(i)[j] vybere i-ty radek seznamu a j-te cislo


Naděje jako svíce jas, potěší srdce štvané, čím temnější je noční čas, tím zářivěji plane.
VIVERE - MILITARE EST (Seneca)
Vím, že nic nevím. - Sokrates

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson