Ćwiczenia
1. Przeanalizuj działanie poniższego kodu. Czym różni się działanie dwóch wykorzystanych metod?
static void zwiekszWartosc(int liczba) //przekazywanie argumentu przez wartość
{
liczba++;
Console.WriteLine(liczba);
}
static void zwiekszWartosc(ref int liczba) //przekazywanie argumentu przez referencję
{
liczba++;
Console.WriteLine(liczba);
}
static void Main(string[] args)
{
int liczba = 5;
Console.Write("Wynik metody1: ");
zwiekszWartosc(liczba);
Console.Write("Zmienna po działaniu metody1: ");
Console.WriteLine(liczba);
Console.Write("Wynik metody2: ");
zwiekszWartosc(ref liczba);
Console.Write("Zmienna po działaniu metody2: ");
Console.WriteLine(liczba);
Console.ReadKey();
}
UWAGA:
Tablice są domyślnie przekazywane przez referencję.
2. Wyobraź sobie, że tworzysz system, który przetwarza dane pracowników firmy, w której pracuje 50 kobiet i 3 mężczyzn. W systemie ma istnieć metoda, która wyświetla imię, nazwisko i płeć pracownika, wprowadzanego przez użytkownika.
static void wyswietlDane(string imie, string nazwisko, char plec = 'K')
{
Console.WriteLine("Imię: {0} Nazwisko: {1} Płeć: {2}", imie, nazwisko, plec);
}
static void Main(string[] args)
{
wyswietlDane("Anna", "Kowalska");
wyswietlDane("Jan", "Nowak", 'M');
Console.ReadKey();
}
UWAGA:
Argumenty przyjmujące wartości domyślne muszą być umieszczone na końcu listy argumentów w deklaracji metody.
3. Napisz program, zawierający metodę pozwalającą na wyliczenie silni z liczby naturalnej.
a) rozwiązanie iteracyjne (obliczanie krok po kroku)
// SAMODZIELNIE
b) rozwiązanie rekurencyjne (obliczanie przez wywołanie samej siebie)
static int silnia(int liczba)
{
if (liczba == 0 || liczba == 1)
{
return 1;
}
else
{
return liczba * silnia(liczba - 1);
}
}
static void Main(string[] args)
{
Console.WriteLine(silnia(4));
Console.ReadKey();
}
-
Zadania
1. Napisz metodę przelicznikWalut(), która będzie przeliczała przekazaną jako argument wartość w złotówkach na dowolną walutę. Domyślnie metoda ma przeliczać złotówki na Euro, ale może to być również dowolna inna waluta o nazwie i kursie określonym przez użytkownika w argumentach metody.
Przykłady wywołań:
a)
przelicznikWalut(2.25)
WYNIK:
2,25 PLN to 0,54 EUR
b)
przelicznikWalut(2.25,0.279,"USD")
WYNIK:
2,25 PLN to 0,63 USD
2. Napisz program, w którym przetestujesz, czy rzeczywiście tablice domyślnie przekazywane są przez referencję.
3. W firmie, w której pracujesz dotychczas pracownikom przypisywano identyfikatory według schematu: imie_nazwisko_unikatowyNumer, np. Jan_Nowak_21. Nastąpiły zmiany organizacyjne i od teraz identyfikator ma przyjmować postać: małaPierwszaLiteraImieniaNazwiskoMałąLiterąNumer, np. jnowak21. Tobie zlecono przygotowanie programu, który automatycznie przerobi stare identyfikatowy na nowe. Napisz metodę, która przyjmuje argument typu string (stary identyfikator) przez referencję i generuje nowy identyfikator.
Wskazówka:
Metoda char.ToLower(char c) pozwala na zamianę pojedynczego znaku na mały.
4. Napisz program, który wylicza wartość n-tego wyrazu ciągu Fibonacciego z użyciem metody rekurencyjnej.
5. Liczby trójkątne tworzą ciąg nieskończony: 1,3,6,10,15,21,28,... n-ty wyraz ciągu otrzymujemy dodając n do poprzedniego wyrazu. Napisz program (przy użyciu rekurencji), który prosi o podanie wartości n i zwraca n-ty wyraz ciągu liczb trójkątnych.
6. Napisz program z metodą, która przyjmuje jako argument jednowymiarową tablicę liczb całkowitych. Wewnątrz metody program ma pytać użytkownika o to, który element tablicy chce wyświetlić (użytkownik podaje indeks). Zabezpiecz program przed podaniem indeksu spoza zakresu tablicy. Wykorzystaj w tym celu konstrukcję try-catch-finally (poznaną na zajęciach na temat instrukcji warunkowych), wychwytującą wyjątek IndexOutOfRangeException.
7. Co będzie wynikiem uruchomienia poniższych programów? Odpowiedz, nie uruchamiając kodu, a następnie sprawdź poprawność swojej odpowiedzi.
a)
static int obliczWyraz(int n)
{
if (n == 1)
{
return 3;
}
else
{
return (2 * obliczWyraz(n - 1));
}
}
static void Main()
{
Console.WriteLine(obliczWyraz(4));
Console.ReadKey();
}
b)
static void obliczN(ref int n)
{
n = n++ / 2;
n = n >= 3 ? 2 : 9;
n %= 3;
++n;
}
static void Main()
{
int liczba = 5;
obliczN(ref liczba);
Console.WriteLine(liczba);
Console.ReadKey();
}
c)
static void sprawdzWyraz(string napis, string napis2 = "czekolada")
{
if (napis.Length == napis2.IndexOf('e'))
{
Console.WriteLine("TAK!");
}
else
{
Console.WriteLine("NIE!");
}
}
static void Main()
{
sprawdzWyraz("xD");
sprawdzWyraz("ciastko", "karmel");
Console.ReadKey();
}
Czynności negatywnie wpływające na pracę strony i działające na niekorzyść, bądź wręcz szkodę użytkowników, są zabronione i będą karane!
Administrator strony nie bierze odpowiedzialności za dodawane treści
Wszystkie treści, zwłaszcza łamiące zasady dobrej etyki, mogą zostać zmoderowane w każdej chwili po uprzednim kontakcie z Administratorem
FAQ | Wykonał Piotr Greczka | Facebook twórcy (kontakt)