Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник
Коллекция курьезных вопросов из форумов
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »
Страницы: 1 2

Неожиданная задачка на сайте программистов про.. программирование


ВладОшин ©   (03.12.20 09:55

))
Дочь кинула вчера - вводят числа, посчитать кол-во меньше нуля и =0

Условно она написала (с++, но какая разница.. никакой, вроде)
while(i++ < 100)
{
cin»x;
if (x<0) s++;
if (x==0) t++;



на что препод "кинул страйк"
Оптимизировать:
if (x<0) s++;
if (x==0) t++;


ну фиг, конечно, знает.. Числа могут и >0 ведь быть
посоветовал
if (x>0) continue;
if (x<0) s++ else t++;

а как тут оптимизировать еще?


manaka ©   (03.12.20 11:35[1]


> if (x<0) s++;
> if (x==0) t++;

В любом случае проверяются два условия. Надо
if (x<0) s++ else
if (x==0) t++;
При х<0 проверка второго условия не выполняется.

Время, блин, у них экономится должно, наверное :)


ВладОшин ©   (03.12.20 12:27[2]


> manaka ©   (03.12.20 11:35) [1]

ну может быть..
Но так менее читабельно, имхо )


manaka ©   (03.12.20 12:58[3]

Давно с++ волнует читабельность?
))))))))))))


manaka ©   (03.12.20 13:01[4]

дело препода - научить правильно писать.
а тов шутка ходит:
Задача. Есть пять пеналов, в каждом по 4 карандаша. Сколько карандашей в пяти пеналах.
5х4=20 - неправильное решение
4х5=20 - правильное решение
:)


Внук ©   (03.12.20 18:05[5]

Наверняка именно else и имелся в виду.
if
elif

Буквально на прошлой неделе своему пояснял, что не надо проверять заведомо лишние условия :)


manaka ©   (03.12.20 21:09[6]


> Внук ©   (03.12.20 18:05) [5]

Я обычно показываю два кода:

a:=1;
for i=1 to 1000000
a:=a+1;

и

a:=1;
for i=1 to 1000000
if a>0 then a:=a+1;

предложив сравнить время выполнения :)


ВладОшин ©   (04.12.20 11:15[7]

чет не вижу разницы

program Project1;
{$APPTYPE CONSOLE}
uses
 SysUtils, Windows;
var
 i, X, C1, C2: Integer;
 N,L1,L11,L2,L22: Cardinal;
begin
 N := 90999999;
 C1 := 0; C2 := 0;
 L1 := GetTickCount;
 for i := 0 to N do
 begin
   X := Random(100) - 50;
   if X < 0 then
     C1 := C1 + 1;
   if X = 0 then
     C2 := C2 + 1;
 end;
 L11 := GetTickCount;
 if C1=C2 then
   write('disable calculate ignor compil');

 C1 := 0; C2 := 0;
 L2 := GetTickCount;
 for i := 0 to N do
 begin
   X := Random(100) - 50;
   if X < 0 then
     C1 := C1 + 1 else
     if X = 0 then
        C2 := C2 + 1;
 end;
 L22 := GetTickCount;
 if C1=C2 then
   write('disable calculate ignor compil');

 Writeln(L11-L1, '  ', L22-L2);
 readln;
end.


ВладОшин ©   (04.12.20 11:18[8]

а вот вариант с

   if X > 0 then
     Continue;
   if X < 0 then
      C1 := C1 + 1 else
      C2 := C2 + 1;


чуть быстрее )


manaka ©   (04.12.20 11:50[9]


> ВладОшин ©   (04.12.20 11:18) [8]

А сколько (С1+С2)/N? То есть, какой процент положительных?
;)


ВладОшин ©   (04.12.20 13:36[10]

>> cколько (С1+С2)/N?
0.509, почти 50%

по числам тиков

840 (+-2 )
вариант
  if X < 0 then
    C1 := C1 + 1;
  if X = 0 then
    C2 := C2 + 1;

и примерно также вариант
  if X < 0 then
    C1 := C1 + 1 else
    if X = 0 then
       C2 := C2 + 1;

825 (+-2 )
вариант
  if X > 0 then
    Continue;
  if X < 0 then
     C1 := C1 + 1 else
     C2 := C2 + 1;


ВладОшин ©   (04.12.20 13:37[11]

ps
антивирус сбесился, два раза удалил уже этот project1.exe.. Видимо, опасным чем-то занимаюсь )


manaka ©   (04.12.20 15:27[12]


> ВладОшин ©   (04.12.20 13:37) [11]

Антивирус пишет "рекламная программа"? Знакомая фигня )))


manaka ©   (04.12.20 15:30[13]

Было такое.
Компилишь - антивирь удаляет программу.
Отключаешь антивирь.
Компилишь.
Включаешь антивирь.
Запускаешь программу - никакой ругани. То есть, удаляет только на моменте компиляции.
У меня это было на free-версии дельфи. Она видимо пытается в экзешник запихнуть рекламу самое себя. ))))


Inovet ©   (04.12.20 16:16[14]

> [2] ВладОшин ©   (03.12.20 12:27)
> ну может быть..
> Но так менее читабельно, имхо )

Вообще вполне типично, только вот так лучше

if (x<0) s++;
else if (x==0) t++;


Inovet ©   (04.12.20 16:17[15]

> [4] manaka ©   (03.12.20 13:01)
> 5х4=20 - неправильное решение
> 4х5=20 - правильное решение

Это не шутка, увы.


ВладОшин ©   (04.12.20 17:51[16]


> manaka ©   (04.12.20 15:30) [13]

интересно )

но нет, у меня просто рапортует, что "все сделано!" Угроза устранена!
Дебила кусок ))

Просто, как понял, если не сохранять проект куда-то(типа, c:\delphi_prog\), то он в program files пытается компилить. А это важная папка, повышенный ахтунг )


ВладОшин ©   (04.12.20 17:52[17]


> if (x<0) s++;
> else if (x==0) t++;

ну так пишу же - по скорости никакого прибытка получается


Inovet ©   (04.12.20 18:01[18]

> [17] ВладОшин ©   (04.12.20 17:52)

Я про читабельность - это вполне нормально читается, и с сотваными операторами {} тоже. Лучше чем с else на строчку выше. Только не надо форматировать отступами. Короче - типичный шаблон.

if () {
 //
}
else if() {
 //
}
else if() {
 //
}
else {
 //
}


Inovet ©   (04.12.20 18:03[19]

> [16] ВладОшин ©   (04.12.20 17:51)
> но нет, у меня просто рапортует, что "все сделано!" Угроза
> устранена!

Я в исключания добавляю саму студию и всю папку с проектами. А то задалбывают не тем так другим.


Страницы: 1 2 версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо