Доброго времени суток всем! Я начинающий программист(самоучка), изучаю C#, и для закрепления материала, нужна практика. то есть какие нибудь задачки по C#. И вот исходя из этого я решил создать эту тему.
Было бы не плохо если опытные C# программисты давали тут, простые и средней сложности задачки(в первое время конечно), а те кому нужен опыт решали бы эти задачи и ответы тоже оставляли бы здесь. Желательно чтоб решения выкладывали все, они были бы неплохими учебными материалами для тех кто бы не смог решить самостоятельно задачку, ну конечно же желательно чтобы код был прокомментирован.
Все кому нужны задачки с различными вариантами решений, давайте попросим помощи у опытных программистов. Помогите нам пожалуйста! Заранее спасибо!
Думаю этот пост будет полезен многим
P. S. Просьба не называть меня плохими словами, я же новичок, и прошу от вас понимания и снисхождения.
Добавлено (10 февраля 2015, 06:31) --------------------------------------------- Я немного неправильно сформулировал, задачки могут кидать не только опытные программисты но и все участники, и сразу же с ответом. А опытные программисты иногда заглядывали сюда и давали советы по решению.
например, в Unity используется c#. развивать навыки программирование на нем - это развивать навыки геймдева. поддерживаю тему - новичкам геймдева будет полезно по максимуму, опытным (у кого нету звездной болезни и 28 часов в сутки занятости..) - возможность подсобить сообществу в лице новичков..
конечно в нэте есть все и можно вообще во всех областях обойтись без форумов, читай себе книжки, смотри видеоуроки и будет тебе все, что нужно. так?! по моему мнению - форум для того и существует, чтобы была своя форма (на уровне живого общения) усваивать материал. ___________________________________________________________
имхо, задачи нужно при выкладывании обозначать: по специфике (акценты или тема или инструментарий реализации) и уровню сложности (от 1 до 20, например). тогда "ученик" сможет выбрать по своему уровню еще на стадии прочтения. вернуться к задаче, когда повысит уровень. ну и можно добавлять третий параметр - свободный, ну там -- рамки решения ("только функционалом класса string", "для Unity3D") или -- подсказка ("делегаты, эвенты, подписка"), предлагаемая форма решения ("консольное приложение", "веб приложение" и тп) и тд. решения предлагаю выкладывать под спойлеры!! чтобы не засоряли внешний вид и не были сразу открыты при чтении задачи начинающим (от соблазна сразу подсмотреть в решение ).. Например: Специфика: классы, разработка иерархии. Уровень: 7 (из 20); Задача: ...... ___________________________________________________________
вот первая: Специфика: диалоговый режим консоли. Уровень: 3-5, оптимальное время реализации - 1-2 часа. Дополнительно: отработка навыков разработки логических цепочек и оптимизации кода. Задача #KR1: написать консольное приложение получающее ввод пользователя, выявляющее некоторые ключевые элементы (слова, знаки, цифры) и выводящие шуточную "реакцию" программы в виде текста. организовать процесс в диалоговом режиме (строка запрос, строка ответ, "столбиком").
"реакции" лучше организовать в массив(ы) строк. Используется рандом. Используется поиск в строке.
Мыслю - значит программирую... Конструктивная критика - умных ведет к совершенству... Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
Сообщение отредактировал KamiRonin - Вторник, 10 Февраля 2015, 10:46
KamiRonin, спасибо большое за поддержку и понимание, и огромное спасибо за идею!!! Я надеюсь у этой темы будет будущее и польза!!! Спасибо за задачку, постараюсь решить, хоть и приступая к практике почему то я теряюсь, а читая теорию вроде все понятно
Добавлено (11 февраля 2015, 10:31) --------------------------------------------- Здравствуйте Vinchensoo, может подкинете пару ссылок с хорошими студенческими форумами, а то я не смог найти толковых. Заранее спасибо!
First, да я бы с удовольствием, но я то пока простые консольные задачки с трудом решаю, вот и создал эту тему, чтобы опыта набраться и может помощи в понимании всего что связанно с программированием, и понимать код других участников которые решат задачки раньше, а если сам не смогу решить то на основе этих решений уже самому дойти до решения
Добавлено (11 февраля 2015, 12:10) --------------------------------------------- Прошу прощения за предыдущее сообщение, получилось "масло масляное".
Добавлено (11 февраля 2015, 12:11) --------------------------------------------- First, если поможете с чего начать и в которую сторону идти буду премного вам благодарен
backatom1, тогда попробуй сделать консольный калькулятор на 4 действия (+ - * /), но так, что бы при входе, у человека был выбор какое действие он хочет выполнить, а потом ввести два числа через энтер, после выдается результат и в новой строке опять - вопрос, какое действие вы хотите выполнить математическое.
Щас сижу над задачкой KamiRonin, и никак не пойму как делается поиск в строке, может кто подскажет
Добавлено (12 февраля 2015, 09:42) --------------------------------------------- KamiRonin, я вот не смог толком решить задачку, первую вашу, не получается никак, и что то никто другой не выложил своего решения.
Вот примерно как я думаю, но этот код работает неправильно, почему то из двух пар условных операторов if..else срабатывают только if из первой пары и else из второй пары, почему так не понимаю, пытался каждую пару этих операторов поместить в отдельные циклы do...while, то есть два отдельных цикла, но результат тоже был неверным.
namespace ConsoleApplication2 { class Program { static void Main(string[] args) {
Console.WriteLine("Привет! Давай пообщаемся");
do {
Random random = new Random();
string [] otvet = {"Мммм пнятно, давай дальше спрашивай","Ясненько, спроси хоть чем я занимаюсь","давай че нить другое спроси ааа... спроси лучше как мои дела","Спроси че нить другое" }; string [] otvet2 = {"А как меня зовут не надо спрашивать.....ммм??? ......какое невежество" }; string [] whatIsYourName1 = {"Как звать тебя добрый молодец","Ваше имя","Ну че как мне тебя называть" }; string [] whatIsYourName2 = {"не красавец, не урод, не богат, не беден, не румян не бледен, не в парше не в парче а так вообче Федя", "Царь, очень приятно царь","Моё имя Бонд.......Джеймс Бонд"};
string userChoise = Console.ReadLine();
if (userChoise.Contains("привет")) { string a = whatIsYourName1[random.Next(whatIsYourName1.Length)]; Console.WriteLine(a); } else { string b = otvet[random.Next(otvet.Length)]; Console.WriteLine(b); }
ничего страшного! у тебя же почти все получилось!!.. давай я дам не полный код, а подсказки и с ними попробуешь еще раз?!
1. полезный метод string.ToLower() - для уменьшения грамоздскости кода при поиске! 2. массив можно и один, а приветствия выдавать фикс строками 3. пусть будут служебные команды от пользователя - "exit", "выйти", "пока" 4. строку можно не только Contains, но и StartWith и даже "choise == "exit" " (для оптимизации см пункт 1 тут ;))
а так, я считаю - что в приведенном коде худо бедно все решено у тебя!! полноценный ИИ чатер задачи строить не было, а диалог присутствует.. немного не оптимизировано - но решено.. молоток.
совет: если задача сложная для тебя целиком - то разбей ее на части! имхо, чем учащийся будет вариться "сам в себе" с необъятным для него куском, лучше если он будет задавать конкретные вопросы по сегментам. правильный вопрос = старание и попытка развиваться; наработка негативного опыта "в себе" без вопросов по существу = плохая культура самообразования!! ведет к потере интереса к теме.. Мыслю - значит программирую... Конструктивная критика - умных ведет к совершенству... Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
Никак не могу врубиться почему при при условии true выполняется первый оператор if и только он, а второй почему то игнорируется а при условии false выполняется последний оператор else а не второй как задумано. Вообще не пойму
Сообщение отредактировал backatom1 - Четверг, 12 Февраля 2015, 14:20
не знаю в чем ты пишешь - но у меня твой код заходит в ту ветку (else) попробуй использовать отладку по шагам и проверь. Мыслю - значит программирую... Конструктивная критика - умных ведет к совершенству... Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
KamiRonin, спасибо огромное за такую поддержку!!! Очень и очень благодарен!!!
Добавлено (13 февраля 2015, 00:59) --------------------------------------------- KamiRonin, Тоже не пойму почему так, пишу на Visual Studio 2010
Добавлено (13 февраля 2015, 04:33) ---------------------------------------------
KamiRonin, ну вот сделал все с помощью ваших подсказок, но по моему все равно все криво
Вот код:
Код
using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace ConsoleApplication2 { class Program { static void Main(string[] args) {
Console.WriteLine("Привет! Давай пообщаемся");
Random random = new Random();
string [] otvet = {"Мммм пнятно, давай дальше спрашивай","Ясненько, спроси хоть чем я занимаюсь","давай че нить другое спроси ааа... спроси лучше как мои дела","Спроси че нить другое" }; string [] otvet2 = {"А как меня зовут не надо спрашивать.....ммм??? ......какое невежество" }; string [] whatIsYourName1 = {"Как звать тебя добрый молодец","Ваше имя","Ну че как мне тебя называть" }; string [] whatIsYourName2 = {"не красавец, не урод, не богат, не беден, не румян не бледен, не в парше не в парче а так вообче Федя", "Царь, очень приятно царь","Моё имя Бонд.......Джеймс Бонд"}; string [] howDoYouDo = {"Все пучком","Да пока не родила, когда рожу скажу ","Живу как сыр в масле катаюсь" }; string [] thanBusy = {"Воздух пинаю","Да борюсь не на равных со сном","Пытаюсь телевизор загипнотизировать" };
do { string userChoise = Console.ReadLine(); userChoise = userChoise.ToLower().Trim();
Console.WriteLine("Если желаешь продолжить напиши что нибудь, например - привет))). Если надоело, введи — <выход>");
if (userChoise=="выход") break; if (userChoise=="") break;
if (userChoise.StartsWith("привет")) { string a = whatIsYourName1[random.Next(whatIsYourName1.Length)]; Console.WriteLine(a); } else { string b = otvet[random.Next(otvet.Length)]; Console.WriteLine(b); }
if (userChoise.StartsWith("тебя как зовут?")) { string c = whatIsYourName2[random.Next(whatIsYourName2.Length)]; Console.WriteLine(c); } else { string d = otvet2[random.Next(otvet2.Length)]; Console.WriteLine(d); }
if (userChoise.StartsWith("как дела?")) { string e = howDoYouDo[random.Next(howDoYouDo.Length)]; Console.WriteLine(e); } else { string f = otvet[3]; Console.WriteLine(f); } if (userChoise.StartsWith("что делаешь чем занимаеешься")) { string ab = thanBusy[random.Next(thanBusy.Length)]; Console.WriteLine(ab); } else { string bc = otvet[3]; Console.WriteLine(bc); }
} while (true);
} } }
ЦитатаKamiRonin ()
немного не оптимизировано - но решено.. молоток.
P.S. Еще раз большое спасибо за поддержку и подсказки
ну вот.. есть еще над чем работать конечно. но уже все, что нужно. советов в связи с этим немного: улучшай функционал, используй отладку, отрабатывай навыки.
решение сделанное за 25 мин, с учетом нужного уровня подготовки, на оптимальность не претендует..
Код
namespace ConsoleApplication1 { class Program { static string prompt = "::> "; static string[] stringReact = { "Нуу начинаается!", "Введи 8!", "Мдааа, усталость сказывается...", "Да нормально, а у тебя?", "Да сколько можно то?..", "Конечно! Но может в другой раз?!" }; static int predAnswer = -1; // для того, чтобы разнообразить ответы static Random rnd; // для выбора ответов
static void PrintAnswer(string ans = null) { Console.ForegroundColor = ConsoleColor.Yellow; if (ans == null) { int nom = rnd.Next(stringReact.Length); // проверяем не прежний ли ответ выпал, меняем если так. while(nom == predAnswer) nom = rnd.Next(stringReact.Length); predAnswer = nom; // запоминаем прежний ответ. Console.WriteLine(stringReact[nom]); }else Console.WriteLine(ans); Console.ForegroundColor = ConsoleColor.White; }
static void Main(string[] args) { Console.WriteLine("модуль #KR1 активирован"); Console.ForegroundColor = ConsoleColor.DarkGray; Console.WriteLine("для выхода введите: exit или выход"); Console.ForegroundColor = ConsoleColor.White; rnd = new Random(stringReact.Length); Console.Write("подготовка консоли"); for (int i = 0; i < 15; i++) { System.Threading.Thread.Sleep(200); Console.Write("."); } Console.WriteLine("\n"); bool wasHello = false; // основной цикл диалога string request = ""; while (request != "exit") { Console.Write(prompt); request = Console.ReadLine(); request = request.ToLower().Trim();
KamiRonin, классное решение, вот у тебя все круто в коде по моему мнению
Подкинь ка еще задачку, если конечно есть свободное время, если нет то сам что нибудь поищу, придумаю
Спасибо большое за то что ты со мной так долго мучился и вытягивал меня
Кстати я тут еще калькулятор консольный написал (вспомнил про идею которую мне подкинул First), на четыре действия, вот он вроде ничего так получился )))
Вот код если кому интересно:
Код
[b] namespace ConsoleApplication3 { class Program { static void Main(string[] args) { Console.WriteLine(" Это консольный калькулятор в диалоговом режиме.\n \n Разрешается выполнение четырех операторов:\n"); Console.WriteLine(" Сложение: + \n Вычитание: - \n Умножение: * \n Деление: /\n\n А для десятичных дробей с плавающей точкой используется\n оператор<,> с цифровой клавиатуры "); Console.WriteLine("\n Для продолжения нажмите <Enter>\n\n Для выхода наберите <выход>\n\n Для выполнения следующего выражения вновь нажмите на <Enter>\n");
do { string uCh = Console.ReadLine(); if (uCh == "выход") break;
double a = 0; double b = 0; char c = '0'; try { Console.WriteLine(" Введите первое число:"); a = double.Parse(Console.ReadLine());
Console.WriteLine(" Введите оператор:"); c = char.Parse(Console.ReadLine());
Console.WriteLine(" Введите второе число:"); b = double.Parse(Console.ReadLine());
} catch { Console.WriteLine("Ошибка. Вы что то ввели не верно. \n\n Разрешается только вводить целые и дробные числа, \n\n и четыре оператора <+> <-> <*> </>," + "\n а для десятичных дробей с плавающей точкой используется\n оператор<,> с цифровой клавиатуры"); }
switch (c) { case '+': Console.WriteLine(" Сумма чисел равна: " + (a + b)); break; case '-': Console.WriteLine(" Разность чисел равна: " + (a - b)); break; case '*': Console.WriteLine(" Произведение чисел равно: " + (a * b)); break; case '/': Console.WriteLine(" Отношение чисел равно: " + (a / b)); break; }
} while (true);
} } } [/b]
Кто тоже решил написать выкладывайте свои варианты решения