Skip to content
Snippets Groups Projects
Commit 422e16bf authored by Antti-Jussi Lakanen's avatar Antti-Jussi Lakanen :field_hockey:
Browse files

Luento10

parent ed08e0c2
No related branches found
No related tags found
No related merge requests found
using System;
/// <summary>
/// Luento 10. Arvopohjaiset ja viitepohjaiset muuttujat
/// </summary>
public class ArvotJaViitteet
{
/// <summary>
/// Arvopohjaiset ja viitepohjaiset muuttujat
/// </summary>
public static void Main()
{
int[] taulukko1 = { 1, 2, 3 };
//Console.WriteLine(taulukko1);
int[] taulukko2 = taulukko1;
taulukko2[1] = 4;
// Tätä ei nähty luennolla. Tarkoitus oli näyttää tämä, mutta unohdin.
// Sama tehtiin Pythonissa ja ajatus oli näyttää, että
// viite- ja arvopohjaisten muuttujien idea on hyvin samantapainen eri kielissä.
Console.WriteLine($"Eka alkio nyt: {taulukko1[0]}");
Muuta(taulukko1);
Console.WriteLine($"Eka alkio Muuta-funktion kutsumisen jälkeen: {taulukko1[0]}");
int a = 3;
Console.WriteLine($"Arvopohjainen muuttuja aluksi: {a}");
Muuta(a);
Console.WriteLine($"Arvopohjainen muuttuja Muuta-funktion kutsumisen jälkeen: {a}");
}
public static void Muuta(int luku)
{
luku = 1000;
}
public static void Muuta(int[] t)
{
t[0] = 1000;
}
}
\ No newline at end of file
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ExternalConsole>true</ExternalConsole>
</PropertyGroup>
</Project>
File added

Microsoft Visual Studio Solution File, Format Version 12.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Taulukot", "Taulukot\Taulukot.csproj", "{0FC203C8-42F6-4D00-86E3-E6A17363798C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ArvotJaViitteet", "ArvotJaViitteet\ArvotJaViitteet.csproj", "{C05BE3D5-EB6E-443F-AAC7-08E6CBFF0F23}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TaulukotTest", "TaulukotTest\TaulukotTest.csproj", "{DF748CEF-0034-4407-9D73-12514497335D}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{0FC203C8-42F6-4D00-86E3-E6A17363798C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0FC203C8-42F6-4D00-86E3-E6A17363798C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0FC203C8-42F6-4D00-86E3-E6A17363798C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0FC203C8-42F6-4D00-86E3-E6A17363798C}.Release|Any CPU.Build.0 = Release|Any CPU
{C05BE3D5-EB6E-443F-AAC7-08E6CBFF0F23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C05BE3D5-EB6E-443F-AAC7-08E6CBFF0F23}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C05BE3D5-EB6E-443F-AAC7-08E6CBFF0F23}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C05BE3D5-EB6E-443F-AAC7-08E6CBFF0F23}.Release|Any CPU.Build.0 = Release|Any CPU
{DF748CEF-0034-4407-9D73-12514497335D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DF748CEF-0034-4407-9D73-12514497335D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DF748CEF-0034-4407-9D73-12514497335D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DF748CEF-0034-4407-9D73-12514497335D}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal

Microsoft Visual Studio Solution File, Format Version 12.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Taulukot", "Taulukot\Taulukot.csproj", "{0FC203C8-42F6-4D00-86E3-E6A17363798C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ArvotJaViitteet", "ArvotJaViitteet\ArvotJaViitteet.csproj", "{C05BE3D5-EB6E-443F-AAC7-08E6CBFF0F23}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{0FC203C8-42F6-4D00-86E3-E6A17363798C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0FC203C8-42F6-4D00-86E3-E6A17363798C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0FC203C8-42F6-4D00-86E3-E6A17363798C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0FC203C8-42F6-4D00-86E3-E6A17363798C}.Release|Any CPU.Build.0 = Release|Any CPU
{C05BE3D5-EB6E-443F-AAC7-08E6CBFF0F23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C05BE3D5-EB6E-443F-AAC7-08E6CBFF0F23}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C05BE3D5-EB6E-443F-AAC7-08E6CBFF0F23}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C05BE3D5-EB6E-443F-AAC7-08E6CBFF0F23}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal
using System;
using System.Text;
using System.Linq;
using System.Collections.Generic;
/// @author
/// @version
/// <summary>
/// Luento 10, lyhyt katsaus StringBuilder-merkkijonoon
/// </summary>
public class Merkkijonot
{
/// <summary>
/// Alustetaan pari StringBuilderia
/// </summary>
public static void Main()
{
}
}
\ No newline at end of file
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<ExternalConsole>true</ExternalConsole>
</PropertyGroup>
</Project>
using System;
#region Henkilon tiedot voitaisiin tallentaa esimerkiksi näin (tämän luennon ulkopuolista asiaa)
public class Henkilo
{
public string Nimi { get; set; }
public int Syntymavuosi { get; set; }
public string Osoite { get; set; }
public string Puhelin { get; set; }
public string Email { get; set; }
public string[] Harrastukset { get; set; }
public double TilinSaldo { get; set; }
// Henkilöllä on myös metodeja, kuten TulostaTiedot(), LaskeIka(), jne.
// Opimme luokista lisää seuraavalla viikolla
}
#endregion
/// <summary>
/// Luento 10. Taulukot
/// </summary>
public class Taulukot
{
/// <summary>
/// Vielä taulukoista
/// </summary>
public static void Main()
{
// Muistutus/tarkennus: Taulukoiden arvojen tulisi liittyä toisiinsa ja
// olla "samaa kategoriaa" (esim. lämpötilat, luennolle osallistujien nimet,
// lumiukon pallot, ...)
double[] lampotilat = { -1.0, 1.0, 2.0, -15.5, -14.5, -20.0, -30.0 };
// double[] henkilonTiedot = { 42.1, 183.0, 75.0, -10.0 };
// Tällä tavalla tietojen tallentaminen ei ole suositeltavaa.
// Tähän tarkoitukseen paremmin sopivat luokat, tietueet tai monikot
// Esimerkki 1: Taulukon alkioilla on kiinteä tyyppi, kuten muillakin muuttujilla
// string[] henkilot = { "Antti-Jussi", "Jonne", "Tuomo", 4 };
// int[] luvut = { 3, 2, 1, "Jono" };
// var luvut = new int[] { 3, 2, 1, "Jono"};
// Esimerkki 2: Taulukon sisältöä voi kuitenkin muuttaa.
int[] luvut = { 1, 2, 3, 5, 2, -1, 2 };
luvut[0] = 5;
Console.WriteLine(luvut[0]);
// Esimerkki 3: Alkioiden vaihto (ns. swap)
luvut[0] = 2;
luvut[6] = 1;
Console.WriteLine($"Ekassa on nyt {luvut[0]} ja vikassa {luvut[6]}");
// Mikä on taulukon viimeisessä paikassa oleva alkio?
int temp = luvut[luvut.Length - 1];
// Kopioidaan ekasta paikasta luku viimeiseen
luvut[luvut.Length - 1] = luvut[0];
// Uudessa C#:ssa onnistuu myös näin:
// luvut[^1] = luvut[0];
luvut[0] = temp;
Console.WriteLine($"Ekassa on nyt {luvut[0]} ja vikassa {luvut[6]}");
// Esimerkki 4: TulostaJos(luvut, 1)
TulostaJos(luvut, 1);
// Esimerkki 5: MontakoLukuaEnnenNollaa(luvut)
int[] luvut2 = { 1, 2, 3, 5, 2, -1, 2, 0, 8, 9, 1, -1, 0, 8, 9 };
int ennenNollaa = MontakoLukuaEnnenNollaa(luvut2);
// Esimerkki 6: Negatiivisten summa
double[] luvut3 = { -1.5, -2.0, 0, 2, 5, -3 };
double summa = NegatiivistenSumma(luvut3);
Console.WriteLine($"Negatiivisten lukujen summa on {summa}");
// Esimerkki 7: Niiden merkkijonojen määrä, joista löytyy kirjain 'a'
string[] nimet = { "Antti-Jussi", "Jonne", "Vesa", "Tuomo", "Antti Aarnio" };
int nimetJoissaA = KuinkaMonessaEsiintyy(nimet, 'a');
}
/// <summary>
/// Kuinka monessa merkkijonossa esiintyy etsittävä kirjain
/// </summary>
/// <param name="jonot">Merkkijonot</param>
/// <param name="etsittavaMerkki">Etsittävä merkki</param>
/// <returns>Jonojen lukumäärä</returns>
/// <example>
/// <pre name="test">
/// string[] nimet = { "Antti-Jussi", "Jonne", "Vesa", "Tuomo", "Antti Aarnio" };
/// KuinkaMonessaEsiintyy(nimet, 'a') === 3;
/// KuinkaMonessaEsiintyy(nimet, 'b') === 0;
/// KuinkaMonessaEsiintyy(nimet, 'A') === 3;
/// KuinkaMonessaEsiintyy(new string[]{ }, 'a') === 0;
/// </pre>
/// </example>
public static int KuinkaMonessaEsiintyy(string[] jonot, char etsittavaMerkki)
{
int monessako = 0;
foreach (string jono in jonot)
{
if (jono.ToLower().IndexOf(char.ToLower(etsittavaMerkki)) >= 0)
{
monessako++;
}
}
return monessako;
}
/// <summary>
/// Negatiivisten lukujen summa
/// </summary>
/// <param name="luvut">Luvut</param>
/// <returns>Summa</returns>
public static double NegatiivistenSumma(double[] luvut)
{
double summa = 0.0;
for (int i = 0; i < luvut.Length; i++)
{
// Tutkitaan onko alkion arvo negatiivinen
if (luvut[i] < 0)
{
summa += luvut[i];
}
}
return summa;
}
/// <summary>
/// Montako lukua on ennen nollaa.
/// </summary>
/// <param name="luvut">Luvut</param>
/// <returns>Montako ennen nollaa</returns>
/// <example>
/// <pre name="test">
/// int[] luvut = { 1, 2, 3, 5, 2, -1, 2, 0, 8, 9, 1, -1, 0, 8, 9 };
/// MontakoLukuaEnnenNollaa(luvut) === 7;
/// MontakoLukuaEnnenNollaa(new int[] { }) === 0;
/// MontakoLukuaEnnenNollaa(new int[] { 3, 2, 1 }) === 3;
/// MontakoLukuaEnnenNollaa(new int[] { 0, 3, 2, 1 }) === 0;
/// </pre>
/// </example>
public static int MontakoLukuaEnnenNollaa(int[] luvut)
{
int montakoLukua = 0;
foreach (int luku in luvut)
{
if (luku == 0) break;
else montakoLukua++;
}
return montakoLukua;
}
/// <summary>
/// Tulosta luku mikäli se mätsää etsittävään lukuun
/// </summary>
/// <param name="luvut">Luvut</param>
/// <param name="etsittavaLuku">Etsittävä luku</param>
public static void TulostaJos(int[] luvut, int etsittavaLuku)
{
// Käydään läpi jokainen alkio taulukosta "luvut"
// Jos alkion arvo on täsmälleen "etsittavaLuku"-parametrin arvo
// Tulostetaan se
for (int i = 0; i < luvut.Length; i++)
{
if (luvut[i] == etsittavaLuku)
{
Console.WriteLine(luvut[i]);
}
}
}
/// <summary>
/// Kuinka monesta merkkijonosta löytyy etsittävä kirjain
/// </summary>
/// <param name="jonot">Jonot</param>
/// <param name="etsittavaMerkki">Etsittävä merkki</param>
/// <returns>Sopivien merkkijonojen määrä</returns>
/// <example>
/// <pre name="test">
/// string[] jonot = { "Antti-Jussi", "Jonne", "Vesa", "Tuomo" };
/// LoytyykoKirjain(jonot, 'a') === 2;
/// LoytyykoKirjain(jonot, 'A') === 2;
/// LoytyykoKirjain(jonot, 'b') === 0;
/// LoytyykoKirjain(jonot, '-') === 1;
/// string[] jonot2 = { "Jonne", "Jonne" };
/// LoytyykoKirjain(jonot, 'j') === 2;
/// string[] jonot3 = { };
/// LoytyykoKirjain(jonot, 'C') === 0;
/// </pre>
/// </example>
public static int LoytyykoKirjain(string[] jonot, char etsittavaMerkki)
{
return 0;
}
}
\ No newline at end of file
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ExternalConsole>true</ExternalConsole>
</PropertyGroup>
</Project>
// ReSharper disable all
using System;
using System.Text;
using System.Linq;
using System.Collections.Generic;
using NUnit.Framework;
using static Taulukot;
using static Henkilo;
[TestFixture]
[DefaultFloatingPointTolerance(0.000001)]
public class TestTaulukot
{
[Test]
public void TestKuinkaMonessaEsiintyy90()
{
string[] nimet = { "Antti-Jussi", "Jonne", "Vesa", "Tuomo", "Antti Aarnio" };
Assert.AreEqual( 3, KuinkaMonessaEsiintyy(nimet, 'a') , "in method KuinkaMonessaEsiintyy, line 92");
Assert.AreEqual( 0, KuinkaMonessaEsiintyy(nimet, 'b') , "in method KuinkaMonessaEsiintyy, line 93");
Assert.AreEqual( 3, KuinkaMonessaEsiintyy(nimet, 'A') , "in method KuinkaMonessaEsiintyy, line 94");
Assert.AreEqual( 0, KuinkaMonessaEsiintyy(new string[]{ }, 'a') , "in method KuinkaMonessaEsiintyy, line 95");
}
[Test]
public void TestMontakoLukuaEnnenNollaa131()
{
int[] luvut = { 1, 2, 3, 5, 2, -1, 2, 0, 8, 9, 1, -1, 0, 8, 9 };
Assert.AreEqual( 7, MontakoLukuaEnnenNollaa(luvut) , "in method MontakoLukuaEnnenNollaa, line 133");
Assert.AreEqual( 0, MontakoLukuaEnnenNollaa(new int[] { }) , "in method MontakoLukuaEnnenNollaa, line 134");
Assert.AreEqual( 3, MontakoLukuaEnnenNollaa(new int[] { 3, 2, 1 }) , "in method MontakoLukuaEnnenNollaa, line 135");
Assert.AreEqual( 0, MontakoLukuaEnnenNollaa(new int[] { 0, 3, 2, 1 }) , "in method MontakoLukuaEnnenNollaa, line 136");
}
[Test]
public void TestLoytyykoKirjain171()
{
string[] jonot = { "Antti-Jussi", "Jonne", "Vesa", "Tuomo" };
Assert.AreEqual( 2, LoytyykoKirjain(jonot, 'a') , "in method LoytyykoKirjain, line 173");
Assert.AreEqual( 2, LoytyykoKirjain(jonot, 'A') , "in method LoytyykoKirjain, line 174");
Assert.AreEqual( 0, LoytyykoKirjain(jonot, 'b') , "in method LoytyykoKirjain, line 175");
Assert.AreEqual( 1, LoytyykoKirjain(jonot, '-') , "in method LoytyykoKirjain, line 176");
string[] jonot2 = { "Jonne", "Jonne" };
Assert.AreEqual( 2, LoytyykoKirjain(jonot, 'j') , "in method LoytyykoKirjain, line 178");
string[] jonot3 = { };
Assert.AreEqual( 0, LoytyykoKirjain(jonot, 'C') , "in method LoytyykoKirjain, line 180");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.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="..\Taulukot\Taulukot.csproj"/>
</ItemGroup>
</Project>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment