main.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include "Sajat.h"
int main()
{
srand(time(NULL));
// Struktúra átadása
Point pt;
pt.x = 5;
pt.y = 8;
pont_kiiratasa(pt);
pont_mozgatasa(&pt, 10, -2);
pont_kiiratasa(pt);
// 5-ös lotto
int db = 5;
int max = 90;
int* lotto = (int*)malloc(sizeof(int) * db);
lotto_huzas(lotto, db, max);
printf("Huzott szamok: ");
tomb_kiir(lotto, db);
printf("A mai nyeroszamok: ");
tomb_rendez(lotto, db);
tomb_kiir(lotto, db);
// Rekurzió
printf("5 faktorialisa: %d\n", faktorialis(5));
printf("Hivasok szama: %i\n", hivasok_szama);
printf("Fibonacci elso 8 eleme: ");
fibonacci_kiiro(8, 0, 1);
printf("\n");
// Változó paraméter
printf("Osszeg (3 elem): %d\n", osszeg(3, 10, 20, 30));
printf("Osszeg (5 elem): %d\n", osszeg(5, 1, 2, 3, 4, 5));
// Függvény pointer
MatekFgv keplet = kob;
printf("Eredmeny: %f\n",szamit(3, keplet));
printf("Eredmeny: %f\n",szamit(3, fel));
printf("Eredmeny: %f\n",szamit(3, sin));
free(lotto);
return 0;
}
sajat.h
#ifndef SAJAT_H
#define SAJAT_H
#include <stdarg.h>
// Extern változó deklarációja (ígéret, hogy valahol létezik)
extern int hivasok_szama;
typedef struct {
int x;
int y;
} Point;
// Függvény prototípusok
void pont_kiiratasa(Point p); // Struktúra érték szerint
void pont_mozgatasa(Point* p, int dx, int dy); // Struktúra pointerrel
void lotto_huzas(int* t, int db, int max); // lottó
void tomb_kiir(int* t, int db); // tömb kiiíratása
void tomb_rendez(int* t, int db); // tömb rendezése
int faktorialis(int n); // Rekurzív
void fibonacci_kiiro(int n, int a, int b); // Rekurzív
int osszeg(int darab, ...); // Változó argumentumszám
// Típusdefiníció matematikai függvényekhez: f(x)
typedef double (*MatekFgv)(double);
// Különböző matematikai függvények prototípusai
double fel(double x);
double kob(double x);
double szamit(double x, MatekFgv* fgv); // A "callback" függvény: kiszámítja bármilyen MatekFgv-t
#endif
sajat.c
#include "sajat.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// Az extern változó tényleges definíciója
int hivasok_szama = 0;
// Pont kiíratása
void pont_kiiratasa(Point p) {
printf("Pont: (%d, %d)\n", p.x, p.y);
}
// Pont mozgatása
void pont_mozgatasa(Point* p, int dx, int dy) {
p->x += dx;
p->y += dy;
}
// Lottoszámok ismétlés nélküli húzása
void lotto_huzas(int* t, int db, int max)
{
int kihuzva = 0;
while (kihuzva < db) {
int szam = (rand() % max) + 1;
int van = 0;
for (int i = 0; i < kihuzva; i++) {
if (t[i] == szam) {
van = 1;
break;
}
}
if (!van) {
t[kihuzva] = szam;
kihuzva++;
}
}
}
// Tömb kiíratása
void tomb_kiir(int* t, int db)
{
for (int i = 0; i < db; i++) {
printf("%d%s", t[i], (i < db - 1) ? ", " : "\n");
}
}
// Buborék rendezés
void tomb_rendez(int* t, int db)
{
for (int i = db - 1; i >= 0; i--) {
for (int j = 0; j < i; j++) {
if (t[j] > t[j + 1]) {
int temp = t[j];
t[j] = t[j + 1];
t[j + 1] = temp;
}
}
}
}
// Faktoriális számítás (Rekurzív függvény)
int faktorialis(int n) {
hivasok_szama++;
if (n <= 1) return 1; // Kilépés
return n * faktorialis(n - 1); // Rekurzív hívás
}
// Fibonacci sorozat
void fibonacci_kiiro(int n, int a, int b) {
if (n <= 0) {
printf("\n");
return;
}
printf("%i ", a);
fibonacci_kiiro(n - 1, b, a + b);
}
// Változó argumentumszámú függvény (Összegzés)
int osszeg(int darab, ...) {
va_list args;
va_start(args, darab); // melyik az utolsó argumentum
int szumma = 0;
for (int i = 0; i < darab; i++) {
szumma += va_arg(args, int); // milyen tipusú az argumentum
}
va_end(args);
return szumma;
}
// f(x) = x / 2
double fel(double x)
{
return x/2;
}
// f(x) = x * x * x
double kob(double x)
{
return x*x*x;
}
// Ez a függvény nem tudja, melyik fgv(x)-t fogja kapni, de tudja, hogyan kezelje
double szamit(double x, MatekFgv fgv)
{
return fgv(x);
}