[OOP] - Defining Classes Part Two - Task 1,2,3,4


21

Ето условията на задачите: Цък

Ето моя прогрес по нея:

GitHub

Обяснение по класове ( и структури ):

1. Point3D - основната цел тук е да се създаде
точка в 3D пространството. Няма нищо особено - има полета за отделните точки и презаписваме ToString за да печата точката.

2. Path - пази лист от точки, като със свойството Paths достъпваме нашия лист, а с метода AddPoint добавяме нова точка в "пътя"

3. Distance3D - статичен клас, който отговаря за пресмятането на разстоянието м/у 2 точки ( зададени чрез Point3D ). Формулата може да намерите тук: Wiki

4. PathStorage -  тук имаме 2 основни метода:

- PathSave - обикаляме по точките в определен Path и ги записваме в файл

- PathLoad - приемаме лист от пътища за обработка от файл, като четем входа ред по ред. Входните данни приемаме в формата X,Y,Z , а '-' разделяме отделните точки.

Въпрос:

Та имам едно въпросче, което не е точно по задачата, а е по-общо - трябва ли структурите да се обособяват в отделни файлове като класовете или не ?


в C# OOP от Teodor92 (13062 точки)


Отговори



0

Колеги, само аз ли си мисля, че координатите на точките могат и трябва да са дабъл? Гледам, че всички са използвали int, но това са доста малко точки от 3D пространството.

Това усложнява и четенето на координати от файл...

Edit: Вариант с double координати тук. Препоръки и коментари са добре дошли.


от AntonPetrov (654 точки)


0
Не е уточнено в задачата, така че както решиш.


0
И на мен най-напред ми дойде да са double и така и ги направих. После като стигнах до пормута с Math.Sqrt и Math.Pow и си казах "ей супер , добре че ги направих с double" :) , но дали е по-правилно не знам.

от atodorova (1273 точки)



0

Error    2    foreach statement cannot operate on variables of type '_3DPoints.GenericList<_3DPoints.Point3D>' because '_3DPoints.GenericList<_3DPoints.Point3D>' does not contain a public definition for 'GetEnumerator'    C:\Users\Ventus\Documents\Visual Studio 2010\Projects\OOP\3DPoints\Path.cs    41    13    3DPoints
 

https://gist.github.com/yumerov/5075716

Някой да има идея? : /


от songoku (85 точки)


0
Виж на какво правиш foreach, от там идва проблема. Този GenericList няма enumerator. Защо не го замениш с List?

от krasi.nikolov (1412 точки)


0

Дали ТРЯБВА структурите да са в отделни файлове не знам, аз ги правя така и мисля че се получава. По задачите моето решение е тук:https://github.com/stoyanovalexander/TheRepositoryOfAlexanderStoyanov/tree/master/DefinningClassesPartTwo/DefinningClassesPartTwo

Различното е че ползвам FOR а не FOREACH (PathStorage.cs ред(17, 21) ), и нямам метод CLEAR. Не съм сигурен, но мисля че той прави същото както FALSE  от StreamWriter writer = new StreamWriter("FileWithPath.txt", false, Encoding.GetEncoding("UTF-8")) от(PathStorage.cs ред(14) ) при мен.


от alexander (147 точки)


2

https://github.com/vlad0/Homework/tree/master/18.OOP-2/01.Point3D

- Създавам структура Point3D - структурата трябва да е публична. На лекцията ни казаха, че трябва да използваме структури за малко количество от данни. Ако информацията е по-голяма трябва да използваме Class.

- Path-a съм го съкратил доста, защото използвам един List<Point3D> и готовите методи .Add(), .RemoveAt() и т.нат.

- най-интересно ми беше четенето и писането във файла. И в двата случая чета/пиша ред по ред /1 Point3D на ред/ Интересно, защото ми изглежда доста практично, което ме забавлява :)


от vlad0 (6103 точки)


0
Да, практично е, на мен затова тази тема за текстовите файлове ми стана любима, още докато слушах лекцията. Мисля че от до тук взетия материал, това ще се налага да се прави най-често в практиката.

от atodorova (1273 точки)


0
Ха, не знах че има формула за 3D Eculidion space, но струва ми се че в класа Distance3D си използвал формула за Two Dimensions, а случая имаме Tree Dimentions, т.е. трябва да включиш и Z координатите ако не се лъжа.

от atodorova (1273 точки)


0
Май, някой не е видял слайдер отдолу :D
distance = Math.Sqrt(Math.Pow(pointOne.pointX - pointTwo.pointX, 2) + Math.Pow(pointOne.pointY - pointTwo.pointY, 2) + Math.Pow(pointOne.pointZ - pointTwo.pointZ, 2));

от Teodor92 (13062 точки)

0
:) Сори , наистина не съм обърнала внимание на слайдера

от atodorova (1273 точки)


1

Ето ги и моите решения. Ако някой има въпроси, да пита, но мисля че всичко е straght-forward:

CLICK


от ivaylo.kenov (30760 точки)


0
Искам да попитам на 4та задача.
Какво точно се разбира под "load paths from a text file"? Аз го разбирам така: подаваме някакъв path на метода, търсим във файла дали го има и, ако го има, го принтва. Но сега виждам, че някои са го разбрали в смисъл само да се изпринтят всички пътища, а не конкретен.
Някой да сподели кое според него е по-правилното тълкуване?

от rnikiforova (1198 точки)


0
Аз не мисля, че се иска да сравняваш конкретен път в записаните във файла пътища. Ако беше така щеше да пише, да речем match file for a given path или нещо подобно. Според мен просто трябва да се прочете съдържанието на файла и от него да се извлекат(парснат) стойностите на X , Y и Z .
После ако искаш може да ги добавиш към Lista,който си дефинирала в класа Paths, но това вече не се иска в условието и е по желание.
ПП: Абе като се замисля си се иска да ги добавиш в нов лист от Paths

от atodorova (1273 точки)


0

Аз също смятам че е по добре структурите да са си в отделни файлове и така съм го направила.

Разлика при мен при мен е че съм си го писала сама cheeky

Общо  взето основно се различава метода LoadPaths, който пак прави същото но спестих малко код. Чета входа ред по ред. входните данни приемам в формата X,Y,Z като ги разделям със Slit(',') и string.Remove(), за да махна излишния текст. Не създавам нов лист, защото ако не се бъркам създавайки нова инстанция на Path, то автоматично се създава празен лист.

Решение


от atodorova (1273 точки)


0
Не съм пускал кода да го тествам, но ми се струва, че няма да можеш да парснеш от входния файл ред от вида: "PointCoonrinates are: X = {0}, Y = {1}, Z = {2}". Особено ако стойностите са double :)

от AntonPetrov (654 точки)

0
ами парсва се, не знам защо си останал с такова впечатление.
ПП: 1. Първо изтривам "PointCoonrinates are:" 2. Правя Split по запетая и запазвам резултата в масив 3. За всеки от трите елемента изтривам първите 4 символа 4. Парсвам елементите от масива като вече в тях са останали само цифри и няма проблем. Само че сега като се загледам съм ги парснала към int , явно ми се е спяло снощи

от atodorova (1273 точки)



0
Здравейте,
ще използвам темата на колегата, за да не отварям нова. Въпросът ми е свързан със задача 8-10. Интересува ме да ли има някакъв interface, който всички числени типове да имплементрират. Трябва ми, за да мога да огранича T само до основните числени типове,в противен случай не мога да събера два елемента от тип Т.

от angel4eto_023 (130 точки)


0
Къде ти е "Z" координатата като смяташ разстоянието? Нали е 3D.

от Daniera (105 точки)


0
Ах, кой не е видял слайдера отдолу? :D
distance = Math.Sqrt(Math.Pow(pointOne.pointX - pointTwo.pointX, 2) + Math.Pow(pointOne.pointY - pointTwo.pointY, 2) + Math.Pow(pointOne.pointZ - pointTwo.pointZ, 2));

от Teodor92 (13062 точки)

0
Sorry, не съм го видяла!:-)

от Daniera (105 точки)