Софтуерно Инженерство
Loading...
+ Нов въпрос
Stoyan.Stoyanov avatar Stoyan.Stoyanov 96 Точки

Въпрос за форматиране на if statement

Здравейте,

Имам един въпрос - как е по-правилно да се форматира statement-a на if condition, ако условията станат по-дълги от видимата част на прозореца.

Така:

if ((numA > 0 && numB > 0 && numC > 0) || (numA < 0 && numB < 0 && numC > 0) ||

    (numA > 0 && numB < 0 && numC < 0) || (numA > 0 && numB < 0 && numC > 0))
{
     Console.WriteLine("Result: +");
}

или по-добре да остане на един ред, нищо, че е дълъг?

 

Има ли това значение при оценяване на задачите от изпита?

2
Programming Basics
XmUrF avatar XmUrF 363 Точки

Това според мен е ситуация, на която отговорът е "според зависи" :). Аз например в нас като съм гледам на FHD монитор и нямам проблем, пък и съм си включил word warp функцията.

 

По принцип моето мнение е, че не е е много удобно да скролираш наляво-надясно по екрана и така трябва да си пишеш кода, че да се избягват тези състояние. Но зависи и кой каква резолюция използва в крайна сметка. Разликата между екрана на лаптопа ми (HD ready) и един FHD монитор е огромна.

 

Това между другото според мен също е много важен аспект на машината, която трябва да се взима предвид при покупка на лаптоп за програмиране. Освен повечко рам и SSD, и екран с голяма резолюция(да се чете FHD).

4
Dekameron avatar Dekameron 481 Точки

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

Дано съм помогнал smile

 

5
svetli0o avatar svetli0o 134 Точки

Най - добре е да ги отделиш в булеви променливи. Например:

int n = 155;

bool isDivisableByTwo = (n % 2 == 0);

bool isDivisableByThree = (n % 3 == 0);

bool isDivisableByFive = (n % 5 == 0);

if (isDivisableByTwo && isDivisableByThree && isDivisableByFive)

{

Console.writeLine("the number is divisable by 2,3,5");

}

4
Stoyan.Stoyanov avatar Stoyan.Stoyanov 96 Точки

От една страна си прав - кодът става по-прегледен, но от друга редовете стават повече на брой, май.

0
g.stoyanov avatar g.stoyanov 776 Точки

Браво, добре си се ориентирал - точно това е начина (правилния). Както по натам ще учим това е КПК или качествен програмен код. И въобще не се притеснявай за броя на редовете код, въпреки забележката на колегата над мен. Цитирам любимата си фраза: "Any fool can write code that a computer can understand. Good programmers write code that humans can understand.". Представи си че една компания има стаж от 10-ина години в сферата и назначава нов кадър - как ще му е по лесно ако всичко е на един ред (както съветва колежката в следващият пост) или както ти си решил да го направиш... Бинго по този начин дори спестяваш и коментарите - самодокументиращ се код. Така че това е правилния начин. Отделно да добавя че за КПК има "правило" за максимлно дълъг ред! Поздрави от мен и успехи.

2
ZvetanIG avatar ZvetanIG 917 Точки

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

0
ViValDam avatar ViValDam 16 Точки

На един ред!

на компютъра му е все едно , а и за нас може да се запише както си я записал -  на 2 реда!

Моята команда  ,стана на 4 реда, защото работя на мини лаптоп , а програмата си работи отлично !smile

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

-3
g.stoyanov avatar g.stoyanov 776 Точки

Понеже това е форум в който се споделят знания - правилни знания и практики за професията Софтуерен инженер, един вид се учим на най-добрите практики, те моля за следното: Крайно нежелателно е да даваме съвети за нещо което не знаем със сигурност дали е правилно... разбира се мненията (нашите прдположения) относно въпроса са добре дошли за една продуктивна дискусия... но... но грешните СЪВЕТИ (не мнения) няма да толерираме тъй като водят до абсолютно обратния ефект който университета иска да постигне! Поздрави и успехи в начинанията.

3
ViValDam avatar ViValDam 16 Точки

  Форум за споделеня на правилни знания ?

Къде го пише това ?

Много интересно определение за форум за начинаещи  !

На лекциите непрекъснато се повтаря , че от нас се иска работещ , а не ефективен код - а и как може да се говори за ефективност на код, на абсолютни начинаещи, които още не са взели и половината от синтаксиса на езика ?

И току що правят домашни за условни конструкции и цикли ?

Пък и да бъдат наричани глупави," any fool" , че не пишели ефективен код ?

Този форум се превръща от полезно - в неприятно място на заядливковци и на "виж ме как аз знам повече от теб" !

Кода си работи отлично и на един ред и това си е самата истина !

Пък и може да се запише на няколко реда и си е абсолютно четлив , даже в колонка може да се запише !

А и какво е това КПК - повечето не сме и чували за такова нещо ?

Университета има претенции, че приема абсолютно начинаещи, даже и такива без никакви математически знания - какво означава това - няма да толерираме ? 

От децата в първи клас се изисква да напишат "Аз обичам мама" , а не да развиват теми, от например , "Под игото" на Вазов!

 

 

0
ViValDam avatar ViValDam 16 Точки

 И напишете го този "ефективен , четлив код" на горната задача , да го видим как изглежда и да се учим , а не само, както казва Наков - дрън-дрън -дрън !smile

1
ViValDam avatar ViValDam 16 Точки

 Аз, пък мога да си напиша , по-хубав код от този на Светльо, нищо че съм foolfrown  и ми слагате минуси на коментарите !smile

Ето го моето решение на кода на Светльо :

int number = 0 ;

if (number % (2 * 3 * 5) == 0)
{
 Console.WriteLine(number +" is divisible by 2, 3 and 5 ");
}

 

Е какво ще кажеш ? Май моят е по -ефективен ?wink

1
RoYaL avatar RoYaL Trainer 6845 Точки

Ако имаш такъв код, това е най-правилният знак, че правиш нещо грешно :) Ако няколко неща се сравняват с една стойност, или едно нещо с няколко стойности, е време да погледнеш към масивите и техните предефинирани методи, наример Contains()

2
ViValDam avatar ViValDam 16 Точки

- Нямам никъкъв код - просто преобразувах кода на Светльо, в по-ефективенsmile такъв - даже и не знам за коя задача става дума - от тази тема ми останаха последните 2 задачи - ей сега ги почвам, че днес само тази за бирата реших - целият ден бях заета .

1
ViValDam avatar ViValDam 16 Точки

Това пък откъде го измисли ?

Такава проста задача - с масиви ?

1
ViValDam avatar ViValDam 16 Точки

Това се учеше, едно време, още в началното училище ! 

Правило - Едно число се дели едновременно на няколко различни числа, които нямат общо кратно, ако се дели без остатък  на произведението им .

2
RoYaL avatar RoYaL Trainer 6845 Точки

Отговорът ми беше насочен към автора на темата, който проверява 3 числа с 0..

1
RoYaL avatar RoYaL Trainer 6845 Точки

Абе, а ако числото трябваше да се дели на 2, 3, 5 и 30? :-) 30 се дели на всичките 4, но не и на 900?:)

2
ZvetanIG avatar ZvetanIG 917 Точки

За изпита няма значение как е оформен кода, защото те оценяват машшинно.  Важни са само резултатите.

Въпреки всичко трябва да се стремим да си създаваме навици от сега. 

1
ViValDam avatar ViValDam 16 Точки

Тъй като 30 се дели без остатък и на 2, и на 3, и на 5  , следва ,че ако числото се дели на 30 , то се дели ,и на 2 , и на 3 , и на 5 

или 

на любимият ми вече С # :

 

int number = 0 ;

if (number % 30) == 0)
{
     Console.WriteLine(number +"is divisible by 2, 3, 5 and 30 ");
}

 

Коя е тази задача, поне като я обсъждаме , да взема да я реша и аз ?

1
RoYaL avatar RoYaL Trainer 6845 Точки

Вивалдам,

 

Ако числото трябва да се дели на 2, 3, 5 и 30 (и 4те числа)

 

ако направиш x % (a*b*c*d) == 0 ще резултира в

 

x % 2*3*5*30 == 0

x % 900 = 0

Което е грешно, защото 30 също се дели и на 2, и на 3, и на 5 и на 30 - без остатък.

 

Трябва ти още една проверка.

2
ViValDam avatar ViValDam 16 Точки

За 2, 3, 5 и 30 кода не е % (2*3*5*30), а е пак  % (2*3*5) или като ги умножим , направо % (30.

int number = 0 ;

if (number % (2*3*5) ) == 0)
{
 Console.WriteLine(number + "is divisible by 2, 3, 5 and 30 ");
 }

,защото

2*3*5 =30 

 

Не е вече % (2*3*5*30)  ,а само %30 !

 

Дай ми ,моля те, цялата задача !

 

 

 

1
g.stoyanov avatar g.stoyanov 776 Точки

Колегата има в предвид това условие:

Даденото число дали се дели на 2, 3, 5, 30. При твоя случай, както е казал колегата, тази логика при инпут 30:

30 % (2*3*5*30) == 0 няма да сработи.

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

 

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

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

2. Пускай по-сложните кодове поне в pastebin.com иначе караш хората да подминават кодовете ти (просто не им се занимава да четат не форматиран код - ако се сещаш за термина КПК, точно за това говорех - хората по-лесно четат форматиран и добре организиран код) и да останеш не разбрана.

3. Не бъди "Кон с капаци", внимателно прочети темата и нейните отговори, също така отговорите на твоите постове и се опитай да рабереш какво хората се опитват да ти кажат - РАЗБЕРИ - ВНИКНИ В ЧУЖДОТО МНЕНИЕ (Опитай се да го разбереш, сигурен съм че по късно го правиш и заради прибързаността ти после изпадаш в още по-неловки ситуации) и после благодари за помоща или го оспори.

Всичко това ти го пиша с добри чувства и намерения, надявам се че всичко ще е ОК. Поздрави от мен!

0