Форум программистов, компьютерный форум CyberForum.ru

О размере циклов, break и производительности - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Надо написать программу которая будет осуществлять обработку данных из файла http://www.cyberforum.ru/cpp-beginners/thread617480.html
Меню должно иметь вид текстового списка. С чего начать?Где что почитать?
C++ Подскажите, что не так? //bow.h using namespace std; class Bow { string color; bool drawn; int arrows; http://www.cyberforum.ru/cpp-beginners/thread617467.html
C++ Составить программу для вычисления биномиальных коэффициентов
Составить программу для вычисления биномиальных коэффициентов (для заданного M>=i>=j>0 вычислять все C(j,i)), {1, при m=0,n>0 или m=n>=0, если С(n,m)={0, при m>n>0, {С((n-1),(m-1)) + C((n-1),m), в иных случаях. Добавлено через 53 секунды Составить программу для вычисления биномиальных коэффициентов (для заданного M>=i>=j>0 вычислять все C(j,i)),...
C++ Метод Жодана Гаусса по главному элементу всей матрицы не вычисляет матрицу выше 5го порядка
Вот решения этой задачи, считает до 5го порядка правильно, а вот на 6м порядке и выше пишет что решение нет, а если решение находится то Х получаются в разброс. данные генерировал тестировщик. все данные были невырожденными. Помогите пожалуйста не могу понять где не правильно!!! Очень срочно нужно!! #include "math.h" #include <time.h> #include <stdio.h> #include <stdlib.h> #define eps...
C++ Нужна консультация http://www.cyberforum.ru/cpp-beginners/thread617447.html
подскажите что означают эти две строчки? преподаватель попросил конкретно рассказать каждое слово.Почему повторяются delete array? выручайте) for(unsigned i=0;i<rows;i++)delete array; delete array; вот исходный : #include <iostream> #include <conio.h> #include <iomanip> #ifdef max
C++ Простая программа с классами Выручайте! нужно простенькая программа с классами и комментариями, пожалуйста) подробнее

Показать сообщение отдельно
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
02.07.2012, 08:56     О размере циклов, break и производительности
Цитата Сообщение от ForEveR Посмотреть сообщение
Тарас, цикл даже на пару-тройку экранов, адово плохой стиль программирования. Т.к. всегда можно разбить на маленькие функции, которые делают что-то одно, функция делающая много вещей одновременно - плохой стиль программирования.
На какое количество маленьких функций? На пару сотен тысячь? Хуже стиля нет. Цикл на строчку больше, чем нужен - плохой стиль, даже когда нужен на 4 строчки, считая со скобками и заголовком, но на пустом месте множить сущности - худший из всех возможных. Если же всё тело цикла снести в функцию, то получаем не только гигансткую функцию, которая не лучше самого цикла, так ещё на пустом месте накладные на вызов/возврат. Прощай эффективность. И ради чего? Ради того, чтоб просто из принципа сократить цикл? Не смешно. Разбил ты тело на пару-тройку функций. Помогло это тебе? И между ними связей почти столько же, как в них суммарно строк, чего делать просто нельзя, это даже не стиль, а надёжный способ угробить любой проект даже уровня "пустое окно, игрорящее юзвере". Функции же остались необозримы. Делить и их? Раздуешь исходную сотню строк цикла на пару миллионов, затянешь проект на века и всего делов. Функция заводится только тогда, когда с её помощью можно минимизировать связи между кодом, переносимым внутрь функции и остающимся снаружи и ни когда больше, а цикл выполняет многократно повторяемые операции. И шесть уровней вложения циклов подряд - не редкость, в отличие от циклов меньше двухсот-трёхсот строк, а меньше сотни со всеми вызовами функций из цикла бывают только циклы, решающие совсем уж примитивные подзадачи. Их много не бывает. Поиск подстроки больше шести строк раздувать нельзя. А нука смерь в строках внешний цикл прямого хода решения СЛАУ методом Гаусса. 15 строк - минимум и именно это наименее эффективный вариатант, на больших матрицах затягивающийся на тысячелетия, а с моим зрением экран=20 строк. А если хотя бы ленточную матрицу накрутить, то вот тебе ещё строки и их становится 18. А если блочно-блочная, то даже Гаусс перестаёт влезать в экран, всё ещё оставаясь примитивным до безобразия. Но такой цикл в серьёзной программе бывает ровно один, да ещё один для обратного хода, а циклы, генерящие саму матрицу даже на дипломах водятся десятками и при размеру каждый больше в разы.

Добавлено через 2 минуты
Цитата Сообщение от lazybiz Посмотреть сообщение
Мораль №2: не следует избегать break в циклах.
Следует избегать ненужного брейка в циклах. Когда действительно нужен, то лучше применять, но если программа не станет сложнее от условия в заголовке, выбрасывай брейк.

Добавлено через 5 минут
Цитата Сообщение от lazybiz Посмотреть сообщение
Оскорбления - признак безвыходного состояния и осознания своей не правоты.
Чем ты и занимаешься. Тебя почитать, так все учёные мира - недообезяны, а у тебя одного есть мозг и это супермозг. При этом сам задачи дипломного уровня не умеешь решать вообще. Диссертация то вытекла из диплома, в котором та же задача решалась грубее и в двух измерениях, а ты признался, что не умеешь решать весь этот класс. Но берёшься с бухты барахты за 5 минут оптимизировать код, как раз оптимизация которого уже заняла два из трёх лет диссертационного исследования. Даже прогрессоры из фантастических книг так себя не ведут, а годами вникают в местные достижения, уже по современным земным меркам относящиеся к давно пройденному этаму, а сами при этом - посланцы межзвёздных сверхцивилизаций. На изменение геометрии объекта и способа подвода тока и повышение разрешения модели и фиктивное повышение её размерности ушел час, ещё неделя - на фактическое повышение размерности, два года - на оптимизацию, две недели - на проверку адекватности модели и оставшееся время - на оптимизацию уже технологии. Это в диссертационном исследовании под руководством доктора наук и дважды членкора. И прежде, чем заявлять о неэффективности любой инопланетный прогрессор будет вынужден потратить ещё от нескольких недель на изучение того, что уже сделано и только потом сможет сказать, может ли он вообще оценивать эффективность именно здесь, или лучше заняться другими аспектами нашей отсталости. И не только из-за того, что сам быстрее не может, но и чтоб не оскорбить аборигенов. Да и на всякий случай. Вдруг там уже всё отлажено и оптимизировано так, что в рамках технической базы лучше уже не сделаешь? А ведь он если и изучал в школе методы лучше, то основывались то они на возможностях совсем другой и техники, и языков, и трансляторов. А адаптировать даже открытия инопланетных учёных к нашим возможностям - процесс тоже не быстрый. А ты припёрся, как тебе показалось, в палеолитическое племя, себя возомнил пришельцем со звзёд и говоришь: "Вы каменные ножи делать не умеете, так не эффективно, давайте я вас научу делать их из стали на станках и с феррованадивевым покрытием". Это каменные ножи, их дикари лучше, быстрее и эффективнее тебя делают и используют. Лучше стальные. Но эти каменные и стали их сделать нельзя. А стальные - это совсем другой этап и один прогрессор за всю жизнь племя на него не выведет. Нет технологической базы и начинать надо с технологии изготовления не самого ножа, а огнеупорных кирпичей и пока до ножа, идентичного пришельческому доберёшься, надо внедрить ещё много технологий, обучить местных химии, физике, математике... Жизни прогрессора-одиночки просто не хватит. На самом же деле ты принял за камень металлический сплав ТН-20, которым можно резать стекло, тем самым продемонстрировав, что сам родом из средних веков, а "дикари" - из двадцать первого века. А если бы действительно тебя забросило в палеолит, то, прежде чем учить аборигенов делать ножи, ты должен лет 20 потратить на то, чтоб у них самих научиться делать каменные ножи. И только потом по науке следующих веков подсказать дикарям, какой камень действительно лучше, а какой таким только кажется и как другой камень эргономичней держать. И провести эти исследования самостоятельно на базе и научных достижений своей цивилизации, и того, чему тебя научили дикари. Да на них потратить года 3.
 
Текущее время: 17:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru