// 1. hét – Elemi adattípusok Go nyelven
// Futtatás (a go mappából): go run ./h01/types
package main

import (
	"fmt"
	"math"
	"unsafe"
)

// Konstansok: értékük fordításkor ismert, nem változhat.
const (
	Pi         = 3.14159
	DaysInWeek = 7
)

func main() {
	// --- Egész típusok: a méret a típus nevében van (int8, int16, ...) ---
	fmt.Println("Egész típusok:")
	fmt.Printf("  int8 : %d .. %d\n", math.MinInt8, math.MaxInt8)
	fmt.Printf("  int16: %d .. %d\n", math.MinInt16, math.MaxInt16)
	fmt.Printf("  int32: %d .. %d\n", math.MinInt32, math.MaxInt32)
	fmt.Printf("  int64: %d .. %d\n", math.MinInt64, math.MaxInt64)
	fmt.Printf("  uint8 (byte): 0 .. %d\n", math.MaxUint8)
	var i int
	fmt.Printf("  int  : %d bit ezen a gépen\n", unsafe.Sizeof(i)*8)

	// --- Valós típusok ---
	fmt.Println("Valós típusok:")
	fmt.Printf("  float32: max %e\n", math.MaxFloat32)
	fmt.Printf("  float64: max %e\n", math.MaxFloat64)

	// --- Literálok ---
	decimal := 42
	hex := 0x2A
	binary := 0b101010
	big := 9_000_000_000 // Go-ban nincs L utótag; az int 64 bites
	var f float32 = 2.5
	d := 2.5e3
	fmt.Println("Literálok:", decimal, hex, binary, big, f, d)

	// --- Karakter: Go-ban a rune egy Unicode kódpont (int32) ---
	c := 'A'
	fmt.Printf("Karakter: %c, kódja: %d, típusa: %T\n", c, c, c)
	fmt.Printf("A következő karakter: %c\n", c+1)
	zh := '中'
	fmt.Printf("Kínai karakter: %c, kódja: %d\n", zh, zh)

	// --- Logikai típus ---
	isEven := decimal%2 == 0
	fmt.Println("42 páros?", isEven)

	// --- Változó deklarálása: var (alapérték: "nulla érték") vagy := ---
	var count int   // 0
	var name string // ""
	var ok bool     // false
	fmt.Printf("Nulla értékek: %d %q %v\n", count, name, ok)

	// --- Konstansok ---
	r := 2.0
	fmt.Println("A kör területe (r=2):", Pi*r*r)
	fmt.Println("Napok száma 3 hét alatt:", 3*DaysInWeek)
}
