Pomozte s programováním v Javě

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Uživatelský avatar
Funstorm007
Level 5
Level 5
Příspěvky: 2031
Registrován: říjen 08
Pohlaví: Muž
Stav:
Online

Re: Pomozte s programováním v Javě

Příspěvekod Funstorm007 » 08 lis 2011 21:35

Jo, tak to už Eclipsu nevadí. Uvidíme co to udělá. Teď už se jen zbavit těch chyb na výstupu. Není třeba tu metodu zavolat?

Reklama
Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Pomozte s programováním v Javě

Příspěvekod faraon » 08 lis 2011 21:59

Hm, zavolat metodu znamená předat řízení podprogramu? :-D Proč musí být deset různých názvů pro jednu věc!
Jo, jestli to chápu správně, tak jí musíš zavolat, aby něco udělala, tedy vypočítala nebo vypsala výsledky.
Asi by bylo lepší nejdřív začít nejjednodušší variantou, tím že budeš mít jen jedno pole s vypočítanou posloupností a to si necháš vypsat. Nějak tak jak jsem to myslel původně, pro trénink.
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

Uživatelský avatar
Funstorm007
Level 5
Level 5
Příspěvky: 2031
Registrován: říjen 08
Pohlaví: Muž
Stav:
Online

Re: Pomozte s programováním v Javě

Příspěvekod Funstorm007 » 08 lis 2011 22:10

No, v metodě dalsiClen pocítám tu posloupnost a aby se mi vypsala v metodě main, musim jí nejdřív zavolat. teda aspoň tak jsem to pochopil já. Každou metodu, která něco vraci se musí zavolat do toho mainu...

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Pomozte s programováním v Javě

Příspěvekod faraon » 08 lis 2011 22:24

Jasně, to musíš :) Ale ten výpis nic nevrací, a aby to vypsal tak ho také musíš zavolat. Nebo ho nemáš jako metodu?
A nebo se vykašlat na metody a udělat to všechno hned v tom mainu jako to mám já:

Kód: Vybrat vše

#include <stdio.h>

#define LIMIT 46

int main(void)
    {
    int pole[LIMIT][LIMIT]={0},
        pocet,i,j,cislo,minule,temp;

    printf("Zadej počet prvků Fibonacciho posloupnosti (max. %d): ",LIMIT);
    for (pocet=-1;pocet>LIMIT || pocet<0;scanf("%d",&pocet));

    /* naplnění polí */
    for (i=0;i<=pocet;++i)
        {
        minule=0;
        cislo=1;
        for (j=0;j<=i;++j)
            {
            pole[i][j]=temp=minule;
            minule=cislo;
            cislo+=temp;
            }
        }

    /* výpis polí */
    for (i=0;i<=pocet;++i)
        {
        for (j=0;j<=i;++j)
            if (j)
               printf(", %d",pole[i][j]);
            else
               printf("[%d",pole[i][j]);
        printf("]\n");
        }

    return 0;
    }


Ono by se to teda dalo vypočítat a současně i vypsat v jednom cyklu, a nebylo by k tomu potřeba vůbec žádné pole!
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

Uživatelský avatar
Funstorm007
Level 5
Level 5
Příspěvky: 2031
Registrován: říjen 08
Pohlaví: Muž
Stav:
Online

Re: Pomozte s programováním v Javě

Příspěvekod Funstorm007 » 08 lis 2011 23:14

Já jsem z toho janek. Ty to ještě píšeš v tom Céčku takže mě k tomu všemu mate i to. Je to celý na hovno... Jasně, z vlastní vůle ty metody používat nemusim ale za prvé, když je nebudu používat tak se je nenaučim, za druhé, přijde doba, kdy je stejně budu muset použít no a za třetí, já jsem to nevymyslel a minimálně ty dvě metody tam být musí. Asi tak... Teď momentálně už ani nevím, jak se jmenuju. :?

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Pomozte s programováním v Javě

Příspěvekod faraon » 09 lis 2011 17:37

Promiň, trápit jsem tě nechtěl :D To bylo jen pro ukázku té nejjednodušší a nejrychlejší verze. Šlo tam hlavně o ty smyčky a postup, takhle by to vypadalo rozdělené na funkce (metody):

Kód: Vybrat vše

#include <stdio.h>

#define LIMIT 46

/******************************************************************************/

/* naplnění polí */
void naplnit(int p[LIMIT][LIMIT], int n)
     {
     int i,j,minule,cislo,temp;

     for (i=0;i<=n;++i)
         {
         minule=0;
         cislo=1;
         for (j=0;j<=i;++j)
             {
             temp=minule;
             p[i][j]=temp;
             minule=cislo;
             cislo=cislo+temp;
             }
         }
     }

/******************************************************************************/

/* výpis polí */
void vypsat(int p[LIMIT][LIMIT], int n)
     {
     int i,j;

     for (i=0;i<=n;++i)
         {
         for (j=0;j<=i;++j)
             if (j)
                printf(", %d",p[i][j]);
             else
                printf("[%d",p[i][j]);
         printf("]\n");
         }
     }

/******************************************************************************/

/* hlavní program */
int main(void)
    {
    int pole[LIMIT][LIMIT]={0},pocet;

    printf("Zadej počet prvků Fibonacciho posloupnosti (max. %d): ",LIMIT);
    for (pocet=-1;pocet>LIMIT || pocet<0;scanf("%d",&pocet));

    naplnit(pole,pocet);
    vypsat(pole,pocet);

    return 0;
    }


Je to rozdělené co nejpřehledněji, ale nevím jestli z toho něco poznáš.
Asi to budeme muset udělat tak jako jsem kdysi začal s Pascalem, nejdřív mě naučíš základy Javy, já se tím nějak prokoušu (u Pascalu mi po "proškolení" stačilo čtrnáct dní) a pak začnu doučovat já tebe :lol:
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

Uživatelský avatar
Funstorm007
Level 5
Level 5
Příspěvky: 2031
Registrován: říjen 08
Pohlaví: Muž
Stav:
Online

Re: Pomozte s programováním v Javě

Příspěvekod Funstorm007 » 09 lis 2011 21:29

No jo, jenže problém právě je, že já zase nevim, jak některé věci z Céčka přepsat do Javy...

Zkus se vykašlat na to ošetřování maximální zadavatelné hodnoty ať to nekomplikujeme...

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Pomozte s programováním v Javě

Příspěvekod faraon » 10 lis 2011 04:53

V tom případy tam bude o jeden řádek méně:

Kód: Vybrat vše

/* hlavní program */
int main(void)
    {
    int pole[LIMIT][LIMIT]={0},pocet;

    scanf("%d",&pocet);

    naplnit(pole,pocet);
    vypsat(pole,pocet);

    return 0;
    }
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

Uživatelský avatar
Funstorm007
Level 5
Level 5
Příspěvky: 2031
Registrován: říjen 08
Pohlaví: Muž
Stav:
Online

Re: Pomozte s programováním v Javě

Příspěvekod Funstorm007 » 10 lis 2011 09:22

Tohle prostě nechápu int p[LIMIT][LIMIT], int n.

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Pomozte s programováním v Javě

Příspěvekod faraon » 10 lis 2011 17:53

To první je deklarace dvourozměrného pole a to druhé deklarace proměnné. Obojí je v hlavičce funkce a označuje typy parametrů které se jí budou předávat, použití vidíš dole v tom hlavním programu: naplnit(pole,pocet);

Konstanta LIMIT je deklarovaná na začátku programu příkazem pro preprocesor: #define LIMIT 46, což jí dává hodnotu 46. Dělá se to tak z několika důvodů:
1. Staré pravidlo říká že v kódu programu se jako číslo smí vyskytnout pouze nula a jednička, a ta ještě jen ve výjimečných případech. Je to součást programátorského folklóru a výsledek špatných zkušeností milionů programátorů, kteří si kvůli nedodržení toho pravidla nabili hubu před dávno tebou. Já také :lol:
2. Všechna ostatní čísla deklarují jako konstanty, což především umožňuje snadnou změnu všech najednou při úpravách a opravách programu, stačí změnit jeden řádek místo hledání desítek výskytů toho čísla v různých místech zdrojáku. Určitě na některý z nich zapomeneš, věř mi, dělal jsem to :evil:
3. Název konstanty se splete mnohem hůř než zadávané číslo, takže tě to navíc chrání před překlepy.

Protože lenost je největší hybnou silou pokroku, určitě časem použiješ části svých programů při tvorbě nových. Třeba některou z již hotových funkcí. Jenže tam, dejme tomu ve smyčkách for(), budeš mít napevno zadané hodnoty do kterých se má počítat, takže je budeš muset ručně přepisovat. Pokud tam ale budou konstanty, a navrch v různých programech budeš používat stejné názvy, tak ti stačí na začátku programu napsat pár definicí a všechny ty funkce se ti automaticky upraví pro ten nový program, aniž bys musel udělat jedinou změnu v jejich obsahu!

Jenže pokud vím, Java preprocesor nemá, takže netuším jestli se tohle v ní vůbec dá udělat nějak jinak. Ale to teď řešit nebudeme.
Takže abysme mluvili aspoň trochu stejným jazykem, budeš mě muset naučit jak se předávají parametry (jak se tomu tady říká?) metodám a jak se zpětně předávají výsledky. Jako první mi přelož tohle:

Kód: Vybrat vše

int soucet(int x,int y)
    return x+y;

int main(void)
    {
    int a,b,c;

    a=5;
    b=3;
    c=soucet(a,b);
    printf("%d\n",c);

    return 0;
    }


Ukaž mi jak bude tenhle program vypadat v Javě. Popis:
Metoda soucet dostane dvě proměnné (pracuje s jejich kopiemi, takže ty původní nemůže změnit) a vrátí jejich součet.
V main se proměnným a a b přiřadí nějaká hodnota, pak se jejich hodnoty předají té metodě soucet a její výsledek (návratová hodnota) se uloží do c. Potom se ta proměnná c pomocí printf (jako System.out.print) vypíše na obrazovku.

Já jdu zatím luštit kurs Javy, ale s tvojí pomocí se do toho dostanu rychleji :wink:
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

Uživatelský avatar
Funstorm007
Level 5
Level 5
Příspěvky: 2031
Registrován: říjen 08
Pohlaví: Muž
Stav:
Online

Re: Pomozte s programováním v Javě

Příspěvekod Funstorm007 » 10 lis 2011 20:37

Nejsem si jistý jestli jsem to udělal stejně jako ty ale já bych to přepsal asi takhle:

Kód: Vybrat vše

public class AritmetickyPrumerPole {
   
   public static int soucet(int a,int b) {
    return a+b;
   }

   public static void main(String[] args) {
    int a = 5;
    int b = 2;
    int c = soucet(a, b);
    System.out.println(c);
    }
}

Popis: V metodě main vytvořím tři proměnné.a a b, ty mají pevnou hodnotu. Tyto dvě hodnoty načítá metoda soucet a vrací jejich součet. Ten se uloží do třetí proměnné c no a nakonec pomocí této proměnné je výsledek vypsán na obrazovku.

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Pomozte s programováním v Javě

Příspěvekod faraon » 11 lis 2011 05:00

Proč to static, co to znamená?
A koukám že načítáš parametry z příkazového řádku, to se v Céčku dělá takhle: int main (int argc, char *argv[])

Teď další prográmek:

Kód: Vybrat vše

void naplnit(int pole[],int pocet)
     {
     int i;

     for (i=0;i<pocet;++i)
         pole[i]=i*i;
     }

int main(void)
    {
    int i,mocniny[1000],kolik=10;

    naplnit(mocniny,kolik);
    for (i=0;i<kolik;++i)
        printf("%d^2 = %d\n",i,mocniny[i]);
    }


Metoda naplnit naplní pole zadaným počtem druhých mocnin, v main se potom vypíše stylem 5^2 = 25.
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)


Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 6 hostů