Loading...
RoYaL avatar RoYaL Trainer 6849 Точки

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

Лошото е, че абстракцията не винаги е правилна, що се отнася до смесването й с темплейта.

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

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

Рейзва обаче проблем, какво ще стане ако поискам клетките само за Март, Октомви и Ноември да са червени? Тогава дизайнер няма как да го направи и ще стане дабъл уърк. Ще отидеш в кода и ще напишеш някакъв IF за тези месеци, да сложи някакъв клас. Първо, че кодът ще започне да изглежда много по-зле, второ че и двамата ще трябва да правите нещо по въпроса.

От друга страна, представи си, че всъщност не трябва да листваш всички месеци, а само определени?

Направих едно примерно рефакториране на задачката ти AnnualExpenses

http://pastebin.com/DRyAvWuY

Пак съм вкарал известен левел на абстракция. Месеците не съм ги изкарал в HTML-а, а ги генерирам в масив, за да знаем бройката му. Не е много правилно и това, но за да не хардкодвам после 4 в цикъла, го направих по този начин, иначе според мен би било най-добре да се знае с каква бройка се работи и да не е динамично генерирана, но съм оставил и тази вратичка.

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

Ако решите, че November трябва да е нормален месец, а не оцветен, дизайнерът ще влезе и ще промени класа на normalMonth

2
RosenKrumov avatar RosenKrumov 203 Точки

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

0
a.angelov avatar a.angelov 1316 Точки

Няма тема, защото не е минала лекцията smile

Но така и така си я отворил, ето и моите решения: GitHub

Естествено и аз съм отворен за критика и предложения :)

 

Едит: Добавих и решение на задачата със звездичка - Sorting Students: КОД

1
05/12/2014 11:37:42
RosenKrumov avatar RosenKrumov 203 Точки

Много си мислих дали да не бутна един switch и аз за последната ама ми се струваше малко грозно в case да набутам операции и си писах elseif-ове. И понеже не го пробвах, а само си го помислих, не разбрах дали наистина ще е така. Сега виждам, че със switch определено е по-добрият вариант според мен.

0
a.angelov avatar a.angelov 1316 Точки

Въпрос на вкус е може би - на мен със switch ми изглежда по-прегледно :)

0
JuliaS avatar JuliaS 32 Точки

Здравейте,

и аз успях с домашните от тази тема...Ето и линк към кода:https://github.com/JuliaFS/PHP-basics/tree/master/PHPflowControl

Ще се радвам на всякакви препоръки, с PHP тръгвам от нулата и предполагам че всякакви коментари биха ми били полезни. Като цяло с програмиране се занимавам отскоро, та приемам препоръки и по самите идеи за решения на задачите и евентуални оптимизации...

 

 

2
a.angelov avatar a.angelov 1316 Точки

Имаш много приятни решения на някои от задачите :)

Освен това видях някои полезни функции, които не съм се сетил да ползвам - array_sum, array_rand и strrev...

Единствено може да пооправиш индентацията на кода на AnnualExpenses.php в tbody-то.

1
JuliaS avatar JuliaS 32 Точки

Благодаря :)))

ами всичко е по W3C-то, за всяко нещо ровех как се прави, щот нищо не знам :))) То тук май си има функция за всичко...

Но не разбрах...какво точно да се поправи по  задачата с разходите...в смисъл месеците да не са хардкоднати ли?

0
a.angelov avatar a.angelov 1316 Точки

Не, не, табулация сложи малко на кода в tbody-то - има вложени for-ове, имаш td-та - аз бих ги вкарал една табулация навътре :) Всичко друго си е наред :)

0
04/12/2014 15:40:12
AleksandurSeferinkin avatar AleksandurSeferinkin 333 Точки

И аз съм готов с тези задачи - линк.

ПС: Постваме задачите си тук за да обсъждаме решенията си - не да се хвалим колко програмираме. Нужно ли е изрично да твърдим, че приемаме критики/препоръки? :)))

1
04/12/2014 19:01:53
RosenKrumov avatar RosenKrumov 203 Точки

Да запълня малко редове, че да пусна тема с един ред в нея малко тъпо :D

1
AleksandurSeferinkin avatar AleksandurSeferinkin 333 Точки

Направи ми впечатление, защото във всеки пост го виждам. Иначе да - запълва място. :D

1
Andreev avatar Andreev 11 Точки

Ето и моето домашно Github

С PHP за пръв път се сблъсках преди 2 седмици, когато започна този курс, така че всякакви препоръки са добре дошли.

0
06/12/2014 21:11:32
velio84 avatar velio84 241 Точки

На 6 задача за проверката за палиндроми - взимате ли под внимание малките и големите букви? Защото в условието нищо не е казано и реално може човек да си го тълкува както иска. Примерно "ohho" и "Ohho" - при case-sensiteve проверка второто не е палиндром.

Според мен трябва да има и case-sensitive проверка, но ми е любопитно и вие как сте го направили.

edit:

Ето ги и моите решения

разликата за това дали проверката за палиндромите да е case-sensitive или не, е в това да се ползУва strcmp или strcasecmp

1
07/12/2014 01:00:17
VenelinGrozev avatar VenelinGrozev 130 Точки

Този палиндром пък никога нямаше да се сетя да го проверя по начина по който си го направил, хитро е.

Моето решение беше да сравнявам буквите от двете страни на стринга дали са еднакви, т.е. Ohho ще върне, че не е палиндром. Но ако на функцията и се добави един допълнителен флаг за case sensitive проверка ще сработи както ти му кажеш.

function isPalindrome($param) {
   $count = 0;
      while ($count < floor(strlen($param / 2))) {
         if (substr($param, $count, 1) != substr($param, strlen($param) - $count - 1)) {
      return FALSE;
      }
      $count++;
   }
   return TRUE;
}

 

0
09/12/2014 07:46:13
quickben avatar quickben 966 Точки

Да взема и аз да се включа :)  ТУК

0
aloizien avatar aloizien 35 Точки

От къде да си изтегля домашното ? Линкът за това домашно при мен сочи към 3-тото домашно вместо към 4-тото.

0
quickben avatar quickben 966 Точки

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

0
nikola.m.nikolov avatar nikola.m.nikolov 830 Точки

Росен, на първа задача няма нужда да слагаш проверка за even. Вместо това направи $i += 2. Аз лично предпочитам на задачите, в които искат да се изкарва нещо в browser да пиша семантичен html с всички задължителни тагове. Само на мен ли за 1-ва задача ми изкарва Total: 338.05 ?

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

GITHUB

DEMOS

 

1
09/12/2014 12:31:37
Filkolev avatar Filkolev 4482 Точки

Как точно правиш закръглянето? Аз ползвам round и получавам точния резултат, като закръглям самите корени, преди да ги добавя към сумата. Предполагам ти ги закръгляш при самото отпечатване, като правиш същото и за сумата.

1
nikola.m.nikolov avatar nikola.m.nikolov 830 Точки

Да, закръглям ги само при отпечатването и използвам number_format() - http://php.net/manual/en/function.number-format.php

0
Filkolev avatar Filkolev 4482 Точки

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

Понеже видях, че в домашното примера не закръгля всички числа, разтърсих се за друга функция и затова ползвам round - така при 100 ми принтира 10, а не 10.00. Според мен именно тази функция са искали да ползваме.

1
Filkolev avatar Filkolev 4482 Точки

Ето и моите решения - ЛИНК.

Все още повечето задачи ги правя в един файл - с php и internal styles, но предвид, че кодът не е кой знае колко не мисля, че е особен проблем. Не съм свикнал още да ползвам алтернативния синтаксис на циклите и условните конструкции, не ми е особено интуитивен, но има време до 14-ти, ще гледам да го направя. Засега всички елементи си ги добавям с echo, което малко ме дразни от естетическа гледна точка.

Ще се радвам да получа обратна връзка. Междувременно се връщам към тъпия CV Generator...

0
nikola.m.nikolov avatar nikola.m.nikolov 830 Точки

Фил, на 04.PrimesInRange във функцията isPrime не е необходима проверка за $num == 2. Ако $num e 2 изобщо няма да влезне в for цикъла и ще си върне true

Аз на 4-та задача си пълня масив с всички числа, като ако числото е prime го слагам директно като стринг заедно със strong таг. По този начин накрая само 1 път принтирам tag и няма толкова презареждания. Направих и проверка дали са въведени цели числа и дали start < end.

1
08/12/2014 18:21:15
Filkolev avatar Filkolev 4482 Точки

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

Ще ги оправя тези неща, само да довърша CV генератора, че благодарение на тебе набих 150 реда JS за добавяне и махане на езици :D Просто безумна задача, да я бяха направили със звезда, а на нейно място 2-3 по-кратки задачки, по-добре щеше да е.

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