C#   Уроки программирования с нуля. Си-шарп для чайников   C#

Здравствуйте, гость!
Вход
Регистрация


Методы в Си-шарп. Разница между простыми и статическими
Метод – это небольшая подпрограмма, которая выполняет, в идеале, только одну функцию. Методы позволяют сократить объем кода.

Методы вместе с полями, являются основными членами класса.

Ранее, мы уже рассматривали методы в уроке Функции в Си-шарп, но сейчас мы рассмотрим их под другим углом.

В том уроке мы рассматривали статические методы, а в этом поговорим о простых, и о разнице между ними.

Статический метод – это метод, который не имеет доступа к полям объекта, и для вызова такого метода не нужно создавать экземпляр (объект) класса, в котором он объявлен.

Простой метод – это метод, который имеет доступ к данным объекта, и его вызов выполняется через объект.

Простые методы служат для обработки внутренних данных объекта.

Приведу пример использования простого метода. Класс Телевизор, у него есть поле switchedOn, которое отображает состояние включен/выключен, и два метода – включение и выключение:

class TVSet
{
   private bool switchedOn;

   public void SwitchOn()
   {
     switchedOn = true;
   }
   public void SwitchOff()
   {
     switchedOn = false;
   }
}
class Program
{
   static void Main(string[] args)
   {
     TVSet myTV = new TVSet();
     myTV.SwitchOn(); // включаем телевизор, switchedOn = true;
     myTV.SwitchOff(); // выключаем телевизор, switchedOn = false;
   }
}

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

Статические методы, обычно, выполняют какую-нибудь глобальную, общую функцию, обрабатывают «внешние данные». Например, сортировка массива, обработка строки, возведение числа в степень и другое.

Пример статического метода, который обрезает строку до указанной длины, и добавляет многоточие:

class StringHelper
{
   public static string TrimIt(string s, int max)
   {
     if (s == null)
       return string.Empty;
     if (s.Length <= max)
       return s;

     return s.Substring(0, max) + "...";
   }
}
class Program
{
   static void Main(string[] args)
   {
     string s = "Очень длинная строка, которую необходимо обрезать до указанной длины и добавить многоточие";
     Console.WriteLine(StringHelper.TrimIt(s, 20)); //"Очень длинная строка…"
     Console.ReadLine();
   }
}

Статический метод не имеет доступа к нестатическим полям класса:

class SomeClass
{
   private int a;
   private static int b;

   public static void SomeMethod()
   {
     a=5; // ошибка
     b=10; // допустимо
   }
}

Домашнее задание

Создайте класс Телевизор. В нем есть поле текущий канал. Предусмотрите в нем возможность переключения каналов: следующий канал, предыдущий канал, переход к каналу по номеру. Учтите, что канал не может иметь отрицательный номер.

PS. Не забываем подписываться на обновления по электронной почте в форме ниже!
Понравилась статья? Подпишись на рассылку и узнавай первым о новых уроках по почте!


Поделиться с друзьями:
26 июн 2013 01:11
mihpir889 08 янв 2017 10:39

class Tv
{
public int ChanelNow = 0;

public void NextChanel()
{
if (ChanelNow < 100)
ChanelNow++;
else
Console.WriteLine("Error");
}



public void PrevChanel()
{
if (ChanelNow>0)
ChanelNow--;
else
Console.WriteLine("Error");
}
public void GoToChanel(int num)
{
if (num < 0 && num>100)
Console.WriteLine("Error");
else
{
ChanelNow = num;
}

}
}



class Program
{
static void Main(string[] args)
{
Tv TvName = new Tv();

TvName.NextChanel();//след канал
TvName.PrevChanel();//пред канал

int num = Convert.ToInt32(Console.ReadLine());
TvName.GoToChanel(num);//переход на канал

Console.WriteLine(TvName.ChanelNow);
Console.ReadKey();

}

}


Andrey 07 янв 2017 10:30

static void Main(string[] args)
{
Televizor TV1 = new Televizor();
Console.WriteLine("Включили телевизор! Текущий канал-<"+TV1.Canal_name_function(1)+">");
int Canal_number=1,Action=0;
do
{
Console.WriteLine("Выберите действие! 1-Предыдущий канал,2-Следующий канал,3-Ручное переключение,4-Выключение телевизора");
Action = Convert.ToInt32(Console.ReadLine());
switch (Action)
{
case 1:
Canal_number--;
Canal_number=TV1.Canal_previos_function(Canal_number);
Console.WriteLine(TV1.Canal_name_function(Canal_number));
break;
case 2:
Canal_number++;
Canal_number=TV1.Canal_next_function(Canal_number);
Console.WriteLine(TV1.Canal_name_function(Canal_number));
break;
case 3:
Console.WriteLine("Введите номер канала:");
Canal_number = Convert.ToInt32(Console.ReadLine());
Console.WriteLine(TV1.Canal_name_function(Canal_number));
break;
case 4:
break;
default:
Canal_number = 3;
break;
}
} while (Action!=4);
Console.WriteLine("Выключаюсь! Нажмите любую клавишу!");
Console.ReadKey();
}

class Televizor
{ public int Canal;
public string Canal_name_function(int Canal)
{
string Canal_name="Канал "+Canal;
return Canal_name;
}
public int Canal_next_function(int Canal)
{
if (Canal>100)
{
Canal = 1;
}
return Canal;
}
public int Canal_previos_function(int Canal)
{
if (Canal<1)
{
Canal = 100;
}
return Canal;
}
}

Valeriy 04 ноя 2016 10:00

namespace Телевизор1
{
public class TV
{
internal int channelNow;

//если канал дошёл до максимального = 100, то переключается на 1 канал;
public int ChannelChangedNext(int number)
{
if (number == 101) number = 1;
return number;
}

//если канал дошёл до минимального = 1, то дальше переключается на 101 канал;
public int ChannelChangedPrevious(int number1)
{
if (number1 == 0)
number1 = 100;
return number1;
}

public void SelectChannel(int num)
{
if (num <= 0 || num>100) Console.WriteLine("Введите номер канала 1-100");
else channelNow = num;
}

public void NextChannel()
{
channelNow += 1;
}

public void PreviousChannel()
{
channelNow -= 1;
}
}

class Program
{
static void Main(string[] args)
{
TV tvSet = new TV();
tvSet.channelNow = 1;
int ChooseChannelNum = tvSet.channelNow;

int SelectAct = 1;

//выбор действия на пульте
Start:
Console.WriteLine("Текущий канал: " + tvSet.channelNow);
Console.WriteLine("Выберите действие: \n1-Следующий канал \n2-Предыдущий канал \n3-Выбрать канал \n4-Выход");

if (!Int32.TryParse(Console.ReadLine(), out SelectAct))
{
Console.WriteLine("Недопустимый ввод");
Console.WriteLine(); //отступ
goto Start;
}

Console.WriteLine();//отступы

switch (SelectAct)
{
case 1:
Console.WriteLine("Переход на следующий канал ");
tvSet.NextChannel();
tvSet.channelNow = tvSet.ChannelChangedNext(tvSet.channelNow);
break;
case 2:
Console.WriteLine("Переход на предыдущий канал ");
tvSet.PreviousChannel();
tvSet.channelNow = tvSet.ChannelChangedPrevious(tvSet.channelNow);
break;
case 3:
Console.WriteLine("Введите номер канала: ");
try { tvSet.SelectChannel(Convert.ToInt32(Console.ReadLine())); }
catch
{
Console.WriteLine("Ошибка ввода");
}
break;
case 4:
goto Finish;

default:
Console.WriteLine("Ошибка. Введите номер действия (1-4)");
break;
}
Console.WriteLine(); //отступ
goto Start;

Finish:
Console.WriteLine();
}
}
}

GoodFellow23 02 ноя 2016 18:33
Добрый день.
Максим подскажите: среда VS выдает ошибку во втором примере и подсказывает что в строке Console.WriteLine(StringHelper.TrimIt(s, 20)) в скобках должно быть значение (string, int).
Но не понятно почему, ведь string s = "очень..." и int 20.
Спасибо.
class StringHelper
{
public static string TrimIt(string s, int max)
{
if (s == null)
return string.Empty;
if (s.Length <= max)
return s;

return s.Substring(0, max) + "...";
}
}
class Program
{
static void Main(string[] args)
{
string s = "Очень длинная строка, которую необходимо обрезать до указанной длины и добавить многоточие";
Console.WriteLine(StringHelper.TrimIt(s, 20)); //"Очень длинная строка…"
Console.ReadLine();
}
}

Афанасий 10 окт 2016 13:05

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace ConsoleApplication2
{
//начало классов
public class Tv //без указания модификатор доступа, класс будет internal
{
public int Channel = 0;
}

//конец классов

class Program
{
static void Main(string[] args)
{
Tv StatusChannel = new Tv();
while (true)
{

while(true)
{
Console.WriteLine("Status Channel " + StatusChannel.Channel);
string NextChannel = Console.ReadLine();
if(NextChannel== "+")
{
StatusChannel.Channel = StatusChannel.Channel + 1;
break;
}


if(NextChannel == "-")
{
if (StatusChannel.Channel - 1 < 0)
Console.WriteLine("Error канал не может быть отритцательным");
else
StatusChannel.Channel = StatusChannel.Channel - 1;
break;
}

if (NextChannel == "OFF")
{

return;
}

int NextChannelint = Convert.ToInt32(NextChannel);
if (NextChannelint >= 0)
StatusChannel.Channel = NextChannelint;
else
Console.WriteLine("Error произвольный канал не может быть меньше нуля");
}


}
}

}
}



Влад 07 окт 2016 16:30

namespace MyFirtsProgramm
{
class TvSet
{
private int ChanelNow;

public void NextChanel()
{
ChanelNow += 1;
Console.WriteLine("Вы переключились на следующий канал");
}
public void PrevChanel()
{
ChanelNow -= 1;
Console.WriteLine("Вы переключились на предыдущий канал");
}
public void GoToChanel(int num)
{
if (num < 1)
{
Console.WriteLine("Ошибка");
}
else
{
ChanelNow = num;
Console.WriteLine("Вы переключились на " + num + " канал");
}

}
}
class Program
{
static void Main(string[] args)
{
TvSet TvName = new TvSet();
TvName.NextChanel();
TvName.PrevChanel();

int num = Convert.ToInt32(Console.ReadLine());

TvName.GoToChanel(num);
Console.ReadKey();

}

}

Юрец 05 окт 2016 00:59

namespace tvClass
{
class myTV
{
public int firstChannale = 1;
public int CurChannale;

public int upChannale()// метод увеличения канала на 1
{
firstChannale++;
return firstChannale;
}

public int downChannale()// метод уменьшения канала на 1
{
CurChannale--;
if (CurChannale < 0)// проверка, канал не может быть меньше ноля
{
Console.WriteLine("Канал должен быть больше нуля");
CurChannale++;
}
return CurChannale;
}

public int channeleSelection(int chsec)// метод присвоение канала
{
if ( chsec > 0)// проверка, канал не может быть меньше ноля
CurChannale = chsec;
else
Console.WriteLine("Канал должен быть больше нуля");
return CurChannale;
}

}

class Program
{
static void Main(string[] args)
{
int up, down, swith;
string vibor;
myTV kanal = new myTV();
Console.WriteLine("Телевизор включен на канале {0}", kanal.firstChannale);// первый канал

Console.WriteLine("Введите на какой канал переключить (конкретный канал, + или -)");
vibor = Console.ReadLine();

switch(vibor)
{
case "+":
kanal.CurChannale = kanal.upChannale();
break;

case "-":
kanal.CurChannale = kanal.downChannale();
break;

default:
kanal.channeleSelection(Int32.Parse(vibor));
break;
}

Console.WriteLine("Сейчас показывает {0} - й канал", kanal.CurChannale);



Console.ReadKey();
}
}
}

Yuri 25 авг 2016 11:00

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

class TVSet
{
private int CurrentChannel;
private const int MaxChannel = 40;
private const int MinChannel = 1;

public TVSet()
{
CurrentChannel = MinChannel;
}

public TVSet(int Ch)
{
SwitchChannel(Ch);
}

public int ShowChannel()
{
return CurrentChannel;
}

public void SwitchChannel(bool Ch)
{
if (CurrentChannel == MinChannel && Ch == false)
CurrentChannel = MaxChannel;
else if (CurrentChannel == MaxChannel && Ch == true)
CurrentChannel = MinChannel;
else
CurrentChannel += Ch == true ? 1 : -1;
}

public void SwitchChannel(int Ch)
{
if (Ch > MaxChannel || Ch < MinChannel)
return;
else
CurrentChannel = Ch;
}
}

namespace ConsoleApplication1
{

class Program
{
static void Main(string[] args)
{
TVSet TV = new TVSet(5);

do
{
Console.WriteLine(TV.ShowChannel());
Console.WriteLine("Change the channel: +/-, a number between 1 and 40 or type \"exit\":");
string choice = Console.ReadLine();
if (choice.Equals("+"))
TV.SwitchChannel(true);
else if (choice.Equals("-"))
TV.SwitchChannel(false);
else if (choice.Equals("exit"))
return;
else
{
try
{
TV.SwitchChannel(Convert.ToInt32(choice));
}
catch (FormatException obj)
{
Console.WriteLine(obj.ToString());
}
}
} while (true);
}
}
}

Ярослав 07 июн 2016 15:56

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LessionClass
{
class myTV
{
private static int curChannel = 1;
private int numChannel;

private void NextChannel()
{
curChannel += 1;
}

private void PrevChannel()
{
if (curChannel == 1)
{
curChannel = 1;
}
else
{
curChannel -= 1;
}
}

private void ToChannel(int numChannel)
{
curChannel = numChannel;
}


public string SwitchedChannel(string action)
{
try
{
numChannel = Convert.ToInt32(action);
if (numChannel < 1)
{
return "Такого канала не существует";
}

this.ToChannel(numChannel);
return "Teкущий канал " + curChannel.ToString();

}
catch (FormatException)
{
switch(action)
{
case "next":
this.NextChannel();
break;
case "prev":
this.PrevChannel();
break;
default:
return "Не верная команда";
}
return "Teкущий канал " + curChannel.ToString();
}
}
}
class Program
{
static void Main(string[] args)
{
string command = "";
string result = "";
Console.WriteLine("Добро пожаловать в интерфейс управления телевизором");
Console.WriteLine("для переключения каналов используйте команды prev и next");
Console.WriteLine("либо введите номер канала для быстрого перехода. Для выхода напишите exit");
do
{
Console.Write("Введите команду: ");
command = Console.ReadLine();
if (command == "exit")
{
Console.WriteLine("До свидания");
Console.ReadKey();
break;
}
else
{
myTV device = new myTV();
result = device.SwitchedChannel(command);
Console.WriteLine(result);
}
}
while (true);
}
}
}


Александр Михалев 29 апр 2016 13:33

class TV
{
internal static int chanel = 1; // переменная 'канал' которой присвоено начальное значение 1.

public void next() // переход канала на 1 вперед
{
chanel += 1;
Console.WriteLine("Канал был переключен! Текущий номер канала: '" + chanel + "'");
Console.WriteLine("Для продолжения нажмите любую клавишу");
}
public void back() // переход канала на 1 назад
{
chanel -= 1;
if (chanel < 1)
Console.WriteLine("Такого канала не существует!");
else
Console.WriteLine("Канал был переключен! Текущий номер канала: '" + chanel + "'");
Console.WriteLine("Для продолжения нажмите любую клавишу");
}
public void FindChanel(int find) // функция с аргументом, который считывает в себя данные введенные с клавиатуры пользователем
{
chanel = find; // присваиваем каналу значение поля введеного пользователем
if (chanel < 1)
Console.WriteLine("Такого канала не существует!");
else
Console.WriteLine("Канал был переключен! Текущий номер канала: '" + chanel + "'");
Console.WriteLine("Для продолжения нажмите любую клавишу");
}
}
class Program
{
static void Main(string[] args)
{
int vib, find, menu = 1;
TV MyTV = new TV(); // создание обьекта класса
do // цикл для повторных выполнений меню в случае неудачного ввода
{
Console.WriteLine("Выберите действия.. \n (1) Переключить канал вперед\n (2) Переключить канал назад\n (3) Ввести номер канала вручную\n (4) Выйти из программы");
try
{
Console.Write("Вы ввели: ");
vib = Convert.ToInt32(Console.ReadLine());
if (vib < 1 || vib > 4)
Console.WriteLine("Ошибка! Введенные данные не корректны! Попробуйте еще раз!");
switch (vib) // условный оператор
{
case 1:
MyTV.next();
break;
case 2:
MyTV.back();
break;
case 3:
Console.WriteLine("Введите нужный канал..");
find = Convert.ToInt32(Console.ReadLine());
MyTV.FindChanel(find);
break;
case 4:
menu = 0;
break;

}
}
catch (FormatException) // ловка ошибки типа: 'тип введенных данных не совпадает с типом переменной в которую эти данные вводятся'
{
Console.WriteLine("Неккоректное действие (введен неверный формат операнда)..");
}
Console.ReadLine();
Console.Clear(); // функция очищения консоли
}
while(menu != 0); // меню будет зациклено пока значение переменной меню не станет равным нулю.
}
}

iaKrevetko 27 апр 2016 12:10

namespace PracticeClasses1
{

class TVSet
{
bool check = false;

public void AllChannels(int count)
{
string changeNum = "";
string chanNum;
int num = 1;

do
{
Console.WriteLine("Ведите номер канала или нажмите кнопку +/-, для выхода наберите 'off'");
chanNum = Console.ReadLine();
if (chanNum == "off") { check = true; }
else if (chanNum == "+" || chanNum == "-")
{

changeNum = chanNum;
}
else
{
try
{
num = Convert.ToInt32(chanNum);
changeNum = num.ToString();

}
catch (FormatException)
{
Console.WriteLine("Вы ввели не число и не + или - ");
Console.WriteLine();
}
}

if (num > count || num == 0)
{
Console.WriteLine("Вы ввели несуществующий канал на ТВ, будет включен первый канал");
Console.WriteLine();
changeNum = "1";
}

else if (changeNum == "+" && num < count)
{
num++;
changeNum = Convert.ToString(num);
}
else if (changeNum == "+" && num == count)
{
num = 1;
changeNum = "1";
}

else if (changeNum == "-" && num <= count && num != 1)
{
num--;
changeNum = Convert.ToString(num);
}
else if (changeNum == "-" && num <= 1)
{
num = count;
changeNum = Convert.ToString(num);
}

Console.WriteLine();
if (chanNum != "off")
{
Console.WriteLine("Сейчас включен " + changeNum + " канал");
}
} while (check == false);
}
}

class Program
{


static void Main(string[] args)
{
TVSet LG = new TVSet();
LG.AllChannels(15);

}
}
}

Дмитрий 16 апр 2016 04:05
Оцените, нормально так?


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication9
{
class Canal
{
public int TVChanal;

public void NextCan()
{
TVChanal ++;
if (TVChanal > 60)
TVChanal = 1;
}

public void PrevCan()
{
TVChanal--;
if (TVChanal < 1)
TVChanal = 60;
}
public void MyCan()
{
int can1;

Console.Write("Введите номер интересующего канала: ");
can1 = Convert.ToInt32(Console.ReadLine());
if (can1>60 && can1<1)
Console.WriteLine("Нет такого канала. Повторим.");
else
TVChanal = can1;
}

}
class Program
{
static void Main(string[] args)
{
string dev;
Canal MyTV = new Canal();
bool vix = true;

MyTV.TVChanal = 1;
while (vix)
{
Console.WriteLine("Всего 60 каналов. Текущий канал - " + MyTV.TVChanal + ". Какие действия предпринять?");
Console.WriteLine("1 - предыдущий канал,");
Console.WriteLine("2 - следующщий канал,");
Console.WriteLine("3 - перейти на определенный канал,");
Console.WriteLine("4 - выход");
dev = Console.ReadLine();
if (dev.Length > 1)
{
dev="5";
}
Console.Clear();
switch (dev)
{
case "1":
MyTV.PrevCan();
break;
case "2":
MyTV.NextCan();
break;
case "3":
MyTV.MyCan();
break;
case "4":
vix = false;
break;
default:
Console.WriteLine("не правильный ввод");
break;
}
}



}
}
}


lidiia 14 апр 2016 12:24
1, Напишите программу последовательного ввода чисел из диапазона
0…255. Запрещается последовательно вводить два числа, разность
между которыми меньше 7. Программа заканчивает работу после обна-
ружения первой ошибки
2, Дан двухмерный массив 7 на 7. Найти сумму модулей отрицательных нечетных элементов.
Написать все методом

Александр Михалев 04 апр 2016 19:21

public class TV
{
public static int chanel = 1, find;

public void ChanelBack()
{
if (chanel > 1)
{
chanel -= 1;
Console.WriteLine("Канал переключен назад! Текущий канал - " + chanel);
}
else
Console.WriteLine("Ошибка! Такого канала не существует!");
}
public void ChanelNext()
{
chanel += 1;
Console.WriteLine("Канал переключен вперед! Текущий канал - " + chanel);
}
public void ChanelFind()
{
Console.WriteLine("Введите номер искомого канала..");
find = Convert.ToInt32(Console.ReadLine());
chanel = find;
Console.WriteLine("Канал переключен! Текущий канал - " + chanel);
}
}
class Program
{
static void Main(string[] args)
{
int v, s = 100;
for (int i = 0; i < s; i++)
{
Console.WriteLine("1. Канал -> Назад, 2. Канал -> Вперед, 3. Найти канал по номеру");
v = Convert.ToInt32(Console.ReadLine());
Console.Clear();
TV MyTV = new TV();
switch (v)
{
case 1:
MyTV.ChanelBack();
break;
case 2:
MyTV.ChanelNext();
break;
case 3:
MyTV.ChanelFind();
break;
default:
Console.WriteLine("Ошибка! Так переключать канал не получится!");
break;
}
Console.WriteLine("Нажмите 'Enter'");
Console.ReadKey();
Console.Clear();
}
}
}
}

Рома 27 мар 2016 01:05

using System;

namespace ConsoleApplication11

{
class TV
{
public int Channel0;
public void NextChannel(string a)
{
try
{
if (a == "]")

{
Channel0++;
}
else if (a == "[")
{

if(Channel0 < 1)
Console.WriteLine("Канал не может быть отрицательным");
else
Channel0--;

}
else
try
{
Channel0 = (Convert.ToByte(Console.ReadLine()));
if (Channel0 > 0)
Channel0 = Channel0 ;

}
catch (FormatException)
{
Console.WriteLine("Введите НОМЕР канала");
}
}
catch (Exception)
{
Console.WriteLine("Bad command");
}
}
}
class Program
{
static void Main(string[] args)
{
TV LG = new TV();
LG.Channel0 = 0;
for (int c = 0; c < 255; c++)
{
Console.WriteLine("Текущий канад" + LG.Channel0);
Console.WriteLine("[ -следующий канал [ - предыдущий ");
string a = (Convert.ToString(Console.ReadLine()));
LG.NextChannel(a);
Console.WriteLine(a);
}
}
}
}



Андрей 23 мар 2016 15:46
Павел, в универе еще хуже объясняют , так что не расстраивайся

gamemaster 08 мар 2016 17:46
подскажите делает строка
return string.Empty;
и в каком уроке это было заранее спасибо.

Баринов ФИлипп 06 мар 2016 19:26
Я абсолютно согласен с павлом. Особенно я намучился с рядом ФИбоначчи, делал около недели, перепробовал разные способы, но так и прибегнул к подсказке). Практически постоянно приходитс яза разъяснением обращаться на CyberForum в раздел C# для новичков. Все равно я очень рад, что есть ваш ресурс, пусть очень сложно, но это своего рода закалка дял нас..

Павел 16 фев 2016 18:17
Спасибо большое за уроки. Я никогда не программировал, иду по вашим урокам последовательно, и хочу сказать что изложение материала очень сложное для понимания, и иногда пропускаете объяснения чего либо что потом ступорит все понимание . Например - вы так и не объяснили что должно писаться в скобках поля класса или зачем пишется 1е поле вообще что вы написали в примере. А домашнее задание выглядит так- "Детки 2+2 будет 4, а теперь посчитайте интеграл"

dmitry_zon 12 фев 2016 16:13
Максим, участники, помогите, пожалуйста, не могу понять, почему обработка исключения по формату (FormatException) не работает и выдает ошибку. стоит заменить на исключение любого типа (Exception), как в коде ниже, все встает на свои места:

namespace lesson14
{
class TV
{
public byte CurChannel;
public void ChangeChannel(string UserCommand)
{
try
{
if (UserCommand == "u")
{
CurChannel++;
}
else if (UserCommand == "d")
{
CurChannel--;
}
else
{
CurChannel = Convert.ToByte(UserCommand);
}
Console.WriteLine("You are now at the channel " + CurChannel);
}
catch (Exception)
{
Console.WriteLine("You've entered a bad command");
}
}
}
class Program
{
static void Main(string[] args)
{
TV LG = new TV();
LG.CurChannel = 0;
Console.WriteLine("Current channel is: " + LG.CurChannel+" Change channel?");
string UserCommand = Convert.ToString(Console.ReadLine());
LG.ChangeChannel(UserCommand);
Console.ReadKey();
}
}
}

зеленыйПрограммист 02 фев 2016 20:23
class telikTV
{
int channel=1;
string numberofchannel;

int ChannelMAX = 50;
int ChannelMIN = 0;

public void ControllTV()
{
Console.WriteLine("Телевизор включен. введите нужный канал");

while (true)
{
numberofchannel = Convert.ToString(Console.ReadLine()); //Ввод канала в стринг

MyTVnext(numberofchannel); //Передача значения в мутвнекст

if ((channel >= 0) && (channel <= 50)) //
Console.WriteLine("Текущий канал{0}", channel); //
else //вывод результата канала
{ //
ChannelDubbing(); //
Console.WriteLine("Такого канала нету.\nТекущий канал {0}", channel);//
} //
}
}

void MyTVnext(string numberofchan)//проверка и присвоение значения в мутвнекст для канала
{
if (numberofchan == "+")
{
channel++;
}
else if (numberofchan == "-")
{
channel--;
}
else Int32.TryParse(numberofchan, out channel);
}

void ChannelDubbing() ////проверка в на максимальное и минимальное значение канала
{

if (channel <= 1)
channel = ChannelMIN;

if (channel >= 49)
channel = ChannelMAX;
}
}

stani-wunderbar 08 янв 2016 00:23

class TV
{
public byte TVchanel;//текущий канал

public void NextChanel()//следующий канал
{
TVchanel++;
Console.WriteLine("Текущий канал: " + TVchanel);
}

public void PreviousChanel()//предыдущий канал
{
TVchanel--;
Console.WriteLine("Текущий канал: " + TVchanel);
}

public void Chanel(int n)//канал по номеру
{
try
{
TVchanel = Convert.ToByte(n);
Console.WriteLine("Текущий канал: " + TVchanel);
}
catch(OverflowException)
{
Console.WriteLine("Номер канала может быть от 0 до 255");
}

}
}
class Program
{
static void Main(string[] args)
{
TV LG = new TV();// Создаем новый объект - телевизор LG
LG.TVchanel = 0;// по умолчанию при первом включении телевизора стоит канал №0
Console.WriteLine("Текущий канал: " + LG.TVchanel);

while (true)
{
Console.WriteLine("Введите \"<\" или \">\" для переключения каналов, или введите номер канала: ");
string s = Console.ReadLine();

if (s == "<")
LG.PreviousChanel();// переключаем на предыдущий канал
else if (s == ">")
LG.NextChanel();// переключаем на предыдущий канал
else
try
{
LG.Chanel(Convert.ToInt32(s));
}
catch (FormatException)
{
Console.WriteLine("Номер канала должен быть числом");
}

}
}
}

neronovs 05 янв 2016 15:57

class Tv
{
public int current;
public bool turnedOn = false;
public string onoff = "";

public void Enterring()
{
onoff = Console.ReadLine();
return;
}

public void UpDown()
{
if (onoff == "up")
current += 1;
else
current -= 1;
return;
}


public void Channels()
{
bool nonNum = false;

for (;;)
{
//Check for a number of a channel
{
if (turnedOn == true)
{
foreach (char c in onoff) //Check for non number value
{
if (c < '0' || c > '9')
{
nonNum = true;
break;
}
else
{
nonNum = false;
}
}

if (nonNum == true)
{
Console.WriteLine("Non numbers");
Enterring();
}
else
{
current = Convert.ToInt32(onoff);
return;
}
}
else
return;
}
}
}//END of method Channels


public void Switching()
{

for (;;)
{
if (onoff == "on") //Check for ON
{
turnedOn = true;
Console.WriteLine("OK, it's on");
return;
}
else if (onoff == "off") //Check for OFF
{
turnedOn = false;
Console.WriteLine("OK, it's off");
return;
}
}
}//END of method Switching
}

class Program
{
static void Main(string[] args)
{
Tv tv = new Tv();
for (; ; )
{
//Console.Clear();
Console.WriteLine(tv.turnedOn != true ? "The TV is turned off (enter 'exit' to exit)" : "The TV is turned on (enter 'exit' to exit)");
if (tv.current != 0 && tv.turnedOn == true)
{
Console.WriteLine("The current TV channel is " + tv.current);
}
Console.WriteLine(tv.turnedOn != true ? "To turn the TV on, enter 'on'" : "Commands: 'off' - turn off, 'up/down' - change channals or just enter the number");;

tv.Enterring();

if (tv.onoff == "on" || tv.onoff == "off")
tv.Switching();
else if (tv.onoff == "up" || tv.onoff == "down")
tv.UpDown();
else
tv.Channels();
if (tv.onoff == "exit")
break;
}

}
}

Kolsky 13 дек 2015 09:41

class TV
{
public bool PowerOn;
public uint Channel=1;
public void TV_Ctrl(string a, uint b)
{
switch(a)
{
case "On":
if (PowerOn == false)
{
PowerOn = true;
Console.Write("Turned power on.\r\n");
}
break;
case "Off":
if (PowerOn == true)
{
Console.WriteLine("Turning power off...");
PowerOn = false;
}
break;
case "Next":
if (Channel!=b && PowerOn==true) Channel++; else Channel=1;
break;
case "Prev":
if (Channel!=1 && PowerOn==true) Channel--; else Channel=b;
break;
default:
break;
}
if (PowerOn) Channel = a.StartsWith("Ch ")&&Convert.ToUInt32(a.Substring(3))<=b?Convert.ToUInt32(a.Substring(3)):Channel;
}

}
class Program
{
public static void Main(string[] args)
{
uint ChAm=0;
bool Ex=true;
do
{
try
{
Console.Write("Enter amount of channels: ");
ChAm = Convert.ToUInt32(Console.ReadLine());
if(ChAm!=0) Ex=false;
}
catch (Exception)
{
Console.WriteLine("Illegal instriction. Try again");
Ex=true;
}
}
while (Ex);
string UserInput;
Console.Write("\r\nGuide of TV navigation:\r\nOn - Power on\r\nOff - Power off\r\nNext - Next channel\r\nPrev - Previous channel\r\nCh x - Channel with number x\r\n\r\n");
TV launch = new TV();
while (true)
{
try
{
UserInput = Console.ReadLine();
launch.TV_Ctrl(UserInput, ChAm);
if (launch.PowerOn == true && launch.Channel != 0)Console.WriteLine("Channel "+launch.Channel);
}
catch (Exception)
{
Console.WriteLine("Illegal instriction. Try again");
}
}
}
}

Dddd 08 дек 2015 10:34
namespace ConsoleApplication3
{
class TVset
{
public int CanalWrightNow;
public void Inicialization(int CWN)
{
CanalWrightNow = CWN;
}
public void PlusAndMinuCanal(string ActionOfChanel)
{

if (ActionOfChanel == "-")
{
CanalWrightNow--;
}
else if (ActionOfChanel == "+")
{
CanalWrightNow++;
}
else if (CanalWrightNow < 0)
{ CanalWrightNow = 0; }
}
public string ChanalNow()
{
return Convert.ToString(CanalWrightNow);
}
}
class Program
{
static void Main(string[] args)
{
TVset TV = new TVset();
Console.Write("Hello, im your TVset!) What Chanal ypu want to watch?");
TV.Inicialization(Convert.ToInt16(Console.ReadLine()));
Console.WriteLine("Your choise is : {0}", TV.ChanalNow());

Console.WriteLine("If you want upper or lower Chanal you can do it by '-' or '+' ");
TV.PlusAndMinuCanal(Console.ReadLine());

Console.WriteLine("Your choise is : {0}", TV.ChanalNow());

Heinkel 17 ноя 2015 16:12
Постарался сделать забавный телевизор. Кнопки вперед, назад, предидущий канал и номер канала пристутствуют.
что можно было бы упростить в коде? (написать короче или же исползовать доп. методы)


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
class TVset
{
bool FullMenu = true;
private int Channel_num;
protected string[] channels = { "RBK news", "cinema: Terminator 2", "cinema: Back to The Future", "XXX |*-|", "Reklama", "Ren-TV", "TV-6", "Cartoons: Simpsons", "Cartoons: Batman", "ORT", "First Galactic channel", "Just mr.Putin" };
private int[] LC = new int[2];




private void MenuSwitch(string Message)
{
string text = "";



Console.Clear();

switch (Message.ToLower())
{
case "+": Channel_num++; if (Channel_num > 999) { Channel_num = 0; } break;
case "-": Channel_num--; if (Channel_num < 0) { Channel_num = 999; } break;
case "menu": FullMenu = true; Menu(); break;
case "last": Channel_num = LC[0]; break;
default:
if (int.TryParse(Message, out Channel_num) & (Channel_num >= 0))
{
if (Channel_num.ToString().Length >= 4)
{
Channel_num= int.Parse(Channel_num.ToString().Substring(0, 3));

}

}
else
{
Console.WriteLine("Unknown operation, please choose the right one");
System.Threading.Thread.Sleep(2000);
FullMenu = true;
Console.Clear();
Menu();
}
break;
}
LC[0] = LC[1];
LC[1] = Channel_num;
if (Channel_num > 11 && Channel_num <= 100)
{
text = "TV switched to channel " + Channel_num + "\nshows: Channel is not set";
}
else if (Channel_num > 100 && Channel_num <= 999)
{
text = "TV switched to channel " + Channel_num + "\nshows: Channel is temporarily blocked";
}
else
{
text = "TV switched to channel " + Channel_num + "\nshows: " + channels[Channel_num];
}
Console.WriteLine(text);
System.Threading.Thread.Sleep(1500);
Console.Clear();
for (int i = 0; i < text.Length; i++) //running line
{
Console.WriteLine(text.Substring(i++));
System.Threading.Thread.Sleep(180);
Console.Clear();
}
Menu();

}

private void Calculation(int Channel_num)
{

Random r = new Random();
int t = r.Next(1, 12);


}


public void Welcome() // Welcome page while turn on the TV
{
string text = "\n \n \n Now you switched to channel 0";
string text2 = "\n Press any key to continue\n\n\t\t\t *\\_(o_0)_/*\n\t\t and 999 channels\n\t console which has been broken at the factory first,\nIn this collection we would like to offer the gray display,\nThank you for buying TV Rashka";

for (int i = text2.Length; i > 0; i--)
{
Console.WriteLine(text2.Substring(i--));
System.Threading.Thread.Sleep(30);

if (i == 0)
{
break;
}
Console.Clear();
}

Console.ReadKey();

for (int i = 0; i < text.Length; i++)
{
Console.WriteLine(text.Substring(i++));
System.Threading.Thread.Sleep(200);
Console.Clear();
}

Menu();
}

private void Menu()
{
if (FullMenu == true)
{
Console.WriteLine("Welcome to TV menu:\n=> Type ' + ' for next channel\n=> Type ' - ' for last channel\n=> Type 'channel number' from 1 - 999\n=> Type 'Last' fore prevouis channel\n=> Type 'Menu' for detail\n\nPress any key");
Console.ReadKey();
Console.Clear();
}
FullMenu = false;
Console.WriteLine("-=Menu=-:\n | + |\n | - |\n | 1-999 |\n | Last |\n | Menu |\n\nInput:");
MenuSwitch(Console.ReadLine());

}

}




class Program
{
static void Main(string[] args)
{
TVset TV = new TVset();
Metka: Console.WriteLine("Do you want to turn on TV?\n| Yes | or | No |");
string Answer = Console.ReadLine().ToLower();
if (Answer.Equals("no") || Answer.Equals("n"))
{
Console.WriteLine("Okay, see u later mate");
return;
}
while (String.IsNullOrEmpty(Answer) || !(Answer.Equals("yes") | Answer.Equals("y")))
{
goto Metka;

}
Console.Clear();
TV.Welcome();
Console.ReadKey();
}
}
}


Vitaly409 11 сен 2015 00:09

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
try
{
TVset tv = new TVset();
int a=0,num=1;
bool bo=true;
Console.WriteLine(" 1. Включить телевизор\n 2. Выключить телевизор\n 3. Ввести номер канала\n 4. Переключить на следующий канал\n 5. Переключить на предыдущий канал\n 6. Узнать канал\n 7. Выход\n Введите необходимый пункт: ");

while (bo)
{
a =Convert.ToInt32( Console.ReadLine());
switch (a)
{
case 1:
tv.on();
Console.WriteLine("Телевизор включился");
break;
case 2:
tv.off();
Console.WriteLine("Телевизор выключился");
break;
case 3:
if (tv.FN())
{
Console.WriteLine("Введите номер канала 1-50:");
num = Convert.ToInt32(Console.ReadLine());
if (num > 50 || num < 1)
Console.WriteLine("Вы ввели не существующий канал");
else
{
tv.ChangeChannel(num);
Console.WriteLine("Телевизор переключен на " + tv.SelectedChannel() + " канал");
}
}
else Console.WriteLine("Телевизор выключен");
break;
case 4:
if (tv.FN())
{ tv.next(); Console.WriteLine("Телевизор переключен на " + tv.SelectedChannel() + " канал"); }
else Console.WriteLine("Телевизор выключен");
break;
case 5:
if (tv.FN())
{
tv.preview();
Console.WriteLine("Телевизор переключен на " + tv.SelectedChannel() + " канал");
}
else Console.WriteLine("Телевизор выключен");
break;
case 6:
if (tv.FN())
Console.WriteLine("На телевизоре идет " + tv.SelectedChannel() + " канал");
else Console.WriteLine("Телевизор выключен");
break;
case 7:
Console.WriteLine("Вы вышли, телевизор выключается");
tv.off();
bo = false;
break;
default:
Console.WriteLine("Повторите выбор пункта меню!");
Console.WriteLine(" 1. Включить телевизор\n 2. Выключить телевизор\n 3. Ввести номер канала\n 4. Переключить на следующий канал\n 5. Переключить на предыдущий канал\n 6. Узнать канал\n 7. Выход\n Введите необходимый пункт: ");
break;
}

}
}
catch (FormatException)
{
Console.WriteLine("Вы не корректно ввели данные");
}
Console.Read();
}
}

class TVset
{
private int canal=1;
private bool offon=false;
public void next()
{ canal = canal + 1;
if (canal > 50) canal = 1;
}
public void preview()
{ canal = canal - 1;
if (canal<=0) canal=50;}
public void ChangeChannel(int num)
{ canal =Math.Abs( num); }
public void on()
{ offon = true; }
public void off()
{ offon = false; }
public int SelectedChannel()
{
return canal;
}
public bool FN()
{ return offon; }
}
}

ROOT 17 авг 2015 19:22
//Домашнее задание//

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication34
{
class TvSet
{
private int NowChannel = 0;
public int NextChannel()
{
NowChannel += 1;
if (NowChannel == 7)
{
NowChannel = 0;
}
return NowChannel;
}
public int PreviousChannel()
{
NowChannel -= 1;
if (NowChannel == -1)
{
NowChannel = 6;
}
return NowChannel;
}
public int ChooseChannel()
{
Console.Write("Введите номер канала: ");
NowChannel = Convert.ToInt32(Console.ReadLine());
if (NowChannel > 6 || NowChannel < 0)
{
NowChannel = 0;
}
return NowChannel;
}
}
class Program
{
static void Main(string[] args)
{
//Создайте класс Телевизор. В нем есть поле текущий канал.
//Предусмотрите в нем возможность переключения каналов: следующий канал, предыдущий канал, переход к каналу по номеру.
//Учтите, что канал не может иметь отрицательный номер.
TvSet MyTV = new TvSet();
int choose = 0;
do
{
try
{
Console.WriteLine("Помощь:\n1 - следующий канал\n2 - предыдущий канал\n3 - выбрать канал\n4 - выключить телевизор");
choose = Convert.ToInt32(Console.ReadLine());
Console.Clear();
if (choose == 1)
{
Console.WriteLine("Сейчас вы на канале номер " + MyTV.NextChannel());
}
else if (choose == 2)
{
Console.WriteLine("Сейчас вы на канале номер " + MyTV.PreviousChannel());
}
else if (choose == 3)
{
Console.WriteLine("Сейчас вы на канале номер " + MyTV.ChooseChannel());
}
}
catch (FormatException)
{
Console.Clear();
Console.WriteLine("Введите цифры 1, 2, 3 или 4");
Console.Clear();
}
}
while (choose != 4);
Console.ReadKey();
}
}
}


Максим 16 авг 2015 17:44
using System;

namespace Work_Method
{
class TV
{
int a = 1;

public void Next()
{
if(1 <= a )
{
if( a != 10)
{
a += 1;
Console.WriteLine(a);
}
}
if(a == 10)
{
a =1;
Console.WriteLine(a);
}
}

public void Back()
{
if(10 >= a)
{
if(a != 1)
{
a -= 1;
Console.WriteLine(a);
}
}
if(a == 1)
{
a = 10;
Console.WriteLine(a);
}
}
public void Click(int a)

{

this.a = a;



if(a >= 10)
{

Console.WriteLine(1);
}
if(a < 1)
{
Console.WriteLine(10);
}


}




}


class Program
{
public static void Main(string[] args)
{
TV lg = new TV();


lg.Next();
lg.Back();

int a = Int32.Parse(Console.ReadLine());

lg.Click(a);



Console.ReadLine();
}
}
}

ROOT 15 авг 2015 17:59
Попытался написать программу с goto...(что-то вроде игры в наперстки) xD

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Azart
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("\t\t\t\tby ROOT\n\n\n\nнажмите любую клавишу, для перехода в главное меню...");
Console.ReadKey();
Console.Clear();
// непосредственное начало игры
menu:
try
{
Console.WriteLine("Главное меню:\n1 - Начать игру в наперстки\n2 - Правила игры\n3 - Выход\n\n\nПомощь: нажимайте цифры \"1\", \"2\" и \"3\", для выбора в главном меню.");
int selection = Convert.ToInt32(Console.ReadLine());
if (selection == 1)
{
Console.Clear();
goto menu2;
}
else if (selection == 2)
{
Console.Clear();
Console.WriteLine("В игре даны 3 сосуда(пусть это будут, к примеру, перевернутые стаканы).\nИм даны номера 1, 2 и 3 соответственно.\nВ начале каждого круга(раунда) вы делаете ставку.\nЕсли после перемешивания вы угадываете в каком сосуде находится объект(к примеру, шарик), вы забираете выигрыш.\nЕсли не угадываете, с вас списывают ставку.\nИгра продолжается до тех пор пока вы не лишаетесь всех денег, либо не выиграете весь банк.");
Console.ReadKey();
Console.Clear();
goto menu;
}
else if (selection == 3)
{
return;
}
else if (selection != 1 || selection != 2 || selection != 3)
{
Console.Clear();
Console.WriteLine("Ошибка. Вы должны ввести числа 1, 2 или 3!\n\nдля возврата в главное меню, нажмите любую клавишу...");
Console.ReadKey();
Console.Clear();
goto menu;
}
}
catch (FormatException)
{
Console.Clear();
Console.WriteLine("Ошибка. Вы ввели не число!\n\nдля возврата в главное меню, нажмите любую клавишу...");
Console.ReadKey();
Console.Clear();
goto menu;
}
menu2:
{
Console.WriteLine("1 - игра со ставками\n2 - тренировочный режим");
int selcetion2 = Convert.ToInt32(Console.ReadLine());
if(selcetion2 == 1)
{
Console.Clear();
goto game1;
}
if (selcetion2 == 2)
{
Console.Clear();
goto game2;
}
}
game1:
{
// процесс игры
int MyMoney = 500;
Round:
while (MyMoney != 0 || MyMoney >= 2000)
{
Random vessels = new Random();
Console.WriteLine("Вы имеете денег " + MyMoney);
int sosud = vessels.Next(1, 3);
Console.WriteLine("Начало игры\n\nСделайте вашу ставку: ");
int stavka = Convert.ToInt32(Console.ReadLine());
if (stavka > MyMoney || stavka == 0)
{
Console.Clear();
Console.WriteLine("Вы не можете сделать такую ставку.");
Console.ReadKey();
Console.Clear();
goto Round;
}
Rate:
Console.WriteLine("На какой сосуд вы ставите?(Введите номер сосуда - 1, 2 или 3): ");
int rate = Convert.ToInt32(Console.ReadLine());
if (rate > 3 && rate < 1)
{
Console.Clear();
Console.WriteLine("Такого сосуда не существует!");
Console.ReadKey();
Console.Clear();
goto Rate;
}
if (rate == sosud)
{
//выигрыш ставки
Console.Clear();
Console.WriteLine("ВЫ ВЫИГРАЛИ РАУНД!");
Console.ReadKey();
Console.Clear();
MyMoney += stavka;
}
else if (rate != sosud)
{
//проигрыш ставки
Console.Clear();
Console.WriteLine("К сожалению, вы проиграли раунд");
Console.ReadKey();
Console.Clear();
MyMoney -= stavka;
}
}
if (MyMoney == 0)
{
Console.Clear();
Console.WriteLine("\t\t\t\tВЫ ПРОИГРАЛИ!\n\n\nДля перехода в главное меню нажмите любую клавишу...");
Console.ReadKey();
Console.Clear();
goto menu;
}
if (MyMoney >= 2000)
{
Console.Clear();
Console.WriteLine("\t\tПОЗДРАВЛЯЕМ!!! ВЫ ВЫИГРАЛИ!\n\n\nДля перехода в главное меню нажмите любую клавишу...");
Console.ReadKey();
Console.Clear();
goto menu;
}
}
game2:
{
// процесс игры
int continuegame = 0;
while (continuegame != 10)
{
Random vessels = new Random();
int sosud = vessels.Next(1, 3);
Rate:
Console.WriteLine("На какой сосуд вы ставите?(Введите номер сосуда - 1, 2 или 3): ");
int rate = Convert.ToInt32(Console.ReadLine());
if (rate > 3 && rate < 1)
{
Console.Clear();
Console.WriteLine("Такого сосуда не существует!");
Console.ReadKey();
Console.Clear();
goto Rate;
}
if (rate == sosud)
{
//выигрыш ставки
Console.Clear();
Console.WriteLine("ВЫ ВЫИГРАЛИ РАУНД!");
Console.ReadKey();
Console.Clear();
}
else if (rate != sosud)
{
//проигрыш ставки
Console.Clear();
Console.WriteLine("К сожалению, вы проиграли раунд");
Console.ReadKey();
Console.Clear();
}
continuegame += 1;
if (continuegame == 10)
{
Console.WriteLine("Тренировка закончена!");
Console.Clear();
goto menu;
}
}

}
}
}
}

ROOT 11 авг 2015 13:39
В одном из предыдущих решений, был использован оператор goto. Подскажите, пожалуйста, как он работает.

Anatoliy 10 авг 2015 17:13
Д/З

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
class Program
{
internal class TV
{
private int channel = 1;
internal int channel_plus()
{
channel = channel + 1;
if (channel == 6)
{
channel = 0;
}
return channel;
}
internal int channel_minus()
{
channel = channel - 1;
if (channel == -1)
{
channel = 5;
}
return channel;
}
internal int channel_choose()
{
do{
channel = Convert.ToInt32(Console.ReadLine());
} while (channel < 0 || channel > 5);
return channel;
}

}
static void Main(string[] args)
{
string letter;
TV myTV = new TV();
do
{
Console.WriteLine("a = channel +1 , s = channel - 1, d = channel choose , f = close programm");
letter = Console.ReadLine();
Console.Clear();
if (letter == "a")
{
Console.WriteLine("Channel is " + myTV.channel_plus());
}
else if (letter == "s")
{
Console.WriteLine("Channel is " + myTV.channel_minus());
}
else if (letter == "d")
{
Console.WriteLine("choose your channel ");
myTV.channel_choose();
}

} while (letter != "f");
}
}
}


Максим 17 июл 2015 10:06
Очень Юра
---
Лично я goto не использую никогда, заменить можно циклами

Очень Юра 15 июл 2015 21:27
Спасибо за интересный урок. Нормально? Подскажите пожалуйста, оправдано ли в данном случае использование goto, и чем можно его заменить.

namespace ConsoleApplication1
{
class TV
{
private ushort channel = 1;
public ushort GetChannel
{
get
{
return channel;
}
}
public void ChannelNext()
{
channel++;
if (channel == 0) //пропускаю нулевой канал
channel++;
}
public void ChannelPrevious()
{
channel--;
if (channel == 0) //пропускаю нулевой канал
channel--;
}
public void ChannelSelect(ushort ch)
{
if (ch != 0) //исключаю нулевой канал
channel = ch;
}
}
class Program
{
static void Main(string[] args)
{
byte number;
TV myTV = new TV();
link:
try
{
do
{
Console.WriteLine("Текущий канал: " + myTV.GetChannel);
Console.WriteLine("Выберите действие:");
Console.WriteLine("------------------");
Console.WriteLine("1 следующий канал");
Console.WriteLine("2 предидущий канал");
Console.WriteLine("3 указать канал");
Console.WriteLine("4 выйти");

number = Convert.ToByte(Console.ReadLine());
if (number == 1)
myTV.ChannelNext();
else if (number == 2)
myTV.ChannelPrevious();
else if (number == 3)
{
Console.Write("Введите номер канала: ");
myTV.ChannelSelect(Convert.ToUInt16(Console.ReadLine()));
}
else if (number == 4) { } //при выходе прячу else
else
{
Console.WriteLine("Введите номер пункта");
Console.ReadLine();
}
Console.Clear();
}
while (number != 4);
}
catch (FormatException)
{
Console.WriteLine("Ошибка! Введено не число");
Console.ReadLine();
Console.Clear();
goto link;
}
catch (OverflowException)
{
Console.WriteLine("Ошибка! Используйте число от 1 до {0}", UInt16.MaxValue);
Console.ReadLine();
Console.Clear();
goto link;
}
}
}
}

Максим 30 июн 2015 14:53
Velglarn
---
Нормально в целом. Правда есть некоторая непоследовательность, метод PreviousPortal возвращает строку и она идет в консоль, а ChoosePortal метод из той же оперы, но вывод у него внутри.

Velglarn 26 июн 2015 21:51
Максим, прокомментируйте моё "творение", пожалуйста, и укажите на значительные огрехи :)


namespace Portals_scheme
{
class Portal
{
string[] portals = { "Forest", "Willadge", "City", "Ancient_Tower", "Lake", "Darkness" };
int Now = 0;
internal void First()
{
Console.WriteLine("Stranger, you are in" + " " + portals[Now] + " " + "now! What's the goal of your teleportation?");
Console.WriteLine("You can choose only");
for (int i = 0; i < portals.Length; i++)
{
Console.WriteLine(portals[i]);
}
}
internal string NextPortal()
{
try
{
return portals[++Now];
}
catch (IndexOutOfRangeException)
{
Now = 0;
return portals[Now];
}
}
internal string PreviousPortal()
{
try
{
return portals[--Now];
}
catch (IndexOutOfRangeException)
{
Now = portals.Length - 1;
return portals[Now];
}
}
internal void ChoosePortal()
{
string PortalChoose = Console.ReadLine();
try
{
Console.WriteLine(portals[Convert.ToInt32(PortalChoose) - 1]);
}
catch
{
Console.WriteLine("Stranger, you must insert number of portals witch you wanna to use");
ChoosePortal();
}
}
}

class Program
{
static void Main(string[] args)
{
Portal Portals = new Portal();
Portals.First();
string Enter_Portal;
Console.WriteLine("Next portal +, previous -");
Console.WriteLine("If you wanna to choose some obvious portal, press *");
do
{
Enter_Portal = Console.ReadLine();
if (Enter_Portal == "+")
Console.WriteLine(Portals.NextPortal());
else if (Enter_Portal == "-")
Console.WriteLine(Portals.PreviousPortal());
else if (Enter_Portal == "*")
Portals.ChoosePortal();
}
while (Enter_Portal != "+" || Enter_Portal != "-");
Console.ReadKey();
}
}
}

AlPer 25 июн 2015 20:12

class TV
{
private int ch;
public int Ch
{
get
{
return ch;
}
set
{
ch = value;
if (ch <= 0) ch = 1;
else if (ch >= 100) ch = 99;
}
}

public int tvSet;
public string pult;

public void TVOnOff()
{
int temp;
if (tvSet==0)
{
while (pult!="on")
{
Console.Clear();
Console.WriteLine("Телевизор выключен. Наберите on/off(вкл./выкл.)");
pult = Console.ReadLine();
}
tvSet = 1; Ch = 1;
}

if (tvSet==1)
{
while (pult!="off")
{
Console.Clear();
Console.WriteLine("Телевизор включен. Работает {0} канал.", Ch);
Console.WriteLine("Выбор канала 1-99 или -/+. Чтобы выключить телевизор наберите off.");
pult = Console.ReadLine();
if (Int32.TryParse(pult, out temp))
{
Ch = temp;
continue;
}
if (pult=="+") ++Ch;

if (pult=="-") --Ch;
}
}
}
}

class Programm
{
static void Main()
{
MenuSet();
}

static void MenuSet()
{
TV tv1 = new TV();
tv1.TVOnOff();
}
}

Владимир2la 18 июн 2015 23:47
У меня получилось вот так:

namespace ConsoleApplication1
{
class TVSet
{
private byte CurrentChannel;
public void ON()
{
CurrentChannel = 0;
Console.WriteLine("Здравствуйте! Текущий канал: " + CurrentChannel);
}
public void NextChannel()
{
CurrentChannel++;
Console.WriteLine("Текущий канал: " + CurrentChannel);
}
public void PrevChannel()
{
CurrentChannel--;
Console.WriteLine("Текущий канал: " + CurrentChannel);
}
public void NumChannel()
{
byte Num;
Console.WriteLine("Введите номер канала");
try
{
Num = Convert.ToByte(Console.ReadLine());
CurrentChannel = Num;
Console.WriteLine("Текущий канал: " + CurrentChannel);
}
catch
{
Console.WriteLine("Ошибка! Введите число от 0 до 255");
}
}

}
class Program
{
static void Main(string[] args)
{
TVSet TV = new TVSet();
TV.ON();
byte Chose=0;
Console.WriteLine("Чтобы переключить на следующий канал, нажмите <1>");
Console.WriteLine("Чтобы переключить на предыдущий канал, нажмите <2>");
Console.WriteLine("Чтобы выбрать канал по номеру, нажмите <3>");
Console.WriteLine("Чтобы выйти, нажмите <0>");
do
{
try
{
Chose = Convert.ToByte(Console.ReadLine());
if (Chose == 1)
{
TV.NextChannel();
}
else if (Chose == 2)
{
TV.PrevChannel();
}
else if (Chose == 3)
{
TV.NumChannel();
}
}
catch
{
Console.WriteLine("Ошибка!. Введите <1>, <2>, <3> или <0>");
}
}
while (Chose != 0);
}
}
}

Максим 18 июн 2015 11:28
rotkiv
---
Непонятно что за массив каналов allChannels,если и делать его, то он должен содержать имена каналов, а не просто нули. Сделать бы всё это в вечный цикл, чтобы постоянно можно было переключать, и переходы (ниже 0 на 100 и наоборот).

rotkiv 16 июн 2015 12:46
здравствуйте Максим. я решил ДЗ, на что у меня ушло просто гора времени, с начало я писал код по старомуб, бут-то решал простую задачу, и не найдя решения, меня осенило, в один момент в мозгах визуализировался приблизительный код, таким каким он должен быть решая задачи по ООП. конечно код нужно доработать, добавить обработку исключений(стал добавлять да не срабатывало почему та и решил забить пока), но в итоге я программу сделал без сторонних подсказок, без комментариев с этой страницы, для меня это принципиально и очень важно для процесса обучения. и так, хочу представить свой код, он не идеален и может даже хуже других, но это мой, написанный моими мозгами, и прошу раскритиковать его, где что не хватает, что где добавить, может что-то заменить

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication_ypok14
{

class TV
{
public int[] allChannels = new int[100];
int currentChannel;
public void Menu()
{
Console.WriteLine("your TVSet have 100 channels");
Console.ReadKey();
Console.WriteLine("to look some channels, press L ");
string l = Console.ReadLine();
if (l == "l")
{
CurrentCh();
}
}
public int CurrentCh()
{
Console.WriteLine("what numb of channel you want to look? ");
currentChannel = Int32.Parse(Console.ReadLine());
allChannels[currentChannel] = currentChannel;
//Console.WriteLine(currentChannel);
Console.WriteLine("for changes press C ");
string c = Console.ReadLine();
if (c == "c")
{
Chenges();
}
return currentChannel;

}
public int Chenges()
{
Console.WriteLine("to change the channel forward press F, to backward press B else insert the numb of channel you wish ");
string f = Console.ReadLine();
if (f == "f")
{
Console.WriteLine("good, you are looking channel numb " + ++allChannels[currentChannel]);
}
else if (f == "b")
{
Console.WriteLine("good, you are looking channel numb " + --allChannels[currentChannel]);
}
else
{
//allChannels[currentChannel] = Int32.Parse(Console.ReadLine());
Console.WriteLine("good, you are looking channel numb " + f);
}
Console.ReadKey();
return allChannels[currentChannel];
}
}
class Program
{
static void Main(string[] args)
{
TV tv = new TV();
tv.Menu();
}
}
}


Flamingo 04 июн 2015 23:51

class Television
{
public int Current_Channel = 1;
public void Change(int number_one)
{
Current_Channel += number_one;
}
public void Set(int number_two)
{
Current_Channel = number_two;
}
}
class Program
{
static void Main(string[] args)
{
Television TV = new Television();
Console.WriteLine("Начальный канал - 1");
Console.WriteLine("1 - next, 2 - back, 3 - number");
int answer = Convert.ToInt32(Console.ReadLine());
if (answer == 1)
TV.Change(1);
else if (answer == 2)
TV.Change(-1);
else
{
Console.WriteLine("Введите номер канала");
answer = Convert.ToInt32(Console.ReadLine());
if (answer > 100)
TV.Set(100);
else if (answer < 0)
TV.Set(0);
else
TV.Set(answer);
}
Console.WriteLine(TV.Current_Channel);
}
}

Warguss 28 май 2015 19:42

class TelevisionSet
{
int CurrentChannel = 0;


public string ChangeChannel(char ch)
{
string Channel = null;

switch(ch)
{
case '+':
if(CurrentChannel == 0)
{
Channel = "Показывает первый канал";
CurrentChannel++;
return Channel;
}

else if (CurrentChannel == 1)
{
Channel = "Показывает второй канал";
CurrentChannel++;
return Channel;
}

else if (CurrentChannel == 2 )
{
Channel = "Показывает третий канал";
CurrentChannel++;
return Channel;
}

else if(CurrentChannel == 3)
{
Channel = "Показывает нулевой канал";
CurrentChannel = 0;
return Channel;
}

break;

case'-':
if ((CurrentChannel > 0) && (CurrentChannel < 2))
{
Channel = "Показывает нулевой канал";
CurrentChannel--;
return Channel;
}

else if ((CurrentChannel > 1) && (CurrentChannel < 3))
{
Channel = "Показывает первый канал";
CurrentChannel--;
return Channel;
}

else if ((CurrentChannel > 2) && (CurrentChannel < 4))
{
Channel = "Показывает второй канал";
CurrentChannel--;
return Channel;
}

else if (CurrentChannel == 0)
{
Channel = "Показывает третий канал";
CurrentChannel = 3;
return Channel;
}

break;

case '0':
Channel = "Показывает нулевой канал";
CurrentChannel = 0;
break;

case '1':
Channel = "Показывает первый канал";
CurrentChannel = 1;
break;

case '2':
Channel = "Показывает второй канал";
CurrentChannel = 2;
break;

case '3':
Channel = "Показывает третий канал";
CurrentChannel = 3;
break;

case '*':
Channel = "Гуд бай!!! Для выключения нажмите повторно клавишу ввод!";
break;

}

return Channel;
}

}

class Program
{
private static void Main(string[] args)
{
bool b = true;

TelevisionSet TV = new TelevisionSet();
Console.WriteLine(@"Текущий канал: Нулевой канал
+ следующий канал, - предыдущий канал
0, 1, 2, 3 - Существующий каналы
* Выключит телевизор");

while(b)
{
char ch = char.Parse(Console.ReadLine());

string str = TV.ChangeChannel(ch);

if(str == "Гуд бай!!! Для выключения нажмите повторно клавишу ввод!" )
{
b = false;
}

Console.WriteLine(str);

}


Console.ReadKey();
}
}

Александр_Бугай 12 май 2015 09:14
class TV
{
byte channel=0;
internal void ChannelPlus()
{
channel++;
Console.WriteLine("Channel next is " + channel);
}
internal void ChannelMinus()
{
if (channel > 0)
{
channel--;
Console.WriteLine("Next channel is " + channel);

}
else channel = 255;
Console.WriteLine("Channels next is " + channel);
}
internal void ChannelChange()
{

try
{
Console.WriteLine("Please input number");
channel = Convert.ToByte(Console.ReadLine());
Console.WriteLine("You are on channel " + channel);
}
catch (Exception)
{
Console.WriteLine("Please input only positive number and less than 266");
Console.ReadLine();
}

}
}
class TvChanger
{
static void Main(string[] args)
{
TV MyTv = new TV();
string DecisionToChange;
do
{
Console.WriteLine("If you want to change your channel up-> turn +. If you want to change your channel down-> turn -. If you want to change your channel by number-> turn any button.");
string move = Convert.ToString(Console.ReadLine());
if (move == "+") MyTv.ChannelPlus();
else if (move == "-") MyTv.ChannelMinus();
else MyTv.ChannelChange();
Console.WriteLine("Do you want to change the channel again? Yes - button +. No - any button");
DecisionToChange = Convert.ToString(Console.ReadLine());
}
while (DecisionToChange == "+");
}
}

Максим 28 апр 2015 17:41
Чтото я немного переборщил со вставкой кода. Не понял, что код нужно было вставлять в рамки - сначала вставил код, а потом нажал кнопку для вставки и не увидел появившееся поле для вставки. Извините! Удалите пожалуйста предыдущее моё сообщение.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;//остались после выполнения предыдущих заданий
using System.IO;

namespace lesson13_workWithClasses_HomeWork //Д.З.: создать телевизор с функциями включения, переключения каналов и т.д.
{
class TV //напишите мне пожалуйста, если что-то лишнее...
{
private bool powerButton;//буленовая переменная включающаа и отключающая телевизор TV_POW()
internal sbyte channel = 0;//переменная в которую возвращается значение из SwitchChannel()
internal sbyte chooseChannel;
private bool nextChannel;
private bool prevChannel;
internal string pow;//используется для аргумента в TV_POW()

public void TV_POW(string pow)//включает и выключает телевизор, а также переключает каналы через аргумент функции с помощью текста
{
Console.Clear();
if (pow == "вкл")
{
powerButton = true;
Console.WriteLine("Вы включили телевизор.");
}
else if (pow == "выкл")
{
powerButton = false;
Console.WriteLine("Телевизор выключен.");
}
else if (pow == "сл")
{
nextChannel = true;
Console.Clear();
channel++;
Console.WriteLine("вы переключили на следующий канал " + channel);
nextChannel = false;
}
else if (pow == "пр")
{
prevChannel = true;
Console.Clear();
channel--;
Console.WriteLine("вы переключили на предыдущий канал " + channel);
prevChannel = false;
}
}

public sbyte SwitchChannel(sbyte chooseChannel)//переключает каналы от 0 до 9 и возвращает значение в переменную
{
if (powerButton == false)
{
Console.Clear();
Console.WriteLine("Телевизор выключен");
}
else if (powerButton == true)
{
Console.Clear();
Console.WriteLine("вы смотрите " + channel + "й канал ");
if (chooseChannel < 1)
channel = 1;
else if (chooseChannel > 9)
channel = 9;
else channel = chooseChannel;
}
return channel;
}
}
class Program
{
static void Main(string[] args)
{
try //много текста в классе телевизора и программы для информации. без него терялся в коде
{
Console.WriteLine("Купив телевизор, я принёс его домой и решил прочитать инструкцию...");
Console.WriteLine("Управление телевизором: \n для включения или выключения введите - вкл или выкл.");
Console.WriteLine("для выбора номера канала введите число с клавиатуры. \n для следующего и предыдущего канала введите - сл или пр");
Console.WriteLine("Если не хотите смотреть телевизор введите - розетка");

TV myTV = new TV();

do //здесь выбирается действие для управления телевизором
{
Console.WriteLine("\n Нужно определиться, что делать дальше... \n 1 - питание и переключение канала телевизора или 2 - нажать кнопку канала");
int whatToDo = Convert.ToSByte(Console.ReadLine());
if (whatToDo == 1)
{

Console.WriteLine("Я смотрю на кнопки... Какую нажать? вкл, выкл, сл, пр, розетка.");
myTV.pow = Console.ReadLine();
myTV.TV_POW(myTV.pow);
}
else if (whatToDo == 2)
{

Console.WriteLine("Почесав затылок, я решил включить канал №");
myTV.chooseChannel = Convert.ToSByte(Console.ReadLine());
myTV.SwitchChannel(myTV.chooseChannel);
}
}
while (myTV.pow != "розетка");//при вводе служит точкой выхода из программы
Console.Clear();
Console.WriteLine("Устав от просмотра телевизора, я решил выдернуть его из розетки. Электричество нужно экономить - подумал я.");
}
catch (Exception)
{
Console.WriteLine("Что-то пошло не так.Ваш телевизор сгорел...");
}
Console.ReadKey();
}
}
}


Максим 24 апр 2015 19:40
Stas
---
Думаете вам дали уникальное задание? Введите этот текст в гугле и там море решений

Stas 24 апр 2015 12:56
Написать метод line, который выводит на экран строку, состоящую из
звездочек.
Длина стоки (количество звездочек) является аргументом метода.

Pomogite pozalujsta napisat'!

Andriy 18 мар 2015 22:41

namespace ConsoleApplication1
{
class Televizor
{
private int PotochnuyKanal = 0;

public void ZminaKanaly(int napramok, int NomerKanaly)
{
switch(napramok)
{
case 0:
PotochnuyKanal--;
if (PotochnuyKanal == -1)
PotochnuyKanal = 0;
break;
case 1:
PotochnuyKanal++;
break;
case 2:
if (NomerKanaly>0)
PotochnuyKanal = NomerKanaly;
break;
default:
break;
}
Console.WriteLine("Vu peremknylu na " + PotochnuyKanal + " Kanal");
Console.ReadLine();
}


}

class Program
{
static void Main()
{
int a,b;

Console.WriteLine("Vvedit napramok. Dla peremukanna na nomer kanaly - vvedit 2 i potim - nomer.");
Televizor MyTelevizor = new Televizor();
a=Convert.ToInt32(Console.ReadLine());
b=Convert.ToInt32(Console.ReadLine());
MyTelevizor.ZminaKanaly(a, b);

}
}


}

G1ffy 10 мар 2015 20:44
Исправил один участок кода

else if (answer == "p" || answer == "previous")
{
if (numb > 1)
{
numb--;
Console.BackgroundColor = ConsoleColor.Blue;
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("\t\t\t\tChannel " + numb + "\t\t\t\t");
Console.ResetColor();
}
else if (numb <= 1)
{
Console.BackgroundColor = ConsoleColor.Red;
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("\t\t\t\tWrong channel!\t\t\t\t");
Console.ResetColor();
}
}

G1ffy 10 мар 2015 20:41
Конечно много лишнего получилось, но хотел сделать красиво ))

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication6
{
class TVset
{
private bool turnOn;
private string answer;
public int numb=1,find=0;

public void TVOn()
{
turnOn = true;
}
public void TVOff()
{
turnOn = false;
}
public void Channel()
{
Console.BackgroundColor = ConsoleColor.Blue;
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("\t\t\t\tChannel " + numb + "\t\t\t\t");
Console.ResetColor();
do
{
answer = Console.ReadLine().ToLower();
if (answer == "f" || answer == "find")
{
Console.Write("Enter channel number - ");
find = Convert.ToInt32(Console.ReadLine());
if (find < 1)
{
Console.BackgroundColor = ConsoleColor.Red;
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("\t\t\t\tWrong channel!\t\t\t\t");
Console.ResetColor();
}
else
{
numb = find;
Console.BackgroundColor = ConsoleColor.Blue;
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("\t\t\t\tChannel " + numb + "\t\t\t\t");
Console.ResetColor();
}
}
else if (answer == "n" || answer == "next")
{
numb++;
Console.BackgroundColor = ConsoleColor.Blue;
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("\t\t\t\tChannel " + numb + "\t\t\t\t");
Console.ResetColor();
}
else if (answer == "p" || answer == "previous")
{
if (numb > 1)
{
numb--;
Console.BackgroundColor = ConsoleColor.Blue;
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("\t\t\t\tChannel " + numb + "\t\t\t\t");
Console.ResetColor();
}
if (numb <= 1)
{
Console.BackgroundColor = ConsoleColor.Red;
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("\t\t\t\tWrong channel!\t\t\t\t");
Console.ResetColor();
}
}
else if (answer == "exit" || answer == "e")
{
Console.BackgroundColor = ConsoleColor.Red;
Console.Clear();
turnOn = false;
}
else
{
Console.BackgroundColor = ConsoleColor.Red;
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("\t\t\t\tWrong command!\t\t\t\t");
Console.ResetColor();
}
}
while (turnOn == true);
}

}
class Program
{
static void Main(string[] args)
{
TVset myTV = new TVset();
myTV.TVOn();
Console.WriteLine("----------------------------------T V----------------------------------");
Console.WriteLine("\t\t\tDo you want to change a channel?\n\t\t\t(-N/P- or -Next/Previous-)");
Console.WriteLine("\t If you want to turn off TV write -Exit/E-");
Console.WriteLine("\t If you want to input a channel write -F/Find-");
Console.WriteLine("-----------------------------------------------------------------------");
myTV.Channel();
}
}
}


Александр21 07 мар 2015 14:11
примерно так вышло

class TVset
{ internal string[] TVSetChannels = { "TNT", "NationalG", "Евразия", "Discovery" };
int channel = 0;
internal void NextChnl()
{ try {
Console.WriteLine(TVSetChannels[++channel]);
}
catch (IndexOutOfRangeException)
{
channel = 0;
Console.WriteLine(TVSetChannels[channel]);
}
}
internal void PrevChnl()
{ try
{
Console.WriteLine(TVSetChannels[--channel]);
}
catch (IndexOutOfRangeException)
{
channel = TVSetChannels.Length-1;
Console.WriteLine(TVSetChannels[channel]);
}
}
internal void SetChnl(string num)
{
int n;
try
{
n = Convert.ToInt32(num);
Console.WriteLine(TVSetChannels[--n]);
}
catch (IndexOutOfRangeException)
{
Console.WriteLine("Error channel number");
}
catch (FormatException)
{
Console.WriteLine("Error channel simbol");
}
}
}

class Program
{
static void Main(string[] args)
{
TVset TV = new TVset();
string EnterChannel;
foreach (string ch in TV.TVSetChannels )
{
Console.Write(ch+" ");
}
Console.WriteLine();
Console.WriteLine("Next channel is + ");
Console.WriteLine("Prev Channel is - ");
Console.WriteLine("To Select Channel Enter number (1-"+Convert.ToString(TV.TVSetChannels.Length)+") ");
Console.WriteLine("Exit is *");
do
{
EnterChannel = Console.ReadLine();
if (EnterChannel == "+")
{
TV.NextChnl();
}
else if (EnterChannel == "-")
{
TV.PrevChnl();
}
else if (EnterChannel == "*")
{
break;
}
else
{
TV.SetChnl(EnterChannel);
}
} while (true);
}
}

Максим 04 мар 2015 09:18
Temir
---
Всё хорошо

Temir 03 мар 2015 13:41
Всем привет.
Зацените пожалуйста.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class TVSet
{
private string[] TVSetChannels = { "Казахстан", "ТНТ", "Евразия", "Discovery" };
int channel = 0;
internal void SwitchOn()
{
Console.WriteLine("\t Добрый день!");
Console.WriteLine("\t Текущий канал: " + TVSetChannels[channel]);
}
internal string SledChannel()
{
try
{
return TVSetChannels[++channel];
}
catch (IndexOutOfRangeException)
{
channel = 0;
return TVSetChannels[channel];
}
}
internal string PredChannel()
{
try
{

return TVSetChannels[--channel];
}
catch (IndexOutOfRangeException)
{
channel = TVSetChannels.Length - 1;
return TVSetChannels[channel];
}
}
internal void PoNomeruChannel()
{
string EnterChannel;
EnterChannel = Console.ReadLine();
try { Console.WriteLine(TVSetChannels[Convert.ToInt32(EnterChannel)-1]); }
catch { Console.WriteLine("\t Пожалуйста введите номер канала"); PoNomeruChannel(); }
}
}
class Program
{
public static void Main()
{
TVSet TV1 = new TVSet();
TV1.SwitchOn();
string EnterChannel;

do
{
EnterChannel = Console.ReadLine();
if (EnterChannel == "+")
Console.WriteLine(TV1.SledChannel());
else if (EnterChannel == "-")
Console.WriteLine(TV1.PredChannel());
else if(EnterChannel=="*") break;
Console.WriteLine("\t Следующий канал +, Предыдущий канал -");
Console.WriteLine("\t Чтобы включить канал по номеру нажмите звёздочку - *");
}
while (EnterChannel != "+" || EnterChannel != "-");

do{
TV1.PoNomeruChannel();
}
while(true);

}
}

}


Stahma 23 фев 2015 22:01
class Tv
{
internal static int CurrentChannel = 4;
public static void NextChannel()
{
CurrentChannel++;

}
public static void PrevChannel()
{
if (CurrentChannel - 1 < 0)
Console.WriteLine("Неверный канал");
else CurrentChannel--;
}
public static void SetChannel(int c)
{
if (c < 0)
Console.WriteLine("Неверный канал");
else CurrentChannel = c;
}
}
class Program
{
static void Main(string[] args)
{
Tv.NextChannel();
Console.WriteLine(Tv.CurrentChannel);
Tv.PrevChannel();
Console.WriteLine(Tv.CurrentChannel);
Tv.SetChannel(-1);
Console.WriteLine(Tv.CurrentChannel);
}
}

Максим 21 фев 2015 14:32
AlPer
---
Почему бы не конвертнуть в int и не проверить так:
if(channel >=0 && channel <= 9)

AlPer 20 фев 2015 21:17

else if (button == "0" || button == "1" || button == "2" || button == "3" || button == "4" || button == "5" || button == "6" || button == "7" || button == "8" || button == "9")


я понимаю что это бред я не умею анализировать поток

AlPer 20 фев 2015 20:29

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace chump_3
{

class Program
{
static void Main(string[] args)
{
TV.TVOFF();
}
}

class TV
{
private static int chanal;
private static string tvOnOff;

public static void TVOFF()
{
do
{
Console.Clear();
Console.WriteLine("Телевизор выключен.\nВкл./Выкл. телевизор: e/q");
tvOnOff = Console.ReadLine();
}
while (TV.tvOnOff != "e");
TVON();
}

public static void TVON()
{
string button;
do
{
Screen(chanal);
button = Console.ReadLine();
if (button == "q")
{
TVOFF();
}
else if (button == "0" || button == "1" || button == "2" || button == "3" || button == "4" || button == "5" || button == "6" || button == "7" || button == "8" || button == "9")
{
chanal = Convert.ToInt32(button);
Screen(chanal);
}
else if (button == "+")
{
++chanal;
if (chanal > 9) { chanal = 0; }
Screen(chanal);
}
else if (button == "-")
{
--chanal;
if (chanal < 1) { chanal = 9; }
Screen(chanal);
}
}

while (true);
}

public static void Screen(int NumberCh)
{
Console.Clear();
Console.WriteLine("Телевизор включен. Работает канал № {0}", NumberCh);
Console.WriteLine("Вкл./Выкл. телевизор: e/q");
Console.WriteLine("Переключение каналов: кнопки от 0 до 9 или '+'/'-'");
}
}
}

Максим 03 фев 2015 18:36
Иван
---
Да, программа мелкая, и тут сложно проявить изящество. А эталонного решения, наверное, нет ни для одной более менее сложной задачи. Для масштабных задач, как минимум, нужно правильно использовать принципы ООП и уже будет хорошо

Иван 03 фев 2015 16:37
Может быть, есть какое-то эталонное решение этой задачи?

Иван 03 фев 2015 16:37
Admin, спасибо за комментарии, это мелочи, поправлю.

А по логике решения - может быть, есть более изящные методы? В примерах ниже не уведел толком ничего.
Понятно, что это мелкая программа. Но хочется на старте научиться искать изящные методы решения проблем, т.к. на масштабах громоздкое решение проблемы выльется в косяки

Максим 03 фев 2015 14:40
Иван
---
1. Называть булевую переменную, которая означает состояние тв вкл/выкл просто TV это к говнокоду, нужно что-то в стиле IsOn.

2. Методы ChannelUP и ChannelDOWN не должны принимать никаких параметров, min и max стоит указывать при создании телевизора.

3. Строковые константы типа "выход" не должны встречаться в таком виде в коде еще и по несколько раз. Такую константу стоит вынести куда-нибудь в начало класса, чтобы легко менять значение при необходимости в одном месте.

Иван 03 фев 2015 00:00
Здравствуйте. У меня все работает, как запланировал, но есть два вопроса.

1. На сколько этот код является гавнокодом?
2. Что нужно сделать (просто словами), что бы этот код не был похож на гавнокод?

1. Файл Program.cs

class MainClass
{
public static void Main (string[] args)
{
string channel = ">Состояние телевизора неизвестно. ";
Console.WriteLine (channel);
Console.WriteLine(">Руководство управления телевизором.");
Console.WriteLine (">Включение/Выключение '0'; следующий канал '+'; предыдущий канал '-'; или введите произвольный канал (1-37)");
TVFunc TV1 = new TVFunc ();

while (channel != "выход") {
channel = Console.ReadLine ().ToLower();
switch (channel) {
case "0":
if(TV1.TV){
TV1.TVOff ();
} else {
TV1.TVOn (); }
break;
case "+":
TV1.ChannelUP (37, 1);
break;
case "-":
TV1.ChannelDOWN (1, 37);
break;
case "выход":
Console.WriteLine (">вы вышли");
break;
default:
try{
TV1.ChannelMANUAL (Convert.ToByte (channel), 37);
break;
} catch{
Console.WriteLine (">Неверное значение");
break;
}
}
}
}


Файл TV.cs


class TVFunc
{
internal bool TV;
private byte TVChannel;
public void TVOn()
{
TV = true;
Console.WriteLine (">Телевизор включен");
}

public void TVOff()
{
TV = false;
Console.WriteLine (">Телевизор выключен");
}
public void ChannelUP(byte ChannelMAX, byte min)
{
++TVChannel;
if (TVChannel > ChannelMAX) {
TVChannel = min;
Console.WriteLine (">Канал переключен на " + min);
} else {
Console.WriteLine (">Канал переключен на " + TVChannel);
}
}
public void ChannelDOWN(byte ChannelMIN, byte max)
{
--TVChannel;
if (TVChannel < ChannelMIN) {
TVChannel = max;
Console.WriteLine(">Канал переключен на " + max);
} else {
Console.WriteLine (">Канал переключен на " + TVChannel);
}
}
public void ChannelMANUAL(byte ChannelMANUAL, byte maximum)
{
if (ChannelMANUAL <= maximum) {
TVChannel = ChannelMANUAL;
Console.WriteLine (">Канал переключен на " + TVChannel);
} else {
Console.WriteLine (">Такого канала не существует");
}
}
}

Freddy 29 янв 2015 16:23
Admin,

Большое спасибо)

Максим 29 янв 2015 09:52
Freddy
---
В методе tvOn уберите ненужное Console.ReadKey();

AlexWolf 29 янв 2015 00:34
Да Admin, я увидел свою ошибку, спасибо.

Freddy 28 янв 2015 16:44
Здравствуйте. Во время нажатия клавиш "q", "e" или "w" в первый раз условия не срабатывают и выводится сообщение "Вы нажали не ту кнопку". Лишь после этого все начинает нормально функционировать. Кстати если например ввести "qe" то срабатывает с первого раза и происходит, то что должно при вводе "e". Подскажите пожалуйста, в чем ошибка?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Tele
{
public string result;
public int numberchannel=0;
public string[] channels = { "Первый канал", "Россия-2", "ТНТ", "НТВ", "ОРТ" };
public void tvOn(string b)
{
if (b == "o")
{
Console.WriteLine("Вы включили телевизор");
}
else
while (b != "o")
{
Console.WriteLine("Вы нажали не ту клавишу");
b = Console.ReadLine();
}
Console.WriteLine("Вы смотрите первый канал, чтобы переключить впереd нажмите - q, назад - e. Либо нажмите w, чтобы ввести номер канала");
Console.ReadKey();
}
public void pluschannel()
{
if (numberchannel < channels.Length-1)
numberchannel++;
else numberchannel = 0;
}
public void minuschannel()
{
if (numberchannel > 0)
numberchannel--;
else
numberchannel = 4 ;
}
public void pereklpokanalam()
{
Console.WriteLine("Введите номер канала");

while (true)
{
try
{
int a = Convert.ToInt32(Console.ReadLine());


for (int i = 0; i < channels.Length; i++)
{

if (a - 1 == i)

Console.WriteLine(channels[i]);
}

if (a > channels.Length || a < 1)
Console.WriteLine("Ошибка. Такого канала не существует");
}

catch (FormatException ex)
{
result = "Ошибка. Вы ввели не число";

Console.WriteLine(result);

}
}

}

}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Телевизор выключен, чтобы включить его, нажмите клавишу о");
string b = Console.ReadLine();
Tele tv = new Tele();
tv.tvOn(b);
while (true)
{
string z = Console.ReadLine();

if (z == "q")
{
tv.pluschannel();

Console.WriteLine(tv.channels[tv.numberchannel]);
}
else if (z == "e")
{
tv.minuschannel();
Console.WriteLine(tv.channels[tv.numberchannel]);
}
else if (z == "w")
{ tv.pereklpokanalam(); }
else
Console.WriteLine("Ошибка. Вы нажали не ту кнопку");
}
}
}
}

Максим 28 янв 2015 09:37
AlexWolf
---
То что я уже писал другим в этом уроке, не нужно сравнивать булевые переменные с true/false:

if (pitanie) // достаточно этого
{
PowerTP = true;
Console.WriteLine("ВНИМАНИЕ! Телепортер подключен.");
}

Ну и здесь возможно только два варианта, вкл и выкл, поэтому логичным будет дальше просто else, а не if else (pitanie == false)

AlexWolf 26 янв 2015 17:14
Добрый день. Что-то я заморочился с Вашим заданием. Перечитал и пересмотрел все задания, что тут выложили. Многие пользуются функциями, о которых Вы еще не рассказывали в предыдущих уроках. Так как я изучаю по порядку, пришлось обойтись тем, что я пока что изучил. Пока читал выполненные задания, тема телевизора у меня уже вызывала оскомину, поэтому я позволил себе немного изменить тематику, но механику оставил без изменения. Если есть замечания, с удовольствием выслушаю и приму к сведению. Спасибо.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class TP_set
{
private string[] listPlace = { "Домой", "в подвал", "в Париж", "на Луну", "в Другое Место", "на остров Буян", "которая не работает", "к офису", "в аудиторию универа", "на Лысую Гору"};
public bool PowerTP = false;
public void power_on(bool pitanie)
{
if (pitanie == true)
{
PowerTP = true;
Console.WriteLine("ВНИМАНИЕ! Телепортер подключен.");
}
else if (pitanie == false)
{
PowerTP = false;
Console.WriteLine("Питание отключено.");
}
}
public void ShowCanal()
{
if (Currcnl < listPlace.Length || Currcnl >= 0)
{
Console.WriteLine("Вы открыли червоточину " + listPlace[Currcnl]);
}
else
{
Console.WriteLine("Такой червоточины не существует! Введите корректный номер из допустимого диапозона.");
}
}
private int Currcnl=-1;
public void nextcnl()
{
Currcnl++;
if (Currcnl > listPlace.Length - 1)
{
Currcnl = 0;
}

}
public void prevcnl()
{
Currcnl--;
if (Currcnl < 0)
{
Currcnl = listPlace.Length - 1;
}
}
public void custcnl()
{
Console.WriteLine("Введите номер червоточины: ");
Currcnl = Convert.ToInt32(Console.ReadLine());

}
public void help()
{
Console.WriteLine("Для последовательного выбора портала используйте кнопки PageUp или PageDown.");
Console.WriteLine("Для ручного выбора нажмите на ENTER и введите номер червоточины вручную (от 0 до 9)");
Console.WriteLine("Для вызова помощи нажмите F1.");
Console.WriteLine("Для выключения телепорта, нажмите клавишу BackSpace.");
}

}





class Program
{
static void Main(string[] args)
{
TP_set teleporter = new TP_set();

do
{
Console.WriteLine("Нажмите пробел для активации телепорта");
}
while(Console.ReadKey(true).Key != ConsoleKey.Spacebar);

Console.Clear();
teleporter.power_on(true);
Console.WriteLine("Для последовательного выбора портала используйте кнопки PageUp или PageDown.");
Console.WriteLine("Для ручного выбора нажмите на ENTER и введите номер червоточины вручную (от 0 до 9)");
Console.WriteLine("Для вызова помощи нажмите F1.");
Console.WriteLine("Для выключения телепорта, нажмите клавишу BackSpace.");

do
{
switch (Console.ReadKey(true).Key)
{
case ConsoleKey.PageUp:
teleporter.nextcnl();
Console.Clear();
teleporter.ShowCanal();
break;
case ConsoleKey.PageDown:
teleporter.prevcnl();
Console.Clear();
teleporter.ShowCanal();
break;
case ConsoleKey.Enter:
teleporter.custcnl();
Console.Clear();
teleporter.ShowCanal();
break;
case ConsoleKey.F1:
Console.Clear();
teleporter.help();
break;
case ConsoleKey.Backspace:
teleporter.power_on(false);
break;
default:
Console.WriteLine("Неверная команда. Нажмите F1 чтобы увидеть список возможных команд.");
break;



}

}

while (teleporter.PowerTP != false);


Console.ReadKey();



}
}
}

Максим 24 янв 2015 21:17
Владимир
---
Следует это вынести из метода перед оператор switch

ConsoleKeyInfo cki = Console.ReadKey(true)

switch будет уже:

switch (cki.Key)

И в ChosenCH передать параметр ConsoleKeyInfo

Владимир 23 янв 2015 15:38
Спасибо за помощь!
Еще один вопрос. Приходиться 2 раза нажимать на клавишу с цифрой канала что бы он переключился.

public void ChosenCH() //канал по выбору
{
ConsoleKeyInfo cki = Console.ReadKey(true);
if (Char.IsNumber(cki.KeyChar))
{
if (Int32.TryParse(cki.KeyChar.ToString(), out ch))
{
ch = ch - 1;

if (pow == true && 0 <= ch && ch <= channels.Length)
{
NumberChannel = ch;
Console.WriteLine(Channel + channels[NumberChannel]);
}
else if (pow == true && 0 > ch && ch > channels.Length)
Console.WriteLine(CHError);
else
Console.WriteLine(TVoff);
}
}
}
.......
do
{
switch (Console.ReadKey(true).Key)
{
case ConsoleKey.F1:
robot.TVPower("on");
break;
case ConsoleKey.Add:
robot.NextCH();
break;
case ConsoleKey.Subtract:
robot.PrevCH();
break;
case ConsoleKey.NumPad1:
robot.ChosenCH();
break;
case ConsoleKey.NumPad2:
robot.ChosenCH();
break;
case ConsoleKey.NumPad3:
robot.ChosenCH();
break;
case ConsoleKey.NumPad4:
robot.ChosenCH();
break;
case ConsoleKey.NumPad5:
robot.ChosenCH();
break;
case ConsoleKey.F2:
robot.TVPower("off");
break;
default:
Console.WriteLine("таких клавиш нет в управлении ТВ");
break;
}
}

Максим 23 янв 2015 10:35
Владимир
---
Считайте клавишу. Проверить число ли это можно так:

ConsoleKeyInfo cki = Console.ReadKey(true);
if (Char.IsNumber(cki.KeyChar))
//случай когда число

Потом необходимо конвертировать символ в целое:

Int32 number;
if (Int32.TryParse(cki.KeyChar.ToString(), out number))
{
Console.WriteLine("Число: {0}", number);
}
else
{
Console.WriteLine("Невозможно конвертировать");
}

Владимир 22 янв 2015 15:47
День добрый!
Подскажите пожалуйста, как после ConsoleKey считать цифру нажатой клавиши для выбора канала?


namespace Urok_14
{
class TV
{
public bool pow = false;
public string TVon = "TV on";
public string TVoff = "TV off";
public string Channel = "Канал ";
public string CHError = "Channel ERROR";
public int NumberChannel = 0;
public string[] channels = new string[5] { "Первый канал", "Россия 1", "НТВ", "ТВЦентр", "5 канал" }; //каналы
public void TVPower(string power) //onn/off телевизора
{
if (power == "on")
{
pow = true;
Console.WriteLine(TVon);
Console.WriteLine(Channel + channels[NumberChannel]);
}
else if (power == "off")
{
pow = false;
Console.WriteLine(TVoff);
}
}
public void NextCH() //следующий канал
{
if (pow == true && 0 <= NumberChannel && NumberChannel < channels.Length - 1)
{
NumberChannel = NumberChannel + 1;
Console.WriteLine(Channel + channels[NumberChannel]);
}
else if (pow == true && NumberChannel == channels.Length - 1)
{
NumberChannel = 0;
Console.WriteLine(Channel + channels[NumberChannel]);
}
else
Console.WriteLine(TVoff);
}
public void PrevCH() //предыдущий канал
{
if (pow == true && 0 <= NumberChannel && NumberChannel < channels.Length)
{
NumberChannel = NumberChannel - 1;
Console.WriteLine(Channel + channels[NumberChannel]);
}
else if (pow == true && NumberChannel == 0)
{
NumberChannel = channels.Length - 1;
Console.WriteLine(Channel + channels[NumberChannel]);
}
else if (pow == true && 0 > NumberChannel && NumberChannel > channels.Length)
Console.WriteLine(CHError);
else
Console.WriteLine(TVoff);
}
public void ChosenCH() //канал по выбору
{
try
{
int ch = Convert.ToInt32(Console.ReadLine());
ch = ch - 1;

if (pow == true && 0 <= ch && ch <= channels.Length)
{
NumberChannel = ch;
Console.WriteLine(Channel + channels[NumberChannel]);
}
else if (pow == true && 0 > ch && ch > channels.Length)
Console.WriteLine(CHError);
else
Console.WriteLine(TVoff);
}
catch (FormatException)
{
Console.WriteLine("TV ERROR");
}
}
}
class Program
{
static void Main(string[] args)
{
TV robot = new TV();
Console.WriteLine("Добрый день!");
Console.WriteLine("Управление ТВ:");
Console.WriteLine("Вкл - (on), Выкл - (off)");
Console.WriteLine("Следующий канал (+)");
Console.WriteLine("Предыдущий канал (-)");
Console.WriteLine("Для выбора канала - цифра канала");
Console.WriteLine("Список каналов:");
for (int i = 0; i < robot.channels.Length; i++)
{
int nameCH = i + 1;
Console.WriteLine(nameCH + " - " + robot.channels[i]);
}
do
{
switch (Console.ReadKey(true).Key)
{
case ConsoleKey.F1:
robot.TVPower("on");
break;
case ConsoleKey.Add:
robot.NextCH();
break;
case ConsoleKey.Subtract:
robot.PrevCH();
break;
case ConsoleKey.NumPad1:
robot.ChosenCH();
break;
case ConsoleKey.NumPad2:
robot.ChosenCH();
break;
case ConsoleKey.NumPad3:
robot.ChosenCH();
break;
case ConsoleKey.NumPad4:
robot.ChosenCH();
break;
case ConsoleKey.NumPad5:
robot.ChosenCH();
break;
case ConsoleKey.F2:
robot.TVPower("off");
break;
default:
Console.WriteLine("таких клавиш нет в управлении ТВ");
break;
}
}
while (robot.pow!=false);
Console.ReadKey();
}
}
}

s3nger 20 янв 2015 22:02
class TV
{
private int simpleChannel;

public void ExChannel()
{
if (simpleChannel < 0)
{
Exception q = new Exception("Channel must be positive integer");
Console.WriteLine(q);
throw q;
}
}
public int NextChannel()
{
ExChannel();
return simpleChannel++;
}
public int PreviousChannel()
{
ExChannel();
return simpleChannel--;
}
public int ChangeChannel()
{
Console.WriteLine("Entry number of channel:");
simpleChannel = Convert.ToInt16(Console.ReadLine());
ExChannel();
return simpleChannel;
}
}

Виталий 20 янв 2015 16:35
admin

Спасибо! Реально не знал этого потому что в уроках этого нет. Что касается правильности кода, то вы полностью правы.

Максим 20 янв 2015 16:11
Виталий
---
Разница не так в размере кода, как в его "правильности", логично использовать тип bool там, где он идеально подходит.
Ну и так нет необходимости сравнивать, булевая переменная уже сама по себе true или false:

if (myTV.OffOn == true)

Лучше так:

if (myTV.OffOn) // для false !myTV.OffOn

Виталий 20 янв 2015 15:33
admin,

Пытался, пишет "оператор "==" нельзя использовать к string и bool". Однако в принципе разница только в размере кода, а так, я могу и bool. Сейчас переделывал, разобрался:

class Televisor
{
public bool OffOn = true;
public string kontent;
public string error = "";
public int kanalnumber = 0;
public void PlusKanal()
{
if (kanalnumber < 99)
kanalnumber++;
else
kanalnumber = 0;
}
public void MinusKanal()
{
if (kanalnumber > 0)
kanalnumber--;
else
error = "Ошибка. Каналов больше нет.";
}
}
class Pult
{
static void Main(string[] args)
{
Televisor myTV = new Televisor();
while (myTV.OffOn == true)
{
string control;
if (myTV.kanalnumber == 0)
myTV.kontent = "z - предыдущий канал, x - следующий канал, c - выключить телевизор. Если вы хотите выбрать канал по номеру, нажмите клавишу v и введите номер канала.";
else if (myTV.kanalnumber == 1)
myTV.kontent = "Вы смотрите Первый Канал.";
else
myTV.kontent = "";
Console.WriteLine("Номер канала:");
Console.WriteLine(myTV.kanalnumber);
Console.WriteLine(myTV.kontent);
Console.WriteLine(myTV.error);
control = Console.ReadLine();
if (control == "v")
myTV.kanalnumber = Convert.ToInt32(Console.ReadLine());
if (control == "z")
myTV.MinusKanal();
if (control == "x")
myTV.PlusKanal();
if (control == "c")
myTV.OffOn = false;
}
}
}

Максим 20 янв 2015 13:55
Виталий
---
Поле OffOn следует сделать bool, а не string

Виталий 20 янв 2015 09:50
На основе идеи Сергея сделал вот такую домашку:


class Televisor
{
public string OffOn = "On";
public string kontent;
public string error = "";
public int kanalnumber = 0;
public void PlusKanal()
{
if (kanalnumber < 99)
kanalnumber++;
else
kanalnumber = 0;
}
public void MinusKanal()
{
if (kanalnumber > 0)
kanalnumber--;
else
error = "Ошибка. Каналов больше нет.";
}
}
class Pult
{
static void Main(string[] args)
{
Televisor myTV = new Televisor();
while (myTV.OffOn == "On")
{
string control;
if (myTV.kanalnumber == 0)
myTV.kontent = "z - предыдущий канал, x - следующий канал, c - выключить телевизор. Если вы хотите выбрать канал по номеру, нажмите клавишу v и введите номер канала.";
else if (myTV.kanalnumber == 1)
myTV.kontent = "Вы смотрите Первый Канал.";
else
myTV.kontent = "";
Console.WriteLine("Номер канала:");
Console.WriteLine(myTV.kanalnumber);
Console.WriteLine(myTV.kontent);
Console.WriteLine(myTV.error);
control = Console.ReadLine();
if (control == "v")
myTV.kanalnumber = Convert.ToInt32(Console.ReadLine());
if (control == "z")
myTV.MinusKanal();
if (control == "x")
myTV.PlusKanal();
if (control == "c")
myTV.OffOn = "Off";
}
}
}

Максим 15 янв 2015 09:59
Сергей
---
Мягко говоря, код не очень. Начнем от самого простого.

1. Имя булевой переменной должно быть основано на одном из двух возможных состояний, а не сразу на двух. "onoff" - включеноВыключено, если в переменную записано true, становится непонятно - да, значит включено или да, значит выключено. Нормальные варианты имени - On, IsOn
2. canal += 1; меняем на canal ++; canal -= 1; на canal --;
3. Зачем в Main создавать переменную off, когда в классе уже есть поле, его стоит лишь открыть. Получилось что поле onoff никак не используется.
4. Список каналов у вас вне класса телевизор, это очень плохо и так быть не должно.
5. Массив компактнее инициализировать так:
string[] programms = new string[100] {"Video", "OPT"};
6. Ну и то о чем вы спрашивали - вводим трижды. Так потому, что у вас в коде ввод данных указан три раза, а должен быть всего один. Как так, вы сначала вводите данные, и если это не число - снова вводите два раза. Нужно сначала ввести данные (команду), а потом воспользовавшись одним из условных операторов, вызвать соответствующий команде метод. Что-то похожее на это:

do
{
var temp = Convert.ToString(Console.ReadLine());
temp.ToLower();
switch (temp)
{
case "on":
watch.TVon("on");
break;
case "next":
watch.NextCH();
break;
}
}
while (watch.tvon != false);

Сергей 13 янв 2015 19:44
Телевизор 99 каналов, 7 из которых имеют назначение, остальные пустые.
при включении пишет опции выбора канала и текущий канал - 0, есть возможность выбирать каналы по номеру, а так же переключать следующий(w), предыдущий(s) и функция выключения(x), при вводе некорректной информации игнорирует её.
Есть проблема - при вводе текстовой информации (w,s,x) требуется повторить её трижды, прежде чем получается результат, не могу понять в чем причина, помогите пожалуйста.

class TV
{
private int canal;
private bool onoff = false;
public int canalplusminus(string a)
{
if (a == "w")
{
if (canal < 99)
canal += 1;
else
canal = 0;
}
else if (a == "s")
{
if (canal > 0)
canal -= 1;
else
canal = 99;
}
return canal;
}
public int canalnumber(int number)
{
if (number >= 0 && number <= 99)
canal = number;
return canal;
}
public bool TVoff(string b)
{
if (b == "x")
onoff = true;
return onoff;
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Выберите канал (следующий канал - w, предыдущий канал - s, выключить - x):");
TV myTV = new TV();
string[] programms = new string[100];
int index = 0;
bool off = false;
programms[0] = "Video";
programms[1] = "ОРТ";
programms[2] = "РТР";
programms[3] = "НТВ";
programms[4] = "ТНТ";
programms[5] = "СТС";
programms[6] = "Ren-tv";
programms[7] = "M-tv";
do
{
if (index > 7)
{
programms[index] = "не назначен";
}
Console.WriteLine("Канал" + " " + index + " " + "-" + " " + programms[index]);
try
{
index = myTV.canalnumber(Convert.ToInt32(Console.ReadLine()));
}
catch (FormatException)
{
index = myTV.canalplusminus(Console.ReadLine());
off = myTV.TVoff(Console.ReadLine());
}
}
while (off != true);
Console.WriteLine("Выключение");
}
}
}
}

Максим 31 дек 2014 13:32
baks85
---
Спасибо, вас тоже с наступающим)

Стоило добавить в switch ветку default:


case "off":
watch.TVon("off");
break;
default:
Console.WriteLine("таких букав нету в нашем меню или ты просто
забыл включить шарабан");
break;


А после while убрать всё, кроме Console.ReadKey();

baks85 29 дек 2014 23:30
Добрый день Admin!!
Выполнил сегодня домашку по текущей теме, появился вопрос, как досрочно выйти из программы, а то при вводе команды выключения в моем "Телевизоре" он пишет тот же ответ что и при ошибочном вводе команды. Заранее спасибо за ответ! с наступающим НОВЫМ ГОДОМ!

вот собственно и домашка:
________________________________________________________________
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication17
{
class TV
{
public string[] channels = new string[5] { "Первый канал", "Второй канал", "Третий канал", "Четвертый канал", "Пятый канал" };
public int currentch = 0;
public bool tvon = false;

public void TVon(string condition) //включение / отключение телевизора
{
if (condition == "on")
{
tvon = true;
Console.WriteLine("Привет мой милый друг! Шарабан включен и ты смотришь " +channels[currentch]);
}
else if (condition == "off")
{
tvon = false;
Console.WriteLine("Вашь шарабан выключен, всего хорошего!");
}
}
public void NextCH () //следующий канал
{
if (tvon == true && 0 <= currentch && currentch < channels.Length-1)
{
currentch = currentch + 1;
Console.WriteLine("сейчас вы смотрите " + channels[currentch]);
}
else if (tvon == true && currentch == channels.Length - 1)
{
currentch = 0;
Console.WriteLine("сейчас вы смотрите " + channels[currentch]);
}
else
Console.WriteLine("сначала надо бы включить шарабан :(");
}
public void PrevCH () //предыдущий канал
{
if (tvon == true && 0 < currentch && currentch <= channels.Length)
{
currentch = currentch - 1;
Console.WriteLine("сейчас вы смотрите " + channels[currentch]);
}
else if (tvon == true && currentch == 0)
{
currentch = channels.Length - 1;
Console.WriteLine("сейчас вы смотрите " + channels[currentch]);
}
else if (tvon = true && 0 > currentch && currentch > channels.Length)
Console.WriteLine("такого канала несуществует :(");
else
Console.WriteLine("сначала надо бы включить шарабан :(");
}
public void ChosenCH () // канал по выбору
{
try
{
int ch = Convert.ToInt32(Console.ReadLine());
ch = ch - 1;

if (tvon == true && 0 <= ch && ch <= channels.Length)
{
currentch = ch;
Console.WriteLine("сейчас вы смотрите " + channels[currentch]);
}
else if (tvon == true && 0 > ch && ch > channels.Length)
Console.WriteLine("такого канала несуществует :(");
else
Console.WriteLine("Вашь шарабан выключен :(");
}
catch (FormatException)
{
Console.WriteLine("Моя маленькая обезьянка! Ты сломала шарабан :(");
TVon("off");
}
}
}
class Program
{
static void Main(string[] args)
{
TV watch = new TV();
Console.WriteLine("Здравствуй мой дорогой задрот! я хочу показать тебе интересную теле-передачу");
Console.WriteLine("что-бы включить шарабан, набери \"on\" в строке команд");
Console.WriteLine("что-бы переключить шарабан на следующий канал набери слово \"next\"");
Console.WriteLine("что-бы переключить шарабан на предыдущий канал набери слово \"prev\"");
Console.WriteLine("что-бы переключить шарабан на желаемый канал, набери \"choisech\", нажмите enter и наберите цыферку, ему соответствующую, после чего снова нажмите enter \r\n вот тебе список:");

for (int i = 0; i < watch.channels.Length; i++)
{
int numofch = i + 1;
Console.WriteLine(numofch +" - " +watch.channels[i]);
}
Console.WriteLine("что-бы наконец-то выключить шарабан к едрене-фене, набери волшебное слово \"off\"");

do
{
var temp = Convert.ToString(Console.ReadLine());
temp.ToLower();
switch (temp)
{
case "on":
watch.TVon("on");
break;
case "next":
watch.NextCH();
break;
case "prev":
watch.PrevCH();
break;
case "choisech":
watch.ChosenCH();
break;
case "off":
watch.TVon("off");
break;
}
}
while (watch.tvon != false);
Console.WriteLine("таких букав нету в нашем меню или ты просто забыл включить шарабан");
watch.TVon("off");
Console.ReadKey();


}
}
}

Deltazone 27 дек 2014 13:08
Думаю можно как нибудь доработать.
--------------------------------------------

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Program1
{
class TV
// Класс Телевизор
{
public int current = 1;
// Три варианта
public void next()
{
current ++;
}
public void prev()
{
current —;
}
public void scl(int sel)
{
current = sel;
}
}
class Change
{
static void Main(string[] args)
{
bool cont = false;
int ch, sel = 0;
TV tv1 = new TV();
do
{
Console.WriteLine("Сейчас включен " + tv1.current + " канал");
do
{
Console.WriteLine("\r\nВыбор канала:\r\nСледующий канал - 1\r\nПредыдущий канал - 0\r\nВыбор по номеру - 2");
try
{
ch = Convert.ToInt32(Console.ReadLine());
}
catch (FormatException)
{
ch = 3;
}
}
while (ch > 2 || ch <= 0);
switch (ch)
{
case 0:
tv1.prev();
break;
case 1:
tv1.next();
break;
case 2:
do
{
Console.WriteLine("\r\nВведите номер канала:\r\n");
try
{
sel = Convert.ToInt32(Console.ReadLine());
}
catch (FormatException)
{
sel = 0;
}
}
while (sel > 100 || sel <= 0);
tv1.scl(sel);
break;
}
Console.WriteLine("\r\nСейчас включен " + tv1.current + " канал\r\n");
Console.WriteLine("\r\nПродолжить?\r\ntrue - да\r\nfalse - нет");
cont = Convert.ToBoolean(Console.ReadLine());
}
while (cont == true);
}
}
}

pinguin-linuxoid 19 дек 2014 16:08
Только что глянул код ниже и понял что тупонул, можно было делать через массив)

pinguin-linuxoid 19 дек 2014 15:51
Доброго времени суток! Выкладую Пингвиний телевизор, в нем всего 3 канала но работает как часы. Уважаемый Админ - отметьте пожалуста недостатки.





class TV
{

private string chennal_one = "ICTV";
private string chennal_two = "1 + 1";
private string chennal_three = "First National";

public string current_chennel = "ICTV";

private void next_chennel()
{

switch (current_chennel)
{
case "ICTV": current_chennel = chennal_two; break;
case "1 + 1": current_chennel = chennal_three; break;
case "First National": current_chennel = chennal_one; break;
}

}
private void privious_chennel()
{
switch (current_chennel)
{
case "ICTV": current_chennel = chennal_three; break;
case "1 + 1": current_chennel = chennal_one; break;
case "First National": current_chennel = chennal_two; break;
}
}


public void menu()
{
string a = null;

Console.WriteLine("\n\n======================================================\n");
Console.WriteLine("Enter - \"+\" if you want see next channal\n");
Console.WriteLine("Enter - \"-\" if you want see next channal\n");
Console.WriteLine("Enter - \"1\" if you want see next channal\n");
Console.WriteLine("Enter - \"2\" if you want see next channal\n");
Console.WriteLine("Enter - \"3\" if you want see next channal\n");
Console.WriteLine("Enter - \"off\" if you want off tv");
Console.WriteLine("\n=======================================================\n\n");


while (a != "off")
{

try
{


a = Convert.ToString(Console.ReadLine());
switch (a)
{
case "+": next_chennel(); break;
case "-": privious_chennel(); break;
case "1": current_chennel = chennal_one; break;
case "2": current_chennel = chennal_two; break;
case "3": current_chennel = chennal_three; break;
default: throw new Exception();
}
Console.WriteLine("\n==========================================\n");
Console.WriteLine(" " + current_chennel + " ");
Console.WriteLine("\n===========================================\n");

}

catch (Exception)
{
Console.WriteLine("\n=============================================\n");
Console.WriteLine("AAAAAAAAAAAAAAA you break tv !! Asshole!!! )");
Console.WriteLine("\n=============================================\n");
}

}
}



class Program
{
static void Main(string[] args)
{

TV mytv = new TV();

Console.WriteLine(mytv.current_chennel);

mytv.menu();

}
}
}

}


Макс 05 дек 2014 23:04
class TV
{
private bool tvon=false;
private string[] channels = { "1+1", "ICTV", "Новий", "Інтер", "ТРК Україна", "M1", "Тоніс", "Аверс" };
private int ch=0;
public void TurnOnTV() // включаем телевизор
{
tvon=true;
Console.WriteLine("Телевизор включен!");
}
public void TurnOffTV() //выключаем телевизор
{
tvon=false;
Console.WriteLine("Телевизор выключен!");
}
public void GoNext() // следующий канал
{
if (tvon)
{
if (ch < channels.Length-1)
ch += 1;
else
ch = 0;
ChannelShow();
}
else

Console.WriteLine("Включите телевизор");
}
public void GoPrevious() //предыдущий канал
{
if (tvon)
{
if (ch > 0)
ch -= 1;
else
ch = channels.Length-1;
ChannelShow();
}
else

Console.WriteLine("Включите телевизор");
}
public void GetOnCurrent(int current) //переход на заданый канал
{
if (tvon)
if (current >= 0 && current < channels.Length)
{
ch = current;
ChannelShow();
}
else
Console.WriteLine("Такого канала не существует!");
else
Console.WriteLine("Включите телевизор");
}
public void ChannelShow() //информация о канале
{
Console.WriteLine("Вы смотрите " + channels[ch]);
}
}
class Program
{

static void Main(string[] args)
{
string temp;
int chan=0;
TV tel = new TV();
Console.WriteLine("Здравствуйте! Вас приветствует программа \"Телевизор\"");
Console.ReadKey();
Console.WriteLine("Для начала работы, вы должны включить телевизор");
Console.ReadKey();
Console.WriteLine("Введите On/Off для включения/выключения телевизора");
Console.WriteLine("Для выбора канала введите:");
Console.WriteLine(" - Next - переход на следующий канал;");
Console.WriteLine(" - Prev - переход на предыдущий канал;");
Console.WriteLine(" - GoTo[номер канала в квадратных скобках] - переход на указаный канал.");
Console.WriteLine("Для завершения работы програмы введите ProgOff");
while (true)
{
temp=Console.ReadLine();
temp.ToLower();
if (temp.StartsWith("goto"))
{
chan = Convert.ToInt32(temp.Substring(5, 1));
temp=temp.Remove(4);
}
switch(temp)
{
case "on":
tel.TurnOnTV();
break;
case "off":
tel.TurnOffTV();
break;
case "next":
tel.GoNext();
break;
case "prev":
tel.GoPrevious();
break;
case "goto":
tel.GetOnCurrent(chan);
break;
case"progoff":
System.Environment.Exit(0);
break;
default:
Console.WriteLine("Телевизор не понимает вашей команды! Пожалуйста используйте только те команды, которые были описаны!");
break;
}
}
}

}

Диманиак 21 ноя 2014 22:26
class TVSet
{
public int currentChannel = 1;
private int[] ListOfChannels = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
public void NextChannel()
{
if (currentChannel == ListOfChannels.Max())
currentChannel = ListOfChannels.Min();
else
currentChannel = ListOfChannels.ElementAt(currentChannel);
Console.WriteLine("Телевизор переключен на канал " + currentChannel);
}
public void PreviousChannel()
{
if (currentChannel == ListOfChannels.Min())
currentChannel = ListOfChannels.Max();
else
currentChannel = ListOfChannels.ElementAt(currentChannel-2);
Console.WriteLine("Телевизор переключен на канал " + currentChannel);
}
public void SwitchToChannel(int Channel)
{
if (ListOfChannels.Contains(Channel))
{
currentChannel = Channel;
Console.WriteLine("Телевизор переключен на канал " + currentChannel);
}
else
{
Console.WriteLine("Телевизор не поддерживает канал " + Channel);
Console.WriteLine("Текущий канал " + currentChannel);
}
}
}
class Program
{
static void Main(string[] args)
{
TVSet myTV = new TVSet();
Console.WriteLine("Телевизор включен на канале " + myTV.currentChannel);
Console.WriteLine("Ввведите команду (Q-выкл/N-сл.канал/P-пред.канал) или номер канала:");
string Command = "";
do
{
Command = Console.ReadLine().ToUpper();
int Channel;
if (Int32.TryParse(Command, out Channel))
myTV.SwitchToChannel(Channel);
else
switch (Command)
{
case "N":
myTV.NextChannel();
break;
case "P":
myTV.PreviousChannel();
break;
default:
Console.WriteLine("Введена неправильная команда!");
break;
}
}
while (Command != "Q");
Console.WriteLine("Телевизор выключен на канале " + myTV.currentChannel);
Console.ReadKey();
}
}

Максим 21 ноя 2014 18:59
Vox
---
Метод Console.ReadKey()

Можно использовать так:
if (Console.ReadKey(true).Key == ConsoleKey.F2)
Console.WriteLine("F2 Pressed.");

Vox 20 ноя 2014 21:47
Подскажите методы, которые будут считывать информацию о нажатой клавише без кнопки "Enter"?

class Tv
{
private int current_channel = 1;// Начальное значение канала
public void Forward_Channel()// Метод переключения канала вперед
{
if (current_channel > 98)
current_channel = 0;
current_channel++;
Console.WriteLine("Канал " + current_channel);
}
public void Back_Channel()// Метод переключения канала назад
{
if (current_channel < 2)
current_channel = 100;
current_channel--;
Console.WriteLine("Канал " + current_channel);
}
public void Rapid_Set_Channel()// Метод быстрого набора канала
{
Console.Write("Введите номер канала: ");
try
{
current_channel = Convert.ToInt32(Console.ReadLine());
if (current_channel > 0 && current_channel <= 99)
{
Console.WriteLine("Канал " + current_channel);
}
else
Console.WriteLine("Введите корректный канал");
}
catch (FormatException Format)
{
Console.WriteLine("Вы ввели не цифры!");
}
}


class Program
{
static void Main()
{
Tv Channel = new Tv();
Console.WriteLine("Канал " + Channel.current_channel);
Console.WriteLine("Для переключения каналов нажимайте +/-");
Console.WriteLine("Для быстрого переключения, нажмите 'c':");
bool b = true;
while (b == true)
{
string a = Convert.ToString(Console.ReadLine());
switch (a)
{
case "+":
Console.Clear();
Channel.Forward_Channel();
break;
case "-":
Console.Clear();
Channel.Back_Channel();
break;
case "c":
Console.Clear();
Channel.Rapid_Set_Channel();
break;
}
}
}
}
}
}

Viccotr 16 ноя 2014 01:40
namespace dozadacha
{
class TVSet
{
private static int minimal_channel_value = 0;
private static int maximal_channel_value = 20;
public int channel = 0;

public void set_channel(int arg)
{
if (arg >= minimal_channel_value &&
arg <= maximal_channel_value)
{
channel = arg;
}
else throw new Exception("Invalid channel value!");
}

public int get_channel()
{
return channel;
}

}

class Program
{
public static void Main(string[] args)
{
TVSet tv = new TVSet();
tv.set_channel(5);
bool ok = false;

while (!ok)
{
try
{
Console.Write("Enter channel: ");
tv.set_channel(Convert.ToInt16(Console.ReadLine()));
ok = true;
}
catch (Exception ex)
{
if (ex.Message == "Invalid channel value!")
Console.WriteLine(ex.Message);
else throw ex;
}
}
Console.ReadKey();
}
}
}

Solalot 11 ноя 2014 00:19
обшибка, исправил:
channel.currientChannel++ и -- на ...+1 и ...-1


Solalot 10 ноя 2014 23:52
Извиняюсь за спам, подсократил чуток:
class TV
{
public byte currientChannel;
}


class Program
{
static void Main(string[] args)
{
TV channel = new TV();
bool exit = true;
while (exit)
{
Console.WriteLine("1 - next channel; 2 - previus channel; 3 - choose channel from 1 to 255: ");
byte a = Convert.ToByte(Console.ReadLine());
switch (a)
{
case 1:
Console.WriteLine(channel.currientChannel++);
break;

case 2:
Console.WriteLine(channel.currientChannel--);
break;

case 3:
Console.Write("Channel: ");
channel.currientChannel = Convert.ToByte(Console.ReadLine());
goto case 1;

default:
Console.WriteLine("Invalid selection. Please select 1, 2, or 3.");
break;
}
}
}
}

Solalot 10 ноя 2014 23:32
Здравствуйте, господа!

class TV
{
public byte currientChannel;
public byte nextChannel()
{
currientChannel++;
return currientChannel;
}
public byte prevChannel()
{
currientChannel--;
return currientChannel;
}
}


class Program
{
static void Main(string[] args)
{
TV channel = new TV();

bool exit = true;
while (exit)
{
Console.WriteLine("1 - next channel; 2 - previous channel; 3 - choose channel from 1 to 255: ");
byte a = Convert.ToByte(Console.ReadLine());
switch (a)
{
case 1:
Console.WriteLine(channel.nextChannel());
break;

case 2:
Console.WriteLine(channel.prevChannel());
break;

case 3:
Console.WriteLine("Channel: ");
a = Convert.ToByte(Console.ReadLine());
channel.currientChannel = a;
//Console.WriteLine(a);
break;

default:
Console.WriteLine("Invalid selection. Please select 1, 2, or 3.");
break;
}
}
}
}

Алекс 21 окт 2014 16:27
namespace ConsoleApplication1
{
class tv
{
public static bool tvStatus;
private int chanel;
static int curentchn;
private int quantity;
public tv(int q)
{
tvStatus=true;
quantity = q;
}
public void tvOff()
{
tvStatus = false;
}
public bool gettvstatus()
{
return tvStatus;
}
public void nextchn()
{
curentchn++;
}
public void previouschn()
{
curentchn--;
}
public int getchanel()
{
return curentchn;
}
public void setchanel(int a)
{
curentchn = a;
}
}

class Program
{
static void Main()
{
Console.WriteLine("Настройка ТВ");
Console.WriteLine("Введите колличество каналов вашего тв");
tv cosmos=new tv(Convert.ToInt32(Console.ReadLine()));
int n=0;

while (cosmos.gettvstatus() == true)
{
Console.WriteLine("Номер канала"+cosmos.getchanel());

int a=1;
while (a == 1)
{
Console.WriteLine("Выберите действие");
Console.WriteLine("1 - переключить на следующий канал");
Console.WriteLine("2 - переключить на предыдущий канал");
Console.WriteLine("3 - переключить на выбранный канал");
Console.WriteLine("4 - Выключить телевизор");
try
{
n = Convert.ToInt32(Console.ReadLine());
a = 0;
}
catch (FormatException ex)
{
Console.WriteLine("Вы ввели не цифру");
}
}
switch (n)
{
case 1:
cosmos.nextchn();
break;
case 2:
cosmos.previouschn();
break;
case 3:
Console.WriteLine("Введите номер канала");
cosmos.setchanel(Convert.ToInt32(Console.ReadLine()));
break;
case 4:
cosmos.tvOff();
break;
}


}
}
}
}

Николай 20 окт 2014 21:59
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class TVset
{
private int current_channel;
private bool switchedOn;

public void SetChannel(int channel)
{
current_channel = channel;
}

public int Current_Channel()
{
return current_channel;
}

public void ChannelUp()
{
current_channel++;
}

public void ChannelDown()
{
current_channel--;
if (current_channel < 0)
current_channel = 0;
}

public void SwitchOn()
{
switchedOn = true;
}
public void SwitchOff()
{
switchedOn = false;
}
public bool TVsetStatus()
{
return switchedOn;
}
}
class Program
{
static void Main(string[] args)
{ TVset tv_1 = new TVset();
tv_1.SwitchOn();
Console.WriteLine("Выберите канал");
tv_1.SetChannel(Convert.ToInt32(Console.ReadLine()));
while (tv_1.TVsetStatus())
{
Console.WriteLine("1.Переключить канал 2.Выключить телевизор");
if (Convert.ToInt32(Console.ReadLine()) == 1)
{ Console.WriteLine("1.Переключить вверх 2.Переключить вниз");
if (Convert.ToInt32(Console.ReadLine()) == 1)
tv_1.ChannelUp();
else tv_1.ChannelDown();
}
else tv_1.SwitchOff();

}
}
}
}

Константин 10 окт 2014 12:28
namespace ConsoleApplication1
{
class TVSet
{
private int chanal=0;
public void chanalUp()
{
chanal ++;
Console.WriteLine("Вы переключили канал вверх. Номер канала: " + chanal);
}
public void ChanalDown()
{

if (chanal == 0)
Console.WriteLine("Ошибка. каналов со знаком минус нет. Текущий канал " + chanal);
else
{
chanal --;
Console.WriteLine("Вы переключили канал вниз. Номер канала: " + chanal);
}
}
public void numberOfChanal(int number)
{
if (number < 0)
Console.WriteLine("Ошибка. каналов со знаком минус нет. Текущий канал " + chanal);
else
{
chanal = number;
Console.WriteLine("Вы переключили канал. Номер канала: " + chanal);
}
}
}
class Program
{
static void Main(string[] args)
{
// Создайте класс Телевизор. В нем есть поле текущий канал. Предусмотрите в нем возможность переключения каналов: следующий канал, предыдущий канал, переход к каналу по номеру.
// Учтите, что канал не может иметь отрицательный номер.
int exit = 0;
TVSet myTV = new TVSet();
Console.WriteLine("Выберите действие: 1. канал вверх 2. канал вниз 3. ввести номер канала 4. выход");
while (exit != 4)
{
exit = Convert.ToInt32(Console.ReadLine());
switch (exit)
{
case 1:
myTV.chanalUp();
break;
case 2:
myTV.ChanalDown();
break;
case 3:
Console.WriteLine("Введите номер канала");
myTV.numberOfChanal(Convert.ToInt32(Console.ReadLine()));
break;
}
}
}
}
}

Slavik 02 окт 2014 23:32
спасибо за урок!
Посмотрите, можно что то поправить или модифицировать код

namespace TVset
{
class TV
{
public int currentChannel;

public int SelectChannel(TV Channel)// Input some channel
{
Channel.currentChannel = int.Parse(Console.ReadLine());
return Channel.currentChannel;
}
public void CurrentChannel(TV Channel)
{
Console.WriteLine("You are watching {0} channel now", Channel.currentChannel);
}//Current TV channel
public int NextChannel(TV Channel)
{
return Channel.currentChannel++;
}
public int PreviousChannel(TV Channel)
{
return Channel.currentChannel--;
}

}
class Program
{
static void Main(string[] args)
{
TV Channel = new TV();//channel
char action; // +, - , Inputchannel, OffTv
char question;

Console.WriteLine("Congratulations! You have set the TV");
Console.Write("Please enter channel: ");
Channel.SelectChannel(Channel);

if (Channel.currentChannel < 0)
{
Console.Write("\nError. You can not enter negative number!\n");
Console.Write("Please enter channel: ");
Channel.SelectChannel(Channel);
}
Channel.CurrentChannel(Channel);
do
{
Console.Write("\nSelect option: ");
Console.Write("\n\t+ - next channel\n" +
"\t- - previous channel\n" +
"\tc - transition channel under number\n" +
"\to - off the TV\n");
action = Convert.ToChar(Console.ReadLine());
switch (action)
{
case '+':
Channel.NextChannel(Channel);
Channel.CurrentChannel(Channel);
break;
case '-':
Channel.PreviousChannel(Channel);
Channel.CurrentChannel(Channel);
break;
case 'c':
Channel.SelectChannel(Channel);
Channel.CurrentChannel(Channel);
break;
case 'o':
Console.WriteLine("You turn off TV");
break;
default:
Console.WriteLine("This option is broken");
break;
}
Console.WriteLine("Do you want use option again (y/n) ?");
question = Convert.ToChar(Console.ReadLine());
} while (question != 'n');
Console.ReadKey();
}
}
}

гоша 12 сен 2014 08:35
class TV
{
public int CurrentChannel =1;
public void UpChannel()
{
if (CurrentChannel == 3)
CurrentChannel = 1;
else CurrentChannel = CurrentChannel + 1;
}
public void DownChannel()
{
if (CurrentChannel == 1)
CurrentChannel = 3;
else CurrentChannel = CurrentChannel - 1;
}

}
class Program
{
static void Main(string[] args)
{
TV televizor = new TV();
int a=1;
while(a>0)
{
Console.WriteLine("Vvedite kanal");
char x = Convert.ToChar(Console.ReadLine());
switch (x)
{
case '1':
televizor.CurrentChannel = 1;
Console.WriteLine(televizor.CurrentChannel);
break;
case '2':
televizor.CurrentChannel = 2;
Console.WriteLine(televizor.CurrentChannel);
break;
case '3':
televizor.CurrentChannel = 3;
Console.WriteLine(televizor.CurrentChannel);
break;
case '-':
televizor.DownChannel();
Console.WriteLine(televizor.CurrentChannel);
break;
case '+':
televizor.UpChannel();
Console.WriteLine(televizor.CurrentChannel);
break;
}
Console.WriteLine("Again?");

if (Convert.ToChar(Console.ReadLine()) == 'y')
continue;
a = -1;
}
Console.ReadKey();

}
}

Oper 10 сен 2014 12:04
У Степана хороший код, единственное что if можно было бы заменить на switch-case и сделать проверку что вводятся числа, когда вводишь номер канала.

Ну и хочу поделиться моим вариантом, если есть замечания, то пишите.


using System;
using System.Text.RegularExpressions;

namespace Lesson_14
{
//Создайте класс Телевизор.
class TVSet
{
//В нем есть поле текущий канал.
private int CurrentCh = 1;
//Предусмотрите в нем возможность переключения каналов:
//следующий канал,
public void NextCh()
{
if (CurrentCh == 99) CurrentCh = 1;
else CurrentCh++;

}
//предыдущий канал,
public void PrevCh()
{
if (CurrentCh == 1) CurrentCh = 99;
else CurrentCh--;
}
//переход к каналу по номеру.
public void NumCh(int ch)
{
CurrentCh = ch;
}
public int GetCurrentCh()
{
return CurrentCh;
}
}
class Program
{
static void Main(string[] args)
{
TVSet myTV = new TVSet();
//(Напишем код что бы тестировать методы класса TVSet)
string read_str;
//(У телевизора канлов не ограничено, поэтому добавлю от себя условие, что каныл у нас от 1 до 99)
string help_str = "УПРАВЛЕНИЕ ТЕЛЕВИЗОРОМ.\n\nСледующий канал: \"+\"\nПредидущий канал канал: \"-\"\nТак же можно ввести номер канала от 1 до 99\nДля выхода: \"*\"\nВызов данной справки: \"help\"\n\n";
Console.WriteLine(help_str);
do
{
read_str = Console.ReadLine();
switch (read_str)
{
case "+":
Console.WriteLine("P+");
myTV.NextCh();
break;
case "-":
Console.WriteLine("P-");
myTV.PrevCh();
break;
case "help":
Console.WriteLine(help_str);
break;
case "*":
break;
default:
//Учтите, что канал не может иметь отрицательный номер.
//(Обратимся к уроку 27 что бы было всё красиво и просто)
if (Regex.IsMatch(read_str, @"^[1-9]\d{0,1}$"))
{
Console.WriteLine("Переключаю на канал: " + Convert.ToInt32(read_str));
myTV.NumCh(Convert.ToInt32(read_str));
}
else Console.WriteLine("Ошибка! Команда не правильная.");
break;

}
//(Проверяем какой канал на самом деле включился)
Console.WriteLine("Текущий канал: " + myTV.GetCurrentCh() + "\n");
}
while (read_str != "*");
}
}
}

Максим 26 авг 2014 19:33
Ольга
---
Много чего есть:

1. TVSet.IsOff == false // лишнаяя операция, достаточно !TVSet.IsOff
2. Непонятно зачем тут список каналов private int[] Channels = new int[100]; достаточно было бы CurentChannel и максимального числа каналов
3. У вас есть switchedOn, зачем тогда нужно поле IsOff, еще и статическое. switchedOn стоило просто сделать открытым свойством
4. Ну и реализовать всё это без метода Prisvoit было бы лучше

Ниже в комментариях есть различные реализации, может что-то будет полезное

Ольга 25 авг 2014 12:24
Получилось длинновато.. Посмотрите? Можно как-то с тем же функционалом сократить код?

class TVSet
{
private bool switchedOn;
public static bool IsOff = false;
public static int CurentChannel;
private int[] Channels = new int [100];
public void ChannelsFilling()
{
for (int a = 0; a < Channels.Length; a++)
{
Channels[a]=a;
}
}
private void Prisvoit()
{
try
{
if (CurentChannel == Channels[CurentChannel])
{
Console.WriteLine("Вы смотрите " + CurentChannel + " канал");
}
else
{
Console.WriteLine("Такого канала не существует");
};
}
catch (IndexOutOfRangeException)
{
Console.WriteLine("Такого канала не существует");
}

}
public void SwitchOn()
{
switchedOn = true;
}
public void SwitchOff()
{
switchedOn = false;
}
public void NextChannel()
{
CurentChannel = CurentChannel + 1;
Prisvoit();
}
public void PreviousChannel()
{
if (CurentChannel == 0)
{
CurentChannel = Channels.Length-1;
}
else
CurentChannel = CurentChannel - 1;
Prisvoit();
}
public void GoToChannel()
{
Console.WriteLine("На какой канал переключить? (0-"+(Channels.Length-1)+")");
try
{
CurentChannel = Convert.ToInt32(Console.ReadLine());
}
catch (FormatException)
{
Console.WriteLine("Вы ввели не число!");
}
catch (Exception)
{
Console.WriteLine("Вы ввели слишком большое число! Попробуйте еще раз!");
}
Prisvoit();
}
}

class Program
{
static void Main(string[] args)
{
int WhatToDo=0;
string OnOff;
TVSet myTV = new TVSet();
myTV.ChannelsFilling();
myTV.SwitchOn();
do
{
Console.WriteLine("Телевизор выключен. Хотите включить? (any button/n)\r\nВ противном случае программа закроется");
OnOff = Convert.ToString(Console.ReadLine());
if (OnOff != "n")
{
Console.WriteLine("Вы смотртите канал №" + TVSet.CurentChannel);
while (true)
{
Console.WriteLine("Нажмите любую кнопку, чтобы переключить канал или выключить телевизор");

Console.ReadKey();

Console.WriteLine("\r\nЧто вы хотите сделать?\r\n1. Переключить на следующий канал.\r\n2. Переключить на предыдущий канал\r\n3. Переключить на канал №...\r\n4. Выключить телевизор.");
try
{
WhatToDo = Convert.ToInt32(Console.ReadLine());
}
catch (FormatException)
{
Console.WriteLine("Вы ввели не число! Попробуйте еще раз!");
}
catch (Exception)
{
Console.WriteLine("Вы ввели слишком большое число! Попробуйте еще раз!");
}
if (WhatToDo == 1)
{
myTV.NextChannel();
}
else if (WhatToDo == 2)
{
myTV.PreviousChannel();
}
else if (WhatToDo == 3)
{
myTV.GoToChannel();
}
else if (WhatToDo == 4)
{
myTV.SwitchOff();
Console.WriteLine("Вы выключили телевизор, до новых встреч!");
TVSet.IsOff = true;
break;
}
else
{
Console.WriteLine("Вы неправильно ввели код действия, попробуйте еще раз");
}
}
}
else
TVSet.IsOff = true;
}
while (TVSet.IsOff == false);
Console.ReadKey();
}
}

Di3go 23 авг 2014 00:48
// Fluttershy :3
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;

namespace HelloWorld
{
class TV
{
static private int channel = 0;
public void NextChannel()
{
channel++;
}

public void ForwardChannel()
{
if (channel == 0)
Console.WriteLine("Channel must been >= 0");
else
channel--;
}

public int GetChannelNumber()
{
return channel;
}

public void SetChannelNumber(int ch)
{
if (ch >= 0)
channel = ch;
else
Console.WriteLine("Channel must been >= 0");
}

}

class Program
{
static void Main(string[] args)
{
TV test1 = new TV();
test1.NextChannel();
Console.WriteLine(test1.GetChannelNumber().ToString());
test1.SetChannelNumber(95);
Console.WriteLine(test1.GetChannelNumber().ToString());
test1.SetChannelNumber(-9);
Console.ReadKey();
}
}

}

n0n4m3r 04 авг 2014 11:13
class Television
{
private static int maxChannel = 99;
private static int minChannel = 0;
public static int curChannel;

public static void changeChannel(ConsoleKeyInfo k)
{
if (k.Key == ConsoleKey.UpArrow && curChannel < maxChannel)
{
curChannel++;
Console.WriteLine("Current channel: " + curChannel);
}
else if (k.Key == ConsoleKey.UpArrow && curChannel >= maxChannel)
{
curChannel = minChannel;
Console.WriteLine("Current channel: " + curChannel);
}
else if (k.Key == ConsoleKey.DownArrow && curChannel > minChannel)
{
curChannel--;
Console.WriteLine("Current channel: " + curChannel);
}
else if (k.Key == ConsoleKey.DownArrow && curChannel <= minChannel)
{
curChannel = maxChannel;
Console.WriteLine("Current channel: " + curChannel);
}
else if (k.Key == ConsoleKey.Spacebar)
{
do
{
Console.Clear();
Console.WriteLine("Choose channel: ");
curChannel = Convert.ToInt32(Console.ReadLine());
} while (curChannel < minChannel | curChannel > maxChannel);
Console.WriteLine("Current channel: " + curChannel);
}

}
}


Main(){
ConsoleKeyInfo pressed;
Television myTV = new Television();
Television.curChannel = 10;
do
{
Console.WriteLine("Press up or down to change channels or space to choose specific channel: ");
pressed = Console.ReadKey();
Television.changeChannel(pressed);
//Console.WriteLine(pressed.Key);

} while (pressed.Key != ConsoleKey.Escape);
}





Максим 01 авг 2014 14:14
Степан
---
Нормально

Степан 30 июл 2014 19:50
при желании можно допилить. а так вроде бы норм?
{
class myTV
{
public const int ChanelAmount = 10;
public int CurrentChanel;
public int ChanelUP()
{
if (CurrentChanel < ChanelAmount)
{
CurrentChanel++;
return CurrentChanel;
}
else
{
CurrentChanel = 1;
return CurrentChanel;
}
}
public int ChanelDOWN()
{
if (CurrentChanel != 1)
{
CurrentChanel--;
return CurrentChanel;
}
else
{
CurrentChanel = 10;
return CurrentChanel;
}
}
public int ChooseChanel()
{
Console.WriteLine("Input your chanel");
int NewChanel = Convert.ToInt32(Console.ReadLine());
if (NewChanel > 0 && NewChanel <= ChanelAmount)
CurrentChanel = NewChanel;
else Console.WriteLine("Eror, input corect chanel");
return CurrentChanel;
}
}
class Program
{
static void Main(string[] args)
{
myTV TV_1 = new myTV();
Random rand = new Random();
string action;
TV_1.CurrentChanel = rand.Next(9)+1;
do
{
Console.WriteLine("Current chanel number - " + TV_1.CurrentChanel);
Console.WriteLine("Chose some action:");
Console.WriteLine("'+' - next chanel");
Console.WriteLine("'-' - previos chanel");
Console.WriteLine("'=' - choose chanel");
Console.WriteLine("'0' - exit program");
action = Console.ReadLine();
if (action == "+")
TV_1.ChanelUP();
if (action == "-")
TV_1.ChanelDOWN();
if (action == "=")
TV_1.ChooseChanel();
}
while (action != "0");
}
}
}

Максим 28 июл 2014 15:06
Влад
---
Как-то не очень понятно зачем эти back и forward поля. Было бы лучше если бы всё через current работало

Влад 26 июл 2014 16:10
Уважаемый админ , оцените и мой код пож)
using System;

class Program
{
static void Main()
{
myTV my1 = new myTV();
string f = "forward";
string b = "backward";
string c = "choice";
string StringTmp;
int IntTmp;
Console.WriteLine("Введите:\nchoice - выбрать канал\nforward - вперед\nbackward - назад\nstop - завершение работы\n Текущий канал = 0\nВсего каналов: 100");
while ((StringTmp=Convert.ToString(Console.ReadLine())) != "stop")
{
if (StringTmp == f)
Console.WriteLine(my1.Forward());
else if(StringTmp ==b)
Console.WriteLine(my1.Back());
else if (StringTmp == c)
{
Console.WriteLine("Введите канал (0 - 100)");
IntTmp = Convert.ToInt32(Console.ReadLine());
my1.change(IntTmp);
Console.WriteLine(IntTmp);
}
}


}
}
class myTV
{
public int AllChannels = 100;
private int current = 0;
private int back = 100;
private int forward = 1;

public int Forward()
{
if (current != 100)
{
back = current;
current = forward;
forward++;
}
else
{
current = 0;
back = 100;
forward = 1;
}
return current;

}

public int Back()
{
if (current != 0)
{
forward = current;
current = back;
back--;
}
else
{
current = 100;
forward = 0;
back = 99;
}
return current;

}
public void change(int a)
{
current = a;
back = a-1;
forward = a+1;

}

}




Максим 13 июл 2014 15:26
AlexSerikov
---
Хорошо, только choise бы еще private сделать

Максим 13 июл 2014 15:21
Albert
---
Плохо то, что вы сделали класс TV статическим. Здесь так быть не должно

Albert 11 июл 2014 21:52
Admin, если у Вас будет время - хотел бы выслушать Вашу критику!

class TV
{
public static int channel;
public static int SwitchChannel(int channel, int wish)
{
if (wish == 1)
{
channel++;
return channel;
}
else if (wish == 2)
{
channel--;
return channel;
}
else if (wish == 0)
{
return channel;
}
else
{
return channel;

}
}
}

class Program
{

static void Main(string[] args)
{

bool error;
int chan=0;
do
{
try
{
Console.WriteLine("введите текущий канал");
chan = Convert.ToInt32(Console.ReadLine());
error = false;


if (chan < 0)
{
Console.WriteLine("не может быть отрицательным");
error = true;
}

}
catch (Exception)
{
Console.WriteLine("неверный формат");
error = true;
}
}
while (error == true);

bool exit;

do
{
Console.WriteLine("Хотите переключить? 0-нет, 1-да, вверх 2-да, вниз");
int wish = Convert.ToInt32(Console.ReadLine());

Console.WriteLine("Текущий канал: " + TV.SwitchChannel(chan, wish));
Console.WriteLine("Выключить? 0-нет, 1-да");
if (Convert.ToInt32(Console.ReadLine()) == 0)
{
exit = false;
}
else
{
exit = true;
}
}
while (exit == false);

}
}

AlexSerikov 02 июл 2014 19:11
Забыл исправить числа 10 на константу (я ее не зря завел, но легко позабыл). Блин. Вот плохо, что сообщения нельзя редактировать =(

AlexSerikov 02 июл 2014 19:06
Ну как то так. Долго маялся. Написал быстро, дебажил, писал try-catch, работал напильником в сумме часа 2.
Ваше мнение, уважаемый Admin ?

namespace sampleClasses
{
class TV
{
private const int chanel_amount = 10;
public int chanel_now = 1;
public char choise;
public void choose()
{
Console.Write("Ввод команды: ");
try
{
choise = Convert.ToChar(Console.ReadLine());
}
catch (FormatException)
{
Console.WriteLine("Введите символ, указанный в инструкции к TV");
}

if (choise == '+')
{
next_chanel();
return;
}
else if (choise == '-')
{
last_chanel();
return;
}
else if (choise == '=')
{
set_chanel();
return;
}
else if (choise == '0')
{
Console.WriteLine("Завершение работы");
return;
}
else if (choise == '/')
{
clear_console();
return;
}
else if (choise == 'h')
{
get_help();
return;
}
else
{
Console.WriteLine("Неизвестное действие");
choose();
}
}
public void get_help()
{
Console.WriteLine("Вперед +");
Console.WriteLine("Назад -");
Console.WriteLine("Установить канал =");
Console.WriteLine("Очистить консоль /");
Console.WriteLine("Помощь h");
Console.WriteLine("Выйти 0");
TV_continue();
return;
}
public void clear_console()
{
Console.Clear();
TV_continue();
return;
}
public int next_chanel()
{
if (chanel_now == chanel_amount)
{
chanel_now = 1;
}
else
{
chanel_now++;
}
Console.WriteLine("Сейчас вы находитесь на канале " + chanel_now);
TV_continue();
return chanel_now;
}
public int last_chanel()
{
if (chanel_now == 1)
{
chanel_now = 10;
}
else
{
chanel_now--;
}
Console.WriteLine("Сейчас вы находитесь на канале " + chanel_now);
TV_continue();
return chanel_now;
}
public int set_chanel()
{
Console.WriteLine("Введите нужный вам канал. На данный момент вам доступны каналы от 1 до " + chanel_amount);
try
{
chanel_now = Convert.ToInt32(Console.ReadLine());
}
catch (FormatException)
{
Console.WriteLine("Не правильная команда");
}

if (chanel_now >= 1 && chanel_now <= 10)
{
Console.WriteLine("Сейчас вы находитесь на канале " + chanel_now);
TV_continue();
}

else
{
Console.WriteLine("Такой канал Вам не доступен. Попробуйте еще раз");
set_chanel();
}

return chanel_now;
}
public void TV_continue()
{
Console.WriteLine("Введите ваше следующее действие");
choose();
return;
}
public void Exit()
{
Console.WriteLine("Выход");
return;
}

}
class Program
{

static void Main()
{
TV myTV = new TV();
Console.WriteLine("Вас приетствует TV");
Console.WriteLine("Текущий канал " + myTV.chanel_now);
Console.WriteLine("Перечень возможных действий:");
Console.WriteLine("Вперед +");
Console.WriteLine("Назад -");
Console.WriteLine("Установить канал =");
Console.WriteLine("Очистить консоль /");
Console.WriteLine("Помощь h");
Console.WriteLine("Выйти 0");
myTV.choose();
Console.ReadKey();

}
}
}

Максим 26 июн 2014 18:08
zloy_proger
---
if (channel_now <= 10 && channel_now >= 1) // здесь вместо 10 должна была бы быть объявленная константа. А в целом очень хорошо

Максим 26 июн 2014 18:03
Mary
---
Что-то не работает ваше творчество, поменял это:

TekChannel = TekChannel > 1 ? TekChannel-- : TekChannel;
TekChannel = TekChannel < Number ? TekChannel++ : TekChannel;

на

TekChannel = TekChannel > 1 ? TekChannel-1 : TekChannel;
TekChannel = TekChannel < Number ? TekChannel+1 : TekChannel;

zloy_proger 25 июн 2014 15:21
может будут какие советы

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace классы
{
class TV
{
private const int channel_amount = 10;
public int channel_now = 1;
public int channel_next()
{
channel_now++;
if(channel_now>channel_amount)
{
channel_now = 1;
return (channel_now);
}
return (channel_now);
}
public int channel_pre()
{
channel_now--;
if(channel_now<1)
{
channel_now = channel_amount;
return (channel_now);
}
return (channel_now);
}
public int channel_enter()
{
Console.WriteLine("Введите канал");
channel_now = Convert.ToInt32(Console.ReadLine());
if(channel_now<=10 && channel_now>=1)
{
return (channel_now);
}
else
{
channel_enter();
}
return (1);
}
}
class program
{
static void channel_go(TV my_TV)
{
Console.WriteLine("Текущий канал: " + my_TV.channel_now);
Console.WriteLine("Выберите действие");
Console.WriteLine("Предыдущий канал: -");
Console.WriteLine("Следующий канал: +");
Console.WriteLine("Ввести канал: 1");
Console.WriteLine("ВЫход: 0");
string help_str = Console.ReadLine();
if(help_str=="+")
{
my_TV.channel_next();
channel_go(my_TV);
return;
}
if(help_str=="-")
{
my_TV.channel_pre();
channel_go(my_TV);
return;
}
if(help_str=="1")
{
my_TV.channel_enter();
channel_go(my_TV);
return;
}
if(help_str=="0")
{
Console.WriteLine("Завершение работы");
return;
}
else
{
Console.WriteLine("Неизвестное действие");
channel_go(my_TV);
return;
}
}
static void Main(string[] args)
{
TV my_TV = new TV();
channel_go(my_TV);
}
}
}

Mary 24 июн 2014 15:19
Добрый день.
Можно тогда и моё "творчество" оценит..

namespace hello_world
{
public class TV
{
public int Number;
public int TekChannel;

public void Previous()

{
TekChannel = TekChannel > 1 ? TekChannel-- : TekChannel;
Console.WriteLine(TekChannel == 1
? "Это самый первый канал = " + TekChannel
: "Предыдущий канал = " + TekChannel);
}

public void Next()
{
TekChannel = TekChannel < Number ? TekChannel++ : TekChannel;
Console.WriteLine(TekChannel == Number
? "Это последний канал = " + TekChannel
: "Следующий канал = " + TekChannel);
}
}

internal class Program
{
private static void Main(string[] args)
{
string command;
var tv = new TV();

do
{
try
{
Console.WriteLine("Введите количество каналов");
tv.Number = Convert.ToInt32(Console.ReadLine());
if (tv.Number < 1)
{
Console.WriteLine("Количество каналов должно быть больше нуля. Повторите ввод");
}
}
catch (FormatException)
{
Console.WriteLine("Вы ввели некорректное значение. Повторите ввод");
}
} while (tv.Number < 1);

do
{
try
{
Console.WriteLine("введите текущий канал");
tv.TekChannel = Convert.ToInt32(Console.ReadLine());
if (tv.TekChannel > tv.Number)
{
tv.TekChannel = tv.Number;
Console.WriteLine("Канал выходит за границы диапазона. Текущий канал = " + tv.TekChannel);
}
else if (tv.TekChannel < 1)
{
tv.TekChannel = 1;
Console.WriteLine("Канал выходит за границы диапазона. Текущий канал = " + tv.TekChannel);
}
}
catch (Exception)
{
Console.WriteLine("Вы ввели некорректное значение. Повторите ввод");
throw;
}
} while (tv.TekChannel < 1 || tv.TekChannel > tv.Number);

do
{
Console.WriteLine("Введите команду. n - следующий канал, p - предыдущий, q - выход");
command = Console.ReadLine();

switch (command)
{
case "n":
tv.Next();
break;

case "p":
tv.Previous();
break;

case "q":
break;

default:
Console.WriteLine("Вы ввели не верную команду. Попробуйте ещё раз");
break;
}
} while (command != "q");
}
}
}

Максим 19 июн 2014 14:40
Кот Тимофей
---
Да, в большинстве случаев static методы бывают именно public. А вот аналогия плохая. Модель, габариты могут быть только у конкретного телевизора (объекта). Что если в программе необходимо использовать несколько телевизоров, что тогда делать с габаритами, которые объявленны как static? Статическим методом, например, можно было бы обработать массив телевизоров (сортировка, удаление...)

Кот Тимофей 18 июн 2014 19:27
Я правильно понимаю, что в большинстве случаев static методы бывают именно public иначе можно создать обьект и обойтись internal-методом?
С другой стороны создавать private static методы можно только для использования из других рядом стоящих static методов, иначе до них не достучаться без создания обьекта?
Что касается аналогии, то продолжая тему телевизора, в static методах можно узнавать например модель, габариты, количество каналов и потребляемую мощность. А вот пощелкать кнопками на немуществующем телевизоре(обьекте) не получится.

Было бы неплохо тему этого и предыдущего уроков в инфографике найти, а то в голове не уложилось.

Жека 29 май 2014 22:27
Немного больше функционала
class Program
{
static void Main(string[] args)
{
string Enter = null;
TV myTV = new TV();
myTV.Clear();
while (Enter != "exit")
{
Enter = Console.ReadLine();
switch (Enter)
{
case "+":
myTV.Next_Channel();
break;
case "-":
myTV.Back_Channel();
break;
case "?":
myTV.Get_Channel();
break;
case "set":
myTV.Set_Channel();
break;
case "help":
myTV.Print_Commands();
break;
case "clear":
myTV.Clear();
break;
}
}
}
}
class TV
{
public int This_Channel = 1;
private int Min_Channel = 0;
public int Max_Channel= 9;
public string Name_Channel;
private string[] Channel_Array = { "Интер", "1+1", "Новый канал", "Трк Украина", "ICTV", "Мега", "ТеТ", "НТВ", "СТБ", "САТ" };
public int Get_Channel()
{
Name_Channel = "[" + This_Channel + "] " + "\"" + Channel_Array[This_Channel] + "\"";
Console.WriteLine(Name_Channel);
return 0;
}
public void Next_Channel()
{
if (This_Channel < Max_Channel)
{
This_Channel += 1;
}
else
{
This_Channel = Min_Channel;
}
Get_Channel();
}
public void Back_Channel()
{
if (This_Channel > Min_Channel)
This_Channel -= 1;
else
This_Channel = Max_Channel;
Get_Channel();
}
public void Set_Channel()
{
try
{
Console.WriteLine("Введите номер канала:");
int Input = Convert.ToInt32(Console.ReadLine());
if (Input > Min_Channel && Input < Max_Channel)
This_Channel = Input;
else
Console.WriteLine("Канал не найден!");
}
catch (FormatException)
{
Console.WriteLine("Неверный формат!");
}
finally
{
Get_Channel();
}
}
public void Print_Commands()
{
string[,] commands = {
{ "+", "Следующий канал" },
{ "-", "Предыдущий канал" },
{ "?", "На каком я канале" },
{ "set", "Ввести номер канал" },
{ "clear", "Очистить экран" },
};
for (int i = 0; i < commands.GetLength(0); i++)
{
Console.WriteLine("\"" + commands[i, 0] + "\"" + " - " + commands[i, 1]);
}
}
public void Clear()
{
Console.Clear();
Console.WriteLine("Введите \"help\" просмотреть доступные команды");
}
}

Алексей 22 май 2014 08:58
Евгений, а зачем в case "enter": прописывать строчку
myTV.chanel = myTV.chanelValue;? Программа же делает это действие в public void chanelEnter(). Может я что-то не понимаю, но на мой взгляд она лишняя.

Евгений 12 май 2014 15:53
Немного переделанное задание, с возможностью ввода канала.

TVChanel.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace lesonTV
{
class TVChanel
{
public int chanel;
public int chanelValue;

public void chanelNext()
{
if (chanel == 10)
{
chanel = 0;
chanel++;
}
else
chanel++;

}

public void chanelPrew()
{
if (chanel == 1)
{
chanel = 11;
chanel--;
}
else
chanel--;
}

public void chanelEnter()
{
chanel = chanelValue;
}
}
}

Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace lesonTV
{
class Program
{
static void Main(string[] args)
{
TVChanel myTV = new TVChanel();

string[] chanel = { "Первый", "Россия 24", "НТВ", "Пятый", "СТС", "ТНТ", "2х2", "Animal Planet", "Discovery", "Россия Спорт", };
string enterValue = "";

Console.WriteLine("Введите + или - для переключение канала. Введите enter для ввода канала. Введите exit для выхода из программы!");

while(enterValue!="exit")
{
enterValue = Console.ReadLine();

switch (enterValue)
{
case "+":
myTV.chanelNext();
Console.WriteLine("Текущий канал: " + myTV.chanel + " " + chanel[myTV.chanel-1]);
break;

case "-":
myTV.chanelPrew();
Console.WriteLine("Текущий канал: " + myTV.chanel + " " + chanel[myTV.chanel - 1]);
break;

case "enter":
try
{
Console.Write("Введите номер канал: ");
myTV.chanelValue = Convert.ToInt32(Console.ReadLine());
myTV.chanel = myTV.chanelValue;
myTV.chanelEnter();
Console.WriteLine("Текущий канал: " + myTV.chanel + " " + chanel[myTV.chanel - 1]);

}
catch(IndexOutOfRangeException ie)
{
Console.WriteLine("Невозможно найти канал! Всего каналов " + chanel.Length);
}
catch(FormatException fe)
{
Console.WriteLine("Вы ввели недопустимый символ!");
}
break;
default:
Console.WriteLine("Вы должны вводить только + или - для переключения каналов!");
break;
}
}
}
}
}

Евгений 12 май 2014 10:33
Спасибо за уроки, все очень интересно и понятно!
Вот моё ДЗ :)

TVChanel.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace lesonTV
{
class TVChanel
{
public int chanel;

public void chanelNext()
{
if (chanel == 10)
{
chanel = 0;
chanel++;
}
else
chanel++;

}

public void chanelPrew()
{
if (chanel == 1)
{
chanel = 11;
chanel--;
}
else
chanel--;
}
}
}

Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace lesonTV
{
class Program
{
static void Main(string[] args)
{
TVChanel myTV = new TVChanel();

string[] chanel = { "Первый", "Россия 24", "НТВ", "Пятый", "СТС", "ТНТ", "2х2", "Animal Planet", "Discovery", "Россия Спорт", };
string enterValue = "";

Console.WriteLine("Введите + или - для переключение канала. Введите exit для выхода из программы!");

while(enterValue!="exit")
{
enterValue = Console.ReadLine();

switch (enterValue)
{
case "+":
myTV.chanelNext();
Console.WriteLine("Текущий канал: " + myTV.chanel + " " + chanel[myTV.chanel-1]);
break;

case "-":
myTV.chanelPrew();
Console.WriteLine("Текущий канал: " + myTV.chanel + " " + chanel[myTV.chanel - 1]);
break;

default:
Console.WriteLine("Вы должны вводить только + или - для переключения каналов!");
break;
}
}
}
}
}

Илюхинг 06 май 2014 12:26
Блин еще косяки нашел. Программу начал писать до майских праздников продолжил после. Думал устранил их. В след. раз буду внимательней выкладывая код. Сори

Илюхинг 06 май 2014 12:23
Вот мое видение.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Class
{
public class TVSet
{
public int Channal = 5;
public void TVMinus()
{
if (Channal == 0) Channal = 99;
else Channal--;
}

public void TVPlus()
{
if (Channal == 99) Channal = 0;
else Channal++;
}

public void TVTo_Channel()
{
do
{
Console.WriteLine("Введите номер канала: ");
Channal = Convert.ToInt32(Console.ReadLine());
if (Channal < 0) Console.WriteLine("канал не может быть отрицательным! Попробуйте еще раз!");
} while (Channal < 0);

}

public int Numcan()
{
return Channal;
}


}

class Program
{
static void Main(string[] args)
{
int menu;
TVSet ob = new TVSet();

do
{
Console.WriteLine("Пульт ТВ. Текущий канал: " + ob.Numcan());
Console.WriteLine("Нажмите 1 - повысить канал, 2 - понизить канал, 3 - выбор канала, 4 - выключить телевизор.");
menu = Convert.ToInt32(Console.ReadLine());
switch (menu)
{
case 1:
ob.TVPlus();
break;
case 2:
ob.TVMinus();
break;
case 3:
ob.TVTo_Channel();
break;

}
} while (menu == 4);
Console.WriteLine("Номер канала: "+ ob.Numcan());



Console.ReadKey();

}
}

}



Serj 05 май 2014 19:40
Спасибо, учту.

Максим 05 май 2014 17:50
Serj
---
Программа прикольная получилась. Есть конечно же некоторые замечания:

1. current_channel += 1 // лучше использовать в таких случаях инкрементацию current_channel++

2. Класс этот стоило бы назвать как Телевизор, а не Пульт. Текущий канал хранится в телевизоре. Если делать пульт, тогда это было бы 2 класса - Телевизор и Пульт, пульт бы привязывался к конкретному телевизору и т.д.

3. Набор каналов relay должен хранится в телевизоре, и не стоит его передавать при каждом изменении канала. Когда вы в жизни нажимаете на кнопку "следующий канал", вы же никакой дополнительной информации при этом не передаете

Serj 04 май 2014 19:02
Уважаемый Admin вот моё ДЗ. Хотелось бы узнать вашу оценку. Я делал свою программу так чтобы количество каналов можно было менять добавляя или удаляя их из массива relay. То есть телевизор настроился на сколько то каналов а пользователь их с пульта переключает. Спасибо за уроки.

internal class TVpult
{
public int current_channel; // Текущее значение канала

public void Channel_Up(string[] relay) // Кнопка "канал +"
{
if (current_channel == relay.Length-1)
current_channel = 0;
else current_channel += 1;
}

public void Channel_Low(string[] relay) // Кнопка "канал -"
{
if (current_channel == 0)
current_channel = relay.Length-1;
else current_channel -= 1;
}
public void Channel_Numb(string [] relay) // Кнопка "номер канала"
{
start:
int b = 0;
for (int i = 0; i < relay.Length; i++)
{
Console.WriteLine((i + 1) + " - " + relay[i]);
}
try
{
b = Convert.ToInt32(Console.ReadLine());
}
catch (FormatException)
{
goto start;
}
if ((b > 0) && (b < relay.Length + 1))
{
current_channel = --b ;
}

}

}


class Program
{
static void Main(string[] args)
{
char a = ' ';
TVpult myTV = new TVpult();
string[] relay = { "1+1", "ictv", "discovery", "MTV", "inter", "tonis","CNN"}; //Сюда можно вписать сколько угодно каналов
start:
Console.Clear();
Console.WriteLine("Сейчас на экране {0}. Кнопка PG+ (+) Кнопка PG-( - ) \nВвести номер канала в ручную(*) Выключить телевизор (/)", relay[myTV.current_channel]);
try
{
a = Convert.ToChar(Console.ReadLine());
}
catch (FormatException)
{
goto start;
}
switch (a)
{

case '+':
myTV.Channel_Up(relay);
goto start;

case '-':
myTV.Channel_Low(relay);
goto start;

case '*':
myTV.Channel_Numb(relay);
goto start;

case '/':
break;

default:
Console.Clear();
Console.WriteLine("Вы нажали не ту кнопку. Попробуйте еще раз.");
Console.ReadLine();
goto start;
}

Игорь 24 апр 2014 14:04
class TVSet
{
public static uint Chanal= 0;
public void TVPlus()
{
if (Chanal == 99)
{
Chanal = 0;
}
else
{
Chanal++;
}
}
public void TVMinus()
{
if (Chanal == 0)
{
Chanal = 99;
}
else
{
Chanal--;
}
}
public void Go_ToCH()
{
Console.Write("Enter the chanal number: ");
Chanal = Convert.ToUInt32(Console.ReadLine());
}
}
class Program
{
static void Main()
{
string message = Convert.ToString(TVSet.Chanal);
TVSet ob = new TVSet();
Console.WriteLine("1. Plus chanal\n" + "2. Minus chanal\n" + "3. Go to chamal");
switch (Convert.ToInt32(Console.ReadLine()))
{
case 1:
ob.TVPlus();
break;
case 2:
ob.TVMinus();
break;
case 3:
ob.Go_ToCH();
break;
}
Console.WriteLine(message);
Console.ReadLine();
}
}

Максим 02 апр 2014 18:55
Ромик
---
Вы перед тем как постить сюда код, проверяйте его, пробуйте найти баги. А редактирование, и не только его может потом добавлю

Ромик 02 апр 2014 16:22
Очень было бы хорошо, если бы можно было редактировать свои сообщения. Я сейчас смотрю на свою программу и вижу несколько мелких недочетов(придумал как можно сделать лучше), но переписывать не хочу , т.к. займет слишком много места, а я и так уже 3 пост пишу)

Ромик 02 апр 2014 16:19
мог уйти в отрицательный канал, поправил
public void KanalLow()
{
if (kanal > 1)
kanal--;
else
{
Console.WriteLine("Дальше некуда убавлять");
}
}

Ромик 02 апр 2014 16:04
как то необычно легко далась программа )
class Telik
{
private int kanal = 5;
public void KanalUp()
{
kanal++;
}
public void KanalLow()
{
kanal--;
}
public void switchKanal(int num)
{
if (num > 0)
kanal = num;
else
Console.Write("Каналов с минусом или нулевых каналов не существует");
}
public int Numkan()
{
return kanal;
}
}
class Program
{
static void Main(string[] args)
{
Telik kan = new Telik();
bool exit = false;
while (!exit)
{
Console.WriteLine("Сейчас " + kan.Numkan() + " канал");
Console.WriteLine("Введите , что хотите сделать: \n1.Канал+\n2.Канал минус\n3.Выбрать канал\n4.Выключить телик");
int menu = int.Parse(Console.ReadLine());
switch (menu)
{
case 1:
kan.KanalUp();
break;
case 2:
kan.KanalLow();
break;
case 3:
Console.WriteLine("На какой канал вы хотите поменять?");
int n = int.Parse(Console.ReadLine());
kan.switchKanal(n);
break;
case 4:
exit = true;
break;
}
}
}
}

cracker 26 мар 2014 10:12
Вот мой вариант:
class TV
{
public static uint kanal = 0;
public void kanal_plus()
{
if (kanal == 99)
kanal = 0;
else
kanal ++;
}
public void kanal_minus()
{
if (kanal == 0)
kanal = 99;
else
kanal--;
}
public void go_to_kanal(string num)
{

kanal = Convert.ToUInt32(num);

}

}
class Program
{
static void Main(string[] args)
{
string message = Convert.ToString(TV.kanal);
TV myTV = new TV();
Console.WriteLine("1. Следующий канал\n2. Предыдущий канал\n3. Ввести канал");
switch (Convert.ToInt32(Console.ReadLine()))
{
case 1:
myTV.kanal_plus();
break;
case 2:
myTV.kanal_minus();
break;
case 3:
try
{
string num1 = Console.ReadLine();
myTV.go_to_kanal(num1);

}
catch (Exception minus)
{
message = "xz";
}
break;
}
Console.WriteLine(message);
Console.ReadKey();
}
}
PS. Спасибо за уроки. Доступно и понятно, для начинающего самое то основу освоить!

Макс 23 мар 2014 20:55
Спасибо за уроки :)

Николай 27 фев 2014 15:29
Назовем это работой над ошибками. кажется тут получилось намного понятнее и проще.

namespace ConsoleApplication1
{
class TV
{
public static int i;
public static int Chanell=0;

public static int check(string s) //функция для проверки знака. + 0, - 1, * 2, число 3, исключение 4.
{
int i1;
if (s == "+")
i=0;
else if (s == "-")
i=1;
else if (s == "*")
i = 2;
else
try
{ i1 = Convert.ToInt32(s);
if (i1 <= 99 && i1 >= 0)
i = 3;
else i = 4;
}
catch(FormatException)
{i=4;}

return i;
}


public void Plus() //ф-я на плюс
{
if (Chanell == 99)
Chanell = 0;
else
Chanell++;

}

public void Minus() //ф-я на минус
{
if (Chanell == 0)
Chanell = 99;
else
Chanell--;
;
}
public void Change(string s) //ф-я на ввод канала вручную
{
Chanell = Convert.ToInt32(s);
;
}


}

class Program
{

static void Main(string[] args)
{
TV myTV = new TV();
int point; //переменная для case
string sign = ""; //вводимый знак
string line="\n+ следующий канал \n - предыдущий канал\n ввести канал вручную (0-99) \n * выключение ";
string error = "некорректный ввод ";
Console.WriteLine("текущий канал "+TV.Chanell);
Console.WriteLine(line);
do
{

point = TV.check(sign=Console.ReadLine()); //вводимый знак передаем в функцию на распознание


switch (point) //определяем действие с распознаным знаком
{
case 0:
myTV.Plus();
break;
case 1:
myTV.Minus();
break;
case 3:
myTV.Change(sign);
break;
case 4:
Console.WriteLine(error);
break;
}
if (point !=2) //без этого даже при выключении выводится строка Line. если раскидать её по case, будет на 1 строку больше
Console.WriteLine("текущий канал "+TV.Chanell + line);
}
while (point != 2);
Console.WriteLine("goodbye");

Console.ReadLine();

}

Николай 26 фев 2014 07:10
изначально был bool, но потом возникла проблема, как заставить программу отличать + - * от цифр и от всех сторонних знаков, точнее она не реагировала на цифры. при try-check возникал какой то конфликт и я просто перешел от bool к string

Максим 25 фев 2014 16:22
Николай
---
Да, код не очень. Почему вы не используете тип bool, этот "false" кругом...Ну и хотелось бы видеть класс TVSet который бы действительно представлял здесь телевизор, а не просто два метода

Николай 24 фев 2014 11:43
с этой программой я прям ощутил всю мощь понятия "пошаговое проектирование"....но в итоге тут класс я использую как функцию...более заковыристую...но все таки просто обычную, не статичную функцию..и пусть меня простят за такой толстый код)

namespace ConsoleApplication1
{
class TVSet
{

public string Plus(string s1)//ф-я в классе на + s1 - текущий канал
{

if (Convert.ToInt32(s1) == 99)
s1 = "0";
else
s1 = Convert.ToString(Convert.ToInt32(s1) + 1);
return s1;
}
public string Minus(string s1)//ф-я в классе на - s1 - текущий канал
{

if (Convert.ToInt32(s1) == 0)
s1 = "99";
else
s1 = Convert.ToString(Convert.ToInt32(s1) - 1);


return s1;
}

}

class Program
{
public static string check1(string s) //функция для проверки: вводимый элемент знак + - * или число 0-99?
{
string status = "false"; //проверка на число
int i = 0;
try
{
i = Convert.ToInt32(s);
if (i>0)
status = "ch";
if (i < 100)
status = "ch";
else
status = "false";

return status; //введенный символ - чило, статус - тру, выходим
}
catch (FormatException)
{
status = "false";


}
if (s == "+") //проверка на знак +
{
status = "+";

return status; //введенный символ - +, статус - тру, выходим
}
else
{
status = "false";


}

if (s == "-") //проверка на минус
{
status = "-";

return status; //введенный символ - минус, статус - тру, выходим
}
else
{
status = "false";


}

if (s == "*") //проверка на * выкл
{
status = "*";
return status; //введенный символ - *, статус - тру, выходим
}
else
{
status = "false";
return status;
}
}

static void Main(string[] args) //начало программы
{
TVSet TV = new TVSet();

string s = "";
string status = "";
string s1 = "0";

do
{

Console.WriteLine("текущий канал " + s1 + " доступные действия \n + канал вперед \n - канал назад \n ввести канал вручную (0-99) \n * выход");//принимаем значение
s = Console.ReadLine();
status = check1(s);//проверяем введенный символ на знак и на число
if (s != "+" && s != "-" && s != "*")
if (Convert.ToInt32(s) < 100 && Convert.ToInt32(s) >= 0)
s1 = s;
if (s == "+")
s1 = TV.Plus(s1);
if (s == "-")
s1 = TV.Minus(s1);
if (status == "false")
Console.WriteLine("ошибка ввода");
}
while (s != "*");
Console.WriteLine("goodbye");
Console.ReadLine();
}
}
}

Максим 21 фев 2014 16:40
Николай
---
Метод и Функция это термини обозначающие одно и то же. Стоит только отличать статические и простые методы (функции)

Николай 21 фев 2014 15:40
это все здорово, но я так и не пойму, в чем отличие метода от функции, то же имя, те же типы вводимых данных...может доходит только при создании БОЛЬШОЙ программы, где в полной мере раскрываются все особенности функции и метода...

Александр 11 фев 2014 23:48
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Televizor
{

int channel=0;
public void ChangeChannel(int ChCg)
{
channel = ChCg;
}
public int ChannelUp()
{
channel++;
if (channel > 50)
channel = 0;
return (channel);
}
public int ChannelDown()
{
channel--;
if (channel < 0)
channel = 50;
return (channel);
}
public int ShowChannel()
{
return (channel);
}
}
class Program
{
static void Main(string[] args)
{
int pult;
int channels;
Televizor tv1 = new Televizor();
do
{
Console.Clear();
Console.WriteLine("Выберите действие:\n1 - ввести канал(от 0 до 50)\n2 - Увеличить канал\n3 - Уеньшить канал\n4 - Узнать канал\n5 - Закончить работу");
pult = Convert.ToInt16(Console.ReadLine());
switch (pult)
{
case 1:
do
{
channels = Convert.ToInt16(Console.ReadLine());
if ((channels > 50) || (channels < 0))
Console.WriteLine("Вы ввели некорректный канал. Введите канал от 0 до 50");
} while ((channels > 50) || (channels < 0));
tv1.ChangeChannel(channels);
Console.ReadKey();
break;
case 2:
channels = tv1.ChannelUp();
Console.WriteLine(channels);
Console.ReadKey();
break;
case 3:
channels = tv1.ChannelDown();
Console.WriteLine(channels);
Console.ReadKey();
break;
case 4:
channels = tv1.ShowChannel();
Console.WriteLine(channels);
Console.ReadKey();
break;
}
} while (pult != 5);
Console.ReadKey();
}
}
}

Максим 11 фев 2014 20:44
Александр
---
Корректнее будет реализовать проверку. Так код будет более гибким, надежным

Александр 11 фев 2014 20:09
Все эти варианты я реализую.
Просто я к тому что, на сколько это корректно, с точки зрения кода.
Сделать проверку мне не сложно, но меня интересует вопрос корректности моей идеи.
Сам я еще не занимался программированием профессионально, поэтому сразу выясняю нюансы, которые могут встретиться.

Максим 10 фев 2014 18:21
Александр
---
А кто сказал что каналов всего 256? Ну и если у вас возникают подобные вопросы, советую в таких случаях реализовывать задумку на практике, и смотреть как получилось

Александр 10 фев 2014 08:28
Добрый день.
А можно ли вместо ручной проверки максимального канала, просто задать полю канал тип byte?
Ведь при увеличение значения поля, если оно уже максимально, и будет зацикливание к минимуму.

Максим 04 фев 2014 15:37
Eugen
---
Сообщать что введена несуществующая команда и выводить доступные команды

Eugen 03 фев 2014 11:44
Привет:) Сделал все в виде телевизионного пульта(возможно немного намудрил):
1 - следующий канал
2 - предыдущий канал
3 - ввести канала
4 - выключить телевизор

Возник только один вопрос при вводе канала, есть возможность вводить в консоль буквы. Не получается ограничить их ввод, как это лучше реализовать?

Заранее благодарен!

namespace Lesson14
{
class TVSet
{
public byte Chanel;
public bool Switched = true;


public void SwitchOff()
{
Console.WriteLine("Goodbye!");
Switched = false;
}


public byte NextChanel(byte LChanel)
{
if (Chanel == 255)
{
LChanel = Chanel;
Chanel = 1;
Console.Clear();
}
else
{
LChanel = Chanel;
Chanel++;
Console.Clear();
}

return LChanel;
}


public byte LastChanel(byte LChanel)
{
if (Chanel == 1)
{
LChanel = Chanel;
Chanel = 255;
Console.Clear();
}
else
{
LChanel = Chanel;
Chanel--;
Console.Clear();
}

return LChanel;
}


public byte EnterChanel(byte LChanel)
{
var a = Console.ReadLine();
if (a == "0")
{
Console.Clear();
return LChanel;
}

if (Convert.ToByte(a) > 0 && Convert.ToByte(a) < 255)
{
LChanel = Chanel;
Chanel = Convert.ToByte(a);
Console.Clear();
return LChanel;
}
else return 0;
}
}

class Program
{
static void Main(string[] args)
{
byte LChanel = 1;
int k = 1;
TVSet MyTV = new TVSet();

MyTV.Chanel = 1;
while (MyTV.Switched)
{
string a = Console.ReadLine();
if (a == "1" || a == "2" || a == "3" || a == "4")
{
if (k == 0)
a = "3";
switch (Convert.ToByte(a))
{
case 1:
LChanel = MyTV.NextChanel(LChanel);
Console.WriteLine("Текущий канал: {1} \nПредыдущий канал: {0}", LChanel, MyTV.Chanel);
k = 1;
break;
case 2:
LChanel = MyTV.LastChanel(LChanel);
Console.WriteLine("Текущий канал: {1} \nПредыдущий канал: {0}", LChanel, MyTV.Chanel);
k = 1;
break;
case 3:
LChanel = MyTV.EnterChanel(LChanel);
Console.WriteLine("Текущий канал: {1} \nПредыдущий канал: {0}", LChanel, MyTV.Chanel);
if (LChanel == 0) k = 0;
break;
case 4:
Console.Clear();
MyTV.SwitchOff();
break;
}
}
else
{
Console.Clear();
Console.WriteLine("Текущий канал: {1} \nПредыдущий канал: {0}", LChanel, MyTV.Chanel);
}
}

Console.ReadKey();
}
}
}

Елена 29 янв 2014 13:19
Мне очень нравятся Ваши уроки, и очень полезное обсуждение после урока, спасибо!

palazhevich 14 янв 2014 22:38
Добрый вечер.
Я немного добавил в задание: включение и выключение телевизора.
Пошаговое переключение каналов закольцевал по кругу.
Получилось вот так:

class TVset
{
public byte currentChannel = 1;
public const byte MaxChannel = 100;
public void SwitchOn()
{
Console.WriteLine("\n \n# # # # # # # # # # # # # # # # # # # #\n");
Console.WriteLine("\n# # # # # # # H e l l o # # # # # # # \n");
Console.WriteLine("\n# # # # # # # # # # # # # # # # # # # #\n \n");
}
public void SwitchOff()
{
Console.WriteLine("\n \n# # # # # # # # # # # # # # # # # # # # #\n");
Console.WriteLine("\n# # # # # # G o o d b y e # # # # # # \n");
Console.WriteLine("\n# # # # # # # # # # # # # # # # # # # # #\n \n");
}
public void NewChannel(string command)
{
switch (command)
{
case "n":
{
currentChannel++;
if (currentChannel == MaxChannel+1)
currentChannel = 1;
}
break;
case "p":
{
currentChannel--;
if (currentChannel == 0)
currentChannel = MaxChannel;
}
break;
default:
{
Console.WriteLine("Введите номер канала");
byte number = Convert.ToByte(Console.ReadLine());
if (number > 0 && number <= MaxChannel)
currentChannel = number;
else
Console.WriteLine("Такого канала нет \nВведите номер канала от 1 до 100");
}
break;
}
Console.WriteLine("Текущий канал: " + currentChannel);
}
}
class Program
{
static void Main(string[] args)
{
TVset TV1 = new TVset();
Console.WriteLine("Включите телевизор: Y");
string On;
do
{
On = Console.ReadLine().ToLower();
if (On == "y")
TV1.SwitchOn();
else
Console.WriteLine("Вы нажали не ту кнопку");
}
while (On!="y");
Console.WriteLine("\nТекущий канал:" + TV1.currentChannel);
Console.WriteLine("\nСлед канал: n\nПред канал: p\nВыбор канала: s\nВыход: q\n");
string keys;
do
{
keys = Console.ReadLine();
if (keys == "n" || keys == "p" || keys == "s")
TV1.NewChannel(keys);
else
Console.WriteLine("Неправильная команда");
}
while (keys != "q");
TV1.SwitchOff();
Console.ReadKey();
}
}

Максим 10 янв 2014 18:05
Алексей
---
Нормально, только лучше было бы, если после одного переключения, можно было дальше продолжать, а не сразу конец программы

Алексей 10 янв 2014 11:37
Не знаю верно ли я понял задание! Прошу проверить пожалуйста!

namespace ConsoleApplication26
{
class TV
{
public int channel;

private int wrong_number(int channel)
{
do
{
Console.WriteLine("Enter channel:");
try
{
channel = Convert.ToInt32(Console.ReadLine());
if (channel >= 0)
return channel;
else
continue;
}
catch (FormatException ex)
{
Console.WriteLine("Wrong channel");
}
} while (true);

}

public int change_channel(int channel, int action)
{
if (action == 1)
channel++;
else if (action == 2)
channel--;
else channel = wrong_number(channel);
return channel;
}
}
class Program
{
static void Main(string[] args)
{
TV tvset = new TV();
tvset.channel = 5;
int action;
do
{
Console.WriteLine("Choose an action: 1 - Next channel, 2 - Previous channel, 3 - Choose channel.");
action = Convert.ToInt32(Console.ReadLine());
} while (action <= 1 && action >= 3);
Console.WriteLine("Your channel now is - " + tvset.change_channel(tvset.channel, action));
Console.ReadKey();
}
}
}

Максим 24 дек 2013 18:22
Ванч
---
Поле currentChannel следовало сделать свойством только на чтение. Сейчас есть возможность изменить поле channelMax, но это значение постоянное, которое лучше сделать константой, такие поля не должны иметь возможность измениться. В остальном всё работает как нужно

Ванч 22 дек 2013 21:39
торт?

namespace ConsoleApplication4
{
class tv
{
internal int currentChannel = 1;
internal byte channelMax = 100;
internal void prevNext(string command)
{
if (command == "p") { currentChannel--; }
else if (command == "n") { currentChannel++; } return;
}
internal void channelSwitch(int number) { currentChannel = number; return; }
}
class Program
{
static void Main(string[] args)
{
tv ch = new tv();
byte selectedChannel;
bool exit = false;
Console.WriteLine("След канал: n\nПред канал: p\nВыбор канала: s\nВыход: q\n");
while (!exit)
{
Console.WriteLine("Текущий канал: " + ch.currentChannel);
string button = Console.ReadLine().ToLower();
switch (button)
{
case "q": exit = true; break;
case "n":
if (ch.currentChannel < ch.channelMax) { ch.prevNext(button); }
else { Console.WriteLine("Дальше некуда"); } break;
case "p":
if (ch.currentChannel > 1) { ch.prevNext(button); }
else { Console.WriteLine("Дальше некуда"); } break;
case "s":
Console.WriteLine("Введите номер канала");
if (byte.TryParse(Console.ReadLine(), out selectedChannel))
{
if (selectedChannel <= ch.channelMax && selectedChannel >= 1) { ch.channelSwitch(selectedChannel); }
else { Console.WriteLine("Такого канала нет"); }
}
else { Console.WriteLine("Введено не число"); } break;
default: { Console.WriteLine("Неверная команда"); } break;
}
}
}
}
}

Максим 11 дек 2013 22:05
Аксютка
---
Пусть

xn — начало отрезка по х;
xk — конец отрезка по х;
xi — середина отрезка по х;
epsy — требуемая точность вычислений по y (заданное приближение |F(xi)| к нулю).

Тогда алгоритм метода бисекции можно записать в псевдокоде следующим образом:

Начало.
Ввод xn, xk, epsy.
Если F(xn) = 0, то Вывод (корень уравнения — xn).
Если F(xk) = 0, то Вывод (корень уравнения — xk).
dx := xk — xn.
Пока |F(xi)| > epsy повторять:
dx := dx / 2;
xi := xn + dx;
если sign(F(xn)) ? sign(F(xi)), то xk := xi;
иначе xn := xi.
конец повторять
Вывод (Найден корень уравнения — xi с точностью по y — epsy).
Конец.

Аксютка 11 дек 2013 21:54
подскажите пожалуйста какой будет общий алгоритм для метода деления отрезка пополам (метод бисекции)

Максим 05 дек 2013 20:43
Антон
---
Ну да, в первом варианте вы пропустили слово else в начале этой строки:
if (usersCommand == "prev")
И тогда не нужно было бы на switch переделывать. И еще можно было бы в цикл это дело все определить, чтобы после одного переключения, дальше можно было переходить по каналам

Антон 04 дек 2013 06:28
Исправил, теперь работает как надо.

class Program
{
static void Main(string[] args)
{
TV kitchenTV = new TV();
kitchenTV.currentChannel = 10;
Console.WriteLine("Your kitchen TV is set on "+kitchenTV.currentChannel+" channel.\nIf you want to switch it to another channel, type:\n\"next\" - if you want to switch to next channel\n\"prev\" - if you want to switch to previous channel\nor enter the number of channel you want to be turned on\n");
string usersCommand = Console.ReadLine();

try
{
switch (usersCommand)
{
case "next":
kitchenTV.SwitchChannel_Next();
break;
case "prev":
kitchenTV.SwitchChannel_Previous();
break;
default:
kitchenTV.SwitchChannel_ByNumber(Convert.ToByte(usersCommand));
break;
}
}
catch (Exception error)
{
Console.WriteLine("Incorrect command.");
}

Console.WriteLine("\nCurrent channel: " + kitchenTV.currentChannel);
Console.ReadKey();
}
}

Антон 03 дек 2013 06:40
Здравствуйте.
Написал программу по заданию, которая должна по команде либо переключать каналы вперед-назад по командам "next" и "prev", либо по введенному номеру на нужный канал.
Ввод по номеру работает, по командам нет. Подскажите, где я ошибаюсь:

class TV
{
internal byte currentChannel;
public void SwitchChannel_Next()
{
if (currentChannel < 255)
{
currentChannel += 1;
}
}
public void SwitchChannel_Previous()
{
if (currentChannel > 0)
{
currentChannel -= 1;
}
}
public void SwitchChannel_ByNumber(byte requiredChannel)
{
currentChannel = requiredChannel;
}

}

class Program
{
static void Main(string[] args)
{
TV kitchenTV = new TV();
kitchenTV.currentChannel = 1;
Console.WriteLine("Your kitchen TV is set on 1 channel.\nIf you want to switch it to another channel, type:\n\"next\" - if you want to switch to next channel\n\"prev\" - if you want to switch to previous channel\nor enter the number of channel you want to be turned on\n");
string usersCommand = Console.ReadLine();//пользователь вводит команду
if (usersCommand == "next")
{
kitchenTV.SwitchChannel_Next();
}
if (usersCommand == "prev")
{
kitchenTV.SwitchChannel_Previous();
}
else
{
if (System.Convert.ToInt32(usersCommand) >= 0 && System.Convert.ToInt32(usersCommand) <= 255)
{
kitchenTV.SwitchChannel_ByNumber(System.Convert.ToByte(usersCommand));
}
else
{
Console.WriteLine("You've entered wrong command");
}
}
Console.WriteLine("\nCurrent channel: " + kitchenTV.currentChannel);
Console.ReadKey();

Максим 14 ноя 2013 17:51
Veribelll
---
Работает нормально, отлично использовали свойства, только вот что за имена - s,p,a... никакой информативности

Veribelll 13 ноя 2013 08:13
namespace ConsoleApplication1
{
class Televizor
{
private int kanal = 0;
private bool rezhim = true;
public int k
{
get
{
try
{
int vod = Convert.ToInt32(Console.ReadLine());
if (vod >= 0)
{
kanal = vod;
rezhim = true;
}
if (vod < 0)
rezhim = false;
return (kanal);
}
catch(FormatException)
{
return (kanal);
}
}
}
public int s
{
get
{
kanal++;
return (kanal);
}
}
public int p
{
get
{
kanal--;
if (kanal < 0)
kanal++;
return (kanal);
}
}
public bool a
{
get
{
return (rezhim);
}
}
}
class Program
{
static void Main(string[] args)
{
Televizor mytv = new Televizor();
string spravka ="Команда След на следующий канал, команда Пред на предыдущий канал, команда\n\rОк режил переключения на определёный канал. Команда Справка для вывода справки";
Console.WriteLine(spravka);
for (int i = 0; i < 1; )
{
string vod = Console.ReadLine();
switch (vod)
{
case "След":
Console.WriteLine("Текущий канал" + " " + mytv.s);
break;
case "Пред":
Console.WriteLine("Текущий канал" + " " + mytv.p);
break;
case "Ок":
Console.WriteLine("Чтобы выйти из режима введите число отрицательное");
do
{
Console.WriteLine("Введите канал");
Console.WriteLine("Текущий канал" + " " + mytv.k);
}
while (mytv.a == true);
Console.WriteLine("Вы вышли из режима");
break;
case "Справка":
Console.WriteLine(spravka);
break;
default:
Console.WriteLine("Введите корректную команду");
break;
}
}
}
}
}

Максим 11 ноя 2013 18:05
biglapa
---
У вас есть только возможность задания начального канала, и вывод предыдущего и следующего. Но это не то. Должно быть переключение

Максим 11 ноя 2013 18:02
RomanS
---
Очень хорошо справились с заданием, только класс то следовало навать Телевизор, а то как это у Канала есть возможность переключить канал...

biglapa 10 ноя 2013 12:40
namespace myprog
{
public class TV
{
public int CurrrentCH; //Текущий канал
public int NextCh() //Определение следующего канала
{
return (CurrrentCH + 1);
}
public int PrevCh() //Определение предидущего канала
{
if (CurrrentCH == 0) //Если текущий канал 0, то вместо предидущего канала покажет текущий
{
return (CurrrentCH);
}
else
{
return (CurrrentCH - 1);
}
}
}

class Program
{
static void Main(string[] args)
{
TV mytv = new TV();
Console.WriteLine("Введите номер канала:");
try //На всякий случай (1)
{
mytv.CurrrentCH = Convert.ToInt32(Console.ReadLine());
if (mytv.CurrrentCH < 0)
{
Console.WriteLine("Ошибка канал не моет быть меньше 0!");
}
else
{
Console.WriteLine("Следующий канал: " + mytv.NextCh());
Console.WriteLine("Предыдущий канал: " + mytv.PrevCh());
}
}
catch (Exception)
{
Console.WriteLine("Произошла непредвиденная ошибка"); //На всякий случай (2)
}
Console.ReadKey();
}
}
}

RomanS 25 окт 2013 13:30
class TVChannel
{
private int current_channel = 0;
public void NextChannel()
{
current_channel++;
Console.WriteLine("Текущий канал " + current_channel);
}
public void PreviousChannel()
{
if (current_channel > 0)
{
current_channel--;
Console.WriteLine("Текущий канал " + current_channel);
}
else
{
Console.WriteLine("Сейчас включен канал номер 0. Невозможно перейти на предыдущий канал.");
}
}
public void SpecifiedChannel(string x)
{
try
{
if (Convert.ToInt32(x) >= 0)
{
current_channel = Convert.ToInt32(x);
Console.WriteLine("Текущий канал " + current_channel);
}
else
{
Console.WriteLine("Номер канала должен быть больше 0");
}
}
catch (Exception error)
{
Console.WriteLine(error.Message);
Console.ReadKey();
}
}
}
class Program
{
static void Main()
{
TVChannel myChannel = new TVChannel();
Console.WriteLine("Текущий канал 0.");
bool status = true;
while(status)
{
Console.WriteLine("Переключить канал? (да/нет)");
try
{
string answer_switch = Console.ReadLine();
switch(answer_switch)
{
case "да":
Console.WriteLine("Какой канал хотите? (след/пред или введите номер)");
string answer_channel = Console.ReadLine();
switch (answer_channel)
{
case "след":
myChannel.NextChannel();
break;

case "пред":
myChannel.PreviousChannel();
break;
default:
myChannel.SpecifiedChannel(answer_channel);
break;
}
break;
case "нет":
status = false;
break;
default:
Console.WriteLine("Необходимо ввести корректный ответ.");
break;
}
}
catch(Exception error)
{
Console.WriteLine(error.Message);
Console.ReadKey();
}
}
}
}

Максим 24 окт 2013 14:53
NikolayBelikov
---
1. Как и у Lili, у вас используется открытое поле. Используйте свойства
2. Лучше было бы, если бы после одного переключения можно было дальше переключать различными вариантами, а не давать всё по новой с начала, с указанием начального канал

Максим 24 окт 2013 14:45
Lili
---
Извиняюсь, что так поздно отвечаю.

1. Говорил не раз, что не стоит использовать открытые поля: public uint current; Нужно было воспользоваться свойством.
2. Метод ChanNow() совсем непонятен. Похоже, что он должен установить начальное значение. Но мы можем вызвать его когда угодно. А название - канал сейчас...По такому названию стоит ожидать, он он возвращает текущий канал. Одним словом, стоило создать конструктор в котором бы задавался начальный канал, и тогда не нужно лишнего метода.
3. Метод ChanPrevNext лучше было бы разделить на два - вперед/назад.
4. Метод Pult зачем то возвращает значение, которое получил в качестве аргумента. В этом, согласитесь, смысла нет.
5. И в целом, предполагалось, что обе возможности переключать каналы будут доступны параллельно.

NikolayBelikov 16 окт 2013 11:40
namespace ConsoleApplication1
{
class TV
{
public uint ChannelNow;
public void ChannelUp()
{
ChannelNow ++;
Console.WriteLine(ChannelNow);
}
public void ChannelDown()
{
if (ChannelNow == 0)
{
Console.WriteLine("Номер канала не может быть отрицательным");
}
else
{
ChannelNow--;
Console.WriteLine(ChannelNow);
}
}

public void NChannel()
{
Console.WriteLine("Введите номер канала:");
ChannelNow = Convert.ToUInt32(Console.ReadLine());
Console.WriteLine("Номер текущего канала: " + ChannelNow);
}
}

class Program
{
static void Main(string[] args)
{
TV myTV = new TV();

do
{
Console.WriteLine("Введите номер текущего канала");
try
{
myTV.ChannelNow = Convert.ToUInt32(Console.ReadLine());
}
catch (OverflowException)
{
Console.WriteLine("Вы ввели неверный номер канала");
goto s;
}
catch (FormatException)
{
Console.WriteLine("Вы ввели не число");
goto s;
}
Console.WriteLine("Что вы хотите сделать?");
Console.WriteLine("Включить следующий канал: 1");
Console.WriteLine("Включить предыдущий канал: 2");
Console.WriteLine("Ввести номер канала: 3");
try
{
switch (Convert.ToUInt32(Console.ReadLine()))
{
case 1:
myTV.ChannelUp();
break;
case 2:
myTV.ChannelDown();
break;
case 3:
myTV.NChannel();
break;
}
}
catch (OverflowException)
{
Console.WriteLine("Вы ввели отрицательное число");
}
catch (FormatException)
{
Console.WriteLine("Вы ввели не число");
}
s:
Console.WriteLine("Еще раз? y / n");
}
while (Console.ReadLine() != "n");
}
}
}

Lili 08 окт 2013 14:29
и последняя часть



do
{
Console.WriteLine("Выберите желаемый канал: ");


try
{
b = Convert.ToUInt32(Console.ReadLine());
tv1.Pult(b);
result = "сейчас работает " + tv1.current + " канал";
}

catch (Exception)
{
result = "Ошибка!";
}


Console.WriteLine(result);
}
while (tv1.current > 0 && tv1.current < 5);

Console.ReadLine();
}
}
}

Lili 08 окт 2013 14:28
мое решение задачи
конечно, нагородила, но хотелось попробовать свои знания, полученные из этого проекта )) интересно мнение, если опустить все эти for, while, try - в целом что так и что нет?
namespace yrok14_televizor
{
class TV
{
public uint current;
public void ChanNow()
{
current = 3;

}
public void ChanPrevNext(char a)
{
if (a == '+')
current++;
else if (a == '-')
current--;
}

public uint Pult(uint b)
{
current = b;
return current;
}

}

class Program
{
static void Main(string[] args)
{
char a;
uint b;
string result = "";
TV tv1 = new TV();

tv1.ChanNow();

Console.WriteLine("сейчас работает " + tv1.current + " канал");
Console.ReadLine();
Console.Clear();


for (int i = 0; i <= 5; i++ )
{
Console.WriteLine("нажмите '+' для перехода на следующий канал или '-' для перехода на предыдущий");
a = Convert.ToChar(Console.ReadLine());
tv1.ChanPrevNext(a);
if (tv1.current < 0 || tv1.current > 5)
break;
Console.WriteLine("сейчас работает " + tv1.current + " канал");
}

Console.ReadLine();
Console.Clear();

Knjz 10 сен 2013 00:29
Mike на твоем скрине четко видно что ты изменил строки:
channel = channel ++; на channel = channel + 1; (эквивалентно channel++;)
channel = channel --; на channel = channel - 1; (эквивалентно channel--;)

Поэтому у тебя работает, а у других нет...

Маленькая затравочка для размышления...

int a = 1, b = 2;

a = a++ - b;
// если вы считаете что ответ будет 0, то вы ошиблись)))

//a = ++a - b; //раскомментировать для проверки
// вот так будет ноль

//разница состоит в префиксной (++а) и постфиксной (а++) операциях
//подробней тут http://msdn.microsoft.com/ru-ru/library/e1e3921c.aspx

Console.WriteLine(a);

Console.ReadKey();

Максим 09 сен 2013 19:06
Mike
---
Я сейчас снова попробовал ваш код, и результат тот же. Лично я не знаю, в чем здесь проблема

Mike 08 сен 2013 21:12
Microsoft Visual C#. Вот скрин - http://f4.s.qip.ru/X3XjkRSG.png Насчет лишнего присваивания я все понял, но мне интереснее, почему у вас не работает программа.

Максим 08 сен 2013 18:28
Mike
---
Не знаю почему, но у меня ваш код не работал, канал всегда был 0. В какой среде вы работаете?

Тем не менее, в этой строке лишнее присваивание:
channel = channel ++;

Разложив в два действия, это эквивалентно:

channel = channel;
channel = channel + 1;

Mike 08 сен 2013 14:01
А почему? У меня работает отлично, каналы и в плюс, и в минус переключает, меньше нуля не становятся, больше определенного тоже. Ну и ошибка формата выскакивает.

Максим 07 сен 2013 16:30
Mike
---
не работает, канал всегда равен нулю.

channel = channel ++; // здесь лишнее присваивание, достаточно channel ++;

channel ++ то же, что и channel = channel + 1;

Mike 05 сен 2013 18:31
namespace ConsoleApplication1
{
class TV
{
public static int Switch(int channel, int switcher)
{
if (switcher == 1)
{
channel = channel ++;
if (channel > 20)
{
Console.WriteLine("There's no channel with " + channel + " number.");
channel--;
}
}
else if (switcher == 2)
{
channel = channel --;
if (channel < 0)
{
Console.WriteLine("There's no channel with " + channel + " number.");
channel++;
}
}
else
{ Console.WriteLine("Use 1 and 2 for switching."); }
return channel;
}
}
class Program
{
static void Main(string[] args)
{
int switcher;
int channel=0;
try
{
do
{
Console.WriteLine("Choose channel: 1 - next, 2 - previous");
switcher = Convert.ToInt32(Console.ReadLine());
channel = TV.Switch(channel, switcher);
Console.WriteLine(channel);
}
while(true);
}
catch (Exception)
{
Console.WriteLine("Incorrect format.");
}
Console.ReadKey();
}
}
}

Максим 16 авг 2013 17:09
John
---
1. Вызов метода Check из Main нужно было убрать, и вызывать его только в методах вперед/назад ПОСЛЕ изменение канала:
internal void PrevChannel()
{
TVSet.Channel--;
Check();
}

2. Почему вы здесь использовали все поля и методы статические? А если необходимо создать два телевизора?

3. writer.BaseStream.Position = 0 - В этом смысла нет, при закрытии потока

John 16 авг 2013 13:45
Обработку исключений для ввода я делать не стал - лениво -_-

John 16 авг 2013 13:17
И часть 3. -_-
else if (list == "назад") // ... или назад.
{
TVSet.PrevChannel(); // Назад.
TVSet.Check(); // Проверка
TVSet.SaveChannel(); // Обновляем значение.
TVSet.ChannelNow(); // Выводим на экран.
}
else
{
Console.WriteLine("Неверный формат."); // Исключение.
}
}
while (true); // Бесконечный цикл.
}
}

John 16 авг 2013 13:16
И часть два.
class Program
{
static void Main(string[] args)
{
try // Пробуем открыть файл и считать с него номер канала.
{
FileStream Channel = new FileStream("Channel.txt", FileMode.Open);
StreamReader readChannel = new StreamReader(Channel);
TVSet.Channel = Convert.ToInt32(readChannel.ReadLine());
Channel.Close(); // Если не закрыть поток, то будет ошибка.
}
catch (FileNotFoundException) // Если файла не существует, то мы задаем номер канал вручную.
{
Console.WriteLine("Введите номер канала. (от 1 до 100)");
TVSet.Channel = Convert.ToInt32(Console.ReadLine()); // Устанавливаем необходимый канал.
}
TVSet.SaveChannel(); // Создаем файл и записываем в него номер.
TVSet.Check(); // Проверяем его.
Console.Clear(); //Чистим консоль.
TVSet.ChannelNow(); // Выводим его на экран как текущий.
string list; // Хрень для условий.
do
{
Console.WriteLine("Переключить канал вперед или назад? (вперед//назад)");
list = Convert.ToString(Console.ReadLine()); // Выбираем, куда листать...
if (list == "вперед") // ...вперед...
{
TVSet.NextChannel(); // Вперед.
TVSet.Check(); // Проверка.
TVSet.SaveChannel(); // Обновляем значение.
TVSet.ChannelNow(); // Выводим на экран.
}


John 16 авг 2013 13:15
И вновь я.
Я тут кой-чего добавил ради интереса, но в целом - так.
Часть 1.
class TVSet
{
static internal int Channel = 1; // Создаем поле.
static internal void Check() // Я задал границы каналов от 1 до 100. Будет больше - обрежет. Меньше - установит "1".
{
if (TVSet.Channel <= 0)
{
TVSet.Channel = 1;
}
else if (TVSet.Channel >= 100)
{
TVSet.Channel = 100;
}
}
static internal void NextChannel() // Лист вперед.
{
Check();
TVSet.Channel++;
}
static internal void PrevChannel() // Лист назад.
{
Check();
TVSet.Channel--;
}
static internal void ChannelNow() // Вывести текущий канал.
{
Console.WriteLine("Текущий канал - " + TVSet.Channel);
}
static internal void SaveChannel() // Записываем номер канала в отдельный файл.
{
StreamWriter writer = new StreamWriter("Channel.txt"); // Открываем запись файла.
writer.WriteLine(TVSet.Channel); // Записываем туда канал.
writer.BaseStream.Position = 0; // Устанавливаем позицию на "нулевую" позицию.
writer.Close(); // И закрываем поток.
}
}


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

Имя (обязат.)
E-mail (обязат., не публикуется)


Для вставки ваших программ пользуйтесь кнопкой "исходный код"
Вёрстка сайта с нуля

Уникальный Видеокурс!

"Научись верстать сайты и заработай на этом!"

Получить видеокурс

Подпишись на курс по программированию, и узнавай первым о новых уроках!

RSS подписка Страничка Вконтакте Мы в Twitter
Бесплатный курс по основам PHP
Ошибка в тексте? Выделите ее мышкой и нажмите Ctrl+Enter
Поблагодарить автора: Номер карты (ПриватБанк)
5168 7572 4170 8660
WebMoney
R372544961915 U685637142028 Z999792764387
Наверх
Система Orphus