diff --git a/Luento11/ElaimetPerinnalla/ElaimetPerinnalla.cs b/Luento11/ElaimetPerinnalla/ElaimetPerinnalla.cs new file mode 100644 index 0000000000000000000000000000000000000000..90a2b38d34ad7080ed9e0c05f4e3ced34e1dea5e --- /dev/null +++ b/Luento11/ElaimetPerinnalla/ElaimetPerinnalla.cs @@ -0,0 +1,66 @@ +using System; +using System.Text; +using System.Linq; +using System.Collections.Generic; + +namespace ElaimetPerinnalla; + + +/// @author Antti-Jussi +/// @version 18.02.2025 +/// <summary> +/// Eläimet perinnällä. +/// Toimikoon tämä johdantona olio-ohjelmointiin. +/// Tämä on "pääluokka", josta ohjelma käynnistetään ja toimii +/// ikään kuin käyttöliittymänä. +/// </summary> +public class ElaimetPerinnalla +{ + /// <summary> + /// Pääohjelmassa luodaan eläinoliot ja muutetaan + /// niiden arvoja ja kutsutaan metodeja. + /// </summary> + public static void Main() + { + // string koira1 = "Moppi"; + // double koira1PainoKg = 4.5; + // string koira1Rotu = "Coton de Tuleár"; + Koira moppi = new Koira("Moppi", 4.5); + Console.WriteLine($"{moppi.Nimi} painaa {moppi.Paino} kg."); + moppi.Paino = 10.25; + Console.WriteLine($"{moppi.Nimi} painaa {moppi.Paino} kg."); + moppi.Rotu = "Coton de Tuleár"; + Console.WriteLine($"{moppi.Nimi} on rodultaan {moppi.Rotu}."); + moppi.Aantele(); + + Koira rekku = new Koira("Rekku", 25.5); + rekku.Rotu = "Saksanpaimenkoira"; + Console.WriteLine($"{rekku.Nimi} ({rekku.Rotu}) painaa {rekku.Paino} kg!!!"); + rekku.Aantele(); + + Kissa nauku = new Kissa("Nauku"); + nauku.Rotu = "Siamilainen"; + nauku.HannanPituus = 30; + Console.WriteLine($"Kissa nimeltään {nauku.Nimi} on rodultaan {nauku.Rotu} ja sen hännän pituus on {nauku.HannanPituus}"); + nauku.Aantele(); + + Marsu nuppu = new Marsu("Nuppu"); + nuppu.Rotu = "Pallo"; + nuppu.Aantele(); + nuppu.JuokseJuoksupyorassa(1); + Console.WriteLine($"Onko marsu elossa?: {nuppu.OnkoElossa}"); + for (int i = 0; i < 5; i++) + { + nuppu.JuokseJuoksupyorassa(30); + } + // nuppu.jaljellaOlevienKierrostenLkm = 1000; // emme pääse käsiksi yksityiseen muuttujaaan + Console.WriteLine($"Onko marsu elossa?: {nuppu.OnkoElossa}"); + + Elain[] elaimet = { moppi, rekku, nauku, nuppu }; + Console.WriteLine(elaimet.Length); + for (int i = 0; i < elaimet.Length; i++) + { + Console.WriteLine($"{elaimet[i].Nimi}, {elaimet[i].Rotu}"); + } + } +} \ No newline at end of file diff --git a/Luento11/ElaimetPerinnalla/ElaimetPerinnalla.csproj b/Luento11/ElaimetPerinnalla/ElaimetPerinnalla.csproj new file mode 100644 index 0000000000000000000000000000000000000000..085a6e3d4beb32574a83a24dd27da9164799f4a0 --- /dev/null +++ b/Luento11/ElaimetPerinnalla/ElaimetPerinnalla.csproj @@ -0,0 +1,9 @@ +<Project Sdk="Microsoft.NET.Sdk"> + + <PropertyGroup> + <OutputType>Exe</OutputType> + <TargetFramework>net8.0</TargetFramework> + <ExternalConsole>true</ExternalConsole> + </PropertyGroup> + +</Project> diff --git a/Luento11/ElaimetPerinnalla/Elain.cs b/Luento11/ElaimetPerinnalla/Elain.cs new file mode 100644 index 0000000000000000000000000000000000000000..7546ab74d8b5bebf84dddd3f576762e3ea4d212b --- /dev/null +++ b/Luento11/ElaimetPerinnalla/Elain.cs @@ -0,0 +1,41 @@ +using System; + +namespace ElaimetPerinnalla; +/// <summary> +/// Eläin. Toimii yliluokkana +/// Kissa-, Koira- ja Marsu-luokille, +/// jotka siis perivät sekä Nimen, Rodun, +/// että Aantele-toiminnon. +/// </summary> +public class Elain +{ + /// <summary> + /// Nimi + /// </summary> + public string Nimi; + + /// <summary> + /// Rotu + /// </summary> + public string Rotu; + + + /// <summary> + /// Eläin + /// </summary> + /// <param name="nimi">Nimi</param> + public Elain(string nimi) + { + Nimi = nimi; + } + + /// <summary> + /// Ääntelymetodi. Tämä toimii ns. oletusmetodina + /// niissä tapauksissa, kun perivissä luokissa ei ole + /// oletustoteutusta _ylikirjoittavaa_ toteutusta. + /// </summary> + public virtual void Aantele() + { + Console.WriteLine("Olen eläin nimeltä " + Nimi); + } +} \ No newline at end of file diff --git a/Luento11/ElaimetPerinnalla/Kissa.cs b/Luento11/ElaimetPerinnalla/Kissa.cs new file mode 100644 index 0000000000000000000000000000000000000000..fd76ec84ccb290000566f2ae2bbcc5f6a1ed6440 --- /dev/null +++ b/Luento11/ElaimetPerinnalla/Kissa.cs @@ -0,0 +1,32 @@ +using System; + +namespace ElaimetPerinnalla; + +/// <summary> +/// Kissa, peritty eläimestä. +/// </summary> +public class Kissa : Elain +{ + + /// <summary> + /// Hännän pituus + /// </summary> + public int HannanPituus; + + /// <summary> + /// Kissa. Konstruktori kutsuu vastaavaa (nimi parametrina) Eläin-luokan + /// konstruktoria base-avainsanaa käyttäen. Niinpä tämän konstruktorin toteutus jää tyhjäksi. + /// </summary> + /// <param name="nimi">Kissan nimi.</param> + public Kissa(string nimi) : base(nimi) + { + } + + /// <summary> + /// Kissa miukuu. + /// </summary> + public override void Aantele() + { + Console.WriteLine($"Miu mau, sanoo {Nimi}"); + } +} \ No newline at end of file diff --git a/Luento11/ElaimetPerinnalla/Koira.cs b/Luento11/ElaimetPerinnalla/Koira.cs new file mode 100644 index 0000000000000000000000000000000000000000..d2487c6ab24d06174e533d873a9fe7b658c5a6a5 --- /dev/null +++ b/Luento11/ElaimetPerinnalla/Koira.cs @@ -0,0 +1,34 @@ +using System; + +namespace ElaimetPerinnalla; + +/// <summary> +/// Koira, joka on peritty eläimestä. +/// </summary> +public class Koira : Elain +{ + /// <summary> + /// Paino + /// </summary> + public double Paino; + + /// <summary> + /// Koira. (Tämä on tapa "konstruoida" uusi koira-olio. Käytetään nimiä + /// konstruktori tai rakentaja.) Konstruktori kutsuu (nimi parametrina) + /// Eläin-luokan konstruktoria base-avainsanaa käyttäen. + /// </summary> + /// <param name="nimi">Nimi</param> + /// <param name="paino">Paino</param> + public Koira(string nimi, double paino) : base(nimi) + { + Paino = paino; + } + + /// <summary> + /// Koira haukkuu. + /// </summary> + public override void Aantele() + { + Console.WriteLine($"Hau hau, sanoo {Nimi}"); + } +} \ No newline at end of file diff --git a/Luento11/ElaimetPerinnalla/Marsu.cs b/Luento11/ElaimetPerinnalla/Marsu.cs new file mode 100644 index 0000000000000000000000000000000000000000..8787d68b96a41b4e20256d1f3ec36b8b115f6867 --- /dev/null +++ b/Luento11/ElaimetPerinnalla/Marsu.cs @@ -0,0 +1,43 @@ +using System; +namespace ElaimetPerinnalla; + +public class Marsu : Elain +{ + /// <summary> + /// Marsun elämäpisteet + /// </summary> + private int jaljellaOlevienKierrostenLkm = 100; + + /// <summary> + /// Onko marsu elossa. + /// HUOMAUTUS: Tämä on julkinen, jolloin kuka tahansa muu pystyisi + /// asettamaan marsun kuoliaaksi. Tämä ei tietenkään ole toivottavaa, + /// koska marsun pitäisi kuolla silloin ja vain silloin kun se on + /// juossut liikaa juoksupyörässä. + /// Oikeampi tapa olisi sanoa + /// public bool OnkoElossa { get; private set; } + /// jolloin sijoittaminen voisi tapahtua vain tästä luokasta käsin. + /// </summary> + public bool OnkoElossa = true; + + /// <summary> + /// Marsu. Konstruktori kutsuu vastaavaa (nimi parametrina) Eläin-luokan + /// konstruktoria base-avainsanaa käyttäen. Niinpä tämän konstruktorin + /// toteutus jää tyhjäksi. + /// </summary> + /// <param name="nimi">Nimi</param> + public Marsu(string nimi) : base(nimi) + { + } + + /// <summary> + /// Marsu juoksee juoksupyörässä. Jos marsu on juossut liikaa niin + /// se on goodbye. + /// </summary> + /// <param name="kierroksia">Montako kierrosta marsu juoksee.</param> + public void JuokseJuoksupyorassa(int kierroksia) + { + jaljellaOlevienKierrostenLkm -= kierroksia; + if (jaljellaOlevienKierrostenLkm < 0) OnkoElossa = false; + } +} \ No newline at end of file diff --git a/Luento11/Luento11.pdf b/Luento11/Luento11.pdf new file mode 100644 index 0000000000000000000000000000000000000000..619a1e80225fd74557b3d5995b55d5ee25da45c5 Binary files /dev/null and b/Luento11/Luento11.pdf differ diff --git a/Luento11/Luento11.sln b/Luento11/Luento11.sln new file mode 100644 index 0000000000000000000000000000000000000000..59112d5df85b7ba86b1b9e2df049d521eb618b81 --- /dev/null +++ b/Luento11/Luento11.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SilmukatJaTaulukot", "SilmukatJaTaulukot\SilmukatJaTaulukot.csproj", "{59D7C0A3-0F8D-4205-95AA-C44BB96CBE23}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ElaimetPerinnalla", "ElaimetPerinnalla\ElaimetPerinnalla.csproj", "{E43676A3-8DFC-4AB9-BB72-685B1724460B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {59D7C0A3-0F8D-4205-95AA-C44BB96CBE23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {59D7C0A3-0F8D-4205-95AA-C44BB96CBE23}.Debug|Any CPU.Build.0 = Debug|Any CPU + {59D7C0A3-0F8D-4205-95AA-C44BB96CBE23}.Release|Any CPU.ActiveCfg = Release|Any CPU + {59D7C0A3-0F8D-4205-95AA-C44BB96CBE23}.Release|Any CPU.Build.0 = Release|Any CPU + {E43676A3-8DFC-4AB9-BB72-685B1724460B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E43676A3-8DFC-4AB9-BB72-685B1724460B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E43676A3-8DFC-4AB9-BB72-685B1724460B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E43676A3-8DFC-4AB9-BB72-685B1724460B}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/Luento11/SilmukatJaTaulukot/SilmukatJaTaulukot.cs b/Luento11/SilmukatJaTaulukot/SilmukatJaTaulukot.cs new file mode 100644 index 0000000000000000000000000000000000000000..94f738e03bbc67af9484e7249806aaaa130af132 --- /dev/null +++ b/Luento11/SilmukatJaTaulukot/SilmukatJaTaulukot.cs @@ -0,0 +1,65 @@ +using System; +using System.Text; +using System.Linq; +using System.Collections.Generic; + +/// <summary> +/// Luento 11. Vielä silmukoista ja taulukoista. +/// </summary> +public class SilmukatJaTaulukot +{ + /// <summary> + /// Luento 11. Vielä silmukoista ja taulukoista. + /// Taulukon sisällön luominen silmukassa. + /// Taulukon sisällön tulostaminen. + /// Taulukko paluuarvona. + /// </summary> + public static void Main() + { + // Esimerkki 1: Tehdään 100 pituinen taulukko johon luvut 1..100 + int[] taulukko1 = new int[100]; + // taulukko1[0] = 1; + // taulukko1[1] = 2; + for (int i =0; i < taulukko1.Length; i++) + { + taulukko1[i] = i+1; + } + + // Esimerkki 2: Miten tulostaa taulukko? + // 2.1 silmukassa + // Console.WriteLine(taulukko1); // Tämä tulostaa vain taulukon tyypin + foreach (int luku in taulukko1) + { + Console.WriteLine(luku); + } + + // 2.2 String.Joinilla + Console.WriteLine(string.Join(", ", taulukko1)); + + // Esimerkki 3: Tehdään 15 alkiota pituinen taulukko johon luvut 15..1 + int[] taulukko2 = new int[15]; + // taulukko2[0] = 15; + // taulukko2[1] = 14; + for (int i = 0; i < taulukko2.Length; i++) + { + taulukko2[i] = taulukko2.Length-i; + } + + Console.WriteLine(string.Join(", ", taulukko2)); + + // Esimerkki 4: Taulukko funktion paluuarvona + int[] taulukko3 = TeeTaulukko(); + Console.WriteLine(string.Join(", ", taulukko3)); + } + + public static int[] TeeTaulukko() + { + int[] taulukko = new int[5]; + for (int i = 0; i < taulukko.Length; i++) + { + taulukko[i] = i + 1; + } + + return taulukko; + } +} \ No newline at end of file diff --git a/Luento11/SilmukatJaTaulukot/SilmukatJaTaulukot.csproj b/Luento11/SilmukatJaTaulukot/SilmukatJaTaulukot.csproj new file mode 100644 index 0000000000000000000000000000000000000000..085a6e3d4beb32574a83a24dd27da9164799f4a0 --- /dev/null +++ b/Luento11/SilmukatJaTaulukot/SilmukatJaTaulukot.csproj @@ -0,0 +1,9 @@ +<Project Sdk="Microsoft.NET.Sdk"> + + <PropertyGroup> + <OutputType>Exe</OutputType> + <TargetFramework>net8.0</TargetFramework> + <ExternalConsole>true</ExternalConsole> + </PropertyGroup> + +</Project>