diff --git a/luennot/live12/Kutsuminen/Kutsuminen.cs b/luennot/live12/Kutsuminen/Kutsuminen.cs index 3112bdcf57420e80d6f646b1615f74dae5010810..bdd4b47e2b289cf9e3b2a5bbe9a987269690cff8 100644 --- a/luennot/live12/Kutsuminen/Kutsuminen.cs +++ b/luennot/live12/Kutsuminen/Kutsuminen.cs @@ -14,15 +14,14 @@ public class Kutsuminen public static void Main(string[] args) { int a = 4, b = 5; - int iso; - iso = Suurempi(a, b); + var iso = Suurempi(a, b); Console.WriteLine(iso); iso = Suurempi(iso + 1, 7 / 3 + 5 / 2); Console.WriteLine(iso); - int[] luvut = new int[4]; + int[] luvut = { 0, 6, 4, 9 }; int[] m = luvut; luvut[2] = 4; @@ -83,6 +82,29 @@ public class Kutsuminen /// </pre> /// </example> public static void VaihdaSuurin(int[] t, int korvaavaArvo) + { + int paikka = SuurimmanPaikka(t); + if (paikka < 0) return; + t[paikka] = korvaavaArvo; + } + + + /// <summary> + /// Etsii taulukon suurimman luvun paikan. Mikäli monta + /// yhtäsuurta, palautetaan ensimmäisen paikka. Mikäli + /// suurinta ei löydy (tyhjä taulukko), palautetaan -1 + /// </summary> + /// <param name="t">tutkittava taulukko</param> + /// <returns>suurimman alkion paikan indeksi tai -1</returns> + /// <example> + /// <pre name="test"> + /// SuurimmanPaikka(new int[]{1,2,5,3}) === 2; + /// SuurimmanPaikka(new int[]{7,2,5,3}) === 0; + /// SuurimmanPaikka(new int[]{1,2,5,8}) === 3; + /// SuurimmanPaikka(new int[]{}) === -1; + /// </pre> + /// </example> + public static int SuurimmanPaikka(int[] t) { int paikka = -1; int suurin = int.MinValue; @@ -96,8 +118,7 @@ public class Kutsuminen } } - if (paikka < 0) return; - t[paikka] = korvaavaArvo; + return paikka; } } \ No newline at end of file diff --git a/luennot/live12/KutsuminenTest/KutsuminenTest.cs b/luennot/live12/KutsuminenTest/KutsuminenTest.cs index 3b8d1e810cb6dadeb0ab79386c3234ca165e6338..f457c709d04d0203960bf45ff29253142b0dc843 100644 --- a/luennot/live12/KutsuminenTest/KutsuminenTest.cs +++ b/luennot/live12/KutsuminenTest/KutsuminenTest.cs @@ -8,33 +8,41 @@ using static Kutsuminen; public class TestKutsuminen { [Test] - public void TestSuurempi45() + public void TestSuurempi44() { - Assert.AreEqual( 4, Suurempi(3,4) , "in method Suurempi, line 46"); - Assert.AreEqual( 4, Suurempi(-3,4) , "in method Suurempi, line 47"); - Assert.AreEqual( -3, Suurempi(-3,-4) , "in method Suurempi, line 48"); - Assert.AreEqual( 2, Suurempi(2,2) , "in method Suurempi, line 49"); + Assert.AreEqual( 4, Suurempi(3,4) , "in method Suurempi, line 45"); + Assert.AreEqual( 4, Suurempi(-3,4) , "in method Suurempi, line 46"); + Assert.AreEqual( -3, Suurempi(-3,-4) , "in method Suurempi, line 47"); + Assert.AreEqual( 2, Suurempi(2,2) , "in method Suurempi, line 48"); } [Test] - public void TestVaihdaSuurin65() + public void TestVaihdaSuurin64() { int[] luvut = {2,5,4,3}; VaihdaSuurin(luvut,1); - Assert.AreEqual( "2 1 4 3", String.Join(" ",luvut) , "in method VaihdaSuurin, line 68"); + Assert.AreEqual( "2 1 4 3", String.Join(" ",luvut) , "in method VaihdaSuurin, line 67"); VaihdaSuurin(luvut,1); - Assert.AreEqual( "2 1 1 3", String.Join(" ",luvut) , "in method VaihdaSuurin, line 70"); + Assert.AreEqual( "2 1 1 3", String.Join(" ",luvut) , "in method VaihdaSuurin, line 69"); VaihdaSuurin(luvut,9); - Assert.AreEqual( "2 1 1 9", String.Join(" ",luvut) , "in method VaihdaSuurin, line 72"); + Assert.AreEqual( "2 1 1 9", String.Join(" ",luvut) , "in method VaihdaSuurin, line 71"); VaihdaSuurin(luvut,1); - Assert.AreEqual( "2 1 1 1", String.Join(" ",luvut) , "in method VaihdaSuurin, line 74"); + Assert.AreEqual( "2 1 1 1", String.Join(" ",luvut) , "in method VaihdaSuurin, line 73"); VaihdaSuurin(luvut,-1); - Assert.AreEqual( "-1 1 1 1", String.Join(" ",luvut) , "in method VaihdaSuurin, line 76"); + Assert.AreEqual( "-1 1 1 1", String.Join(" ",luvut) , "in method VaihdaSuurin, line 75"); luvut = new int[]{5}; VaihdaSuurin(luvut,2); - Assert.AreEqual( "2", String.Join(" ",luvut) , "in method VaihdaSuurin, line 79"); + Assert.AreEqual( "2", String.Join(" ",luvut) , "in method VaihdaSuurin, line 78"); luvut = new int[0]; VaihdaSuurin(luvut,2); - Assert.AreEqual( "", String.Join(" ",luvut) , "in method VaihdaSuurin, line 82"); + Assert.AreEqual( "", String.Join(" ",luvut) , "in method VaihdaSuurin, line 81"); + } + [Test] + public void TestSuurimmanPaikka100() + { + Assert.AreEqual( 2, SuurimmanPaikka(new int[]{1,2,5,3}) , "in method SuurimmanPaikka, line 101"); + Assert.AreEqual( 0, SuurimmanPaikka(new int[]{7,2,5,3}) , "in method SuurimmanPaikka, line 102"); + Assert.AreEqual( 3, SuurimmanPaikka(new int[]{1,2,5,8}) , "in method SuurimmanPaikka, line 103"); + Assert.AreEqual( -1, SuurimmanPaikka(new int[]{}) , "in method SuurimmanPaikka, line 104"); } } diff --git a/luennot/live12/Matriisit/Matriisit.cs b/luennot/live12/Matriisit/Matriisit.cs new file mode 100644 index 0000000000000000000000000000000000000000..72d2e15f34ae8d83e14b8aab44d4ecc416681841 --- /dev/null +++ b/luennot/live12/Matriisit/Matriisit.cs @@ -0,0 +1,75 @@ +using System; +using System.Text; +using System.Linq; +using System.Collections.Generic; + +/// @author Omanimi +/// @version 10.10.2023 +/// <summary> +/// +/// </summary> +public class Matriisit +{ + /// <summary> + /// + /// </summary> + public static void Main() + { + int[,] mat = { + { 5, 6, 2, 7, 9}, + {11,34,23, 0,42}, + {99, 6, 4,23,23}, + {19,11, 5,11,47}, + {47, 9, 5,18,19}, + {33,24,54,67,88} + }; + + int lkm = MonellakoRivilla(mat, 11); + Console.WriteLine(lkm); + } + + + /// <summary> + /// Lasketaan monellako rivillä taulukossa esiintyy etsittävä luku. + /// Jos luku on useasti samalla rivillä, rivi lasketaan yhden kerran. + /// </summary> + /// <param name="mat">matriisi, josta lukua etsitään</param> + /// <param name="etsittava">luku jota etsitään</param> + /// <returns>monellako rivillä etsittävä oli</returns> + /// <example> + /// <pre name="test"> + /// int[,] t = {{2, 1, 2}, {3, 4, 2}, {1, 0, 1}, {1, 8, 9}}; + /// MonellakoRivilla(t, 2) === 2; + /// MonellakoRivilla(t, 5) === 0; + /// MonellakoRivilla(t, 0) === 1; + /// MonellakoRivilla(t, 1) === 3; + /// MonellakoRivilla(new int[0, 0], 1) === 0; + /// </pre> + /// </example> + public static int MonellakoRivilla(int[,] mat, int etsittava) + { + int riveja = mat.GetLength(0); + int sarakkeita = mat.GetLength(1); + int lkm = 0; + + for (int iy = 0; iy < riveja; iy++) + { + for (int ix = 0; ix < sarakkeita; ix++) + { + int luku = mat[iy, ix]; + if (luku == etsittava) + { + lkm++; + break; + } + } + } + + return lkm; + + return 0; + } + + + +} \ No newline at end of file diff --git a/luennot/live12/Matriisit/Matriisit.csproj b/luennot/live12/Matriisit/Matriisit.csproj new file mode 100644 index 0000000000000000000000000000000000000000..df22a1ba07d539b07cf0adbaa6457daadeb433db --- /dev/null +++ b/luennot/live12/Matriisit/Matriisit.csproj @@ -0,0 +1,9 @@ +<Project Sdk="Microsoft.NET.Sdk"> + + <PropertyGroup> + <OutputType>Exe</OutputType> + <TargetFramework>net7.0</TargetFramework> + <ExternalConsole>true</ExternalConsole> + </PropertyGroup> + +</Project> diff --git a/luennot/live12/MatriisitTest/MatriisitTest.cs b/luennot/live12/MatriisitTest/MatriisitTest.cs new file mode 100644 index 0000000000000000000000000000000000000000..5906afccac4093ad1af7d3e20e839aa0ea924ad3 --- /dev/null +++ b/luennot/live12/MatriisitTest/MatriisitTest.cs @@ -0,0 +1,24 @@ +// ReSharper disable all +using System; +using System.Text; +using System.Linq; +using System.Collections.Generic; +using NUnit.Framework; +using static Matriisit; + + [TestFixture] + [DefaultFloatingPointTolerance(0.000001)] + public class TestMatriisit + { + [Test] + public void TestMonellakoRivilla40() + { + int[,] t = {{2, 1, 2}, {3, 4, 2}, {1, 0, 1}, {1, 8, 9}}; + Assert.AreEqual( 2, MonellakoRivilla(t, 2) , "in method MonellakoRivilla, line 42"); + Assert.AreEqual( 0, MonellakoRivilla(t, 5) , "in method MonellakoRivilla, line 43"); + Assert.AreEqual( 1, MonellakoRivilla(t, 0) , "in method MonellakoRivilla, line 44"); + Assert.AreEqual( 3, MonellakoRivilla(t, 1) , "in method MonellakoRivilla, line 45"); + Assert.AreEqual( 0, MonellakoRivilla(new int[0, 0], 1) , "in method MonellakoRivilla, line 46"); + } + } + diff --git a/luennot/live12/MatriisitTest/MatriisitTest.csproj b/luennot/live12/MatriisitTest/MatriisitTest.csproj new file mode 100644 index 0000000000000000000000000000000000000000..0d3889eeb679199074a5fafd8634cc35696f4a56 --- /dev/null +++ b/luennot/live12/MatriisitTest/MatriisitTest.csproj @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Project Sdk="Microsoft.NET.Sdk"> + <PropertyGroup> + <TargetFramework>net7.0</TargetFramework> + <IsPackable>false</IsPackable> + </PropertyGroup> + <ItemGroup> + <PackageReference Include="NUnit" Version="3.13.1"/> + <PackageReference Include="NUnit3TestAdapter" Version="3.17.0"/> + <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.8.3"/> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\Matriisit\Matriisit.csproj"/> + </ItemGroup> +</Project> diff --git a/luennot/live12/live12.sln b/luennot/live12/live12.sln index c9df61568c63b122bf49ab91ab5c6f34c16833e1..100ea0397a68727dde70733e927056e4d20263ba 100644 --- a/luennot/live12/live12.sln +++ b/luennot/live12/live12.sln @@ -5,6 +5,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kutsuminen", "Kutsuminen\Ku EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KutsuminenTest", "KutsuminenTest\KutsuminenTest.csproj", "{721E3A06-DA2D-4572-A815-BC11B5CBC6B1}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Matriisit", "Matriisit\Matriisit.csproj", "{135140AB-BD3A-45F9-A901-E348DC387772}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MatriisitTest", "MatriisitTest\MatriisitTest.csproj", "{3A72F04C-1638-4AA8-9829-5CE45127ABAD}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -19,5 +23,13 @@ Global {721E3A06-DA2D-4572-A815-BC11B5CBC6B1}.Debug|Any CPU.Build.0 = Debug|Any CPU {721E3A06-DA2D-4572-A815-BC11B5CBC6B1}.Release|Any CPU.ActiveCfg = Release|Any CPU {721E3A06-DA2D-4572-A815-BC11B5CBC6B1}.Release|Any CPU.Build.0 = Release|Any CPU + {135140AB-BD3A-45F9-A901-E348DC387772}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {135140AB-BD3A-45F9-A901-E348DC387772}.Debug|Any CPU.Build.0 = Debug|Any CPU + {135140AB-BD3A-45F9-A901-E348DC387772}.Release|Any CPU.ActiveCfg = Release|Any CPU + {135140AB-BD3A-45F9-A901-E348DC387772}.Release|Any CPU.Build.0 = Release|Any CPU + {3A72F04C-1638-4AA8-9829-5CE45127ABAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3A72F04C-1638-4AA8-9829-5CE45127ABAD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3A72F04C-1638-4AA8-9829-5CE45127ABAD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3A72F04C-1638-4AA8-9829-5CE45127ABAD}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection EndGlobal