- Põhikonstruktsionid
Alguskomandid ja keele süntaaks C# ( Funktsioonide selgitused on kirjeldatud kommentaarides )
//Console.WriteLine("Tere Tulemast!, Mis on sinu nimi?"); //сообщение в консоль через WriteLine
//string tekst = Console.ReadLine(); // переменная tekst с типом данных string запоминается
//Console.WriteLine($"{tekst}, Rõõm näha!"); // приветствие
//int a = 10; // переменная а с типом данных int равна 10
//char taht = 'A'; // переменная taht с типом данных char равна A
//Console.Write($"Esimene arv on {a}, sisesta b = ...."); // выводит в консоль то что первое чисто это 10 ( переменная а) и надо ввести чисто в переменной b
//int b = int.Parse(Console.ReadLine()); // переменная b запоминается
// Console.WriteLine($"Vastus on = {a + b}"); // выводит в консоль ответ переменной a ( 10) + b
//Console.WriteLine("Ujukomaarv"); // выводит в консоль Ujukommaarv
//double d = double.Parse(Console.ReadLine()); // запоминает это число в типе данных double ( как float )
//Console.WriteLine(d); // выводит переменную d
// float f = float.Parse(Console.ReadLine()); // запоминает число в типе данных float в переменной f
//Console.WriteLine(f); // выводит переменную f
// bool g = false; // булево значение false / true
//Random rnd = new Random(); // выполняется рандом
// a = rnd.Next(-100, 200); // переменная a рандом от -100 до 200
//Console.WriteLine(a); // выводит переменную a это рандомное число
// float vastus = Osa1_funktsioonid.Kalkulaator(f, a); // переменная vastus в типе данных float выполняет функцию из другого файла со значениями f,a
//Console.WriteLine($"Kalkulaatori tulemus: {vastus}"); // показывает в консоль ответ
2. Valikute konstruktsionid
Ehk võimalus otsustamiseks, kui on vaja, et programm käituks kord üht-, kord teistmoodi.
public static void Main(string[] args)
{
Console.WriteLine("Tere tulemast!");
string eesnimi = Console.ReadLine();
Console.WriteLine("Tere, " + eesnimi);
if (eesnimi.ToLower()=="juku")
{
Console.WriteLine("Tule minu juurde külla!");
}
else
{
Console.WriteLine("Täna mind kodus pole!");
}
int arv1 = int.Parse(Console.ReadLine());
int arv2 = int.Parse(Console.ReadLine());
Console.WriteLine("Arvude {0} ja {1} korrutis võrdub {2}", arv1, arv2, arv1 * arv2);
Console.ReadLine();
}
Kasutajalt küsitakse tema nime ja see salvestatakse muutujasse eesnimi. Edasi, kui sisestatud nimi oli „Juku“, siis lähed külastama, kui mitte, siis kuvatakse teade, et kedagi pole kodus!
public static string Kuu_nimetus(int kuu_nr)
{
string kuu = "";
switch (kuu_nr)
{
case 1: kuu = "Jaanuar"; break;
case 2: kuu = "Veebruar"; break;
case 3: kuu = "Märts"; break;
case 4: kuu = "Aprill"; break;
case 5: kuu = "Mai"; break;
case 6: kuu = "Juuni"; break;
case 7: kuu = "Juuli"; break;
case 8: kuu = "August"; break;
case 9: kuu = "September"; break;
case 10: kuu = "Oktoober"; break;
case 11: kuu = "Novemberr"; break;
case 12: kuu = "Detsember"; break;
default:
kuu = "???";
break;
}
return kuu;
}
public static string Hooaeg(int kuu_nr)
{
string hoo = "";
if (kuu_nr==1 || kuu_nr==2 || kuu_nr==12) //&& - and, || - or
{
hoo = "Talv";
}
else if (kuu_nr>2 && kuu_nr<6)
{
hoo = "Kevad";
}
else if (kuu_nr > 5 && kuu_nr < 9)
{
hoo = "Suvi";
}
else if (kuu_nr > 8 && kuu_nr < 12) //9,10,11
{
hoo = "Sügis";
}
else
{
hoo = "???";
}
return hoo;
}
Lisame ka funktsioonid, mis dekodeerivad kuu järjekorranumbri kuu nimetuseks ja hooaja nimetuseks.
3. Kordused, massiivid ja klassid
Järgnevalt näide, kuidas arvuti vastu tulevale viiele matkajale tere ütleb. Täisarvuline muutuja nimega nr näitab, mitmenda matkaja juures parajasti ollakse. Käskluse while juurde kuuluvat plokki saab korrata. Plokk läbitakse üha uuesti juhul, kui ümarsulgudes olev tingimus on tõene. Et kordusi soovitud arv saaks, on juba programmeerija hoolitseda. Selleks on siin igal korral pärast tervitust käsklus nr=nr+1, ehk siis suurendatakse matkaja järjekorranumbrit.
public class Kordus1{
public static void Main(string[] arg){
int nr=1;
while(nr<=5){
Console.WriteLine("Tere, {0}. matkaja!", nr);
nr=nr+1;}}}
Sama tulemuse aga saab mõnevõrra lühemalt kirja panna for-i abil. Levinud kordusskeemi jaoks on välja mõeldud omaette käsklus, kus algul luuakse muutuja ja antakse talle algväärtus; seejärel kontrollitakse, kas järgnevat plokki on vaja täita; lõpuks võetakse ette toiming andmete ettevalmistamiseks uue ploki jaoks. nr++ on sama, mis nr=nr+1 — ehk siis suurendatakse muutuja väärtust ühe võrra.
for(int nr=1; nr<=5; nr++){
Console.WriteLine("Tere, {0}. matkaja!", nr);
}
Nii for-i kui while puhul kontrollitakse alati ploki algul, kas seda on vaja täita. Mõnikord on aga teada, et plokk tuleb kindlasti läbida. Lihtsalt pole teada, kas sama teed tuleb ka teist või kolmandat korda käia. Tüüpiline näide selle juures on sisestuskontroll.
int nr=0;
do{
Console.WriteLine("Tere, {0}. matkaja!", nr);
nr=nr+1;
} while(nr!=5);
Tuple<T1, T2, T3> on andmestruktuur, kuhu saab panna mitu eri tüüpi väärtust kokku, ilma et peaks looma eraldi klassi või struktuuri.
4. Failitöötlus
Faili kirjutamine
try
{
string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Kuud.txt"); //@"..\..\..\Kuud.txt"
StreamWriter text = new StreamWriter(path, true); // true = lisa lõppu
Console.WriteLine("Sisesta mingi tekst: ");
string lause = Console.ReadLine();
text.WriteLine(lause);
text.Close();
}
catch (Exception)
{
Console.WriteLine("Mingi viga failiga");
}
Märkus:
- Fail salvestatakse projektikausta
truetähendab, et ei kirjutata üle, vaid lisatakse lõppu
Faili lugemine
try
{
string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Kuud.txt");
StreamReader text = new StreamReader(path);
string laused = text.ReadToEnd();
text.Close();
Console.WriteLine(laused);
}
catch (Exception)
{
Console.WriteLine("Mingi viga failiga, ei saa faili lugeda");
}
Ridade lugemine List<string> abil
List<string> kuude_list = new List<string>();
try
{
string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Kuud.txt");
foreach (string rida in File.ReadAllLines(path))
{
kuude_list.Add(rida);
}
}
catch (Exception)
{
Console.WriteLine("Viga failiga!");
}
Otsing nimekirjast
Console.WriteLine("Sisesta kuu nimi, mida otsida:");
string otsitav = Console.ReadLine();
if (kuude_list.Contains(otsitav))
Console.WriteLine("Kuu " + otsitav + " on olemas.");
else
Console.WriteLine("Sellist kuud pole.");
Listi salvestamine tagasi faili
string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Kuud.txt");
File.WriteAllLines(path, kuude_list);
Console.WriteLine("Andmed on salvestatud.");
5. Kollektsioonid. Listid ja sõnastikud. Meetodid ja näidised
Andmetega ümberkäimine on üks olulisemaid osasid programmeerimises. Arvatakse, et umbes kolmandik kogu programmeerija tööajast kulub just andmete töötlemisele. Selle lihtsustamiseks pakuvad programmeerimiskeeled, sh C#, mitmesuguseid valmis andmestruktuure, millega töötamine on kiire, mugav ja loogiline.
ArrayList on lihtne viis andmete kogumiseks, mille suurust ei pea ette määrama. See kohandub automaatselt lisatavate elementide arvuga.
Peamised meetodid:
Add()– lisab elemendi lõppuContains()– kontrollib, kas element on olemasCount– tagastab elementide arvuInsert(index, item)– lisab elemendi kindlale kohaleIndexOf()– otsib elemendi indeksitSort()– järjestab elemendid kasvavalt
ArrayList nimed = new ArrayList();
nimed.Add("Kati");
nimed.Add("Mati");
nimed.Add("Juku");
if (nimed.Contains("Mati"))
Console.WriteLine("Mati olemas");
Console.WriteLine("Nimesid kokku: " + nimed.Count);
nimed.Insert(1, "Sass");
Console.WriteLine("Mati indeks: " + nimed.IndexOf("Mati"));
Console.WriteLine("Mari indeks: " + nimed.IndexOf("Mari"));
foreach (string nimi in nimed)
Console.WriteLine(nimi);
List — Tugeva tüübiga geneeriline kogumik. Kõige enam kasutatav andmetüüp igapäevases arenduses.
Peamised meetodid:
Add(),AddRange()– lisa element või mituIndexOf(),Remove(),RemoveAt()Insert(index, item)– lisa kindlasse kohtaSort()– sorteerib andmedBinarySearch()– kiire otsing (peab olema sorteeritud)
class Person
{
public string Name { get; set; }
}
List<Person> people = new List<Person>();
people.Add(new Person() { Name = "Kadi" });
people.Add(new Person() { Name = "Mirje" });
foreach (Person p in people)
Console.WriteLine(p.Name);
Kokkuvõte: millal millist kasutada?
| Andmetüüp | Millal kasutada? |
|---|---|
ArrayList | Lihtsaks prototüüpimiseks (mitte soovitatav uues koodis) |
List<T> | Enamiku tavaliste andmekogumite jaoks |
LinkedList<T> | Kui vaja palju lisada/teha muudatusi jada keskel |
Dictionary<K,V> | Kiire võtme alusel andmete leidmine |
Tuple<T1,T2> | Kui vaja ajutiselt hoida mitme erineva tüübi väärtusi koos |
6. Objektorienteeritud programmeerimise mõisted
Objektorienteeritud programmeerimine (OOP) on programmeerimise paradigma, mis kasutab «objekte» – andmestruktuure, mis koosnevad andmeväljadest ning meetoditest. Kasutusel võivad olla selliseid võtted nagu andmete abstraktsioon, kapseldamine, modulaarsus, polümorfism ning pärimine. Kuni 1990-ndateni polnud objektorienteeritud programmeerimine tarkvaraarenduses kuigivõrd levinud, kuid tänapäeval on selle tugi juba paljudesse programmeerimiskeeltesse sisse ehitatud.
Põhilised ideed:
Klass : Klass defineerib olemi (objekti) abstraktsed omadused, muuhulgas ka olemi iseloomustavad omadused ning olemi käitumise ja oskused. Klass on nagu šabloon, mis kirjeldab millegi olemust. Näiteks klass Koer koosneks kõigile koertele omastest omadustest nagu näiteks tõug ja kasuka värv ning oskustest nagu haukumine ja istumine. Objektorienteeritud programmis on klassid need, mis pakuvad modulaarsust ning struktuuri.
Objekt : Objekt on klassi eksemplar.
Eksemplar : Klassist saab luua eksemplari. Eksemplar on tegelik objekt, mis tekitatakse programmi täitmisajal. Objekt Pauka on klassi Koer eksemplar. Objekti olekuks nimetatakse tema atribuutide väärtust. Objekt koosneb olekust ning käitumisviisidest, mis on defineeritud selle objekti klassis.
Meetod : Meetod on objekti võime midagi teha. Meetodeid märgitakse tegusõnaga. Pauka on Koer, seega on tal võime haukuda. Seega haugu() on üks Pauka meetoditest. Tal võib olla ka teisi meetodeid, näiteks istu(), söö() või kõnni(). Meetod mõjutab tavaliselt ainult ühte kindlat objekti. Kõik Koer tüüpi objektid suudavad haukuda, kuid on vaja panna üks kindel koer haukuma.
Pärimine : Alamklassid on klassi kitsam versioon, mis pärib omadused ja käitumise oma ülemklassilt ning võivad lisada enda omi. Näiteks klass Koer võib omada alamklasse Terjer, Taks. Pauka võiks ka olla klassi Koer alamklassi Hurt eksemplar. Oletame, et klass Koer defineerib meetodi haugu() ning omaduse kasukaVärv. Iga selle alamklass pärib need liikmed ehk kood tuleb kirjutada ainult üks kord. Iga alamklass saab ka muuta oma päritud omadusi, näiteks vaikimisi oleks kasukaVärv Taks tüüpi objektidel pruunikas.
Pärimine on «x on y» seose tüüp. Hurt on Koer, Pauka on Hurt. Seega omab objekt Pauka omadusi nii klassist Hurt kui ka klassist Koer.
Abstraktsioon : Abstraktsioon on keerulise reaalse probleemi lihtsustamine modelleerides probleemile vastavaid klasse ning probleemile vastaval pärimisastmel.
✔ Mis on klass?
- Klass on mall või plaan, mille põhjal luuakse objekte.
- Kirjeldab omadusi (välju) ja tegevusi (meetodeid).
public class Inimene
{
public string Nimi;
public int Vanus;
public void Tervita()
{
Console.WriteLine("Tere! Mina olen " + Nimi);
}
}


