Вопросы по программированию

Автор Богдан, 03 Листопад 2007, 11:41:18

Попередня тема - Наступна тема

Богдан

 Я предлагаю задавать все вопросы, касающиеся программирования, задавать здесь ( идея beep_boop'a ).

Обратите внимание на следующие правила - перед тем, как задать вопрос, загляньте сюда: HOWTO :: Как правильно задавать вопросы.

Цитата
Объем еще не значит точность

Будьте точны и информативны. Для этого недостаточно просто вставить в запрос большой объем кода или данных. Если имеется большой, сложный тестовый случай, приводящий к ошибке в программе, постарайтесь максимально сократить его.
Это полезно, как минимум, по трем причинам. Первая: продемонстрированные усилия по упрощению вопроса повышают вероятность получения ответа. Вторая: упрощение вопроса повышает вероятность получения полезного ответа. Третья: в ходе уточнения сообщения об ошибке вы сами можете найти решение или способ обхода проблемы.

Цитата
Публичное самоунижение не заменяет выполнение домашних заданий

Некоторые, уяснив, что не надо вести себя грубо или надменно, вымогая ответ, выбирают противоположную крайность - самоунижение. "Я знаю, я начинающий, неудачник и полный чайник, но...". Это отвлекает от сути и не имеет смысла. Особенно в сочетании с неопределенностью в описании фактической проблемы.
Не тратьте свое время, и наше, уповая на жалость. Представьте лучше факты и свой вопрос как можно яснее. Так вы заявите о себе гораздо лучше, чем путем самоунижения.

______________________________________________

Начнем с моего.
Мне 14 лет и я не сильно шарю вообще в области программирования. Вот решил попробовать написать кое-что в Флеше ( actionscript 2.0 ).

Я приведу свою собственную функцию с движением объекта из точки А в точку Б. Если читать не лень, то помогите плз.

Цитата: скрипт
function moveit() {
   // переменные
   var dist=Math.sqrt((x_0-x_1)^2-(y_0-y_1)^2);
   var dist1=Math.sqrt((x_0-x_1)^2);
   var delta_d=dist/12;
   
   // угол вектора движения
   var angle=Math.acos(dist1/dist);
   var angle1=(90*(Math.PI/180))-angle;
   
   // проверка угла (первого)
   trace(angle+" радиан\n");
   trace((angle/(Math.PI/180))+" градусов\n");
   
   // инкременты движения ( то есть скорость зависит от расстояния )
   var delta_x=Math.cos(angle)*delta_d;
   var delta_y=Math.cos(angle1)*delta_d;
   
   // проверка инкрементов
   trace("\n∆x="+delta_x)
   trace("\n∆y="+delta_y)
   
   // начало движения
   for(var i=0; i<=12; i++)
   {
      dot._x=dot._x+delta_x;
      dot._y=dot._y+delta_y;
   }
}
Итак, после действия скрипта с начальной точкой (261,189) в некоторую произвольную конечную точку отображается пустота.

Причем output следующий:
Цитата: output
1.29820210766777 радиан

74.3815017243515 градусов


∆x=-5.25

∆y=-18.7799760383234
Настораживают минусовые инкременты скорости.


Помогите, пожалуйста, найти ошибку или подскажите другой действующий скрипт равномерного движения на as 2.0

snegoviK

Формула расстояния неправильная.

d = sqrt((x0 - x1)^2 + (y0 - y1)^2)

dot._x и dot._y не имеют начальных значений?


Богдан

ЦитатаФормула расстояния неправильная.

d = sqrt((x0 - x1)^2 + (y0 - y1)^2)

dot._x и dot._y не имеют начальных значений?
Да, спасибо. Я увидел. У меня плохо с геометрией.

dot._x & dot._y - координаты объекта (261,189)


ЗЫ. После исправления формулы расстояния скрипт все же отказывается работать. Наверное алгоритм вкорне неправильный

βεερ_βooρ

Цитата: Богдан від 03 Листопад 2007, 16:40:45
Да, спасибо. Я увидел. У меня плохо с геометрией.
Ну если уж на то пошло...
var dist1=Math.sqrt((x_0-x_1)^2);
Если я правильно понял, то должно быть:
var dist1=x_0-x_1;


       /(x_0,y_0)
     /
    /
  /
/(x_1,y_1)
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

Богдан

#4
Вот рисунки.. Блин, черт ногу сломит.





(рис.1) Движение происходит из точки А в точку В. Длина траектории - dist. dist1 - вспомогательная длина стороны треугольника ( если вы заметите где-то ошибку, скажите плз ). Она нужна для определиния угла angle.

(рис.2) А через угол angle и delta_d узнаются итоговые инкременты движения: delta_x & delta_y.

Это должно немного прояснить мой код, так он не совсем верный. Сейчас еще попробую советы beep_boop'a. Tnx всем.

βεερ_βooρ

Цитата: Богдан від 03 Листопад 2007, 19:24:12
Вот рисунки.. Блин, черт ногу сломит.
Ничего, это еще просто ;)
Цитата: Богдан від 03 Листопад 2007, 19:24:12
Движение происходит из точки А вточку В. Длина траектории - dist. dist1 - вспомогательная длина стороны треугольника ( если вы заметите где-то ошибку, скажите плз ).
Длина AC, она же dist1=x_0 - x_1; БЕЗ каких-либо корней.
Цитата: Богдан від 03 Листопад 2007, 19:24:12
Она нужна для определиния угла angle.

А через угол angle и delta_d узнаются итоговые инкременты движения: delta_x & delta_y.
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

snegoviK

#6
Не нужно программировать пока неясна теория!! Перед тем как садиться за компьютер тщательно продумайте условие задачи, если тяжело представить - рисуйте.

Все очень просто. У нас есть прямоугольный треугольник с катетами с1, с2 и гипотенузой hyp.

Теорема Пифагора: c1^2 + c2^2 = hyp^2 => sqrt(с1^2 + c2^2) = hyp.

Теперь представьте c1 и с2 это точки, где c1 = (x0 - x1), а c2 = (y0 - y1). Как найти гипотенузу, которая и будет расстоянием АB?

Идем далее. Простейшие тригонометрические тождества. Угол между гипотенузой и катетом можно найти трёмя способами:

adj - катет, который формирует угол вместе с гипотенузой, opp - катет напротив угла.

cos pheta = adj / hyp
sin pheta = opp / hyp
tan pheta = opp / adj

В нашем случае, известны все стороны треугольника, потому вы можете пользоваться любой формулой. В вашем коде используется косинус - отлично.

В чем может быть проблема? В dist1. Как вам уже подсказали никаких корней квадратных. Это просто x0 - x1. Вот только если A_x = 5, B_x = 12, то у вас проблемы. Пользуйтесь модулями!

Например, d = |A_x| - |B_x|; d = |d|.

βεερ_βooρ

Цитата: snegoviK від 03 Листопад 2007, 21:01:17
Не нужно программировать пока неясна теория!!
+1
Цитата: snegoviK від 03 Листопад 2007, 21:01:17
Все очень просто. У нас есть прямоугольный треугольник с катетами adj, opp и гипотенузой hyp.

Теорема Пифагора: c1^2 + c2^2 = hyp^2 => sqrt(с1^2 + c2^2) = hyp.

Теперь представьте c1 и с2 это точки, где c1 = (x0 - x1), а c2 = (y0 - y1). Как найти гипотенузу, которая и будет расстоянием АB?

Идем далее. Простейшие тригонометрические тождества. Угол между гепотенузой и катетом можно найти трёма способами:

adj - катет, который формирует угол вместе с гипотенузой, opp - катет напротив угла.

cos pheta = adj / hyp
sin pheta = opp / hyp
tan pheta = opp /adj
Может создать новый форум математика? ;)
Цитата: snegoviK від 03 Листопад 2007, 21:01:17
В чем может быть проблема? В dist1. Как вам уже подсказали никаких корней квадратных. Это просто x0 - x1. Вот только если A_x = 5, B_x = 12, то у вас проблемы. Пользутесь модулями!
Судя по рисунку движение идет справа налево, т.е. x0 - x1>0 Ну а в общем случае это будет нелишним.
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

snegoviK

Цитата: beep_boopМожет создать новый форум математика?

Ой, это не для меня. Я в математике слабоват. А вот Пифагор и прямоугольные треугольники это как раз мой уровень. ;)

βεερ_βooρ

Цитата: snegoviK від 03 Листопад 2007, 21:20:22
А вот Пифагор и прямоугольные треугольники это как раз мой уровень. ;)
А как же матлогика, теория алгоритмов, теория вероятности, матстатистика?  ;)
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

Богдан

#10
Блин, убью себя об стенку - ничего не получается!

Изменил:

var dist=Math.sqrt((x_0-x_1)^2+(y_0-y_1)^2);
var dist1=(x_0-x_1)<0?-x_0+x_1:x_0-x_1;
var dist2=(y_0-y_1)<0?-y_0+y_1:y_0-y_1;

&

var delta_x=(dist1/dist)*delta_d;
var delta_y=(dist2/dist)*delta_d;


Output отображает углы и dist как NaN.

βεερ_βooρ

Цитата: Богдан від 03 Листопад 2007, 23:18:14
Output отображает углы и dist как NaN.
Займемся дебагом ;)
Добавь вывод подкоренного выражения перед вычислением корня, которое дает NaN. Чему оно равно?
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

Богдан

#12
Цитата: beep_boop від 03 Листопад 2007, 23:49:55
Займемся дебагом ;)
Добавь вывод подкоренного выражения перед вычислением корня, которое дает NaN. Чему оно равно?
Когда х1>x0 или у1>y0, то получается минусовое значение! Но там же степени!

Добавлено:
Блин.. Увидел. Оператор ^ - это не возведение в степень, а bitwise XOR. Степень вызывается методом Math.pow()

snegoviK

#13
Бугага. Бывает. :) Я вот только хотел сказать. :)

Кстати, в С++ можно оверлоадить битвайз операторы?

ЦитатаsomeType myClass :: operator^( someType )
{
  ...
}

βεερ_βooρ

Цитата: snegoviK від 04 Листопад 2007, 12:27:23
Бугага. Бывает. :) Я вот только хотел сказать. :)
Поэтому я и порекомендовал вывести подкоренное выражение :-)
Цитата: snegoviK від 04 Листопад 2007, 12:27:23
Кстати, в С++ можно оверлоадить битвайз операторы?
Да. А вот sizeof нельзя ;-(
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

BlackShark

#15
Цитата: Богдан від 03 Листопад 2007, 19:24:12




Формула angle неправильная - dist1\dist есть косинусом угла между этими сторонами. Выходит, что ты пытаешься достать угол делением косинуса на косинус :-* Поделюсь личным наблюдением - если умножить косинус на 120 градусов, то получаем угол в градусах. Если нет таблицы Брадиса - достойная замена! Но это только для косинуса! Для угла из синуса умножаем на 60, а для угла из тангенса - на 45.

C2D E8400 @3 GHz BOX| GA-EP43-DS3L F8| Gigabyte 8800 GT 512mb| 4Gb DDR2-800 Kinkston| 160Gb Samsung Sata1| FSB 450W| Vista x64 SP1

Viki

Цитата: BlackShark від 05 Листопад 2007, 16:27:24
Формула angle неправильная - dist1\dist есть косинусом угла между этими сторонами. Выходит, что ты пытаешься достать угол делением косинуса на косинус
cos^-1 - это арккосинус.
ЗЫ: Посмотри его код выше  :)

BlackShark

Цитата: Viki від 05 Листопад 2007, 16:33:55
cos^-1 - это арккосинус.
ЗЫ: Посмотри его код выше  :)
Всё, понял ;)
C2D E8400 @3 GHz BOX| GA-EP43-DS3L F8| Gigabyte 8800 GT 512mb| 4Gb DDR2-800 Kinkston| 160Gb Samsung Sata1| FSB 450W| Vista x64 SP1

Nikolai

А насчет мамематики очень даже неплохо бы было. В программировании все-таки активно используется, особенно игровом.
If you do what you have always done, you'll get what you have always got

BlackShark

Цитата: BlackShark від 05 Листопад 2007, 16:27:24
...если умножить косинус на 120 градусов, то получаем угол в градусах. Если нет таблицы Брадиса - достойная замена! Но это только для косинуса! Для угла из синуса умножаем на 60, а для угла из тангенса - на 45.
Вчера попытался построить парочку формул и спотыкнулся через косинусы. Мой пример доставания угла из косинуса (да и с тангенса с синусом) не помогли - показывается приблизительный результат с "красивым" процентом ошибки. Поэтому не пользуйтесь наведённым выше замечанием - значения углов не совпадают
C2D E8400 @3 GHz BOX| GA-EP43-DS3L F8| Gigabyte 8800 GT 512mb| 4Gb DDR2-800 Kinkston| 160Gb Samsung Sata1| FSB 450W| Vista x64 SP1

snegoviK

#20
Нужно читать доки, как правило, тригонометрические функции на компьютере имеют четкие пределы. Я так понимаю, это ActionScript 3.0? Это вроде язык, который используется Флешем.

Ну вот, посмотри:

http://livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00005246.html
http://livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00005251.html#wp193698

ЦитатаNote: The cosine of a 90 degree angle is zero, but because of the inherent inaccuracy of decimal calculations using binary numbers, Flash Player will report a number extremely close to, but not exactly equal to, zero.

Короче говоря, во всех языках эти функции иногда подводят. Поэтому нужно внимательно отслеживать какие значения программа вводит в эти функции и какие именно из них выдают серьезное отклонение.

ЗЫ. Offtop: Вот вроде разрабы Flash, у нас типа Web 2.0 век. Где обещанные Clean URLs? Или для доков лень сделать? :)

snegoviK

#21
Также можно создать encapsulation, например, создай свою функцию косинуса:

Pseudo-code:

//return a more accurate 0 value
double myCos(double pheta)
{
  double ninetyDeg = Math.PI / 2;
  double factor = pheta / ninetyDeg;
  int check = factor;
  if(check == factor)
  {
    if(factor % 2 != 0) return 0.0;
  }
  return Math.cos(pheta);
}


Эта функция получает угол в радианах. Потом:

1) Пытается поделить угол на 90 градусов.
2) Если коэффициент - целое число, то функция проверяет четное число или нет (Углы, которые дают 0 - 90, 270, 450... Если поделить на 90 получается ряд нечетных чисел 1, 3, 5, 7...).
3) Если число нечетное, то функция возвращает 0, если нет - косинус угла используя Math.cos.

Таким образом, myCos() возвращает более точный 0. Это просто иллюстрация, смысл в том, что с помощью encapsulation можно добавить немного нужной тебе логики к стандартным функциям. Например, можно создать функцию, которая будет считать косинус угла в градусах если тебе так удобнее или проверять как-то угол, чтобы избежать неточностей и т.д. и т.п.


snegoviK

Для тех, кто знает английский, отличный ресурс по С++ программированию - IRC канал #c++ на irc.freenode.net.

Ребята хоть и немного помешанные на С++, очень дружелюбные и всегда помогут с проблемами. Ни раз выручали и давали путные советы. Очень рекомендую.

Богдан

Немного не в тему спрошу: я записался на районную олимпиаду по программингу - посмотреть, насколько я крутой.

Может, кто-нибудь знает, какого рода там задания? Подскажите, чтобы знать к чему готовиться.

βεερ_βooρ

Цитата: Богдан від 30 Листопад 2007, 16:45:34
Немного не в тему спрошу: я записался на районную олимпиаду по программингу - посмотреть, насколько я крутой.
Ну, это всегда полезно :)
Если есть амбиции обрати внимание на TopCoder
Цитата: Богдан від 30 Листопад 2007, 16:45:34
Может, кто-нибудь знает, какого рода там задания? Подскажите, чтобы знать к чему готовиться.
Задания там с упором в математику ;)
А тексты заданий - легко найдуться гуглом по запросу "олимпиада информатика"
Например http://www.informatics.ru/
Украинские http://www.uoi.kiev.ua/

У меня где-то валялись старые задачки на Киевскую олимпиаду, может на следующей недельке смогу достать в своей бывшей школе более солидный сборник.

Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

Богдан

Цитата: beep_boopУ меня где-то валялись старые задачки на Киевскую олимпиаду, может на следующей недельке смогу достать в своей бывшей школе более солидный сборник.

Буду признателен :)

Просто не хочу оказаться полным сапогом среди одиннадцатиклассников ( я же в девятом учусь ) - нам программирование только в следующем году будут преподавать.

βεερ_βooρ

Цитата: Богдан від 30 Листопад 2007, 17:54:06
Просто не хочу оказаться полным сапогом среди одиннадцатиклассников ( я же в девятом учусь ) - нам программирование только в следующем году будут преподавать.
А какие ЯП ты знаешь?
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

Богдан

Цитата: boop_boopА какие ЯП ты знаешь?
Знаю синтаксис Си ( типы, стандартные операторы, их употребление ), то есть без углубления в специфические функции всяких разных библиотек ( MFC, например ). Ну, и как следствие, могу понять то безразмерное количество Си-подобных языков ( Ява/Яваскрипт, тот же Экшенскрипт ( см. выше :-) ), РНР в некоторой степени ).

Сейчас зубрю по университетскому учебнику консоль Си++. На олимпиаде, наверное, с консолью придется работать.

Еще немного читал о Паскале - интересно же узнать, что придется штудировать в следующем году.

snegoviK

Боже, какая мешанина. Ничего не зубрите, пожалуйста. Может не стоит торопить время? Самому очень легко подхватить нехорошие привычки. Учиться программировать рекомендуется под надзором хорошего наставника.

Блин, была у меня отличная книга про программированию на русском. Отец подарил. Классика жанра. Жаль название забыл и с собой её у меня нет. :( Так бы обязательно посоветовал раздобыть.

Nikolai

Цитата: snegoviK від 30 Листопад 2007, 21:35:30
Блин, была у меня отличная книга про программированию на русском. Отец подарил. Классика жанра. Жаль название забыл и с собой её у меня нет. :( Так бы обязательно посоветовал раздобыть.

Code Complete? :)
If you do what you have always done, you'll get what you have always got

βεερ_βooρ

Цитата: Богдан від 30 Листопад 2007, 18:44:47
Знаю синтаксис Си ( типы, стандартные операторы, их употребление ), то есть без углубления в специфические функции всяких разных библиотек ( MFC, например ). 
Ну MFC тебе точно не понадобиться :) А вот STL - да.
Цитата: Богдан від 30 Листопад 2007, 18:44:47
Ну, и как следствие, могу понять то безразмерное количество Си-подобных языков ( Ява/Яваскрипт, тот же Экшенскрипт ( см. выше :-) ), РНР в некоторой степени ).
Они тебе на олимпиадах - не понадобятся. Разве что на олимпиадах по веб-дизайну(есть такие)
Цитата: Богдан від 30 Листопад 2007, 18:44:47
Сейчас зубрю по университетскому учебнику консоль Си++. На олимпиаде, наверное, с консолью придется работать.
Обычно на олимпиаде предоставляются для разработки старые ИДЕ от Борланда (Borland Pascal 7/Borland C++ 3.1)
Цитата: Богдан від 30 Листопад 2007, 18:44:47
Еще немного читал о Паскале - интересно же узнать, что придется штудировать в следующем году.
Относительно выбора ЯП для олимпиады - выбирай тот, который лучше знаешь. С некоторым прицелом в сторону С++, т.к. иногда он поможет пройти тесты на время, если не смог подобрать оптимальный алгоритм.
А поинтересоваться  условиями у организаторов никто не запрещал. :-)
И почитать книги по теории алгоритмов. На приведеных мною сайтах есть список литературы, если интирисует конкретная тема - спрашивай, могу посоветовать, что имею.
Цитата: snegoviK від 30 Листопад 2007, 21:35:30
Боже, какая мешанина. Ничего не зубрите, пожалуйста. Может не стоит торопить время? Самому очень легко подхватить нехорошие привычки. Учиться программировать рекомендуется под надзором хорошего наставника.
... и лишь только потом идти на олимпиады.
Цитата: snegoviK від 30 Листопад 2007, 21:35:30
Блин, была у меня отличная книга про программированию на русском. Отец подарил. Классика жанра. Жаль название забыл и с собой её у меня нет. :( Так бы обязательно посоветовал раздобыть.
*ностальгически* Я учился по КиР и Шилду...
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

Andrii

Хтось в Java вміє працювати? В мене є якісь книги і програми, але я одного не знаю ЯК НАЗИВАЄТЬСЯ ПРОГРАМА В ЯКІЙ ПРОГРАМУЄТЬСЯ? (В мене є Java Web Start, Sun ONE Studio 5u1 SE, BorlandJBuilder, InteliJDea, яка з них). Не могли б розказати все по порядку ::)

βεερ_βooρ

Цитата: Andrii від 04 Грудень 2007, 21:50:57
ЯК НАЗИВАЄТЬСЯ ПРОГРАМА В ЯКІЙ ПРОГРАМУЄТЬСЯ? (В мене є Java Web Start, Sun ONE Studio 5u1 SE, BorlandJBuilder, InteliJDea, яка з них).
Как все запущенно...
Цитата: Andrii від 04 Грудень 2007, 21:50:57
Не могли б розказати все по порядку ::)
Если вкратце - в состав JDK(Java Development Kit) входит компилятор, который формирует код для виртуальной Java-машины. Он принимает исходные тексты программы в виде файлов, компилирует их и формирует код. Ему до лампочки, как и в какой программе ты создал исходные файлы. Поэтому "программы, в которой программируется" как таковой нет. Есть IDE(Например тот же JBuilder). Попробуй несколько из них, и реши какая тебе удобней.
 
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

Nikolai

Andrii, попробуй найти Eclipse, хороший IDE для Java.
If you do what you have always done, you'll get what you have always got

Andrii


Богдан

#35
Есть двумерный массив. В трех ячейках [1][3], [2][3] и [3][3] значения равны {1,0,2}

Блин, ну какого х... хрена
    m[1][3]==m[2][3]==m[3][3]
возвращает истину?!

Пойду спать: голова уже не работает вообще.

Nikolai

Цитата: Богдан від 13 Грудень 2007, 22:05:05
Есть двумерный массив. В трех ячейках [1][3], [2][3] и [3][3] значения равны {1,0,2}

Блин, ну какого х... хрена
    m[1][3]==m[2][3]==m[3][3]
возвращает истину?!

Пойду спать: голова уже не работает вообще.
Что-то я недопонял... Если значения равны оно же и должно возвращать истину... ???
If you do what you have always done, you'll get what you have always got

Viki

Цитата: Nikolai від 13 Грудень 2007, 22:41:12
Что-то я недопонял... Если значения равны оно же и должно возвращать истину... ???
Угу, а равны ли сами значения?  :)

Богдан

Цитата: Nikolai від 13 Грудень 2007, 22:41:12
Что-то я недопонял... Если значения равны оно же и должно возвращать истину... ???
Не между собой равны, а равны {1,0,2}

βεερ_βooρ

Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?


βεερ_βooρ

Цитата: Богдан від 13 Грудень 2007, 23:25:14
Си++@Dev-C++
*Тоном профессора*
Рассмотрите такой модельный пример:
#include<stdio.h>
int main(int argc, char *argv)
{
int i,j,k;
i=1;
j=0;
k=2;
printf("i=%i\nj=%i\nk=%i\n",i,j,k);
if(i==j==k) puts("i==j==k");
if(i==k==j) puts("i==k==j");
if(j==i==k) puts("j==i==k");
if(j==k==i) puts("j==k==i");
if(k==j==i) puts("k==j==i");
if(k==i==j) puts("k==i==j");

return 0;
}

Вывод:
bash-3.1$ ./test
i=1
j=0
k=2
i==k==j
k==i==j

Вы поняли в чем у вас ошибка?
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

Nikolai

Я лично не понял. При определенных условиях выдает значения за равные...
If you do what you have always done, you'll get what you have always got

βεερ_βooρ

Цитата: Nikolai від 14 Грудень 2007, 00:01:28
Я лично не понял. При определенных условиях выдает значения за равные...
1) Внимательно присмотритесь на условия(в особенности на порядок аргументов) ;)
2) Вспомните, что отношение эквивалентности имеет степень 2 и запись a=b=c является "жаргонизмом", в котором используется с-во транзитивности.
3) Математическая запись a=b=c не эквивалентна сишной a==b==c

Теперь догадались?
Или еще подсказки?
... или сразу ответ?
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

Nikolai

Та бл!)) Так бы сразу и сказал, что надо мозги напрягать типа operator precedence! Я думал там что-то элементарно-детское.

ЗЫ, и вообще, не люблю я это "==" писать...
If you do what you have always done, you'll get what you have always got

βεερ_βooρ

Цитата: Nikolai від 14 Грудень 2007, 00:53:45
Та бл!)) Так бы сразу и сказал,
А как же интрига?
Цитата: Nikolai від 14 Грудень 2007, 00:53:45
что надо мозги напрягать типа operator precedence!
Не совсем, но близко ;) Напрягись чуть больше. Тут прикол не с operator precedence, ибо присутствует оных всего 1 тип(==) и обрабатываться они будут LR.
Цитата: Nikolai від 14 Грудень 2007, 00:53:45
Я думал там что-то элементарно-детское.
Ну так это и есть детское :D
Цитата: Nikolai від 14 Грудень 2007, 00:53:45
ЗЫ, и вообще, не люблю я это "==" писать...
? :o :-\
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

Nikolai

Цитата: beep_boop від 14 Грудень 2007, 01:27:18
Не совсем, но близко ;) Напрягись чуть больше. Тут прикол не с operator precedence, ибо присутствует оных всего 1 тип(==) и обрабатываться они будут LR.
В том-то и дело, что не хочется. Вот возьмусь завтра курс. программку писать, тогда вникну на волне :)

Цитата: beep_boop від 14 Грудень 2007, 01:27:18
? :o :-\
Ну я стараюсь изпользовать "=" где возможно. Я знаю, что разница есть, но все-таки.
If you do what you have always done, you'll get what you have always got

βεερ_βooρ

Цитата: Nikolai від 14 Грудень 2007, 01:52:08
Ну я стараюсь изпользовать "=" где возможно. Я знаю, что разница есть, но все-таки.
No comments. Что курите?
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

Nikolai

If you do what you have always done, you'll get what you have always got

Богдан

Заменил условие на
    (m[1][3]==m[2][3])&&(m[2][3]==m[3][3])
Но всё же не понял, как порядок влияет на результат условия.