Видео ролики бесплатно онлайн

Смотреть мультики видео

Официальный сайт nokia 24/7/365

Смотреть видео бесплатно


m0nhawk 14.01.10 21:11 # +0
А код слишком большое? Было бы проще если бы он весь был, в спойлер можешь спрятать :)
SiNNeR 14.01.10 21:14 # +0
Посмотрите в отладчике где зависает.
NeonLight_Child 14.01.10 21:20 # +0
Блин, даже теперь незнаю что делать. Прога заработала без зависаний. После того как ее переписал этот кусочек в отдельную мелкую прогу-она заработала. А большая программа-источник виснет. Значит проблема не в функции, в данных которые в нее вбиваются
flar 14.01.10 21:21 # +1
В приведенном куске кода нету ни циклов ни рекурсии. зависать нечему. Попробуйте привести весь код.
А вот массив igrok объявляется размером 299, индексы от 0 до 298. вместо предполагаемого размера массива 300

NeonLight_Child 14.01.10 21:30 # +0
Этот мелкий кусок программы действительно заработал. А вот программа первоисточник виснет. Эксперименты показали, что она висла при вызове этой функции. Наверно входные данные кривы. Буду копать дальше.
Leliksan_Floyd 14.01.10 21:21 # +1
во-первых float Rasst(TVector2 c1, TVector2 c2) -> float Rasst(const TVector2 c1, const TVector2 c2) - уже экономия по памяти.
да и TVector2 -это скорее вектор изменения положения точки в единицу времени.
// --- массив с юнитами (игроками) ---
Tigrok igrok[igrnum-1]; 300 - 1 = 299 зачем ? 0_o

а такой баги чтоб прога висла, я не вижу по этому коду.
NeonLight_Child 14.01.10 21:24 # +0
Спасибо. Поправлю. Виснет программа первоисточник.
m0nhawk 14.01.10 21:46 # +0
Ну так полную приведи.
NeonLight_Child 14.01.10 22:00 # +0
привел полный пример виснущей проги
m0nhawk 14.01.10 21:46 # +3
Тогда уж float Rasst(const TVector2 c1, const TVector2 c2) -> float Rasst(const TVector2 &c1, const TVector2 &c2).
NeonLight_Child 14.01.10 21:59 # +0
поправил-всеравно виснет
digiwhite 15.01.10 01:42 # +2
Это влияет только на скорость вызова функции, т.к. происходит передача параметров по ссылке. Если бы было так как в начале, то происходит полное копирование объекта, что соответственно, вызывает дополнительный расход памяти и время на копирование.

Вообще возьмите себе за правило:
  1. Если объект не должен изменяться внутри, то его стоит объявлять как const T* или const T&.
  2. Если объект изменяется внутри функции(метода), то его нужно передавать через указатель: T* или как ссылку T&.
Leliksan_Floyd 14.01.10 22:13 # +0
согласен =)
NeonLight_Child 14.01.10 21:54 # +0
Поправил пост. Привел пример виснущей проги.
ЗЫ: Да у меня кривые библиотеки в инклудах))
NeonLight_Child 14.01.10 22:05 # +0
вот сам исходник http://narod.ru/disk/16911574000/tvector.zip.html
m0nhawk 14.01.10 22:05 # +0
for(j=0;i+1<=igrnum-1;j++)
О_-
Оно работает?
m0nhawk 14.01.10 22:07 # +2
Вот тут как раз и виснет, ибо из цикла
for(j=0;i+1<=igrnum-1;j++)

оно никогда не выйдет.
NeonLight_Child 14.01.10 22:22 # +0
мда, как всегда проблема находится в какойто мелочи
но в оригинале именно ток, и там оно не виснет
вот кусок оригинала на паскале:

unit1.pas строка 757 и далее
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

...
  for i:=0 to igrnum-1 do

   for j:=i+1 to igrnum-1 do

    if rasst(igrok[i].pos,igrok[j].pos)<dx*2 then

     if (igrok[i].power>0) and (igrok[j].power>0) then

      if igrok[i].rassaNomer<>igrok[j].rassaNomer then

      begin

       if igrok[i].tip<>-5 then igrok[j].misl:='atakovat '+inttostr(i);

       if igrok[j].tip<>-5 then igrok[i].misl:='atakovat '+inttostr(j);

      end;




...
  for i:=0 to igrnum-1 do   // ïðîâåðÿåì âñå ïàðû èãðîêîâ

   for j:=i+1 to igrnum-1 do

    if (igrok[i].power>0) and (igrok[j].power>0) then

     if Centurus(igrok[i].pos,igrok[j].pos,dx/2,dx/2,igrok[i].tip,igrok[j].tip) then

      begin
...
 



источник здесь:http://www.igrodel.ru/tdg3d/nosikifull.zip
m0nhawk 14.01.10 22:29 # +1
1
2
for i:=0 to igrnum-1 do
    for j:=i+1 to igrnum-1 do

будет
1
2
for( int i = 0; i < (igrnum - 1), ++i )
    for( int j = i+1; j < (igrnum - 1), ++j )
NeonLight_Child 14.01.10 22:44 # +0
прости, а чем мои циклы отличаются только тем что у меня стоит <= вместо ?
NeonLight_Child 14.01.10 22:45 # +0
тоесть у меня стоит еще и равенство- немогу этот значок здесь написать-съедаются тегами
m0nhawk 14.01.10 22:48 # +2
1
2
for( int j = 0; i+1 <= igrnum-1; j++ )
for( int j = i+1; j < (igrnum - 1); ++j )

И да, я там случайно запятую вместо точки с запятой поставил.
Просто в паскале не такие немного циклы...
goblinyara 14.01.10 23:39 # +3
а тем, что вы, похоже, не можете в голове представить, как себя будут вести циклы...

for(j=0;i+1<=igrnum-1;j++)


у вас здесь увеличивается j, а проверяете вы i+1, которое от увеличения j даже не колыхнётся
digiwhite 15.01.10 01:44 # +2
Бесконечный циклик :)
goblinyara 15.01.10 10:41 # +1
абсолютно точно :)

14.01.10 20:58 NeonLight_Child

Я идиот!Опять проблемы с С++ ((

Занялся переводом из Паскаля в Си примера имитатора мыслей для игр навроде реалтайм стратегий. Цель этого перевода - обучение. Прошлый мой пост про извлечения текста из текста был как раз по этим же причинам.

UPD Кажется нашол проблему, как решить?


Вот сама виснущая программа:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87


#ifdef __WIN32__
#include <windows.h>
#endif

#include <iostream>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <fstream>
#include <string>

using namespace std;

struct TVector2
 {
  float  x,// красный
         y;// зелёный
 };

// сама кривая ФУНКЦИЯ - расстояние между точками C1 и C2
float Rasst(const TVector2 c1, const TVector2 c2)
 {
  TVector2 e;
  e.x=(c1.x-c2.x);
  e.y=(c1.y-c2.y);
  return sqrt(e.x*e.x+e.y*e.y);// выдаём длину отрезка c1-c2
 }

TVector2 normaliz2(TVector2 n)
 {
  float l;
  TVector2 tm;
  l=sqrt(n.x*n.x+n.y*n.y);

  if (l!=0)
   {
    tm.x=n.x/l;
    tm.y=n.y/l;
   }
  return tm;
 }


struct Tigrok
 {
  TVector2 pos;// положение игрока (юнита) - x,y
 };

// --- константа, показывающая размер массива ---
const
 int igrnum=300; // количество игроков

// --- массив с юнитами (игроками) ---
Tigrok igrok[igrnum-1];

//Главный BEGIN
#ifdef __WIN32__
int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine,
                   int nCmdShow)
                   {
#else
int main(int argc, char **argv){
#endif

igrok[1].pos.x=4;//значение вершин вектора
igrok[1].pos.y=5;
igrok[2].pos.x=6;
igrok[2].pos.y=7;

igrok[1].pos=normaliz2(igrok[1].pos);

cout << Rasst(igrok[1].pos,igrok[2].pos) << endl;
//cout << Rasst({4,5},{6,7}) << endl;

//виснет именно при применении таких циклов после использования ф-ции
//а такие циклы мне нужны-в паскалевских исходниках сделано именно так
  int i,j;
  for(i=0;i<=igrnum-1;i++)
  for(j=0;i+1<=igrnum-1;j++)
   {}

}
 


Все компилится, запускаю результат из терминала-ответ получаю, НО прога виснет нафиг.
Застрял((
Прога виснет именно из-за применения циклов после функции Rasst. Сами по себе циклы не виснут, а вот когда ф-ция Rasst над ними происходит зависон.


Посты Комментарии
Последние посты
    Посты Комментарии
    Последние комментарии
      Посты Комментарии
      Изменения
        Посты Комментарии Изменения Черновики Избранное
        Черновики (все)
          Посты Комментарии Изменения Черновики Избранное
          Избранное (всё)
            Посты Комментарии Изменения Черновики Избранное
            Лучшие блоги (все 96)
            Топ пользователей Топ блогов
            Топ пользователей Топ блогов
            Элита (все 1965 из 149 городов)
            Топ пользователей Топ блогов
            В сети: deFINE, HTaeD

            Новенькие: BorGG, fedaikin, dsd, dsd, beep
            welinux.ru

            Смотреть видео онлайн

            Онлайн видео бесплатно


            Смотреть русское с разговорами видео

            Online video HD

            Видео скачать на телефон

            Русские фильмы бесплатно

            Full HD video online

            Смотреть видео онлайн

            Смотреть HD видео бесплатно

            School смотреть онлайн