Программирование на C#: быстрый старт.
Т.В. Гурьянова, Р.О. Свистунов

Конспект занятий по C# для школьников, знакомых с основами какой-либо языка программирования высокого уровня

Смотри также

Уроки по C#. Роман Свистунов

Первая программа

Если у вас на компьютере установлеан ОС Windows, начиная, с версии 7 или достаточно новый вариант   Windows XP, для того, чтобы начать писать программы на C#, не нужно устанавливать никакого дополнительного программного обеспечения.

Текст  программы можно писать в обычном текстовом редакторе Notepad (Блокнот).

Вот пример простейшей программы:

using System;
class FirstProgram{
    public static void Main(){
    Console.WriteLine("Первая программа на С#");
    }
}

Для того, чтобы откомпилировать набранную программу, сохраните её в отдельном файле и запустите в командной строке

csc имя вашей программы

Ничего не вышло?

Дело в том, что программа csc (csc.exe) находится на вашем компьютере в папке

C:\Windows\Microsoft.NET\Framework\v3.5

(или C:\Windows\Microsoft.NET\Framework\v4.0.30319 )

 

screan_C_sharp

Поэтому, чтобы её запустить вместе с только что набранной вами программой, необходимо либо сохранить программу в той же директории, либо путь C:\Windows\Microsoft.NET\Framework\v3.5 прописать в реестр (см. аналогичное видео по настройке для   Java: https://youtu.be/vlYdleLQjek ).

Можно также при первом запуске командной строки в окне команд набрать

 path C:\Windows\Microsoft.NET\Framework\v3.5.

screen_1C#В имени программы нельзя использовать специальные символы и пробелы, не каждый компилятор поймёт русский шрифт! Если в имени программы присутствуют только латинские буквы и цифры, то проблем точно не будет!

screen_4C#

Программа откомпилируется правильно и создастся одноименный *.exe – файл, который можно выполнить

screen_5C#

Сейчас можно запустить созданный компилятором *.exe-файл. Как результат выполнения, мелькнёт чёрный экран. Чтобы рассмотреть надпись   “Первая программа на С#” которую мы повелели компилятору вывести в консоль (команда Console.WriteLine()), нужно в коде дописать еще одну строчку Console.ReadKey();  — эта команда позволит задержать окно консоли (не позволить ему сразу закрыться): окно будет открыто до того момента, пока мы не нажмём какую-либо клавишу на клавиатуре.

Вот окончательный код программы:

using System;
class FirstProgram{
   public static void Main(){
   Console.WriteLine("Первая программа на С#");
   Console.ReadKey();
   }
}

Примеры и упражнения

Данная программа считывает два целых числа из консоли, складывает их и выводит в консоль результат:

 using System;
class Program_sum{
      public static void Main(){
         int a=int.Parse(Console.ReadLine());
         int b=int.Parse(Console.ReadLine());
         int c=a+b;
         Console.WriteLine(c);
         Console.ReadKey(); 
       }                             
}

 Так выглядят операторы выбора в С#

      if(ch=='a')...
 else if(ch=='b')

 switch(ch){
         case 'a': ...
                   break;
         case 'b': ...
                   break; 
         default:   ...
                   break;
                               
}

Вывести в консоль все заглавные английские буквы.

//Выполнил Матвей Малиновский в 8 классе.
using System;
class A_Z_print{
   public static void Main(){
        string str = "";
        char ch = 'A';
        while (ch<='Z') {
           str = (str+" "+ch);
           ch = (char)(ch+1);
        }
        Console.WriteLine(str);
        Console.ReadKey();
   }
}

Упражнение по-сложнее. В консоль вводится очень длинная строка из цифр и знаков + и -. Подсчитать значение выражения. Затем можно ещё больше усложнить задачу, например, расставив в водимом выражении знаки умножить, разделить и скобочки (чтобы отслеживать приоритет операций).

Если вам совсем непонятно, как выполнять самый простой вариант этого  упражнения,  попробуйте исправить приведенный ниже код:

using System;
class Program{
    public static void Main()  {
    
    string str = Console.ReadLine();
        

        char ch = '+';
        int a = str.Length;
        int b = 0;
        int i = 0;
        int x = 0;
        int chislo = 0;
        int dop = 0;
        int dop1 = 0;
        int dop2 = 0;
        while (b<a)
        {
            b=b+1;
            int z=1;
            switch (str[i])
            {
                case '1':
                    
                    while(x==0)
                    {

                        if (char.IsDigit(str[z+1]))
                        {dop1 = str[z];
                        dop2 = str[z+1];
                        dop = dop1*10+dop2;
                        z++;}
                        else 
                        {x=0; dop=str[z];}
                    }
                    if (ch=='+')
                        chislo = chislo + dop;
                    if (ch=='-')
                        chislo = chislo - dop;
                    break;

                case '2':
                    
                    while(x==0)
                    {

                        if (char.IsDigit(str[z+1]))
                        {dop1 = str[z];
                        dop2 = str[z+1];
                        dop = dop1*10+dop2;
                        z++;}
                        else 
                        {x=0; dop=str[z];}
                    }
                    if (ch=='+')
                        chislo = chislo + dop;
                    if (ch=='-')
                        chislo = chislo - dop;
                    break;

                case '3':
                    
                    while(x==0)
                    {

                        if (char.IsDigit(str[z+1]))
                        {dop1 = str[z];
                        dop2 = str[z+1];
                        dop = dop1*10+dop2;
                        z++;}
                        else 
                        {x=0; dop=str[z];}
                    }
                    if (ch=='+')
                        chislo = chislo + dop;
                    if (ch=='-')
                        chislo = chislo - dop;
                    break;

                case '4':
                    
                    while(x==0)
                    {

                        if (char.IsDigit(str[z+1]))
                        {dop1 = str[z];
                        dop2 = str[z+1];
                        dop = dop1*10+dop2;
                        z++;}
                        else 
                        {x=0; dop=str[z];}
                    }
                    if (ch=='+')
                        chislo = chislo + dop;
                    if (ch=='-')
                        chislo = chislo - dop;
                    break;

                case '5':
                    
                    while(x==0)
                    {

                        if (char.IsDigit(str[z+1]))
                        {dop1 = str[z];
                        dop2 = str[z+1];
                        dop = dop1*10+dop2;
                        z++;}
                        else 
                        {x=0; dop=str[z];}
                    }
                    if (ch=='+')
                        chislo = chislo + dop;
                    if (ch=='-')
                        chislo = chislo - dop;
                    break;

                case '6':
                    
                    while(x==0)
                    {

                        if (char.IsDigit(str[z+1]))
                        {dop1 = str[z];
                        dop2 = str[z+1];
                        dop = dop1*10+dop2;
                        z++;}
                        else 
                        {x=0; dop=str[z];}
                    }
                    if (ch=='+')
                        chislo = chislo + dop;
                    if (ch=='-')
                        chislo = chislo - dop;
                    break;

                case '7':
                    
                    while(x==0)
                    {

                        if (char.IsDigit(str[z+1]))
                        {dop1 = str[z];
                        dop2 = str[z+1];
                        dop = dop1*10+dop2;
                        z++;}
                        else 
                        {x=0; dop=str[z];}
                    }
                    if (ch=='+')
                        chislo = chislo + dop;
                    if (ch=='-')
                        chislo = chislo - dop;
                    break;

                case '8':
                    
                    while(x==0)
                    {

                        if (char.IsDigit(str[z+1]))
                        {dop1 = str[z];
                        dop2 = str[z+1];
                        dop = dop1*10+dop2;
                        z++;}
                        else 
                        {x=0; dop=str[z];}
                    }
                    if (ch=='+')
                        chislo = chislo + dop;
                    if (ch=='-')
                        chislo = chislo - dop;
                    break;

                case '9':
                    
                    while(x==0)
                    {

                        if (char.IsDigit(str[z+1]))
                        {dop1 = str[z];
                        dop2 = str[z+1];
                        dop = dop1*10+dop2;
                        z++;}
                        else 
                        {x=0; dop=str[z];}
                    }
                    if (ch=='+')
                        chislo = chislo + dop;
                    if (ch=='-')
                        chislo = chislo - dop;
                    break;

                case '0':
                    
                    while(x==0)
                    {

                        if (char.IsDigit(str[z+1]))
                        {dop1 = str[z];
                        dop2 = str[z+1];
                        dop = dop1*10+dop2;
                        z++;}
                        else 
                        {x=0; dop=str[z];}
                    }
                    if (ch=='+')
                        chislo = chislo + dop;
                    if (ch=='-')
                        chislo = chislo - dop;
                    break;

            
                case '+':
                    ch = '+';
                    break;
                case '-':
                    ch = '-';
                    break;
                case ' ':
                    break;
                default:chislo=str[i];
                    break;
            }
            
            i++;
        }    
            Console.WriteLine(chislo);
                
            Console.ReadKey();

    }    
}


    

 

Полезные упражнения

  1. Написать программу «Викторина» . На перспективу лучше при этом использовать не Windows Forms, а WPF (Windows Presentation Foundation) . Пример создания на другом языке:https://youtu.be/HG9AsX1tBZg?list=PLVH7fZhdpSx8wswMQ_eBrI2Ng-YNK82uf
  2. Написать собственный браузер. Облегчённый вариант: можно следовать инструкциям и выполнить упражнение

3. Изучить и научиться использовать LINQ

 

Пример

Программа написана на С# для построения путей в лабиринте (трёх уровней сложности) для робота  в обучающей игре и встроена в виде *dll в код Паскаля.


using System;
using System.Collections.Generic;
class LabGen
{
 public static int[,] Gen(int sizex, int sizey, string diff, int entrypointx, int entrypointy, int exitpointx, int exitpointy,int seed)
 {
  switch(diff)
  {
   case "Noob": return GenNoob(sizex,sizey,entrypointx,entrypointy,exitpointx,exitpointy,seed);
   case "Easy": return GenEasy(sizex,sizey,entrypointx,entrypointy,exitpointx,exitpointy,seed);
   case "Hard": return GenHard(sizex,sizey,entrypointx,entrypointy,exitpointx,exitpointy,seed);
   default: throw new Exception("Такой сложности нету. Пиши нормально, Андрей");
  }
 }
 private static int[,] GenNoob(int sizex, int sizey, int entrypointx, int entrypointy, int exitpointx, int exitpointy, int seed)
 {
  Random r = new Random(seed);
  int[,] arr = new int[sizex,sizey];
  for(int i = 0; i<sizex;i++)
   for(int j=0; j<sizey;j++)
    arr[i,j]=8;
  arr[entrypointx,entrypointy]=0;
  int robotx=entrypointx, roboty=entrypointy;
  while(robotx!=exitpointx||roboty!=exitpointy)
  {
   if(r.Next(0,2)==0&&robotx!=exitpointx) { robotx=robotx<exitpointx?robotx+1:robotx-1; arr[robotx,roboty]=0; }
   else if(roboty!=exitpointy) { roboty=roboty<exitpointy?roboty+1:roboty-1; arr[robotx,roboty]=0; }
   else { robotx=robotx<exitpointx?robotx+1:robotx-1; arr[robotx,roboty]=0; }
  }
  return arr;
 }
 private static int[,] GenEasy(int sizex, int sizey, int entrypointx, int entrypointy, int exitpointx, int exitpointy, int seed)
 {
  Random r = new Random(seed);
  int[,] arr = GenNoob(sizex,sizey,entrypointx,entrypointy,exitpointx,exitpointy,seed);
  int wavescount = sizex*sizey*sizex*sizey*4;
  for(int i = 0; i<wavescount; i++)
  {
   try{
   int rx=r.Next(1,sizex), ry=r.Next(1,sizey);
   while(arr[rx,ry]!=0) {rx=r.Next(1,sizex); ry=r.Next(1,sizey); }
   switch(r.Next(0,4))
   {
    case 0: if(arr[rx+2,ry]!=0&&arr[rx+1,ry+1]!=0&&arr[rx+1,ry-1]!=0) arr[rx+1,ry]=0; break;
    case 1: if(arr[rx-2,ry]!=0&&arr[rx-1,ry+1]!=0&&arr[rx-1,ry-1]!=0) arr[rx-1,ry]=0; break;
    case 2: if(arr[rx,ry+2]!=0&&arr[rx+1,ry+1]!=0&&arr[rx-1,ry+1]!=0) arr[rx,ry+1]=0; break;
    case 3: if(arr[rx,ry-2]!=0&&arr[rx+1,ry-1]!=0&&arr[rx-1,ry-1]!=0) arr[rx,ry-1]=0; break;
   }
   }catch{}
  }
  return arr;
 }
 private static int[,] GenHard(int sizex, int sizey, int entrypointx, int entrypointy, int exitpointx, int exitpointy, int seed)
 {
  Random r = new Random(seed);
  int[,] arr = GenNoob(sizex,sizey,entrypointx,entrypointy,exitpointx,exitpointy,seed);
  int wavescount = (int)((sizex*sizey*(r.Next(50,100)/100.0)+1));
  for(int i = 0; i<wavescount; i++)
  {
   try{
   int rx=r.Next(1,sizex), ry=r.Next(1,sizey);
   while(arr[rx,ry]!=0) {rx=r.Next(1,sizex); ry=r.Next(1,sizey); }
   switch(r.Next(0,4))
   {
    case 0: if(arr[rx+2,ry]!=0) arr[rx+1,ry]=0; break;
    case 1: if(arr[rx-2,ry]!=0) arr[rx-1,ry]=0; break;
    case 2: if(arr[rx,ry+2]!=0) arr[rx,ry+1]=0; break;
    case 3: if(arr[rx,ry-2]!=0) arr[rx,ry-1]=0; break;
   }
   }catch{}
  }
  return arr;
 }
}

Упражнение.

Вот программа, которая считывает текст из txt-файла и выводит в консоль его же, только с раскрашенными красно-синими буквами (через одну).


using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Drawing;
using System.Threading;
class Program
{
[DllImport("User32.dll")]
public static extern IntPtr GetDC(IntPtr hwnd);
[DllImport("User32.dll")]
public static extern void ReleaseDC(IntPtr hwnd, IntPtr dc);
public static void Main()
{
Image icon = Image.FromFile("icon.ico");

IntPtr screen = GetDC(IntPtr.Zero);
Graphics todraw = Graphics.FromHdc(screen);
SolidBrush b = new SolidBrush(Color.Black);

Console.WindowTop = 0;
Console.WindowLeft = 0;

Console.WindowWidth = Console.BufferWidth = Console.LargestWindowWidth;
Console.WindowHeight = Console.BufferHeight = Console.LargestWindowHeight;

int ptr = 0;
string __stick0 = File.ReadAllText("book.txt");
int clrtick = 8;
bool allow = false;
Timer BLACK = new Timer((o) => {
if(ptr >= __stick0.Length)
{
allow = true;
}
else
{
try
{
if(clrtick % 2 == 0)
{
todraw.Clear(Color.Black);
todraw.DrawImage(icon, 0, 0, 32, 32);
}
else
{
Console.WindowTop = 0;
Console.WindowLeft = 0;
}
clrtick = (clrtick+1)%8;
if(clrtick % 4 == 0) Console.ForegroundColor = ConsoleColor.Red;
else Console.ForegroundColor = ConsoleColor.Blue;
if(clrtick % 2 == 0)Console.Write(__stick0[ptr++]);
} catch{}
}
}, 0, 0, 41);
while(!allow)
Thread.Sleep(100);
BLACK = BLACK;
Console.ReadKey();
}
}

Нужно переписать код нормально, «заставить» эти буквы мелькать c частотой 12 Гц,  сделать возможным калибровку цвета букв текста (найти или написать аналог компонента JColorChooser из Java Swing), сделать возможным выбор цвета для «чётных» букв текста и для «нечётных»

Программирование на C#: быстрый старт. <br>Т.В. Гурьянова, Р.О. Свистунов

 

Рекомендуем также прочесть книгу Герберта Шилдта «C# 4.0 полное руководство» и пользоваться сайтом msdn.microsoft.com, когда надо будет найти конкретные реализации, не рассмотренные в книге.

Лабораторные по С# 2 курс БГТУ

Варианты лабораторных (и решений) прошлых лет:

Простой вариант

Усложнённый вариант

Работа с библиотекой компьютерного зрения с открытым исходным кодом OpenCV

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

методические материалы по информатике