#include "fgv.hpp"
#include "szinek.hpp"
#include <iostream>
#include <iomanip>
#include <cmath>
#include <limits>
int laborszam = 1;
// Mutatóval értékcsere
void csere(int* elso, int* masodik) {
int tmp = *elso;
*elso = *masodik;
*masodik = tmp;
}
// Referenciával értékcsere
void csere_referencia(int& elso, int& masodik) {
int tmp = elso;
elso = masodik;
masodik = tmp;
}
// Sablonos értékcsere (template-tel)
template <typename Tipus>
void csere_sablon(Tipus& elso, Tipus& masodik) {
Tipus tmp = elso;
elso = masodik;
masodik = tmp;
}
// Tömbátlag (double) – legnagyobb, legkisebb kihagyásával
double tomb_atlag(const double* tomb, int meret) {
if (meret < 3)
return NAN; //(Not a Number), egyértelmű hibajelzésre használható
int maxi = 0,
mini = 0;
for (int i = 1; i < meret; i++) {
if (tomb[i] > tomb[maxi])
maxi = i;
if (tomb[i] < tomb[mini])
mini = i;
}
double osszeg = 0;
for (int i = 0; i < meret; i++) {
if (i != maxi && i != mini)
osszeg += tomb[i];
}
return osszeg / (meret - 2);
}
// Tömbátlag (int) – overload
double tomb_atlag(const int* tomb, int meret) {
if (meret < 3)
return 0;
int maxi = 0,
mini = 0;
for (int i = 1; i < meret; i++) {
if (tomb[i] > tomb[maxi])
maxi = i;
if (tomb[i] < tomb[mini])
mini = i;
}
int osszeg = 0;
for (int i = 0; i < meret; i++) {
if (i != maxi && i != mini)
osszeg += tomb[i];
}
return static_cast<double>(osszeg) / (meret - 2);
}
// Értelmetlen overload
double tomb_atlag(double mennyiLegyen) {
return mennyiLegyen;
}
// Saját névtér példája
void korszeru::kiir(int valami) {
std::cout << H_LILA << CIAN << "[korszeru::kiir] Aktuális érték: " << H_FEHER << PIROS << valami << ALAP << std::endl;
}
// --- template implementációk (ha külön fordítod, ide is kell!):
template void csere_sablon<int>(int&, int&);
template void csere_sablon<double>(double&, double&);
template void csere_sablon<std::string>(std::string&, std::string&);