Практика CШАРП, задания, примеры.

Статус: Offline
Реєстрація: 06.08.2014
Повідом.: 57
  • 🔴 08:20 Повітряна тривога в Харків.обл.
  • #1
Практика CШАРП, задания, примеры.

Здравствуйте, учу C# по книге Andrew Troelsen. "Pro C# 5.0 and the .NЕT 4.5 Framework". Опытные программисты нужна ваша помощь в составление заданий для закрепления. Самостоятельно не могу поставить задачу которая будет требовать тех знаний и навыков которые прохожу по мере чтение книги. Укажите задачи с конкретными условиями и целями и если возможно с темами по главам книги. И если есть люди которые могут себе позволить по времени курировать меня, отпишитесь и проверяйте мои работы.

На данный момент необходимы задачи для консольных приложений и форматирование строк.

Спасибо.
 
  • 🔴 08:20 Повітряна тривога в Харків.обл.
  • #2
задачи для консольных приложений
это очень широко сказано, консольной программой можно сделать все, ну разве что ты имел ввиду класс Console, можешь смело забить на это, так писать на экран и читать с клавиатуры, вот и все

форматирование строк
ну будем надеяться что ты уже прошел кучу всего и знаешь про ветвление, циклы, массивы и т.д. возьми любой текст, разбей на предложения, в четных поменяй слова первое с последним, второе с предпоследним и т.д., в нечетных к словам где меньше 4 букв добавь спереди любой печатаемый символ, чтобы слово стало из 20 букв, в словах где 4 и больше букв добавь справа любой печатаемый символ, чтобы слово стало из 10 букв, если слово превышает 10, то прибавляй символ пока не станет 100 букв, после того как ты это сделал посчитай количество добавленных слева и справа, если они являются простыми числами, то разбей весь текст на куски, в которые есть только одна буква а, удали из первого куска четные символы, а с последнего нечетные, после чего выведи результат на консоль, чтобы в первой итерации было одно слово, во второй 2, в 3й три и т.д., последнюю итерацию выведи с нумерацией слов в ней

и хватит, а то я могу походу так вечно
 
  • 🔴 08:20 Повітряна тривога в Харків.обл.
  • #3
Спасибо, буду над этим работать, как закончу появятся вопросы и необходимость в новых заданиях
 
  • 🔴 08:20 Повітряна тривога в Харків.обл.
  • #4
и хватит, а то я могу походу так вечно
Пытался выполнить это задание и не выходит у меня, кину код, подскажите что не так.
string filepath = "D:\\Documents\\Programming\\MyProjects\\txt.txt";
StreamReader sr = File.OpenText(filepath);
string fulltext = sr.ReadToEnd();
Char[] charsfulltext = fulltext.ToCharArray();

Dictionary<int, string> dt = new Dictionary<int, string>();

int z = 1;

foreach(Char c in charsfulltext)
{
string adg = c.ToString();

if ((adg == ".") || (adg == "?") || (adg == "!"))
{
dt[z] = dt[z] + adg;
z++;
}
else
{
dt[z]= dt[z] + adg;
}

dt[z]= dt[z] + adg; пишет "KeyNotFoundException не обработано"
Я вообще правильно подошел к вопросу посимвольной обработки? Пытался не использывать string вместо него StringBuilder, прочел в книги из-за не грамматного использыванния стринг можно память забить, так как каждый раз делают копию стринг переменной.
 
  • 🔴 08:20 Повітряна тривога в Харків.обл.
  • #5
здесь ты пытаешься прочитать значение в несуществующем ключе. dictionary автоматически создает пару только при присваивании. тобиш есть два варианта:
1. перед dt[z] = dt[z] + adg;
написать dt[z] = String.Empty;
2. либо сделать то что подсказывает среда выполнения. обернуть зловещую строку в try...catch

P.S.

Ну и конечно есть 3й вариант - написать все не так криво, но это дело практики.
 
  • 🔴 08:20 Повітряна тривога в Харків.обл.
  • #6
Dictionary<int, string> dt = new Dictionary<int, string>();//0 шт
int z = 1;
dt[z] = dt[z]/*обращение к несуществубющей записи*/ + adg;

Я вообще правильно подошел к вопросу посимвольной обработки?
ну в том что ты написал все равно все через строки идет
 
  • 🔴 08:20 Повітряна тривога в Харків.обл.
  • #7
Спасибо за помощь. Следующий вопрос у меня есть код которые выполняет чтение по символам и распределяет в массив предложения текста, индексы массива соответствую четное или нечетное предложение:
string filepath = "D:\\Documents\\Programming\\MyProjects\\txt.txt";
StreamReader sr = File.OpenText(filepath);
string fulltext = sr.ReadToEnd();
Char[] charsfulltext = fulltext.ToCharArray();

Dictionary<int, string> dt = new Dictionary<int, string>();

int z = 1;

dt[1] = String.Empty;
foreach(Char c in charsfulltext)
{
string adg = c.ToString();

if ((adg == ".") || (adg == "?") || (adg == "!"))
{
dt[z] += adg;
z++;
dt.Add(z, "");
}
else
{

dt[z]+= adg;
}

}

sr.Close();
Console.ReadKey();
Что стоит исправить, что здесь написано криво. И как я понимаю таким же образом мне надо дальше форматировать само предложение?
 
  • 🔴 08:20 Повітряна тривога в Харків.обл.
  • #8
странные названия переменных, магическая строчка "dt[1] = String.Empty;", все в одном методе, криво сделана работа со стримридером, лишние преобразования типов

и почему Dictionary?
 
  • 🔴 08:20 Повітряна тривога в Харків.обл.
  • #9
нафига делать на основе готового решения (которое я описал выше) какие-то свои догадки?

да, первый элемент ты проинициализировал. А остальные в цикле? Выше я имел ввиду не над foreach, а первое что нужно сделать в этом цикле. Но это не стабильный вариант. Правильно вообще будет обработать этот случай
if(!dt.ContainsKey(z))
{
dt[z] = String.Empty;
}
 
  • 🔴 08:20 Повітряна тривога в Харків.обл.
  • #10
Хотел что бы номер ключа соответствовал номеру предложения, а в Dictionary я могу использовать тип string.
криво сделана работа со стримридером
Не знаю как еще прочесть файл, что исправить?
лишние преобразования типов
Я пробовал непосредственно char charsfulltext использывать в условие if но пишет
" Оператор "=="" не мождет применятся к операндам типа"char" и "string". ". Надо через ContainsKey?



Я использовал foreach так как хочу что перебрало элементы по символу и присваивало по номеру ключа все предложение, номер ключа поможет определить четное или не четное предложение, затем при обнаружение конца предложение создает новый ключ и инициализирует его, а первый ключ инициализировал так криво, не знаю как еще. А если в цикле foreach инициализировать через dt[z] = String.Empty; то в массиве остается только один элемент, последний.
 
  • 🔴 08:20 Повітряна тривога в Харків.обл.
  • #11
Не знаю как еще прочесть файл, что исправить?
мсдн в помощь - через юсинг
" Оператор "=="" не мождет применятся к операндам типа"char" и "string". ". Надо через ContainsKey?
и почему ты решил конвертировать то что есть в стринги, а не сравнивать с чаром?

какая-то жесть наворачивается давай каждое самостоятельное действие в метод для начала, типа там получить строку из файла, разбить на предложения, обработать предложения, обработка четных предложений, обработка нечетных предложений и т.д.
 
  • 🔴 08:20 Повітряна тривога в Харків.обл.
  • #12
У меня не получилось сравнить с чаром, это надо делать не так как я пытался? Через методы дикшинари, кстати дикшанари подходит для этого?
 
  • 🔴 08:20 Повітряна тривога в Харків.обл.
  • #13
  • 🔴 08:20 Повітряна тривога в Харків.обл.
  • #15
и проблеме с исключением конец
Я извиняюсь, но не понимаю как это сделать что бы оно так же перебирало,без эксепшена,не понимаю куда вставлять этот код:
if(!dt.ContainsKey(z))
{
dt[z] = String.Empty;
}
Форич все же нужен да? Что мне с этим ContainsKey делать?
 
  • 🔴 08:20 Повітряна тривога в Харків.обл.
  • #16
if(!dt.ContainsKey(z))
{
dt[z] = String.Empty;
}

if ((adg == ".") || (adg == "?") || (adg == "!"))
{
dt[z] += adg;
z++;
}
else
{

dt[z]+= adg;
}
 
  • 🔴 08:20 Повітряна тривога в Харків.обл.
  • #17
Сколько будет?
int a,b,c = 1;
int result = a+++b---c++;
 
  • 🔴 08:20 Повітряна тривога в Харків.обл.
  • #18
  • 🔴 08:20 Повітряна тривога в Харків.обл.
  • #20
а что будет с твоим кодом и этим, когда z станет равно 2?
if(!dt.ContainsKey(z)) это если там нет такого z оно его просто инициализирует?

Вот что у меня сейчас есть, этот код грамотный?
string filepath = "D:\\Documents\\Programming\\MyProjects\\txt.txt";
Dictionary<int, string> dt = new Dictionary<int, string>();
int z;
using (StreamReader sr = File.OpenText(filepath))
{
string fulltext = sr.ReadToEnd();
Char[] charsfulltext = fulltext.ToCharArray();
z = 1;
if(!dt.ContainsKey(z))
{
dt[z] = String.Empty;
}
foreach (char symbol in charsfulltext)
{
if ((symbol=='.') || (symbol=='?') || (symbol=='!'))
{
dt[z] += symbol;
z++;
dt.Add(z, "");
}
else
{
dt[z] += symbol;
}
}