Loading...
Ivan_G_Popov1 avatar Ivan_G_Popov1 21 Точки

С++ Адванс

Здравейте, 

Има ли други, които са като мен и още на първата домашна ми идва да си прегриза вените? Никога не съм се занимавал с програмиране,но ми е интересно.Затава моля ако има някой да сподели как се оправя(какво ползва за поълнителни материали)? Изобщо всички ли се оправят само с материалите от курса?Абе изобщо нека тук се споделят материали полезни за всички.

П.П. Жоро, предполагам си чел доста книги за с++, моля сподели някоя която си заслужава.Във нета материалите(поне безплатните) са доста повърхностни(поне тези които аз съм намирал).

Тагове:
0
C++ Programming
georgi.stef.georgiev avatar georgi.stef.georgiev 921 Точки

Здравей,

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

Може би опитай да си измислиш нещо, което ти е интересно да напишеш (аз първо написах морски шах на конзолата, след това разни игри тип space invaders) и почни да го пишеш. Ще се сблъскаш с много проблеми, особено отначало, но с търсене в нета ще си намираш отговори, и с времето ще си изграждаш "компонентно" мислене, в което ще разделяш нещата на отделните им части и ще решаваш всяка част по отделно. Нищо по-добро от това не мога да ти препоръчам, програмирането просто не е като повечето неща, то е творческа и аналитична работа едновременно и в него се трупат умения само с писане, с четене малко ще постигнеш (особено докато си начинаещ, после като се стигне до архитектура и добри практика реално има смислени книги).

Иначе конкретно за това домашно какво те мъчи? Виждам, че 1 и 2 задача си ги решил, така че не е проблемът във формата на решенията, ориентирал си се как се предават нещата.

- в задача 3 просто имаш един клас, на който в конструктора му се подава вектор. След това се вика insert метода на класа, който трябва да добавя неща във вектора, ама не накрая, а там, където им е мястото по някакъв си критерий. Ти трябва да напишеш този клас. Трябва да съобразиш какъв трябва да е параметърът на конструктора, за да можеш да пълниш стойности в оригиналния вектор от main. Нищо друго не се иска

- в задача 4 малко е по-сложно, защото имаш един map в който има информация как да смяташ печалбата на някоя фирма - вземаш от map-а по id (доколкото си спомням) нещото, което прави сметки, и му даваш съответната фирма да направи сметките за нея.

- задача 5 вече си е сложна по идея, но ако прегледаш пак това, което говорихме за pointer arithmetic ще се ориентираш как да четеш паметта част по част

Дай някакви конкретни въпроси за задачите - и най-добре ги дай като отделни въпроси за всяка задача във форума. Формулирай в точен език с какво не се справяш, кое не ти е ясно, какво си опитал и защо не се е получило, и ще се опитаме да ти дадем насоки. Това да си формулираш точно и недвусмислено проблема, във всяка ситуация, е много важна стъпка в това да го решиш.

Поздрави,

Жоро

2
Ivan_G_Popov1 avatar Ivan_G_Popov1 21 Точки

Мерси за насоките. Това да "подкарам" мулти-файлов проект беше най-лесното. Затруднението ми идва от слабото познаване на класове и работата с тях, затруднението да разбера правилно наличният код (четене на код) и не доброто зацепване на първата лекция(референция към оператот .....каквоооо).Много добре обясняваш(чак зарибително), но май летвата на нивото ми е топлова ниско, че немога и да се спъна laugh.

std::istream& operator>>(std::istream& stream, Company& company) {
	return stream >> company.name >> company.id;

Ясно ми е, че е вид функция ,ясно е какво връща но ми се губи идеята за връзка с др.код (задавам какво да прави >> в мейна ли ?). За някой това е елементарно но уви. Явно нямам елементарни базови знания и пуснах темата с цел който има или е чел допълнителни материали да сподели(било то и учебник за 5-ти клас, който да е смислен) Просто явно презентациите са ми недостатъчни(или не ги разбирам).

0
georgi.stef.georgiev avatar georgi.stef.georgiev 921 Точки

Ахаа, проблемът ти май идва от това, че твърде много се опитваш да разбереш :D

Не сме го учили още това с този operator>>, и идеята е да свикнете да работите с код, който не разбирате на 100% (защото в големи проекти с много хора не само може да има неща, които не знаете, ами и като цяло няма как да познавате цялата кодова база).

В тази задача реално те интересува само че имаш OrderedInserter конструктор, който получава вектор, и после че има insert функция, на която се подават Company обекти (по-конкретно указатели май бяха, не помня условието). Само тези две неща те вълнуват как се ползват от чуждия код - всичко останало е бонус информация, но реално не ти трябва. Ако твоя код работи, и ако чуждия код ти предава правилно оформени обекти, значи и задачата ще работи - няма нужда да се интересуваш как точно работи. Това се нарича разделение на отговорностите (separation of concerns) - всяко независимо парче от кода (обикновено това е всеки клас) си знае неговата работа и не се интересува от другите парчета, интересува се само и единствено от комуникацията с тях (тоест какви методи му се извикват и то какви методи вика, тоест "интерфейса" между него и останалия код). В твоя случай как се случва четенето, как  се заделя памет, как се печата резултата - това теб не те вълнува, или поне не ти е нужно за да си изпълниш твоята част от задачата. По същия начин както мен не ме интересува как точно са изкопали нефта, който се гори в ТЕЦ-а за да имам ток и да си пусна компютъра, за да ти отговоря на въпроса - вълнувам се само от това какво трябва да ти кажа и какво трябва да кликна за да направя отговор в този форум (и да го напсувам веднъж, защото без да исках натиснах грешен бутон и си го изтрих това всичкото дето го пиша сега преди малко :D).

Иначе почти си се ориентирал - това се нарича stream extraction operator overload, тоест нещо, което позволява да правим Company c; cin >> c; - ще го учим в лекция 4.

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

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

Поздрави,

Жоро

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