Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
#include <iostream>
#include <conio.h>
using namespace std;
void iswap(int &n1, int &n2)
{
int temp = n1;
n1 = n2;
n2 = temp;
}
int main()
{
int const n = 100;
int a[n];
for ( int i = 0; i < n; ++i ) { a[i] = n - i; cout << a[i] << " "; }
//заполняем массив для наглядности.
//-----------сортировка------------//
//сортирует по-возрастанию. чтобы настроить по-убыванию,
//поменяйте знаки сравнения в строчках, помеченных /*(знак)*/
int sh = 0; //смещение
bool b = false;
for(;;)
{
b = false;
for ( int i = 0; i < n; i++ )
{
if( i * 2 + 2 + sh < n )
{
if( ( a[i + sh] > /*<*/ a[i * 2 + 1 + sh] ) || ( a[i + sh] > /*<*/ a[i * 2 + 2 + sh] ) )
{
if ( a[i * 2 + 1 + sh] < /*>*/ a[i * 2 + 2 + sh] )
{
iswap( a[i + sh], a[i * 2 + 1 + sh] );
b = true;
}
else if ( a[i * 2 + 2 + sh] < /*>*/ a[ i * 2 + 1 + sh])
{
iswap( a[ i + sh], a[i * 2 + 2 + sh]);
b = true;
}
}
}
else if( i * 2 + 1 + sh < n )
{
if( a[i + sh] > /*<*/ a[ i * 2 + 1 + sh] )
{
iswap( a[i + sh], a[i * 2 + 1 + sh] );
b = true;
}
}
}
if (!b) sh++; //смещение увеличивается, когда на текущем этапе
//сортировать больше нечего
if ( sh + 2 == n ) break;
} //конец сортировки
cout << endl << endl;
for ( int i = 0; i < n; ++i ) cout << a[i] << " ";
_getch();
return 0;
}
Запостил как-то на вики как более короткая реализация с++, более понятная и главное - рабочая. Не признали. Сам смотрю - не понимаю че там написано )))
достаточно хотя бы (i * 2 + 1 + sh) засунуть в отдельную переменную, дать ей осмысленное название (типа offs - я не знаю, какой смысл тут на самом деле), и использовать везде offs и offs + 1, и уже будет лучше
затем, собственную iswap было не западло реализовать, а std::swap, значит, полная хрень?
> iswap было не западло реализовать, а std::swap, значит, полная хрень? iSwap очень рекламировался Стивом Джобсом
Видно же, что это лаба. А на лабах std::sort_heap, std::swap и прочие стандартные алгоритмы могут быть запрещены.
да своп был ограничен условиями не лабы, а подходом к собственной реализации, там как видите я даже вектор не использовал, чтобы был понятен алгоритм и не было сложностей с перетранляцией на другие языки. это я его таким на вики сунул. лабу я сдавал с оригинальным свопом и векторами )
А волшебство с введением константы n, содержащей максимальную длину массива действительно только усложняет поиск путей оптимизации препроцессором, и лучше бы это задефайнить, или я ошибаюсь?
Просто из любопытства, а какой редактор так интерсно фигурные скобки расставляет? Мне такой стиль впервые в жизни попался. Ну, в смысле, когда фигурная скобка под else if стоит под if.
Про nano не надо, он хороший (ну как редактор кода - не знаю), но выручил меня в годы тягостных раздумий, когда драйвера к видеокарте не подходили совсем, он единственный, кто хоть как-то работал в консоли на "тупом терминале". Ну может еще ed работал, но я не умею им вообще никак - с трудом закрыл 🙂
vi героически погиб пытаясь раскрасить какой-то конфиг (что-то у него с цветами не задалось и вместо расцветки понеслись ^[[X;Y;Zm........ изза которых текст превратился в месиво, а потом просто сместился за край монитора 🙂 Как сейчас помню. mc не был установлен, да и не пользуюсь я им практически никогда, я бы даже не знал, что в нем еще и редактор есть.
> что-то у него с цветами не задалось и вместо расцветки понеслись ^[[X;Y;Zm
Хм. Последний раз когда я такое видел - когда заходил через последовательный порт 😉 А в консолях - всегда было все цветное, ну разве что русские буквы не показываются, если не настроены.
> mc не был установлен
А я вот привык к mc'шке. Даже при живых иксах пользуюсь, когда надо порыться в файлах.
> Только bash, только хардкор...
Мне лень копировать и просматривать файлы через консоль, когда в mc это можно сделать быстрее и удобнее. Видимо я хомячок 😉
C-x d
без вариантов :), ну и обычно ECB открыт, в нем тоже можно. Единственное, что напрядает - в dired нету быстрого архивирования / разархивирования (только по одному файлу), и я каждый раз как сталкиваюсь с тем, что опций архиваторов не помню срочно берусь доделывать, но что-то меня останавливает...
Если эмакса нету, или чужой компутер, на котором эмакс не похож на мой... даже не знаю, наверное использовал бы графический проводник / консоль, по обстоятельствам. Но даже не знаю, давно не случалось.
vim (не путать с vi!) очень даже неплох, да и запомнить пяток команд ("a" чтобы перейти в режим редактирования, <ESC> в режим команд, ":wq" выйти записать, ":q!" выйти без сохранения, "u" отмена действия) не так сложно, и вполне достаточно для минимальной работы с ним.
вообще такая херня как else if - не используют в с++, такая жопа только на пхп есть (elseif) или на питоне (кажется elif). поэтому в с++ нужно использовать процедуры или функции чтобы упростить код вроде этого. с другой стороны скобки стоят правильно по синтаксису
вообще то дискуссия про то как правильно ставить скобочки а не как использовать элзиф (который я уже сказал 2 раза что в с++ не юзают)
вот. обратите внимание, что отступ есть даже если скобки не ставятся. http://imageshack.us/photo/my-images/171/bscf.jpg/
Ну так отступ у оператора а не у скобок. А я просил именно пруф вашего способа индентации (выравнивание скобок по if, стоящему после else) или же пруф использования else и if на разных строках.
вот вам правильный ответ:
else
(tab) if
(tab){
(2tab)//code
(tab)}
так делают все парсеры. напишите else, нажмите enter - каретка перебросится на другую строку + табуляция.
еще вариант елз иф если внутри елза не одна операция а несколько:
else
{
(tab)if
(tab){
(2tab) //code
(tab)}
(tab)if
(tab){
(2tab) //code
(tab)}
}
намереваюсь закончить дискуссию т.к изза смещения комментов вправо мой экран 1024*768 сплющивает текст до нечитабельности.
> так делают все парсеры. напишите else, нажмите enter - каретка перебросится на другую строку + табуляция
Правильно делают. Но в то же время если я напишу else if, то они выровняют следующую скобку не по if а по else.
Против второго варианта, где много кода в ветке else ничего не имею.
А по первому - ну приведите хотя бы один пруф, где применено такое форматирование сочетания else и if как здесь, или как в коде который приведен в начале треда. Книгу, ссылку, опенсурс проект, да что угодно...
Надо плагин к git, который перед коммитом приводит whitespace к некой стандартной форме, а при просмотре диффов или чекауте приводит все к виду, который больше всего нравится автору. И волки сыты и овцы целы 😉
Респект
мешанина символов, равномерно и с низкой плотностью заполняющая экран
затем, собственную iswap было не западло реализовать, а std::swap, значит, полная хрень?
iSwap очень рекламировался Стивом Джобсом
Видно же, что это лаба. А на лабах std::sort_heap, std::swap и прочие стандартные алгоритмы могут быть запрещены.
Жуть.
Эм, так там и mc с его mcedit должны отлично работать... И vi с vim'ом...
Хм. Последний раз когда я такое видел - когда заходил через последовательный порт 😉 А в консолях - всегда было все цветное, ну разве что русские буквы не показываются, если не настроены.
> mc не был установлен
А я вот привык к mc'шке. Даже при живых иксах пользуюсь, когда надо порыться в файлах.
А каким менеджером пользуетесь, если не секрет?
В богомерзкой винде иногда eshell выручает
Мне лень копировать и просматривать файлы через консоль, когда в mc это можно сделать быстрее и удобнее. Видимо я хомячок 😉
без вариантов :), ну и обычно ECB открыт, в нем тоже можно. Единственное, что напрядает - в dired нету быстрого архивирования / разархивирования (только по одному файлу), и я каждый раз как сталкиваюсь с тем, что опций архиваторов не помню срочно берусь доделывать, но что-то меня останавливает...
Если эмакса нету, или чужой компутер, на котором эмакс не похож на мой... даже не знаю, наверное использовал бы графический проводник / консоль, по обстоятельствам. Но даже не знаю, давно не случалось.
стоит отметить что из-за него таб стал в этом месте 5 позиций, смещая все остальное внутри себя (ср отступ в строках 35 и 49)
а не то, что ты подумал
элз иф писал так сам для минимизации этого говна хотя бы на 2 строчки )
P.S. Если уж хочется минимизации - можно было воспользоваться стилем K&R.
Предложение было только про уменьшение отступа на 5 пробелов в строках 39-42 и 46-52...
> это ж в стиле кнута только без goto
Кнут смотрит на вас с грустью в глазах.
поменять на это (как пишут все)
else
if (...)
{
}
А зачем вы ее используете? Если уж быть одептом - то до конца.
Как говорится "Tits or GTFO".
вот. обратите внимание, что отступ есть даже если скобки не ставятся.
http://imageshack.us/photo/my-images/171/bscf.jpg/
case 1: if
(таб){
(2 таба)
(таб)}
чтобы было понятно что код в скобках принадлежит только if
else
(tab) if
(tab){
(2tab)//code
(tab)}
так делают все парсеры. напишите else, нажмите enter - каретка перебросится на другую строку + табуляция.
еще вариант елз иф если внутри елза не одна операция а несколько:
else
{
(tab)if
(tab){
(2tab) //code
(tab)}
(tab)if
(tab){
(2tab) //code
(tab)}
}
намереваюсь закончить дискуссию т.к изза смещения комментов вправо мой экран 1024*768 сплющивает текст до нечитабельности.
Правильно делают. Но в то же время если я напишу else if, то они выровняют следующую скобку не по if а по else.
Против второго варианта, где много кода в ветке else ничего не имею.
А по первому - ну приведите хотя бы один пруф, где применено такое форматирование сочетания else и if как здесь, или как в коде который приведен в начале треда. Книгу, ссылку, опенсурс проект, да что угодно...
}
K&R 😉
Я уже как-то писал про свои отступы, обругали. Одни ценители кругом. ^^