Felhasználói eszközök

Eszközök a webhelyen


oktatas:programozas:csharp:peldak

< CSharp

CSharp példák

Néhány előforduló feladat megoldása található itt.

Tömb kezdőértéke

Kezdőérték:

int[] szamok = new int[5] {1, 2, 3, 4, 5};
string[] nevek = new string[3] {"Jóska", "Pista", "Kati"};

A tömb mérete elhagyható:

int[] numbers = new int[] {1, 2, 3, 4, 5};
string[] names = new string[] {"Jóska", "Pista", "Kati"};

Több dimenziós tömb:

int[,] szamok = new int[3, 2] { {1, 2}, {3, 4}, {5, 6} };
string[,] tertverek = new string[2, 2] { {"Misi","Anna"}, {"Mari","Albert"} };

A tömb mérete elhagyható:

int[,] szamok = new int[,] { {1, 2}, {3, 4}, {5, 6} };
string[,] testverek = new string[,] { {"Misi","Anna"}, {"Mari","Albert"} };

Elhagyható a new operátor is:

int[,] szamok = { {1, 2}, {3, 4}, {5, 6} };
string[,] testverek = { {"Misi","Anna"}, {"Mari","Albert"} };

Verem

using System;
using System.Collections;
 
class Program
{
    static void Main()
    {
        Stack verem = new Stack();
        verem.Push(20);
        verem.Push(50);
 
        Console.WriteLine("{0}", verem.Pop());
        Console.WriteLine("{0}", verem.Pop());
    }
}

A Stack osztály a System.Collections névtérben található.

Lásd még a következőket:

  • System.Collections.List
  • System.Collections.Queue
  • System.Collections.Dictionary
  • System.Collections.Stack

Reguláris kifejezések

Példányosítással

using System;
using System.Text.RegularExpressions;
 
class Program
{
        public static void Main()
        {
                Console.WriteLine("Hi");
 
		Regex rk = new Regex("^T");
		//Egyezés vizsgálata
		Console.WriteLine(rk.IsMatch("TamTam"));
 
		//Csere
		Console.WriteLine(rk.Replace("TenTger", "t"));
 
		//Darabolás
		Regex rk2 = new Regex(":");
		String[] tomb1 = rk2.Split("alma:körte:barack");
		Console.WriteLine(tomb1[2]);
 
		//Egyezés vizsgálat
		Console.WriteLine(Regex.IsMatch("tárgy", "reg"));
 
		//Csere  Regex.Replace("tárgy", "regkif", "csereszöveg")
		Console.WriteLine(Regex.Replace("TenTger", "^T", "t"));
 
		//Darabolás
		String[] tomb = Regex.Split("alma:körte:barack", ":");
		Console.WriteLine(tomb[1]);
        }
}

Statikusan

Regex.IsMatch("tárgy", "reg"));

Magánhangzók megszámolása

Console.WriteLine(Regex.Matches("tekereg", "[e|i|e|]").Count );

Mássalhangzók megszámolása

Console.WriteLine(Regex.Matches("tekereg", "[^e|i|e|]").Count );

StringBuilder használata

using System;
using System.Text;
class Program
{
	public static void Main()
	{
		Console.WriteLine("Hi");
 
		StringBuilder s = new StringBuilder("körte");
		s.Append("alma"); 
		Console.WriteLine(s.Length);
	}
}
s.AppendLine();  //Egy üres sor hozzáfűzése
 
s.Append("szöveg").AppendLine(); //Egy üres sor hozzáfűzése

StringBuilder átalakítása String-gé:

string innerString = builder.ToString();

Listák használata

using System;
using System.Collections.Generic;
class Program
{
	public static void Main()
	{
		Console.WriteLine("Listák használata");
		List<int> szamok = new List<int>();
 
		szamok.Add(3);
		szamok.Add(1);
		szamok.Add(5);
		szamok.Add(4);
		szamok.Add(9);
		szamok.Add(6);
 
		for (int i = 0; i<6; i++)	
				Console.WriteLine(szamok[i]);
 
		szamok.Sort();
		for (int i = 0; i<6; i++)	
				Console.WriteLine(szamok[i]);
 
		Console.WriteLine("Száma: " + szamok.Count);
	}
}

Váltás számrendszerek között

using System;
class Program
{
	public static void Main()
	{
		int a = 11;				
		Console.WriteLine(Convert.ToString(a,16));  //Váltás decimálisból binárisba
 
		string s = "111";
		Console.WriteLine(Convert.ToInt32(s, 2));   //Váltás binárisból decimálisban
 
 
		string s = "b";
		Console.WriteLine(Convert.ToInt32(s, 16));  //Váltás hexadecimálisból decimálisba
	}
}

Figyeljük, meg hogy a ToString() és a ToInt32() metódus második paramétere a számrendszer amibe vagy amiből váltunk.

MD5 lenyomat

Az MD5 lenyomat készítése és ellenőrzése

using System;
using System.Text;
using System.Security.Cryptography;
 
class Program
{
	static string lekerMd5Lenyomat(string input)
	{
		// md5 titkosító objektum példány létrehozása
		MD5 md5 = MD5.Create();
 
		//A bejövő stringet átkonvertáljuk byte tömbbe:
		byte[] adat = md5.ComputeHash(Encoding.Default.GetBytes(input));
 
		StringBuilder s = new StringBuilder();
		// A bytok minden elemét hexadecimális formára hozzuk.
		for(int i=0; i< adat.Length; i++)
			s.Append(adat[i].ToString("x2").ToLower());
 
		return s.ToString();
	}
 
	static bool ellenorizMd5Lenyomat(string input, string hash)
	{
		string inputHash = lekerMd5Lenyomat(input);
 
		StringComparer hasonlito = StringComparer.OrdinalIgnoreCase;
 
		if (0 == hasonlito.Compare(inputHash, hash)) {
			return true;
		} else {
			return false;
		}
	}
 
 
	static void Main()
	{
		string source = "Helló Világ";
 
		string hash = lekerMd5Lenyomat(source);
 
		Console.WriteLine("Forrás: " + source + " md5 lenyomata: " + hash);
 
		Console.WriteLine("A lenyomat ellenőrzése");
 
		if (ellenorizMd5Lenyomat(source, hash)) {
			Console.WriteLine("A lenyomat egyezik");
		} else {
			Console.WriteLine("A lenyomat nem egyezik");
		}
	}
}

Lokalizálás

Több nyelvű program

Az alábbi program két szót ír a képernyőre egymás után. Jó és rossz. A program mindig azon a nyelven írja ki, amit beállítunk. Lásd: hu-HU. Ha a „hu-HU” rész tartalmazó sort teszem megjegyzésbe a már megjegyzésben lévő helyére, akkor az adott környezet alapján dönti el a program, hogy milyen nyelven kell megjeleníteni.

main.cs

using System;
using System.Globalization; //CultureInfo
using System.Resources;  //ResourceManager
using System.Reflection; //Assembly
class Program
{
    static void Main()
    {
        //CultureInfo kultura = new CultureInfo(CultureInfo.CurrentUICulture.Name);
        CultureInfo kultura = new CultureInfo("hu-HU");
        ResourceManager rm = ResourceManager.CreateFileBasedResourceManager("nemz", ".", null);
 
        Console.WriteLine(rm.GetString("good", kultura));
        Console.WriteLine(rm.GetString("bad", kultura));
 
    }
}

main.en-US.txt

good=good
bad=bad

main.fr-FR.txt

good=bon
bad=mal

main.hu-HU.txt

good=jó
bad=rossz

Lefordítjuk a nyelvi fájlokat erőforrásfájlokká:

resgen main.en-US.txt
resgen main.fr-FR.txt
resgen main.hu-HU.txt

A következő fájlokat kapjuk:

  • main.en-US.resources
  • main.fr-FR.resources
  • main.hu-HU.resources

Ezekkel fordítjuk a forrásfájlt:

gmcs -linkresource:main.en-US.resources -linkresources:main.fr-FR.resources -linkresources:main.hu-HU.resources main.cs

Ide vonatkozó külső link:

Titkosítás

using System;
using System.Security.Cryptography;
using System.Text;
class Program
{
	public static void Main()
	{
		TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
		byte[] key = {2, 3, 5,3,4,3,4,8,9,3,3,2,3,4,6,5,2,3,5,3,2,3,3,4};
		byte[] plainText = Encoding.Default.GetBytes("almaalma");
 
		tdes.KeySize = 192;
		tdes.Key = key;
		tdes.Mode = CipherMode.ECB;
		tdes.Padding = PaddingMode.None;
		ICryptoTransform ic = tdes.CreateEncryptor();
		byte[] enc = ic.TransformFinalBlock(plainText, 0,8);
 
                Console.WriteLine(Convert.ToBase64String(enc));
	}
}

Jelszó bekérése

using System;
class Program
{
	static string getPassword()
	{
		Console.Write("Jelszó: ");
		string jelszo = null;
		ConsoleKeyInfo info;
 
		do
		{
			info = Console.ReadKey(true);
			if(info.Key == ConsoleKey.Backspace)
			{
				if(! String.IsNullOrEmpty(jelszo))
					jelszo = jelszo.Substring(0, jelszo.Length - 1);
			}
			else
			{
				jelszo += info.KeyChar;
				Console.Write("*");
			}
		}
		while(info.Key != ConsoleKey.Enter);
 
		Console.WriteLine();
 
		return jelszo;
	}
	public static void Main()
	{
		Console.WriteLine("Azonosítás");
 
		Console.Write("Felhasználónév: ");
		string felhasznalonev = Console.ReadLine();
 
		string jelszo = getPassword();
 
		Console.WriteLine("\n\nBeírt felhasznalonev: {0}", felhasznalonev);
		Console.WriteLine("Beírt jelszó: {0}", jelszo);
	}
}

Konfiguráció tárolása

main.cs

/* 
  kell a fordításhoz: -r:System.Configuration
 
  A futatható fájllal azonos nevű fájlt kell létrehozni. 
  Pl.: main.exe.config
 
*/
 
using System;
using System.Configuration;
 
class Program
{
	public static void Main()
	{
 
 
		System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(
		        ConfigurationUserLevel.None);
 
 
		config.AppSettings.Settings["Név"].Value = "valami";
		config.Save(ConfigurationSaveMode.Full);
 
 
		Console.WriteLine(config.AppSettings.Settings["Jelszó"].Value);
	}
}

main.exe.config

<?xml version="1.0" encoding="utf-8"?>
<configuration><appSettings>
  <clear />
  <add key="Név" value="valami" />
  <add key="Jelszó" value="titok" />
</appSettings></configuration>

Útvonalak

Ez a rész az útvonalak kiíratásáról szól. A címsor csak azért van, mert a legegyszerűbb módon akartam kiírni valahova a kapott útvonalat.

Útvonal a címsorban

using System.Windows.Forms;
 
class Program : Form
{
	Program()
	{
		Text = Application.StartupPath;
	}
	static void Main()
	{
		Application.Run(new Program());
	}
}

Útvonal fájlnévvel

using System.Windows.Forms;
 
class Program : Form
{
	Program()
	{
		Text = Application.ExecutablePath;
	}
	static void Main()
	{
		Application.Run(new Program());
	}
}

Mérés

Szeretnénk megmérni, hogy a for ciklusunk mennyi idő alatt fut le. Ehhez a System.Diagnostics névtér Stopwatch osztályát használjuk.

using System;
using System.Diagnostics;
 
class Program
{
	public static void Main()
	{
		Stopwatch watch = new Stopwatch();
		watch.Start();
		for(int i = 0; i<1000000; i++) 
			;
		watch.Stop();
 
		Console.WriteLine("Eltelt idő                  : {0}", watch.Elapsed);
		Console.WriteLine("Eltelt idő milliszekundumban: {0}", watch.ElapsedMilliseconds);
		Console.WriteLine("Eltelt idő időzítő ütemében : {0}", watch.ElapsedTicks);
	}
}

Előfordítói utasítások

#if

#else

#elif

#endif

#define

#undef

#warning

#error

#line

#region

#endregion

#pragma

#pragma warning

#pragma checksum

#define DEBUG
// ...
#if DEBUG
    Console.WriteLine("Debug version");
#endif
#define DEBUG
#define VC_V6
using System;
class Program
{
    static void Main()
    {
 
#if (DEBUG && !VC_V6)
    Console.WriteLine("DEBUG beállítva");
#elif (!DEBUG && VC_V6)
    Console.WriteLine("VC_V6 beállítva");
#elif (DEBUG && VC_V6)
    Console.WriteLine("DEBUG és VC_V6 beállítva");
#else
    Console.WriteLine("DEBUG és VC_V6 nincs beállítva");
#endif
    }
}

Operációs rendszer lekérdezése

using System;
 
class Program
{
	static void Main()
	{
		OperatingSystem osInfo = Environment.OSVersion;
		Console.WriteLine(osInfo);
		Console.WriteLine(osInfo.Version.Minor);
		Console.WriteLine(osInfo.Version.Major);
		Console.WriteLine(osInfo.Platform);
 
 
		// platform meghatározása
		switch(osInfo.Platform) {
			// A platform Windows 95, Windows 98,
			// Windows 98 Second Edition vagy Windows Me.
			case System.PlatformID.Win32Windows:
 
				switch (osInfo.Version.Minor) {
					case 0:
						Console.WriteLine ("Windows 95");
						break;
					case 10:
						if(osInfo.Version.Revision.ToString()=="2222A")
							Console.WriteLine("Windows 98 Second Edition");
						else
							Console.WriteLine("Windows 98");
						break;
					case  90:
						Console.WriteLine("Windows Me");
						break;
				}
				break;
 
				// Ha a platform Windows NT 3.51, Windows NT 4.0, Windows 2000,
				// vagy Windows XP.
			case System.PlatformID.Win32NT:
 
				switch(osInfo.Version.Major)
 
				{
					case 3:
						Console.WriteLine("Windows NT 3.51");
						break;
					case 4:
						Console.WriteLine("Windows NT 4.0");
						break;
					case 5:
						if (osInfo.Version.Minor==0)
							Console.WriteLine("Windows 2000");
						else
							Console.WriteLine("Windows XP");
						break;
				}
				break;
		}
 
	}
}

Külső program indítása

using System;
using System.Diagnostics;
 
class Program
{
	[STAThread]  // kezeletlen szál kezelése
	static void Main()
	{
		Process proc; // folyamat deklarálása
		// esetleg: "C:\\test.bat" 
		proc = Process.Start("cmd"); // Parancs futtatása
		proc.WaitForExit(); // Várunk a folyamat végére
	}
}

A program feldob egy parancsablakot.

[STAThread]  //Egy szálas
[MTAThread]  //Több szálas

FizzBuzz

Veszünk egy számsorozatot. Kiíratjuk a számokat a képernyőre, de ha 3-mal osztható maradék nélkül akkor azt írom ki, hogy „fizz”, ha 5-tel osztható maradék nélkül, akkor azt írjuk ki, hogy „buzz”. Ha 5-tel és 3-mal is osztható maradék nélkül, akkor azt írjuk ki, hogy „fizzbuzz”.

Program01.cs
using System;
class Program {
 
	public static string Answer(int i) {
		string res = null;
 
 
		if(i%3==0) res = "fizz";
		if(i%5==0) res += "buzz";
		if(i%3!=0 && i%5!=0) res = Convert.ToString(i);
		return res;
	}
	public static void Main() {
		int[] t = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
		for(int i=0; i<t.Length;i++){
			Console.WriteLine(Answer(t[i]));
		}
	}
}

Fibonacci

Program01.cs
using System;
class Program {
 
	public static int Fibonacci(int n) {
		int f=0;
		int seged0 = 0;
		int seged1 = 1;
		if (n == 0) {
			return 0;
		} else if (n==1) {
			return 1;
		} else {
			for(int i=2; i<=n; i++) {
				f =seged0 + seged1;
				seged0 = seged1;
				seged1 = f;
			}
		}
		return f;
	}
	public static void Main() {
		Console.WriteLine(Fibonacci(8));
	}
}

Windows naplóbaírás

Program01.cs
using System;
using System.Diagnostics;
 
class Program01 {
	public static void Main() {
		Console.WriteLine("Naplóba írás előtt Enter nyomj");
		Console.ReadKey();
 
 
		string sSource;
		string sLog;
		string sEvent;
 
		sSource = "EventSystem";
		sLog = "Application";
		sEvent = "Sample Event";
 
		if (!EventLog.SourceExists(sSource)) {
			EventLog.CreateEventSource(sSource,sLog);
		}
		EventLog.WriteEntry(sSource,sEvent);
		EventLog.WriteEntry(sSource, sEvent, 
			EventLogEntryType.Warning,  5000);
	}
}

Külső linkek

oktatas/programozas/csharp/peldak.txt · Utolsó módosítás: 2019/08/21 22:32 szerkesztette: admin