[WikiDyd] [TitleIndex] [WordIndex

Zajęcia 1

Celem zajęć jest wprowadzenie do środowiska MS Visual Studio oraz języka C#. Zaprezentowany na tych zajęciach materiał podstawowy ma pomóc w sprawnej implementacji bardziej złożonych algorytmów na kolejnych zajęciach.

Nr. 1: Stworzenie projektu konsolowego.

   1 using System;
   2 
   3 class Program
   4 {
   5     static void Main()
   6     {
   7         System.Console.WriteLine("Dzień dobry!");
   8         System.Console.ReadKey();
   9     }
  10 }

Nr. 2: Program pobierający argumenty z linii komend. (Demonstracja jak w MSVS podawać argumenty wywołania programu.)

   1 using System;
   2 
   3 class Program
   4 {
   5     public static void Main(String[] args)
   6     {
   7         // System.Console.WriteLine("{0}", args.Length);
   8         if (args.Length > 0)
   9         {
  10             // System.Console.WriteLine(args[0][args[0].Length - 1]);
  11             if ((args[0][args[0].Length - 1] == 'a') && (args[0].ToUpper() != "KUBA" ))
  12                 System.Console.WriteLine("Dzień dobry Pani!");
  13             else
  14                 System.Console.WriteLine("Dzień dobry Panu!");
  15         }
  16         else
  17         {
  18             System.Console.WriteLine("Musisz podać argumenty:");
  19             System.Console.WriteLine("ConsoleApplication1 [imie]");
  20         }
  21 
  22         System.Console.ReadKey();
  23     }
  24 }

Nr. 3: Program, który wczytuje dane z pliku tekstowego.

   1 using System;
   2 using System.IO;
   3 
   4 class Program
   5 {
   6     public static void Main(String[] args)
   7     {
   8         // System.Console.WriteLine("{0}", args.Length);
   9         if (args.Length > 0)
  10         {
  11             int line = 1;
  12             TextReader tr = new StreamReader(args[0]);
  13             String s;
  14             while( (s= tr.ReadLine()) != null )
  15             {
  16                 System.Console.WriteLine("{0} : {1}", line++, s);
  17             } 
  18             tr.Close();
  19         }
  20         else
  21         {
  22             System.Console.WriteLine("Musisz podać argumenty:");
  23             System.Console.WriteLine("ConsoleApplication1 [nazwa pliku]");
  24         }
  25         System.Console.ReadKey();
  26     }
  27 }

Nr. 4: Program, który zapisuje dane do pliku.

   1 using System;
   2 using System.IO;
   3 
   4 class Program
   5 {
   6     public static void Main(String[] args)
   7     {
   8         // System.Console.WriteLine("{0}", args.Length);
   9         if (args.Length > 0)
  10         {            
  11             TextWriter tw = new StreamWriter(args[0]);
  12 
  13             for (int i = 1; i < 8; i++)
  14             {
  15                 for (int j = 1; j <= i; j++)
  16                     tw.Write("{0} ", i + j);
  17                 tw.WriteLine();
  18             }
  19             tw.Flush();
  20             tw.Close();
  21         }
  22         else
  23         {
  24             System.Console.WriteLine("Musisz podać argumenty:");
  25             System.Console.WriteLine("ConsoleApplication1 [nazwa pliku]");
  26         }
  27         System.Console.ReadKey();
  28     }
  29 }

Nr. 5: Program tworzący obiekt oraz wywołujący jego metodę

   1 using System;
   2 using System.IO;
   3 
   4 public class Osoba
   5 {
   6         String imie;
   7         String nazwisko;
   8 
   9         public Osoba( String aimie, String anazwisko )
  10         {
  11                 imie = aimie;
  12                 nazwisko = anazwisko;
  13         }
  14 
  15         public void wypiszNaEkran()
  16         {
  17                 System.Console.WriteLine("{0} {1}", imie, nazwisko);
  18         }
  19 
  20 }
  21 
  22 class Program
  23 {
  24         public static int Main(String[] args)
  25         {
  26                 System.Console.WriteLine("Main start.");
  27 
  28                 Osoba os;
  29                 os = new Osoba("Janek","Klos");
  30                 os.wypiszNaEkran();
  31 
  32                 System.Console.WriteLine("Main end.");
  33                 System.Console.ReadKey();
  34                 return 0;
  35         }
  36 }

Nr. 6: Program wypełniający tablicę liczbami całkowitymi pseudolosowymi.

   1 using System;
   2 
   3 public class Program
   4 {
   5         public static void wypiszTab( int[] t )
   6         {
   7                 for (int i= 0; i < t.Length; i++)
   8                         System.Console.Write("{0} ", t[i]);
   9                 System.Console.WriteLine();
  10         }
  11 
  12         public static void Main(String[] args)
  13         {
  14                 if (args.Length < 3)
  15                 {
  16                         System.Console.WriteLine("Musisz podac 3 argumenty!");
  17                         System.Console.WriteLine("Przyklad: program.exe [n] [min] [max]");
  18                         System.Console.Read();
  19                         return;
  20                 }
  21 
  22                 int n,min,max;
  23 
  24                 n = Convert.ToInt32( args[0] );
  25                 min = Convert.ToInt32( args[1] );
  26                 max = Convert.ToInt32( args[2] );
  27 
  28                 int[] tab = new int[n];
  29 
  30                 Random rand = new Random();
  31                 for (int i = 0; i < n; i++)
  32                         tab[i] = rand.Next(min,max);
  33                 /* Gdybysmy chcieli liczb zmiennoprzecinkowych,
  34                    to nalezy wywolac: rand.NextDouble(min,max); */
  35 
  36                 wypiszTab( tab );
  37 
  38                 System.Console.Read();
  39         }
  40 }

Nr. 7: Przekazywanie argumentów do metod przez wartość, referencję

Poniższy przykład obrazuje trzy główne sposoby przekazywania argumentów do metod w języku C#:

   1 using System;
   2 using System.Collections.Generic;
   3 using System.Text;
   4 
   5 namespace console2
   6 {
   7     class Program
   8     {
   9         static void Main(string[] args)
  10         {
  11             int x,y,z;
  12             x = 2;
  13             y = 5;
  14             z = 10;
  15             Wypisz("Wartosci poczatkowe",x, y, z);
  16             TestArgumentow.DodajNone(x, y, z);
  17             Wypisz("Wartosci po wywolaniu DodajNone",x,y,z);
  18             TestArgumentow.DodajOut(x, y, out z);
  19             Wypisz("Wartosci po wywolaniu DodajOut", x, y, z);
  20             z = 10;
  21             TestArgumentow.DodajRef(x, y, ref z);
  22             Wypisz("Wartosci po wywolaniu DodajRef", x, y, z);
  23 
  24             Console.ReadLine();
  25         }
  26 
  27         static void Wypisz(string s, int x, int y, int z)
  28         {
  29             Console.WriteLine("{3}: x = {0}, y = {1}, z = {2}",x,y,z,s);
  30         }
  31     }
  32 
  33     static public class TestArgumentow
  34     {
  35         /* Metoda pobiera wartosci argumentow poprzez wartosc.
  36            Oznacza to ze zmiana wartosci zmiennej c nie bedzie
  37            widoczna na zewnatrz metody, zmieniamy kopie lokalna
  38            kopie zmiennej c. */
  39         public static void DodajNone(int a, int b, int c)
  40         {
  41             c = a + b;
  42         }
  43 
  44         /* Tu wyraznie zadeklarowalismy, ze w zmiennej c bedzie zapisany
  45          * jakis wynik. Wywolujac ta funkcje zmienne a i b przekazemy
  46          * przez kopie wartosci, natomiast zmienna c bedzie przekazana
  47          * przez refernecje do oryginalnej zmiennej c. */
  48         public static void DodajOut(int a, int b, out int c)
  49         {
  50             c = a + b; // sprobuj wykomentowac ta linie
  51         }
  52 
  53         /* Tu wyraznie zadeklarowalismy, ze zmienna c ma byc
  54          * przekazana przez referencje. Roznica miedzy metodami
  55          * jest taka, ze w przypadku metody
  56          * DodajRef kompilator nie bedzie sprawdzal czy faktycznie
  57          * zwrocilismy jakas wartosc. Natomiast w przypadku DodajOut
  58          * jezeli nie przypiszemy c zadnej wartosci kompilator zwroci blad. */
  59         public static void DodajRef(int a, int b, ref int c)
  60         {
  61              c = a + b; // sprobuj wykomentowac ta linie
  62         }
  63     }
  64 }

Przykładowe zadania

  1. Proszę zmodyfikować program nr 1. aby po słowach "Dzień dobry", ale przed wykrzyknikiem wypisywał wartość pierwszego argumentu podanego podczas uruchamiania programu.
  2. Proszę zmodyfikować program nr 2. tak aby w przypadku gdy zostanie podane kilka argumentów podczas uruchamiania program witał osobno każdą osobę. Proszę użyć pętli  for  . Np. jeżeli uruchomimy program: program.exe Anna Grzegorz Tomasz, to niech program wypisze:

    •   Pani Anna. Dzien dobry Pani!
        Pan Grzegorz. Dzien dobry Panu!
        Pan Tomasz. Dzien dobry Panu!
  3. Proszę użyć pętli  foreach( String s in args)  zamiast pętli  for  . w zmodyfikowanym w poprzednim punkcie przykładzie 2.

  4. Na podstawie programu 3 i 4 napisz program kopiujący dane tekstowe z jednego pliku do drugiego. Zakładamy, że nazwy pliku źródłowego i docelowego sa podane jako argument linii komend.
  5. Proszę zmodyfikować program 5 tak, aby dane osoby były wypełniane na podstawie informacji wprowadzonej jako argument linii komend (np.:  ConsoleApp.exe Janek Klos  ).

  6. Proszę zmodyfikować program 5 tak, aby był interakcyjny. Niech program zada dwa pytania, na podstawie których zostanie wypełniony obiekt typu Osoba:
    • a) "Podaj imię:", uzytkownik wprowadza imię i potwierdza je klawiszem Enter, następnie:
    • b) "Podaj nazwisko:"...
  7. Proszę zmodyfikować program z poprzedniego punktu (interakcyjny) ale należy wypełnianić atrybuty obiektu 'os' nie używając konstruktora, ale bezpośrednio ich nazw:  os.imie = System.Console.ReadLine();  . Uwaga nalezy zmienić widoczność atrybutów imie i nazwisko na publiczne.

  8. Proszę uruchomić oraz przetestować program 6.
  9. Proszę zmodyfikować program 6, tak aby tablica zawierała liczby podwójnej precyzji (double).
  10. Proszę uruchomić oraz przetestować program 7.

2015-09-23 06:32