Eljárásokat akkor használunk, ha egy hosszabb programot kell írnunk, és növelni akarjuk az átláthatóságát. Így nem kell mindent a main alá betenni, szét lehet tagolni. Egy eljárást többször is meg lehet hívni, viszont elég ha csak 1 helyen programozzuk le! Milyen takarékos 🙂 Egy eljárás tulajdonképpen egy részfeladatot lát el. Az eljárásra a nevével hivatkozunk. Egy eljárás állhat a main előtt, vagy után is!
Az eljárásnak van neve, visszatérési értéke, törzse amely tulajdonképpen a program és lehetnek paraméterei is.
Alapvető felépítése:
static void eljarasneve()
{ utasítások }
Az eljárások ugyanabba az osztályba kerüljenek! Egy eljárásnak is lehetnek további eljárásai! A változókra viszont vigyázni kell, mert alapvetően a saját változóikat képesek használni! Természetesen ha az adott osztálynak adunk változót, akkor azt látják. Ilyenkor használjuk a static-ot.
pl: class Program
{
static int valtozo=0;
Első példa: saját eljárás, amivel elválasztó vonalakat írhatunk ki. Az eljárásunk neve: elvalaszto(), amit a főprogramban kétszer hívunk meg.
namespace eljarasok1
{
class Program
{
static void elvalaszto()
{
for (int i = 1; i <= 80; i++)
Console.Write('-');
Console.WriteLine();
}
static void Main(string[] args)
{
elvalaszto();
elvalaszto();
Console.ReadLine();
}
}
}
Második példa: téglalap területe, kerülete szétbontva adatbekérésre és kiírásra:
using System;
namespace eljaras2
{
class Program
{
static int a, b, terulet, kerulet;
static void adatbekeres()
{
Console.Write("Add meg a téglalap egyik oldalát: ");
a = byte.Parse(Console.ReadLine());
Console.Write("Add meg a téglalap másik oldalát: ");
b = byte.Parse(Console.ReadLine());
}
static void kiiratas()
{
Console.WriteLine("A téglalap kerülete " + kerulet + " cm, területe " + terulet
+ " cm2");
Console.ReadKey();
}
static void szamitas()
{
kerulet = 2 * (a + b);
terulet = a * b;
}
static void Main(string[] args)
{
adatbekeres();
szamitas();
kiiratas();
}
}
}
2.példa kiegészítve: Téglalap kerülete és területe szétbontva eljárásokra, while ciklus, adatbekérésnél csak pozitív számokat fogad el a program. Adatok kiírása megadott kurzor pozícióba.
using System;
namespace nov04eljaras
{
class Program
{
static int a;
static int b;
static int k;
static int t;
static string ki;
static void vonal()//eljárás, neve: vonal
{
for (int i = 0; i < 20; i++)
{ Console.Write("-"); }
Console.WriteLine();
}
static void design()
{ Console.SetCursorPosition(0, 1);//bal felső saroktól mérve: 0.oszlop, 1.sor
vonal();
Console.SetCursorPosition(0, 10);
vonal();
}
static void adatbeker()
{
a = 0; b = 0;
while ((a <= 0) || (b <= 0))
{
Console.Clear();
design();
Console.SetCursorPosition(0, 2);
Console.WriteLine("a oldal?");
a = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("b oldal?");
b = Convert.ToInt32(Console.ReadLine());
}
}
static void szamit()
{
k = (a + b) * 2;
t = a * b;
}
static void kiir()
{
design();
Console.SetCursorPosition(0, 6);
Console.WriteLine("kerület: {0}, terület: {1}",k,t);
}
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
while (ki != "n")
{
adatbeker();
szamit();
kiir();
Console.WriteLine("Új? (i/n)");
ki=Console.ReadLine();
Console.Clear();
}
}
}
}
3. példa: kérjünk be egy szót, és írassuk ki ‘fordítva’.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Visszafeleszoveg
{
class Program
{
static void visszafele(string szo)
{
string seged;
seged = "";
for (int i = szo.Length - 1; i >= 0; i--)
seged += szo[i];
szo = seged;
Console.Write(szo);
}
static void Main(string[] args)
{
string beker;
Console.Write("Kerek egy szot: ");
beker = Console.ReadLine();
visszafele(beker);
Console.ReadLine();
}
}
}
4. példa: az elálasztó vonal hosszát is paraméterrel adjuk meg. Ha a fel nevű változó hamis akkor 80 karakter hosszú lesz a vonal, ha fel igaz, akkor csak 40 karakternyi.
//az elvalaszto nevű eljárásunk 2db paramétert vár
//egy stringet és egy logikai értéket
static void elvalaszto(string feladat, bool fel)
{
int n = 79;
if (fel) n /= 2;
for (int i = 1; i <= n; i++)
Console.Write('-');
Console.WriteLine("{0}. részfeladat\n",feladat);
}
//a fő programból így hívjuk meg:
elvalaszto("1. feladat szövege",false);
Függvények
A függvények olyan eljárások, amelyek egyetlen értéket adnak vissza a főprogramnak. A függvénynek tehát van visszatérési értéke.
A főprogramnak ezzel a visszatérési értékkel valamit csinálnia kell, lehet ez egy egyszerű kiíratás, számítás, felhasználás egy másik eljárásban…
Példa: Faktoriális számítása.
using System;
namespace faktorialis
{
class Program
{
static int faktor(int n)
{
int sz = 1;
for (int i = 1; i <= n; i++)
sz *= i;
return sz;
}
static void Main(string[] args)
{
Console.WriteLine(faktor(4));
Console.ReadLine();
}
}
}
Összetett feladat, több részfeladattal.
1.részfeladat: Van egy biciklis futár, aki a távolságtól függően kap fizetést. 1-2km/500Ft, 3-5km/700Ft, 6-10km/1000Ft. Készítsünk függvényt, ami kiszámolja a megadott távolság alapján, mennyit keres a futár!
2.Szerkeszthető-e háromszög a bekért oldalhosszal? Használjunk függvényt a megoldáshoz!
3.Az adott szám prímszám-e? Használjunk függvényt a megoldáshoz!
4. A részfeladatokat válasszuk el a korábbi elvalaszto eljárás segítségével!
using System;
namespace futar
{
class Program
{
static int fizet(int tavolsag)
{
int fizetes=0;
if (tavolsag < 3) fizetes = 500;
else
{ if (tavolsag < 6) fizetes = 700;
else
if (tavolsag < 11) fizetes = 1000;
}
return fizetes;
}
static bool haromszog(float a, float b, float c)
{
return (a+b>c && a+c>b && b+c>a);
}
static bool prim(int n)
{
int i = 2;
while (i * i <= n && n % i != 0)
i++;
return (i * i > n);
}
//ELJÁRÁS!
static void elvalaszto(string feladat, bool fel)
{
Console.WriteLine();
Console.Write("{0}. feladat\n", feladat);
int n = 59;
if (fel) n /= 2;
for (int i = 1; i <= n; i++)
Console.Write('-');
Console.WriteLine();
}
static void Main(string[] args)
{
int km;
Console.WriteLine("Távolság?");
km = Convert.ToInt32(Console.ReadLine());
elvalaszto("1. pizza", true);
Console.WriteLine("Díjazása: {0} Ft",fizet(km));
elvalaszto("2. háromszög", false);
Console.WriteLine(haromszog(3,4,50));
elvalaszto("3.primszám", true);
Console.WriteLine(prim(7));
Console.ReadLine();
}
}
}