NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Intervaly postup

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Kafac
Člen
Avatar
Kafac:4.11.2015 20:45

Ahoj, chtěl bych se Vás zeptat, jaký byste použili postup při psaní programu na výpočet intervalů. Budu tam určitě používat switch, kde si asi uživatel bude vybírat mezi uzavřenými a otevřenými intervaly (zleva, zprava) + pak uživatel zadá ještě jeden interval, kde si ještě vybere jaký mezi nimi bude vztah (sjednocení..). Nakonec uživatel zadá číslo a program má vypsat, jestli to číslo do toho intervalu patří nebo ne. Děkuji za všechny nápady :).

Odpovědět
4.11.2015 20:45
"Lepší, než předpovídat budoucnost, je vytvořit ji." Bill Gates
Avatar
Kafac
Člen
Avatar
Kafac:5.11.2015 19:30

Poradí mi někdo prosím?

Nahoru Odpovědět
5.11.2015 19:30
"Lepší, než předpovídat budoucnost, je vytvořit ji." Bill Gates
Avatar
Richard H.
Tvůrce
Avatar
Odpovídá na Kafac
Richard H.:5.11.2015 19:59

Nějak jsem nepochopil s čím chceš přesně pomoct

Nahoru Odpovědět
5.11.2015 19:59
Malý užitečný manuál je vždy lepší než bichle k ničemu.
Avatar
Kafac
Člen
Avatar
Odpovídá na Richard H.
Kafac:5.11.2015 20:02

Napsat nějaký podle vás dobrý postup. Jako třeba udělej switch, kde pak budou i podmínky nebo tak nebo abych to udělal nějak jinak ještě. Prostě myslím nějaký dobrý algoritmus na to, hlavně aby fungoval.

Nahoru Odpovědět
5.11.2015 20:02
"Lepší, než předpovídat budoucnost, je vytvořit ji." Bill Gates
Avatar
vlastajuracka:6.11.2015 9:26

Hele switch bych tam nedaval! Příde mi to zbytečný ;) Ale jko určitě ho tam můžeš dát ;) Udělal bych to nějak tkhle za 2 proměnný bych si dosadil jednu hranici intervalu a druhou potom bych tam přes vstup zadal jestli to chci mít otevřený zleva nebo zprava a tk druhej uděláš stejně ;) Zadáš číslo který chceš najít uděláš si podmínky jestli má bejt interval otevřenej nebo zavřenej a jestli je v něm to číslo když jo tak ho vypíše jinak ne :p sjednocení a průnik těch čísel bych udělal že bych si za 2 pole dosadil ty čísla pomocí for cyklu a pak nějakou metoudou bych je vypsal nebo si napiš přímo nějakou svojí ;) snad sem ti aspon nadhodil nakou myslenku :D Kdyby si potřeboval pomoc napiš rad ti stim kodem pomužu :)

 
Nahoru Odpovědět
6.11.2015 9:26
Avatar
Kafac
Člen
Avatar
Kafac:7.11.2015 22:09

Ahoj, měl jsem již program z části hotový, ale pak jsem si něco uvědomil a musel jsem to předělat, jsem zase na začátku a řeším takový menší problém, čísla mi to vypíše, vždycky obráceně a u toho druhého case mi to dokonce nevypíše nic, napsal by mi sem někdo prosím, jak to upravit, aby obojí fungovalo,tak jak má ? :)

public static void main(String[] args) {
       Scanner sc = new Scanner(System.in);
       int levyI;
       int levyI2;
       int pravyI;
       int pravyI2;
       System.out.println("Vítejte v programu na výpočet intervalu");
       System.out.println("Vyberte se, jak chcete, aby levý interval vypadal");
       System.out.println("1- otevřený interval");
       System.out.println("2- zleva otevřený a zprava uzavřený interval");
       System.out.println("3- uzavřený interval");
       System.out.println("4- zprava uzavřený a zleva otevřený interval");
       int volba=sc.nextInt();
       switch(volba)
       {
           case 1:
               System.out.println("Zadejte první číslo levého intervalu:");
               levyI=sc.nextInt();
               System.out.println("Zadejte druhé číslo levého intervalu:");
               levyI2=sc.nextInt();
               if(levyI > levyI2)
               {
                   System.out.print("Levý interval: "+ "( ");
                   for (int i=levyI-1; i>levyI2; i--)
                   {
                       System.out.print(i+" ");
                   }
                   System.out.println(") ");
               }else{
                   System.out.print("Levý interval: "+"( ");
               for (int i=levyI+1;i<levyI2;i++)
               {
                   System.out.print(i+" ");
               }
                   System.out.println(") ");
               }
               break;
           case 2:
                System.out.println("Zadejte první číslo levého intervalu:");
               levyI=sc.nextInt();
               System.out.println("Zadejte druhé číslo levého intervalu:");
               levyI2=sc.nextInt();
               if(levyI > levyI2)
               {
                   System.out.print("Levý interval: "+"( ");
                   for (int i=levyI-1; i==levyI2; i--)
                   {
                       System.out.print(i + " ");
                   }
                   System.out.println("> ");
               }
               break;
       }

   }
Nahoru Odpovědět
7.11.2015 22:09
"Lepší, než předpovídat budoucnost, je vytvořit ji." Bill Gates
Avatar
Kafac
Člen
Avatar
Odpovídá na Kafac
Kafac:8.11.2015 10:11

Chci tam pak ještě zkusit udělat 2 switch na pravý interval + vztah mezi nimi a aby si uživatel zadal číslo a vypsalo to, jestli tam to číslo patří.

Nahoru Odpovědět
8.11.2015 10:11
"Lepší, než předpovídat budoucnost, je vytvořit ji." Bill Gates
Avatar
pocitac770
Tvůrce
Avatar
pocitac770:8.11.2015 10:33

Problém 1:

for (int i=levyI+1;i<levyI2;i++)

V případě, že je číslo 1 větší něž číšlo 2, tak ty začneš u čísla 1 a odčítáš od něj postiupně a výsledky vypisuješ, tzn. ti to jasně vypíše obráceně. Musíš začít u čísla 2 a postupně přičítat až k číslu 1.

Problém 2:

for (int i=levyI-1; i==levyI2; i--)

Tenhle řádek bych přeložil jako:

Začni u čísla i, které bude rovno levyI -1. DOKUD BUDE i ROVNO levyI2, TAK OPAKUJ CYKLUS, a pokaždé odečti od i 1.

Tzn. Cyklus ani nezačne, protože ani na začátku nebude i rovno levyI :)

Problém X: celý tvůj "princip" vypsání obsahu intervalu do konzole je chybný, protože vlastně vypisuješ jen čísla celá.
Otevřený interval je interval, kde přesně nemůžeme určit hranici, např. (3;9> normálně začíná na 3,000000000...1, u tebe začíná přesně na 4. Nehledě na to, že interval má nekonečno deserinných členů :)

 
Nahoru Odpovědět
8.11.2015 10:33
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na Kafac
pocitac770:8.11.2015 10:34

Edit: omylem odesláno 2x a bez "odpovídání".

Editováno 8.11.2015 10:35
 
Nahoru Odpovědět
8.11.2015 10:34
Avatar
Kafac
Člen
Avatar
Odpovídá na pocitac770
Kafac:8.11.2015 12:06

Díky za pomoc :). Ja vím, že interval má hodně desetinných míst a že třeba nemá začínat přesně od tý 4, ale nevím jak bych to udělal, jestli bych to měl dělat třeba v něčem jiným než v int a počítat to třeba ve float? I když právě nevím, jestli by to pomohlo.

Nahoru Odpovědět
8.11.2015 12:06
"Lepší, než předpovídat budoucnost, je vytvořit ji." Bill Gates
Avatar
Tomáš Brůna
Tvůrce
Avatar
Odpovídá na Kafac
Tomáš Brůna:8.11.2015 13:14

mělo by

Nahoru Odpovědět
8.11.2015 13:14
Vi veri universum vivus vici
Avatar
Kafac
Člen
Avatar
Odpovídá na pocitac770
Kafac:8.11.2015 14:15

No má to být práce do školy :D a kdybych tam vypisoval všechna ta desetinná čísla,tak by byl výstup asi hodně dlouhý :D

Nahoru Odpovědět
8.11.2015 14:15
"Lepší, než předpovídat budoucnost, je vytvořit ji." Bill Gates
Avatar
Kafac
Člen
Avatar
Odpovídá na pocitac770
Kafac:8.11.2015 14:17

Upravil jsem to do této podoby zatím

 public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int levyI;
        int levyI2;
        int pravyI;
        int pravyI2;
        System.out.println("Vítejte v programu na výpočet intervalu");
        System.out.println("Vyberte se, jak chcete, aby levý interval vypadal");
        System.out.println("1- otevřený interval");
        System.out.println("2- zleva otevřený a zprava uzavřený interval");
        System.out.println("3- uzavřený interval");
        System.out.println("4- zprava uzavřený a zleva otevřený interval");
        int volba=sc.nextInt();
        switch(volba)
        {
            case 1:
                System.out.println("Zadejte první číslo levého intervalu:");
                levyI=sc.nextInt();
                System.out.println("Zadejte druhé číslo levého intervalu:");
                levyI2=sc.nextInt();
                if(levyI > levyI2)
                {
                    System.out.print("Levý interval: "+ "( ");
                    for (int i=levyI-1; i>levyI2; i--)
                    {
                        System.out.print(i+" ");
                    }
                    System.out.println(") ");
                }else{
                    System.out.print("Levý interval: "+"( ");
                for (int i=levyI+1;i<levyI2;i++)
                {
                    System.out.print(i+" ");
                }
                    System.out.println(") ");
                }
                break;
            case 2:
                 System.out.println("Zadejte první číslo levého intervalu:");
                levyI=sc.nextInt();
                System.out.println("Zadejte druhé číslo levého intervalu:");
                levyI2=sc.nextInt();
                if(levyI > levyI2)
                {
                    System.out.print("Levý interval: "+"( ");
                    for (int i=levyI-1; i>=levyI2; i--)
                    {
                        System.out.print(i + " ");
                    }
                    System.out.println("> ");
                }
 else
                {
                    System.out.print("Levý interval: "+ "( ");
                    for(int i=levyI+1;i<=levyI2; i++)
                    {
                        System.out.print(i+" ");
                    }
                    System.out.println("> ");
 }
                break;
        }
}
Editováno 8.11.2015 14:18
Nahoru Odpovědět
8.11.2015 14:17
"Lepší, než předpovídat budoucnost, je vytvořit ji." Bill Gates
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na Kafac
pocitac770:8.11.2015 17:04

Zatím jsi stále (co se koukám) nedořešil to vypisování pozpátku (jestli se nemýlým :-) ). Kód u všech možností bude vlastně stejný, jen s upravenými operátory, takže spíš než do ručního opisování bych energii vložil do opravy chyb a následného fungování :D

 
Nahoru Odpovědět
8.11.2015 17:04
Avatar
Kafac
Člen
Avatar
Odpovídá na pocitac770
Kafac:8.11.2015 19:38

No, už to funguje aspoň trochu podle mého očekávání, teď jsem na tom takhle :

public static void main(String[] args) {
       Scanner sc = new Scanner(System.in);
       int levyI;
       int levyI2;
       int pravyI;
       int pravyI2;
       System.out.println("Vítejte v programu na výpočet intervalu");
       System.out.println("Vyberte se, jak chcete, aby levý interval vypadal");
       System.out.println("1- otevřený interval");
       System.out.println("2- zleva otevřený a zprava uzavřený interval");
       System.out.println("3- uzavřený interval");
       System.out.println("4- zleva uzavřený a zprava otevřený interval");
       int volba=sc.nextInt();
       switch(volba)
       {
           case 1:
               System.out.println("Zadejte první číslo levého intervalu:");
               levyI=sc.nextInt();
               System.out.println("Zadejte druhé číslo levého intervalu:");
               levyI2=sc.nextInt();
               if(levyI > levyI2)
               {
                   System.out.print("Levý interval: "+ "( ");
                   for (int i=levyI-1; i>levyI2; i--)
                   {
                       System.out.print(i+" ");
                   }
                   System.out.println(") ");
               }else{
                   System.out.print("Levý interval: "+"( ");
               for (int i=levyI+1;i<levyI2;i++)
               {
                   System.out.print(i+" ");
               }
                   System.out.println(") ");
               }
               break;
           case 2:
                System.out.println("Zadejte první číslo levého intervalu:");
               levyI=sc.nextInt();
               System.out.println("Zadejte druhé číslo levého intervalu:");
               levyI2=sc.nextInt();
               if(levyI > levyI2)
               {
                   System.out.print("Levý interval: "+"( ");
                   for (int i=levyI-1; i>=levyI2; i--)
                   {
                       System.out.print(i + " ");
                   }
                   System.out.println("> ");
               }
else
               {
                   System.out.print("Levý interval: "+ "( ");
                   for(int i=levyI+1;i<=levyI2; i++)
                   {
                       System.out.print(i+" ");
                   }
                   System.out.println("> ");
}
               break;
           case 3:
               System.out.println("Zadejte první číslo levého intervalu:");
               levyI=sc.nextInt();
               System.out.println("Zadejte druhé číslo levého intervalu:");
               levyI2=sc.nextInt();
               if(levyI >levyI2)
               {
                   System.out.print("Levý interval: "+"< ");
                   for (int i=levyI; i>=levyI2; i--)
                   {
                       System.out.print(i+" ");
                   }
                   System.out.println("> ");

               }
else{
                   System.out.print("Levý interval: "+"< ");
                   for (int i=levyI;i<=levyI2;i++)
                   {
                       System.out.print(i+" ");

                   }
                   System.out.println("> ");
}
               break;
           case 4:
               System.out.println("Zadejte první číslo levého intervalu:");
               levyI=sc.nextInt();
               System.out.println("Zadejte druhé číslo levého intervalu:");
               levyI2=sc.nextInt();
               if(levyI>levyI2)
               {
                   System.out.print("Levý interval: "+"< ");
                   for(int i=levyI; i>levyI2; i--)
                   {
                       System.out.print(i+" ");
                   }
                   System.out.println(") ");
               }
else{
               System.out.print("Levý interval: "+"< ");
               for (int i=levyI; i<levyI2; i++)
               {
                   System.out.print(i+" ");
               }
               System.out.println(") ");
               }


               break;

       }
        System.out.println("Vítejte v programu na výpočet intervalu");
       System.out.println("Vyberte se, jak chcete, aby pravý  interval vypadal");
       System.out.println("1- otevřený interval");
       System.out.println("2- zleva otevřený a zprava uzavřený interval");
       System.out.println("3- uzavřený interval");
       System.out.println("4- zleva uzavřený a zprava otevřený interval");
       int volbaP=sc.nextInt();
       switch(volbaP)
       {
           case 1:
               System.out.println("Zadejte první číslo pravého intervalu:");
               levyI=sc.nextInt();
               System.out.println("Zadejte druhé číslo pravého intervalu:");
               levyI2=sc.nextInt();
               if(levyI > levyI2)
               {
                   System.out.print("Pravý interval: "+ "( ");
                   for (int i=levyI-1; i>levyI2; i--)
                   {
                       System.out.print(i+" ");
                   }
                   System.out.println(") ");
               }else{
                   System.out.print("Pravý interval: "+"( ");
               for (int i=levyI+1;i<levyI2;i++)
               {
                   System.out.print(i+" ");
               }
                   System.out.println(") ");
               }
               break;
           case 2:
                System.out.println("Zadejte první číslo pravého intervalu:");
               levyI=sc.nextInt();
               System.out.println("Zadejte druhé číslo pravého intervalu:");
               levyI2=sc.nextInt();
               if(levyI > levyI2)
               {
                   System.out.print("Pravý interval: "+"( ");
                   for (int i=levyI-1; i>=levyI2; i--)
                   {
                       System.out.print(i + " ");
                   }
                   System.out.println("> ");
               }
else
               {
                   System.out.print("Pravý interval: "+ "( ");
                   for(int i=levyI+1;i<=levyI2; i++)
                   {
                       System.out.print(i+" ");
                   }
                   System.out.println("> ");
}
               break;
           case 3:
               System.out.println("Zadejte první číslo pravého intervalu:");
               levyI=sc.nextInt();
               System.out.println("Zadejte druhé číslo pravého intervalu:");
               levyI2=sc.nextInt();
               if(levyI >levyI2)
               {
                   System.out.print("Pravý interval: "+"< ");
                   for (int i=levyI; i>=levyI2; i--)
                   {
                       System.out.print(i+" ");
                   }
                   System.out.println("> ");

               }
else{
                   System.out.print("Pravý interval: "+"< ");
                   for (int i=levyI;i<=levyI2;i++)
                   {
                       System.out.print(i+" ");

                   }
                   System.out.println("> ");
}
               break;
           case 4:
               System.out.println("Zadejte první číslo pravého intervalu:");
               levyI=sc.nextInt();
               System.out.println("Zadejte druhé číslo pravého intervalu:");
               levyI2=sc.nextInt();
               if(levyI>levyI2)
               {
                   System.out.print("Pravý interval: "+"< ");
                   for(int i=levyI; i>levyI2; i--)
                   {
                       System.out.print(i+" ");
                   }
                   System.out.println(") ");
               }
else{
               System.out.print("Pravý interval: "+"< ");
               for (int i=levyI; i<levyI2; i++)
               {
                   System.out.print(i+" ");
               }
               System.out.println(") ");
               }


               break;

       }



   }

teď potřebuju udělat ještě switch na vztahy mezi nima,kde si uživatel tuším vybere ze 2 možností (sloučení a to druhý teď nevím :D) a pak ještě zadá číslo a program mu vypíše,jestli tam to číslo patří nebo ne. Akorát bych ti (vám) byl vděčný, kdyby jste mi poradili,jak tu proměnnou i z for cyklu, někam uložit nebo aby se aspoň dala používat i jinde,než v tom switchi,jelikož jí budu muset používat i v tom dalším switchi a pak v těch podmínkách,kde bude jestli tam to číslo patří nebo ne (nebo si to aspoň myslím).

Nahoru Odpovědět
8.11.2015 19:38
"Lepší, než předpovídat budoucnost, je vytvořit ji." Bill Gates
Avatar
pocitac770
Tvůrce
Avatar
pocitac770:8.11.2015 20:26

i je proměnná používaná jako "projížděč" toho cyklu, neustále se mění, pak nechápu, co přesně a proč to chceš.

 
Nahoru Odpovědět
8.11.2015 20:26
Avatar
Kafac
Člen
Avatar
Odpovídá na pocitac770
Kafac:8.11.2015 20:50

No potřebuju někam všechna ta čísla uložit,aby až uživatel zadá nějaký číslo,abych mohl pomocí podmínky zjistit jestli tam to číslo je nebo ne.

Nahoru Odpovědět
8.11.2015 20:50
"Lepší, než předpovídat budoucnost, je vytvořit ji." Bill Gates
Avatar
Kafac
Člen
Avatar
Odpovídá na pocitac770
Kafac:8.11.2015 20:52

Levý interval (1 2 3 4 5 6 7)
Pravý interval <16,17,18 )
a ted si vybere uživatel vztah mezi těma intervalama a pak zadá to číslo a program zjistí jestli to číslo by bylo v tom intervalu nebo ne

Nahoru Odpovědět
8.11.2015 20:52
"Lepší, než předpovídat budoucnost, je vytvořit ji." Bill Gates
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na Kafac
pocitac770:8.11.2015 21:04

Dobře, a co tohle (zároveň by to zjednodušilo kód):

int[] pole;
.....
switch.......
    case 1:
    pole = [nějakej výpočet na počet čísel]
    for(int i......){
        ....
        doplňování prvků do pole je jedno v jakým pořadí
        ....
    }
    ostatní for cykly
    ostatní casy
Arrays.sort(pole)
for(int i : pole){
    postupné vypisování prvků
}
a ty čísla máš mimo switch, hodně zábavy při kódění
 
Nahoru Odpovědět
8.11.2015 21:04
Avatar
Kafac
Člen
Avatar
Odpovídá na pocitac770
Kafac:8.11.2015 21:11

:D díky,můžu to zkusit,ale mám to mít poslaný do půlnoci a zachvíli budu muset jít pryč už :/,ale zkusím to no

Nahoru Odpovědět
8.11.2015 21:11
"Lepší, než předpovídat budoucnost, je vytvořit ji." Bill Gates
Avatar
pocitac770
Tvůrce
Avatar
pocitac770:8.11.2015 23:45

Vyřešeno v soukrom. zprávách.

Akceptované řešení
+20 Zkušeností
Řešení problému
 
Nahoru Odpovědět
8.11.2015 23:45
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 21 zpráv z 21.