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 25. 01. 2012 21:30

xEro
Příspěvky: 57
Reputace:   
 

definovani

Ahoj. Mám otázku, jak si můžu definovat PI v public static void? jakože dám hodnotu PI, a pak v příkladě napíšu místo hodnoty PI už nadefinovanou PI
něco jak v sekci var pi=3,14, a  v příkladě pak napíšu jen pi, a onoto už bude brát tu hodnotu ze sekce var.
Děkuji všem za pomoc(v jave jsem začátečník )

Offline

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

#2 25. 01. 2012 21:56 — Editoval RePRO (25. 01. 2012 22:54)

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

Re: definovani

Zdravím,
dá se to provést třeba takto:

1)

Code:

class Konstanta {
    public static final double PI = 3.141592653589793;
}

class Test {
    public static void main(String[] args) {
        System.out.println("Hodnota Ludolfova čísla je = " + Konstanta.PI);
    }
}

A teď si trošku vysvětlíme některá klíčová slova:
public: Veřejná složka, znamená to, že je viditelná všude.
final: Pokud známe klíčové slovo const třeba v C++, můžeme ho analogicky vnímat jako static final v Javě. Ale není to úplná analogie.
Takže platí tak nějak obecně, že
C++ = const,
Java = static final.


Nebo si to můžeme definovat i ve vlastní třídě (tam dáme klíčové slovo private):

2)

Code:

class Test
{
    private static final double PI = 3.141592653589793;

    public static void main(String[] args) {
        System.out.println("Hodnota Ludolfova čísla je = " + PI);
    }

}

Jenom ještě připomenu, že napsání velkého PI možná nepůjde přeložit, pokud si vložíme do projektu knihovnu java.lang.Math.
Pokud vložíme do našeho projektu knihovnu java.lang.Math, můžeme samozřejmě Ludolfovo číslo používat v našem programu staticky a to jako Math.PI.

Konstanta Math.PI funguje a je implementována úplně stejně, jako v naší první ukázce.

Uvedeme si opět malý příklad s knihovnou:

3)

Code:

import java.lang.Math

class Test
{
    private static final long double PI = 3.141592653589793;

    public static void main(String[] args) {
        System.out.println("Hodnota Ludolfova čísla je = " + Math.PI);
    }

}

---
OUT TOPIC:
Ještě bych rád uvedl a připomenul příklady konstant v jiných programovacích jazycích. Někdy jsou problémy v C/C++.

Pro C obecně platí:
4)

Code:

#include <stdio.h>
#define PI 3.1415926536

Pro C++ obecně platí:
5)

Code:

static const double PI = 3.1415926536;

Existuje i homogenní konstrukce:
6)

Code:

enum { PI = 3.1415926536; };

---
Jinak je to dosti zavádějící, konstrukce static const se dá použít u C i C++. Kdy co použít, tak o tom sem našel dobrá slova dobrého Unix C programátora (v angličtině):

It depends on what you need the value for. You (and everyone else so far) omitted the third alternative:

Code:

static const int var = 5;
#define var 5
enum { var = 5 };

Ignoring issues about the choice of name, then:
If you need to pass a pointer around, you must use (1).
Since (2) is apparently an option, you don't need to pass pointers around.
Both (1) and (3) have a symbol in the debugger's symbol table - that makes debugging easier. It is more likely that (2) will not have a symbol, leaving you wondering what it is.
(1) cannot be used as a dimension for arrays at global scope; both (2) and (3) can.
(1) cannot be used as a dimension for static arrays at function scope; both (2) and (3) can.
Under C99, all of these can be used for local arrays. Technically, using (1) would imply the use of a VLA (variable-length array), though the dimension referenced by 'var' would of course be fixed at size 5.
(1) cannot be used in places like switch statements; both (2) and (3) can.
(2) can change code that you didn't want changed because it is used by the preprocessor; both (1) and (3) will not have unexpected side-effects like that.
You can detect whether (2) has been set in the preprocessor; neither (1) nor (3) allows that.

So, in most contexts, prefer the 'enum' over the alternatives. Otherwise, the first and last bullet points are likely to be the controlling factors - and you have to think harder if you need to satisfy both at once.

If you were asking about C++, then you'd use option (1) - the static const - every time.




---
Snad vyčerpávající, RePRO.


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

Offline

 

#3 26. 01. 2012 19:09

xEro
Příspěvky: 57
Reputace:   
 

Re: definovani

Ahoj. Tak tvoje odpověď byla velmi vyčerpávající, ale i přesto netuším jak to aplikovat do mého zadání.
Abychom si více rozuměli, tak napíšu co mám a co z toho chci, a jak aplikovat to cos napsal.

Zadání
Zadejte obvod kruhu v cm. Vypočítejte průměr kruhu v mm

public class Cviceni {

  public static void kruh( int obvod)
   {
        double  prumer;
        double prumerR;
        prumer= obvod/(2*3.14);
        prumerR=(prumer*2)*10;
        System.out.println("Průměr kruhu : "+prumerR +" mm");
    }

    public static void main(String[] args) {
     
       kruh(30);

    }


A výsledek nevýjde přesně 30 ale s malou ochylkou(budu klidně rád, za jakékoliv úpravy kódu, zjednodušení apod.)
nicméně potřebuji to pí tedy nadefinovat, abych mohl počítat s Ludolfovým číslem.
Ale když to zkusím jak jsi psal, nefunguje, proto jak do toho co jsem napsal mám aplikovat to PI? nadefinovat číslo, a místo čísla pak napsat jen PI
Díky za tvou snahu;)

Offline

 

#4 26. 01. 2012 20:24 — Editoval gladiator01 (26. 01. 2012 20:29)

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

Re: definovani

↑ xEro:
Proč nepoužiješ tu knihovnu o které psal asi tak uprostřed java.lang.Math

na začátek kodu (úplně nahoru před class) dáš

Code:

import java.lang.Math

v prumeru nahradic 3.14 za Math.PI

Code:

prumer= obvod/(2*Math.PI);

nadefinovat číslo, a místo čísla pak napsat jen PI

Tak se to většinou dělá někde si nadeklaruješ a nadefinuješ proměnnou a tu pak používáš, aby jsi její obsah nepsal pořád dokola, ale to vám snad museli říkat.


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

 

#5 26. 01. 2012 22:02 — Editoval RePRO (27. 01. 2012 01:13)

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

Re: definovani

V jednom:

Code:

class Cviceni 
{
    private static final double PI = 3.141592;
  
    public static void kruh(double obvod)
    {
        double prumer = obvod/(2*PI);
        double prumerR = (prumer*2)*10;
        System.out.println("Průměr kruhu: " + prumerR + " mm.");
    }
    
    public static void main(String[] args) 
    { 
       Cviceni.kruh(30);
    }
}

Nebo odděleně:

Code:

class Cviceni 
{
    private static final double PI = 3.141592;
    
    public static void kruh(double obvod)
    {
        double prumer = obvod/(2*PI);
        double prumerR = (prumer*2)*10;
        System.out.println("Průměr kruhu: " + prumerR + " mm.");
    }
}

class Test 
{

   public static void main(String[] args) 
   { 
       Cviceni.kruh(30);
   }
}

Píšu z hlavy, nemám tu překladač Javy. :-)


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

Offline

 

#6 26. 01. 2012 22:41

xEro
Příspěvky: 57
Reputace:   
 

Re: definovani

Děkuji Vám za pomoc! Hlavně RePRO! Dík,  hned jsem o trošku chytřejší :)

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson