Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2009, 11:11   #1
TipsyKID
Новичок
Джуниор
 
Регистрация: 15.12.2009
Сообщений: 2
По умолчанию Что читабельней

Возник спор.
Если можно рассудите.
Чей код читабельней.
Вот два примера решения одной тривиальной задачи:
Есть массив в нем надо найти элемент равный заданному.

Решение а) :
Код:
bool found = false;
 for (int i = 0; i < size; i++)
   { 
         if (a[i]==b)
           {
               found = true;
               break;
            }
   }
Решение б) :
Код:
int i=0;
bool found = false;
While (a[i]!=b)&&(i<size-1) i++;
if (a[i]==b) 
    found = true;

Последний раз редактировалось TipsyKID; 15.12.2009 в 11:34. Причина: исправил описки
TipsyKID вне форума Ответить с цитированием
Старый 15.12.2009, 11:17   #2
ThisIzGame
Форумчанин
 
Регистрация: 31.08.2009
Сообщений: 161
По умолчанию

по мне так 1ый более читабельный
ThisIzGame вне форума Ответить с цитированием
Старый 15.12.2009, 11:25   #3
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Дело не в читабельности, а даже в корректности кода. Первый верный и читабельнее, второй не верно построен, т.к. если size == размеру (длине) массива a, и заданный элемент не будет найден, то тогда выйдет if(a[i] == b) (смотрите на кол-во знаков равно это и первого алгоритма касается) что i уже равен size, т.е. обращение к участку памяти не входящего в массив a

Edit:
Код:
While (a[i]!=b)&&(i<size-1) i++;
if (a[i]==b) 
    found = true;
>>
Код:
While (a[i]!=b)&&(i<size) i++;
found = (i < size);

Последний раз редактировалось BOBAH13; 15.12.2009 в 11:47.
BOBAH13 вне форума Ответить с цитированием
Старый 15.12.2009, 11:35   #4
TipsyKID
Новичок
Джуниор
 
Регистрация: 15.12.2009
Сообщений: 2
По умолчанию

Для BOBAH13 исправил неточность , спасибо.
TipsyKID вне форума Ответить с цитированием
Старый 15.12.2009, 12:00   #5
Ivan_32
somewhere else
Участник клуба
 
Аватар для Ivan_32
 
Регистрация: 17.07.2008
Сообщений: 1,409
По умолчанию

Предлагаю свое решение
Код:
int b=83,num;
for(num=0;i<10,mass[num]!=b;num++);
"Тяжело в учении, легко в бою" - А.В. Суворов
Ivan_32 вне форума Ответить с цитированием
Старый 15.12.2009, 12:59   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от TipsyKID
исправил неточность , спасибо.
TipsyKID, имхо, плохо Вы её исправили.
Если сопадающий элемент находится в последнем элементе массива, то Ваш вариант ошибочно вернёт, что не найдено!

Лучше возьмите вариант BOBAH13

p.s. а вообще, имхо, 1-й вариант действительно попроще, и понятнее, а второй вариант "более хакерский"... хотя я лично люблю именно подобные варианты...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.12.2009, 14:33   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Хы... Можно ведь и такое написать:
Код:
 bool found=false;
  for(i=0;(i<size)&&(~found);found=(a[i++]==b));
И нельзя сказать что это нечитабельно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.12.2009, 14:50   #8
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Stilet
Цитата:
И нельзя сказать что это нечитабельно.
можно. для меня читабельность - пробелы между операторами и операндами, на одной строке не более одной команды (с исключениями).

пс...
Цитата:
int *p = mass;
while (*p++ && *p != val);
printf("%s\n", *p ? "found" : "not found");
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 15.12.2009, 14:55   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
pproger
Я ж не говорю что нечитабельность должна выглядеть именно так и никак по другому.
Тут уж от вкусов зависит.
Для меня например твой пример хуже читать. Я бы его так написал
Цитата:
while ((*p++) && (*p != val));
Так что тут без 100 грам не подерешся
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.12.2009, 19:28   #10
nazavrik
Форумчанин
 
Аватар для nazavrik
 
Регистрация: 01.09.2008
Сообщений: 178
По умолчанию

Цитата:
Сообщение от pproger Посмотреть сообщение
на одной строке не более одной команды (с исключениями).
+1.

Не понимаю из каких соображений делаются подобные записи, экономия строк?

Код:
While (a[i]!=b)&&(i<size-1) i++;
Так гораздо читабельней:

Код:
While (a[i]!=b)&&(i<size-1) 
      i++;
Быть радикальным - значит понять вещь в её корне. К.Маркс
nazavrik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
что нужно сделать с <td> что бы между картинками другого <table> не было разделения? alex555 HTML и CSS 22 24.04.2012 16:43
Не могу разобраться что за что отвечает в CSS Maxs HTML и CSS 1 03.11.2009 18:35
Как узнать что в содержимое буфера обмена добавилось что либо? zotox Общие вопросы Delphi 2 15.09.2009 12:07
А что, если всем объедениться и создать что-нибудь глобальное? kuzmich Свободное общение 61 31.05.2007 21:01