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

Статус: Offline
Реєстрація: 06.08.2014
Повідом.: 57
Практика CШАРП, задания, примеры.

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

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

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

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

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

и хватит, а то я могу походу так вечно
Спасибо, буду над этим работать, как закончу появятся вопросы и необходимость в новых заданиях:)
 
и хватит, а то я могу походу так вечно
Пытался выполнить это задание и не выходит у меня, кину код, подскажите что не так.
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, прочел в книги из-за не грамматного использыванния стринг можно память забить, так как каждый раз делают копию стринг переменной.
 
здесь ты пытаешься прочитать значение в несуществующем ключе. dictionary автоматически создает пару только при присваивании. тобиш есть два варианта:
1. перед dt[z] = dt[z] + adg;
написать dt[z] = String.Empty;
2. либо сделать то что подсказывает среда выполнения. обернуть зловещую строку в try...catch

P.S.

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

Я вообще правильно подошел к вопросу посимвольной обработки?
ну в том что ты написал все равно все через строки идет
 
Спасибо за помощь. Следующий вопрос у меня есть код которые выполняет чтение по символам и распределяет в массив предложения текста, индексы массива соответствую четное или нечетное предложение:
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();
Что стоит исправить, что здесь написано криво. И как я понимаю таким же образом мне надо дальше форматировать само предложение?
 
странные названия переменных, магическая строчка "dt[1] = String.Empty;", все в одном методе, криво сделана работа со стримридером, лишние преобразования типов

и почему Dictionary?
 
нафига делать на основе готового решения (которое я описал выше) какие-то свои догадки?

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



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

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

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

dt[z]+= adg;
}
 
Сколько будет? :-)
int a,b,c = 1;
int result = a+++b---c++;
 
а что будет с твоим кодом и этим, когда 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;
}
}
 
Назад
Зверху Знизу