Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

petrovaliev95 avatar petrovaliev95 358 Точки

[Homework] OOP - Functional Programming - Септември 2014

Здравейте, колеги

 

Не видях да има такава тема в форума, така че предлагам тук да обсъждаме задачите от темата. Задачите са много интересни макар и някои да са труднички.

Ето някои от задачите:

 

1. StringBuilder Extensions

2. Custom LINQ Extension Methods

3-14. Class Student

14. Не съм сигурен, че разбрах условието на задачата, но ако някой забележи нещо нередно да пише.

 

Същто така открих някои грешки в домашното. Дано са ви от полза:

1. Първа задача последния пример "AppendAll" трябва да е --> AppendAll<Т>(IEnumerable<T> items) - изпуснато е това "<Т>" след "AppendAll".

2. Втора задача последния пример "WhereEndsWith" трябва да е --> 
public static IEnumerable<string> WhereEndsWith(this IEnumerable<string> collection, IEnumerable<string> suffixes) {...} - след името на метода не трябва да има "<string>" и "suffixes" колекцията не трябва да е "this" иначе се губи целия смисъл на условието на задачата.

3. В 6-та задача се изисква студентите да се филтрират по "Age", а в 3-та задача никъде не е казано, че студента трябва да има "Age". 

4. В 13-та задача също се изисква "GroupName" което не е упоменато в 3-та задача.

 

Много бих се радвал на някакви критики относно задачите, ще са ми от полза.

 

П.С. Грешките са коригирани!

 

Поздрави, Даниел

 

    

17
C# OOP Basics 28/09/2014 22:57:17
Tr00peR avatar Tr00peR 566 Точки

Ето един много полезен сайт за задачи като тази със студентите.

http://www.generatedata.com/

Може да си генерите текстов файл с 100 реда данни, каквито си решите, после ги четете (със StreamReadar примерно) в списъка със студенти. Не се занимаваш да пишеш данни и имаш много повече ентрита. Идеално за тестване.

8
a_rusenov avatar a_rusenov 1103 Точки

Здравей,

Благодаря за забележките, вече всичко е оправено.

Относно 15-та - даден е .txt файл с данни за 1000 студенти. Файлът трябва да бъде прочетен, след което всичката информация да се налее в обекти от клас Student (съдържащ изброените полета). Студентите се филтрират и подреждат според описаните критерии и накрая се експортват в Excel таблица.

1
26/09/2014 19:36:21
petrovaliev95 avatar petrovaliev95 358 Точки

Това с прочитането на ".txt" файла не е ли от 15-та задача ?

4
a_rusenov avatar a_rusenov 1103 Точки

Да :)

В 14-та трябва да се създаде клас StudentSpecialty с specialty name и faculty number. И идеята е да се използва общото поле faculty number (което и Student притежава) и да се направи join на 2-те колекции в една обща. Добавен е и пример за пояснение.

0
26/09/2014 19:36:34
petrovaliev95 avatar petrovaliev95 358 Точки

Аз точно това съм направил. :)

5
ttitto avatar ttitto 1153 Точки

Ето ги и моите задачи от това домашно:

StringBuilder Extension Methods - нищо сложно, три метода с по един ред код в тях

CustomLINQExtMethods

StudentsClass - много скучна задача, без никаква уловка

LINQtoExcel - Тази задача съм направил всичко без генерирането на екселския файл.

Доколкото разбирам библиотеката LINQtoExcel служи за разчитане на екселски файл и вкарване на данните от него в C# обект. Никъде не намерих пример, в който от обект да се генерира екселски файл с тази библиотека. Или аз нещо не разбирам.

Да не би да се иска с LINQtoExcel да разчетем файла с данните и да създадем Student обекти, а да търсим друг начин да генерираме екселски файл?!

Освен това след качването на библиотеката в проекта компресираният му размер надхвърли позволения в системата. Може би трябва да се удвои.

ЕДИТ: Благодарение на библиотеката, споделена от Trooper успях и аз да генерирам екселсия файл. Малко си поиграх и написах отделен клас ExcelGenerator.

 

 

5
29/09/2014 13:29:40
ZvetanIG avatar ZvetanIG 907 Точки

Ttiio в 13 задача, не ти изкарва имената на студентите. Бих те посъветвал вместо
Console.WriteLine("\t{0}", string.Join("\n\t", item.students));

да напишеш
Console.WriteLine("\t{0}", string.Join("\n\t", item.students.Select(s => s.FirstName + " " + s.LastName)));

или нещо подобно според това каква информация искаш да излиза за студентите.

0
petrovaliev95 avatar petrovaliev95 358 Точки

Искам да допълня, че в 13-та задача трябва да изпринтите групите и студентите в тях,а не само "firstname" и "lastname" от обекта "Student".

4
ttitto avatar ttitto 1153 Точки

Не виждам нищо нередно в 13та задача. Ето това ми изкарва:

Students grouped by GroupName:
Plovdiv
    Petar Petrov, fac number: 800014, group: 2, groupName: Plovdiv, age: 23, phone: +359888456123, email: alabala@dir.bg, marks:{ 2, 3, 4, 4, 6, 5, 6, 6 }
    Emil Emilov, fac number: 850014, group: 1, groupName: Plovdiv, age: 33, phone: +359 2555623, email: alabala@abv.bg, marks:{ 6, 6, 6, 6, 6, 5, 6, 6 }
Sofia
    Zdravko Ivanov, fac number: 734015, group: 2, groupName: Sofia, age: 17, phone: +35942456123, email: zizo@dir.bg, marks:{ 2, 3, 4, 6, 6, 4, 5, 5, 5, 3, 2 }
    Dinko Dinev, fac number: 023016, group: 1, groupName: Sofia, age: 26, phone: +359888457873, email: didi@softuni.bg, marks:{ }
    Samuil Asparuhov, fac number: 800014, group: 2, groupName: Sofia, age: 19, phone: +359888456123, email: alabala@dir.bg, marks:{ 2, 3, 4, 4, 6, 5, 6, 6 }
Ruse
    Gosho Peshev, fac number: 851014, group: 1, groupName: Ruse, age: 33, phone: +359888555623, email: alabala@abv.bg, marks:{ 6, 6, 6, 6, 6, 5, 6, 6 }
    Damyan Damyanov, fac number: 734115, group: 2, groupName: Ruse, age: 17, phone: +35942456123, email: zizo@dir.bg, marks:{ 2, 3, 4, 6, 6, 4, 5, 5, 5, 3, 2 }
    Tsonko Gochev, fac number: 023116, group: 1, groupName: Ruse, age: 26, phone: +359888457873, email: didi@softuni.bg, marks:{ 2, 3, 4, 2, 2, 2, 5, 6, 6 }

Цветане, при теб друг ли е изходът?

0
zdgeorgiev avatar zdgeorgiev 57 Точки

Здравейте,

Молбата ми е насочена към екипа на СофтУни. Дали има възможност да се разсрочи домашното от темата за Функционално програмиране от 01.10.2014(Сряда) за 03.10.2014(Петък). Причината за това искане е, че реално домашните по темите Други типове (срок за предаване 29.10.2014), Делегати и Събития (срок за предаване 30.10.2014) и въпросното домашно от Функц. програмиране (срок за предаване 01.10.2014) са доста нагъсто. За следващата тема (Наследяване) домашното е със срок за предаване 06.10.2014, т.е получава се дупка от 5 дни м/у тези 2 домашни.

За да не претупваме домашните и за да вникнем по-надълбоко в материала, бихте ли били така добри да удължите срока за предаване :) 

Благодаря предварително!

Поздрави,

Живко

 

4
ZvetanIG avatar ZvetanIG 907 Точки

Ето и моето домашно от 1 до 14 задача.

За 15 задача загубих часове без да мога да разбера как се създава  и записва екселски файл. Бих се радвал някой успял с тази задача да сподели решението си.

С друго, с което се сблъсках и неможах да намеря решение е как разширяващите методи да променят обекта към който се прикачат. (Става въпрос за първа задача). Останах с впечатлението, че не може...

 

Дани,
нещо, което забелязах в първата ти задача. Метода RemoveText трябва да не прави разлика между главни и малки букви (case-insensitive). Дадено е в условието.

5
28/09/2014 16:08:30
petrovaliev95 avatar petrovaliev95 358 Точки

Колега относно първа задача - трябва да присвоиш стойноста която връща метода на друга променлива защото класа е "immutable".

П.С. Благодаря за поправката. Не съм обърнал внимание на условието.

6
28/09/2014 16:18:06
Tr00peR avatar Tr00peR 566 Точки

Ето една подходяща библиотека за 15та задача, защото очевидино предложената нещо не върши работа.

http://sourceforge.net/projects/excellibrary.mirror/

Много удобно и лесно се работи с нея, само не ми се търси как да отворя самия файл автоматично при приключване на програмата, някой ако намери да пише.

3
28/09/2014 16:08:46
ZvetanIG avatar ZvetanIG 907 Точки

При мен тази библиотека ми създава файл, които Excell(2010) не иска да го отвори. Явно файла е за по-стара версия на Excell.  Иначе изглежда много лесна и интуитивна за ползване.

0
Tr00peR avatar Tr00peR 566 Точки

Аз с ексел 2013 си го отварям, виж да не е другаде проблема :)

0
ttitto avatar ttitto 1153 Точки

ZvetanIG: Понеже библиотеката създава екселски файл със стария формат, ако си задал в името на файла разширение, различно от xls то затова не може да се отвори

0
GoShow avatar GoShow 595 Точки

Ето и от мен домашното. Знам, че се включвам доста късно, но бих се радвал на критики, това в момента е по-важно, ако имате време. Иначе 14 от 15, нямам време и аз, защото следващото домашно чука на вратата!

https://github.com/GoShow/OOP/tree/master/C%23OOP/Functional%20Programming

5
Ventsislav avatar Ventsislav 343 Точки

Ето го и моето домашно без 15та задача : цък.

0
bangelova avatar bangelova 48 Точки

1. Въпрос: някой забеляза ли, че в проблем 11 трябва да ползваме extension methods? 

2. Тъп въпрос: Коя функционалност да разширява въпросният extension method, на  List<Student> ли? 

 

 

2
01/10/2014 16:12:56
LittleNinja avatar LittleNinja 71 Точки

Аз реших, че трябва просто да се използва LINQ, защото те също се водят extension methods.. Ето го моето решение: Git

3
01/10/2014 16:02:49
bangelova avatar bangelova 48 Точки

И аз така го направих, но се замислих защо е формулирано по-различно в сравнение с предишните задачи.. 

Ето и моят буламач по 3-14. Благодаря на колегите, публикували решенията си по-горе, защото взаимствах някои неща от тях.

 

3
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.