Отговори на тема  [ 35 мнения ]  Отиди на страница Предишна  1, 2, 3
Незабавен изход от функция в С 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пет Фев 05, 2010 7:53 pm
Мнения: 25
Мнение 
Цецо написа:
Ми не, моят и твоят код ще правят различни неща. Защото моя ще провери условие 2, само ако е валидно условие 1. Докато ти ще провериш условие 2, даже и условие 1 да е отрицателно.


Цецо написа:
Така не става ли:

Код:
do{
     code;
     if(условие1){
          code1;
          if(условие2)
              code2;
          else if(условие3)
               code3;
          else
               code4;
     }
     else if(условие2)     // Но тук ще провери втори път условие2 при неизпълнено условие1.
         code2;
     else
         code5;
}while(условие0); 




Съжалявам, че ви бъркам явно не мога да си обясня идеята правилно:

двете условия 2 и 3 могат да възникнат когато е изпълнено условие1 тогава трябва да се прескочи code4, независимо кое от двете е изпълено (двете едновременно няма да възникнат).
Само условие 2 обаче може да възникне и когато не е изпълнено 1, затова го проверявам втори път.


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


Благодаря за съвета, донякъде и аз съм чел че е така, но явно ми трябва още време и труд.


Вто Апр 05, 2011 2:14 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение 
Всъщност да - и в моя код, винаги ще се провери условие 2. Грешката в предния пост е моя, кода ще работи както искаш ти.... поне така си мисля :)

Не разбирам какво точно те притеснява - това че два пъти проверяваш условие 2 ли? Напрактика то ще се провери само веднъж, така че като бързодействие нямаш проблем. Това че имаш един if повече са няколко байта и няма какво да те притеснява при съвременните контролери.

На практика if-else, do-while, while, for са много "бързи" конструкции сами по себе си. Всички съвременни процесори са оптимизирани за работа с тях, така, че можеш да ги ръгаш наволя. Забавянето в тях идва онсовно от това колко сложно е самото условие което проверяват. Например ако условието което проверяваш е нещо от типа a+b/c+sqrt(d) - това наистина ще е бавно и обемно:) И може да се мисли за оптимизация. Но не с goto и continue.

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

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Вто Апр 05, 2011 2:26 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пет Фев 05, 2010 7:53 pm
Мнения: 25
Мнение 
Евала, отново ти благодаря. :)

Нека да отговоря, ползвам CCS и picF2520.
Забелязал съм, повече if-ове заемат повече ресурс. Но явно проблема е в това каквото съм проверявал с тях.
В момента проверявам неща от сорта на А>Б, и искам да постигна максимално изчистен код.

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

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


Вто Апр 05, 2011 2:36 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение 
90% от пишещите тук във форума сме самоуки програмисти. Или поне повечето сме учили програмиране, колкото да не заспим. И после сме научавали всичко сами в крачка.

Естествено има и учили програмисти (включително тук). Аз работя с такива хора и виждам, че ако човек го е учил наистина както трябва... абе определено има разлика, когато основите са положени както трябва.

Обаче това е рядък случай, както казах масово програмистите сме самоуки. То не само в БГ е така. :)

Аз самия никога не съм се имал за "качествен" програмист. Уча се постоянно, програмирам от 20-25 години и въпреки това се имам за посредствен програмист.

Щото програмирането не ми е кой знае какъв кеф. Правя го , нещата работят, печеля от това. И толкоз. Не съм виртуоз. И 50% от програмистите са така. Други 40% са гола вода със самочуствие. И едва 10% са истински програмисти. Които обикновенно са недооценени :)

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Вто Апр 05, 2011 2:49 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пет Фев 05, 2010 7:53 pm
Мнения: 25
Мнение 
Значи ще ползвам твоя вариант, за да няма continue, и продължавам напред с борбата.
Може да се счита темата за приключила.
Апък ако има нещо занапред ще питам пак, стига да не ви разсмивам много.
:D


Вто Апр 05, 2011 3:33 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 35 мнения ]  Отиди на страница Предишна  1, 2, 3

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 4 госта


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

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни