Írjátok meg a saját verziótokat a következő függvényekből:
floatMath.Min( float a, float b)(Unity-benMathf.Min)floatMath.Max( float a, float b)(Unity-benMathf.Max)
Ha szükséges, nézzetek utána a megadott függvények működésének a C# dokumentációban! (A Google a barátotok.)
float Min(float f1, float f2)
{
if (f1 < f2)
return f1;
else
return f2;
}
float Max(float f1, float f2)
{
return f1 > f2 ? f1 : f2; // Feletételes értékadás operátort használva
}Írjátok meg a saját verziótokat a következő függvényekből:
floatMath.Abs(float number)(Unity-benMathf.Abs)floatMath.Sign(float number)(Unity-benMathf.Sign)
Ha szükséges, nézzetek utána a megadott függvények működésének a C# dokumentációban! (A Google a barátotok.)
float Abs(float f)
{
if (number >= 0)
return number;
else
return -number;
}
float Sign(float f)
{
if (number >= 0)
return 1;
else
return -1;
}Írjátok meg a saját verziótokat a következő függvényből:
floatMath.Clamp(float value, float min, float max)(Unity-benMathf.Clamp)
Ha szükséges, nézzetek utána a megadott függvény működésének a C# vagy Unity dokumentációban! (A Google a barátotok.)
B feladat: Készítsétek el a metódus speciális verzióját Clamp01 néven, ami pontosan 0 és 1 közé szorítja a számot!
Írjátok meg a saját float verziótokat a következő egészre kerektő függvényekből:
floatMath.Floor( float number )(Unity-benMathf.Floor)floatMath.Ceiling( float number )(Unity-benMathf.Ceil)floatMath.Round( float number )(Unity-benMathf.Round)
Ha szükséges, nézzetek utána a megadott függvények működésének a C# dokumentációban! (A Google a barátotok.)
Javaslat: A fent megadott sorrendben készítsd el a függvényeket!
A negatív tartományban nem kötelező, hogy működjenek a függvény.
float Floor(float f)
{
return f - (f % 1);
}
float Ceil(float f)
{
float reminder = f % 1;
if (reminder == 0)
return f;
return f + (1 - reminder);
}
float Round(float f)
{
float reminder = f % 1;
if (reminder < 0.5f)
return Floor(f);
else
return Ceil(f);
}Írjunk függvényt, ami megállapítja 3 int paraméteréről, hogy pitagoraszi számhármasok-e bármilyen sorrendben is adjuk be a számokat!
bool IsPythagorean(int a, int b, int c)
{
float hypotenuse = Math.Max(Math.Max(a, b), c); // Átfogó
float leg1 = Math.Min(Math.Min(a, b), c); // Kisebbik befogó
float leg2 = a + b + c - hypotenuse - leg1; // Nagyobbik befogó
// (Unity-ben Math helyett használhatjuk a Mathf könyvtárat)
// Pihagorasz tétel alkalmazása:
return leg1 * leg1 + leg2 * leg2 == hypotenuse * hypotenuse;
}Írj függvényt, ami visszaadja egy szám számjegyeinek összegét!
A megoldáshoz nincs szükség semmi másra, mint beépített típusokon végezhető elemi műveletekre és vezérlési szerkezetekre (szekvencia, elágazás, ciklus).
int SumOfDigits(int n)
{
int sum = 0; // Az összeg nulláról indul
while (n != 0) // Addig megyek el, amig a számom nem nulla
{
int digit = n % 10; // Veszem az utoló számjegyet
sum += digit; // Növelem az összeget a számjegy értékével
n /= 10; // Levágom az utolsó számjegyet
}
return sum;
}Írj függvényt, ami kerekít egy lebegőpontos számot egy másikhoz!
Írj függvényt, ami megadja, hány osztója van egy számnak!
Írj függvényt, ami egy bemeneti egész számról eldönti, hogy prím-e és visszatér az eredménnyel!
A megoldáshoz nincs szükség semmi másra, mint beépített típusokon végezhető elemi műveletekre és vezérlési szerkezetekre (szekvencia, elágazás, ciklus).
bool IsPrime(int number)
{
// Letesztelem az összes számot, 2 és n/2 közt, hogy osztó-e.
// n/2 felett fölösleges osztót keresni
for (int i = 2; i <= number / 2; i++)
{
if (number % i == 0) // Ha találok osztót,
return false; // akkor nem prím
}
return true; // Ha NEM találok osztót, akkor prím
}Írj metódust, ami kiírja az első “n” olyan számot, amiben a számjegyek összege “n”!
“n”-t paraméterben kapja meg a függvény.
Ha egy probléma túl összetett, bontsd fel részfeleadatokra: Használj nyugodtan egy segéd metódust!
Írj metódust, ami kiírja az első n darab prímszámot!
n egész számot paraméterben kapja meg a függvény.
Írj függvényt, ami két bemeneti egész számnak kiszámolja majd kiírja a legkisebb közös többszörösét.
Két természetes (pozitív egész) szám legkisebb közös többszöröse az a legkisebb természetes szám, amely mindkét számmal maradék nélkül osztható.
Paraméterek: 15, 30 Visszatérés: 30 Paraméterek: 2, 3 Visszatérés: 6 Paraméterek: 12, 16 Visszatérés: 48 Paraméterek: 12, 4 Visszatérés: 12 Paraméterek: 17, 15 Visszatérés: 85 Paraméterek: 80, 20 Visszatérés: 80 Paraméterek: 9, 15 Visszatérés: 45 Paraméterek: 100, 10 Visszatérés: 100
int LeastCommonMultiple(int a, int b)
{
// Számítások elvégzése:
int min = Math.Min(a, b); // (Unity-ben Mathf)
int max = Math.Max(a, b); // (Unity-ben Mathf)
int testedNum = max;
while (testedNum % min != 0)
{
testedNum += max;
}
return testedNum;
}Írj függvényt, ami két paraméterben kapott egész számnak kiszámolja a legnagyobb közös osztóját és visszatér vele!
Két természetes (pozitív egész) szám legnagyobb közös osztója az a legnagyobb természetes szám, amellyel mindkét szám maradék nélkül osztható.
Paraméterek: 15, 35 Visszatérés: 5 Paraméterek: 2, 3 Visszatérés: 1 Paraméterek: 12, 16 Visszatérés: 4 Paraméterek: 12, 4 Visszatérés: 4 Paraméterek: 17, 15 Visszatérés: 1 Paraméterek: 80, 20 Visszatérés: 20 Paraméterek: 9, 15 Visszatérés: 3 Paraméterek: 100, 10 Visszatérés: 10
// Két szám legnagyobb közös ösztója nem változik,
// ha a nagyobbikat lecseréljük a két szám különbségére.
int GreatestCommonDivisor(int a, int b)
{
while (a != b)
{
if (a > b)
a = a − b;
else
b = b − a;
}
return a
}Írj függvényt, ami visszaadja, egy paraméterként megadott egész számról, hogy legkevesebb hány magyar érmével vagy bankóval kifejezni!
(Vegyük úgy, hogy még van 1 és 2 forintos.)
Bemenet: 32 431
Kimenet: 8 (mivel 20000 + 10000 + 2000 + 200 + 200 + 20 + 10 + 1 = 32 431)
Tömbök nélkül:
Elegánsabb (rövidebb és általánosíthatóbb) megoldás tömbbel:
readonly int[] notes =
{20000,10000,5000,2000,1000,500,200,100,50,20,10,5,2,1};
// (a readonly nem kötelező)
int HowManyNotes(int num)
{
int result = 0;
for (int i = 0; i < notes.Length; i++)
{
int noteValue = notes[i];
result += num / noteValue;
num = num % noteValue;
}
// (foreach ciklus is használható for helyett)
return result;
}Írj függvényt, ami egy paraméterben kapott egy egész számról eldönti, hogy “tökéletes szám”-e!
A számelméletben tökéletes számnak nevezzük azokat a természetes számokat, amelyek megegyeznek az önmaguknál kisebb osztóik összegével.
Pl.: 6 egy tökéletes szám, mert az osztói : 1, 2, 3 és ezek összege 6
28 egy tökéletes szám, mert az osztói : 1, 2, 4, 7, 14 és ezek összege 28
Írj függvényt, ami egy paraméterben kapott 2-es számrendszer béli (bináris) számot átalakít 10-es számrendszer béli (decimális) alakjára.
Ha a bemenet nem bináris szám (más számjegyet is tartalmaz mint 0 és 1), a kimenet legyen 0.
Írj függvényt, ami egy paraméterben kapott egész (decimális) számot átalakít a 2-es számrendszer (bináris) béli alakjára.
- Csak pozitív számokkal számolok ezért kezdetben szétválasztom a bemenetet előjel és abszolút értekre. A későbbi számításokat az abszolút értéken végzem.
- Abszolút érték: decimalNum
- Előjelérték: signValue
- Kiszámolom a bináris szám legnagyobb helyiértékén lévő számértéket. Ezt az értéket eltárolom egy int változóba: digitValue
- Létrehozok egy változót a bináris számnak 0 kezdeti értékkel: binNumber
- Összeállítom a bináris számot egy ciklussal, aminek minden lefutásával egy helyiértéket írok hozzá a bináris számhoz. Elölről haladok hátra a legnagyobb helyiértéktől a legkisebb felé.
- Minden egyez ciklus lefutásban az éppen utolsó helyiértéket számolom.
- A ciklus addig fut, amig van még számjegy a hátra. Ezt úgy tesztelem, hogy a lefutásonként csökkentem a digitValue értéket. Mivel 2-es számrendszerbeli számról van szó, ezért minden lefutás végén felezem ezt a számot.
- Ha a digitValue értéke 0, akkor nincs több számjegy: kilépek a cliklusból.
- Az eredeti decimális számot minden cikluslefutásban csökkentem annyival, amennyit már felhasználtunk a bináris számban.
- Minden ciklus lefutásban tehát:
- A bináris szám minden helyiértékét “elcsúsztatom” ballra egy 10-szeres szorzással.
- Ha a decimalNum nagyobb vagy egyenlő, mint az bináris számjegy aktuális értéke, akkor 1-est írok a binNumber utolsó számjegyébe (+1) és csökkentem a decimalNum értékét.
- Osztom 2-vel a digitValue értékét: Következő számjegy értéke.
Hát őszintén szólva nem sok helyen. 🙂 Csak nagyon speciális játékban kellhet ilyesmi.
Az programozás egy jelentős része algoritmizálás (Algoritmusok kitalálása, megtervezése). A feladatok nagy részére nincs kész válasz. Neked kell azt előállítani. Ehhez az általános algoritmizáló képesség elengedhetetlen.
Ezt fejlesztjük az efféle feladatok megoldásakor.
Írj függvényt, aminek két pozitív egész szám paramétere van és szintén egy egész számmal tér vissza! A függvény feladata, hogy megmondja, hány olyan szám létezik, ami osztható legalább az egyik paraméterrel.
Egy árussal találkozunk egy játékban, akinél az a szabály, hogy maximum 100 aranyig ad minden kliensének hitelt.
Írd meg az árus kódjában azt a függvényt, ami megadja, hogy maximum hányat tudunk venni egy tárgyból
A paraméterek:
- Mennyi a tárgy teljes ára
- Mennyi pénze van a vevőnek?
- Hány százalékos kedvezmény jár a tárgyra?
- Mennyi hitelt vett fel eddig a vásárló?
Írj függvényt, ami egy tetszőleges számot emel egy tetszőleges egész hatványra!