Pomozte s programováním v Javě
- Funstorm007
- Level 5
- Příspěvky: 2029
- Registrován: říjen 08
- Pohlaví:
- Stav:
Offline
Re: Pomozte s programováním v Javě
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?
Re: Pomozte s programováním v Javě
Hm, zavolat metodu znamená předat řízení podprogramu?
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.

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)
(pravil K. H. Borovský o cenzuře internetu)
- Funstorm007
- Level 5
- Příspěvky: 2029
- Registrován: říjen 08
- Pohlaví:
- Stav:
Offline
Re: Pomozte s programováním v Javě
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...
Re: Pomozte s programováním v Javě
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á:
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!
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)
(pravil K. H. Borovský o cenzuře internetu)
- Funstorm007
- Level 5
- Příspěvky: 2029
- Registrován: říjen 08
- Pohlaví:
- Stav:
Offline
Re: Pomozte s programováním v Javě
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. 

Re: Pomozte s programováním v Javě
Promiň, trápit jsem tě nechtěl
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):
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

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

"Král Lávra má dlouhé oslí uši, král je ušatec!
(pravil K. H. Borovský o cenzuře internetu)
(pravil K. H. Borovský o cenzuře internetu)
- Funstorm007
- Level 5
- Příspěvky: 2029
- Registrován: říjen 08
- Pohlaví:
- Stav:
Offline
Re: Pomozte s programováním v Javě
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...
Zkus se vykašlat na to ošetřování maximální zadavatelné hodnoty ať to nekomplikujeme...
Re: Pomozte s programováním v Javě
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)
(pravil K. H. Borovský o cenzuře internetu)
- Funstorm007
- Level 5
- Příspěvky: 2029
- Registrován: říjen 08
- Pohlaví:
- Stav:
Offline
Re: Pomozte s programováním v Javě
Tohle prostě nechápu int p[LIMIT][LIMIT], int n.
Re: Pomozte s programováním v Javě
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é
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
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:
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
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é

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

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

"Král Lávra má dlouhé oslí uši, král je ušatec!
(pravil K. H. Borovský o cenzuře internetu)
(pravil K. H. Borovský o cenzuře internetu)
- Funstorm007
- Level 5
- Příspěvky: 2029
- Registrován: říjen 08
- Pohlaví:
- Stav:
Offline
Re: Pomozte s programováním v Javě
Nejsem si jistý jestli jsem to udělal stejně jako ty ale já bych to přepsal asi takhle:
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.
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.
Re: Pomozte s programováním v Javě
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:
Metoda naplnit naplní pole zadaným počtem druhých mocnin, v main se potom vypíše stylem 5^2 = 25.
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)
(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ů