#include <stdio.h>
#include <conio.h> //_getch()
#include <time.h> //time()
#include <stdlib.h> //rand(), srand()
#include <locale.h>
#include <math.h>
int main()
{
setlocale(LC_ALL, "");
time_t ido; //idő típus - 8 byte, különben 2038-ban baj lenne
ido = time(NULL); //time() fv. megmondja hány mp telt el 1970 január 1 óta
//Epoch idő, 1970. január 1. 00:00:00 UTC
double ora = (double)ido / 3600; //Az UNIX rendszereknek szükségük volt egy egységes időalapra, amelyhez minden időmérést viszonyíthatnak.
double nap = ora / 24; //legtöbb modern operációs rendszer közvetlenül vagy közvetetten UNIX-ból származik.
double ev = nap / 365;
//ha nem lli, a kiiratás jó lesz, de a következő összekutyulódik!
printf("------------------------------------------------------------------------------------------------\n");
printf("1970 jan 1 ota eltelt %lli mp, vagyis kb %4.1f ev\n\n", ido, ev); //Vajon igaz-e? Nem, mivel minden 4. év szökőév ill. 100. is, de 400. nem
//Pontos időkiszámítás következő laboron for ciklussal
//RANDOMSZÁMOK
srand((unsigned int)ido); //set rand - enélkül a rand() mindig ugyanazt mondja.
int kocka; //kockával 1-6-ig dobtunk
double normalt; //normált szám
kocka = rand() % 6 + 1; //rand(): 0-RAND_MAX, azaz 0 is lehet,
//%6-al max 5 jön ki, ha hozzáadunk 1-et azzal eltoljuk - így 1-től 6-ig jöhet ki szám.
normalt = (double)rand() / RAND_MAX; //normált szám: [0;1] intervallumon valami random... valójában véges lehetőség...
printf("------------------------------------------------------------------------------------------------\n");
printf("a kockan %i-t dobtunk,\n\
\ra normalt szam %g\n\n", kocka, normalt);
printf("a kockan %i-t dobtunk,\n\
\ra normalt szam %g\n\n", (rand() % 6 + 1), ((double)rand() / RAND_MAX));
printf("------------------------------------------------------------------------------------------------\n");
printf("rand tartomanya 0-%i\n", RAND_MAX); //32767 diszkrét érték...
printf("egy szám -50-től 50-ig %i\n",
((rand() % 101) - 50));
printf("egy szám -100-tól 100-ig 2-essével %i\n",
(2* (rand() % 101) - 50));
//Tfh. nagyobb random számokat akarunk - egy módszer: random*random - probléma: minden köztes szám nem áll elő valójában - prímszámok
//Lehetséges megoldás: bitmintázatok generálása és saját biteltolásos módszerrel - bonyolult
printf("RAND_MAX^2 \"tartománya\" 0 - % i\n", RAND_MAX * RAND_MAX); //NEM 32767^2 diszkrét érték! - De több mint 32767...
//printf("rand^2 tartománya 0-%i\n", pow(RAND_MAX,2.0)); //szándékos hiba, miért ez jelenik meg?
printf("------------------------------------------------------------------------------------------------\n");
double tort = (double)rand()/ RAND_MAX; printf("[0;1] %.10lf\n", tort); //0..1 közötti tört
tort = 10*((double)rand()/RAND_MAX); printf("[0;10] %.10lf\n", tort); //0..10 közötti tört
printf("------------------------------------------------------------------------------------------------\n");
long long int szam, szum=0, vissza = 0;
//Számjegyek összege
printf("Adj meg egy számot: ");
scanf_s("%lli", &szam);
do {
szum += szam % 10; //Utolsó számjegy hozzáadása
szam /= 10; //Utolsó számjegy levágása
} while (szam != 0);
printf("A számjegyek összege: %lli\n", szum);
//Páros számjegyek összege
printf("Adj meg egy számot: ");
scanf_s("%lli", &szam);
szum = 0;
do {
if (szam % 2 == 0) { //Ha kettővel osztható az utolsó számjegy
szum += szam % 10;
}
szam /= 10;
} while (szam != 0);
printf("A páros számjegyek összege: %lli\n", szum);
//Páratlan számjegyek összege,
//ha van benne páros, akkor lépjen ki
//és írja ki hogy van benne páratlan is
printf("Adja meg a csak páratlan számokból álló számot, ellenkező esetben nem mondom meg az összeget: ");
scanf_s("%lli", &szam);
szum = 0;
int van = 0;
do {
if (szam % 2 == 1) {
szum += szam % 10;
}
else {
printf("Van benne páros szám ez nem ér!\n");
van = 1; //Logikai segédváltozó
break; //kilép a ciklisból - megtörik az összegzés
}
szam /= 10;
} while (szam != 0);
if (!van) printf("A páratlan számjegyek összege: %lli\n", szum);//! jel : negálás akkor igaz ha az adott változó hamis.
else; //az 1 érték az igazt jelent,
//valójában minden 0-tól különböző is -
//Szám fordított kiíratása
printf("Adj meg egy számot: "); //Nézzük meg mi történik ha túl nagy számot adok meg... sima int: +/-2,147,483,647
scanf_s("%lli", &szam);
while (szam != 0) {
vissza = vissza * 10 + (szam % 10);
szam /= 10;
};
printf("A szám fordítottja: %lli\n\n", vissza);
printf("------------------------------------------------------------------------------------------------\n");
//4x^3-5x^2+x-8 gyökeinek keresése
long double a_n = 0, b_n = 20,
k = (a_n+b_n/2); //Nem-deskriptív változónév - érdemes mindig olyan nevet adni,
double epszilon = 1E-6; //ami jól tükrözi a változó betöltött szerepét
int n = 0;
while (fabs( 4*pow(k,3.0)-5*pow(k,2.0)+k-8 ) > epszilon && n < 1e5) {
if ( (4 * pow(k, 3.0) - 5 * pow(k, 2.0) + k - 8) < 0 ) a_n = k;
else b_n = k;
printf("%d. lépésnél a f(%lf)= %.8lf\n", n, k, (4 * pow(k, 3.0) - 5 * pow(k, 2.0) + k - 8));
k = (a_n + b_n) / 2;
n++;
}
//Egyszerű karaktervezérelt menü
char valasztas;
do {
printf("---------- Menü ----------\n");
printf("1. Konzol törlése\n");
printf("2. Hello világ kiírása\n");
printf("3. Kilépés\n");
printf("Válassz egy opciót: ");
valasztas = _getch(); //Karakter beolvasás (nem kell ENTER-t nyomni)
switch (valasztas) {
case '1':
system("cls"); //Windowson rendszeren konzol törlése (Linuxon clear-el)
break;
case '2':
printf("\nHello, világ!\n");
break;
case '3':
printf("\nKilépés...\n");
return 404; //Kilépés a programból! - exited with code 5. Akármilyen számot megadhatunk - Összetett programoknál debugra használható pl.
default:
printf("\nÉrvénytelen választás! Próbáld újra.\n");
}
} while (valasztas != '3');
return 0;
}
//Gyakorló feladatok
//1.Feladat
//Készíts egy számkitalálós játékot.
//Generálj egy véletlen számot, és kérj be számokat a felhasználótól.
//Minden egyes megadásnál mondja meg a program, hogy kisebb vagy nagyobb a random számnál a begépelt.
//Ha eltalálta a felhasználó, írd ki hanyadikra sikerült.
//
//2. Feladat
//a) Készíts egy programot ami 0,5-ösével haladva egy bekért [a;b] intervallumon belül
// kiszámolja egy harmadfokú polinom értékeit.
//b) Ha előjelet vált a függvény, írja ki a konzol
//c) Legyenek a polinom együtthatói is tetszőlegesek, a felhasználó által megadottak
//d) a Lépésköz is legyen tetszőleges ( a) részben a 0,5 volt a lépésköz...)
//
//3. Feladat
//a) Készíts egy integrálközelítő programot az előző feladatra alapozva
//b) Építsd bele a feladatot egy karaktervezérelt menü-be
//
//4. Feladat
//Az ascii kódtábla alapján generálj a nagybetűk illetve a számok tartományában karaktereket.
//Készíts ezt alapul véve Neptun kódokat.