Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 2313 • Страница 111 из 116<  1 ... 108  109  110  111  112  113  114 ... 116  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 08.05.2007
Откуда: скил в BF3?
Ребят подскажите пожалуйста как можно нарисовать трёмерный график фукции (зависимость 2 переменных от времени) в дельфи?
если можно примерчик какой нибудь.
З.Ы. не посылайте на OpenGL.
З.ы.ы усановыл GLscene но чёт анемагу разобратся... может кто работал, подскажите?

_________________
Когда в 1850 году из Европы в Америку привезли первую партию воробьёв, американцы так обрадовались, что закормили их всех до смерти



Партнер
 

Member
Статус: Не в сети
Регистрация: 04.12.2009
Откуда: Питер
SpuTnick писал(а):
Ребят подскажите пожалуйста как можно нарисовать трёмерный график фукции (зависимость 2 переменных от времени) в дельфи?
если можно примерчик какой нибудь.
З.Ы. не посылайте на OpenGL.
З.ы.ы усановыл GLscene но чёт анемагу разобратся... может кто работал, подскажите?


Само по-себе дело несложное. Переменные меняются в реал-тайме, или статичный график? GLScene нужно использовать обязательно, или хватит GDI?

_________________
курить я, конечно, не брошу, но пить буду обязательно.


 

Member
Статус: Не в сети
Регистрация: 08.01.2005
Откуда: Москва
SpuTnick писал(а):
Ребят подскажите пожалуйста как можно нарисовать трёмерный график фукции (зависимость 2 переменных от времени) в дельфи?
если можно примерчик какой нибудь.
На OpenGL будет занимать 1% строк. А вот небольшой примерчик без него...

_________________
Do you folks like coffee?
Real coffee? From the hills of Colombia?


 

Member
Статус: Не в сети
Регистрация: 08.05.2007
Откуда: скил в BF3?
сукинкот
сукинкот писал(а):
Переменные меняются в реал-тайме, или статичный график?

не т график статический.. Просто задаётся период наблюдения и вычисляется значения переменных

сукинкот писал(а):
GLScene нужно использовать обязательно, или хватит GDI?

не обязательно. это лишь то, с чего я начал пробовать. нашел небольшой хелп с примерами, а там дальше методом научного тыка коёчё стало вырисовываться.

H(CHCl11B11)
наслышан про OpenGL, может и не правда... но спасибо, всё равно...Обязательно посмотрю пример.

_________________
Когда в 1850 году из Европы в Америку привезли первую партию воробьёв, американцы так обрадовались, что закормили их всех до смерти


 

Member
Статус: Не в сети
Регистрация: 06.05.2009
Подскажите, как в делфи объявить массив в объекте, если его размер задается в ходе выполнения программы? Алсо, приветсвуются другие указания на любые косяки, ибо это первая попытка на практике перейти к ооп.

Код:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
   flak=object

     n,m:byte;
     r:integer;
     mas:array[1..n,1..m] of integer;  {тут компилятор выдает косяк, что не вызывает удивления}

     procedure init(n,b:byte;r:integer);
     procedure masrand;
     procedure masout;
     function diag:integer;
     end;

     procedure flak.init(n1,b1:byte;r1:integer);
       var
         n1,b1:byte;
         r1:integer;
       begin
         n:=n1;
         b:=b1;
         r:=r1;
       end;

      procedure flak.masrand;
        var
          i,j:byte;
        begin
          for i:=1 to n do
            for j:=1 to b do
              mas[i,j]:=random(r)-r/2;
        end;

      procedure flak.masout;
        var
          i,j:byte;
        begin
          for i:=1 to n do
            begin
              for j:=1 to b do
                write(mas[i,j]:4);
            writeln;
        end;

      function flak.diag:integer;
        var
          k,i:byte;
          s:integer;
        begin
          k:=0;
          if n>b then
            k:=n
          else
            k:=b;
          for i:=1 to k do
            s:=s+mas[i,j];
          diag:=s;
        end;

var
   keke:flak;
   x,y:byte;
   z:integer;
   st:string;

begin   {main}
  writeln;
  write ('x='); readln(x); writeln;
  write ('y='); readln(y); writeln;
  write ('z='); readln(z); writeln;
  with keke do
     begin  {keke}
       init(x,y,z);
       masrand;
       masout;
     end;   {/keke}
  writeln ('diag_sum= ', keke.diag);
  readln(st);
end.    {/main}


 

Member
Статус: Не в сети
Регистрация: 07.01.2010
конечно ругается, потому что надо использовать конструкцию
Код:
mas:array of array of integer;

а затем для задания размеров в коде использовать
Код:
SetLength(mas, n, m);

если что непонятно - ищи в хелпе/гугле на тему "динамический массив", "Dynamic array"


 

Member
Статус: Не в сети
Регистрация: 06.05.2009
ок, уже есть другая проблема:
в данном случае все компилируется, но при запуске ничего не происходит (мельком появляется и исчезает рабочий экран), компилятор выдает два предупреждения (именно в таком порядке):
Цитата:
[Warning] Project2.dpr(113): Variable 'guy' might not have been initialized
[Warning] Project2.dpr(109): Variable 'daddy' might not have been initialized

Код:
program Project2;

{$APPTYPE CONSOLE}

const
  n=10;

type
   dad=class
      public
        mas:array [1..n,1..n] of integer;
        procedure output;
        constructor create(ra:integer);
      private
        mdd:integer;
        function maxd:integer;
      end;

   son=class(dad)
      public
         procedure output;
      private
         pr:real;
         procedure pp;            overload;
         procedure pp(o:integer); overload;
      end;

   {dad}
   constructor dad.create(ra:integer);
      var
        i,j:byte;
      begin
         for i:=1 to n do
           for j:=1 to n do
             mas[i,j]:=random(ra);
      end;

   procedure dad.output;
     var
       i,j:byte;
     begin
       for i:=1 to n do
         begin
           for j:=1 to n do
             write (mas[i,j]:4);
           writeln;
         end;
     end;

    function dad.maxd:integer;
       var
         i:byte;
       begin
         mdd:=mas[1,1];
         for i:=2 to n do
           if mdd<mas[i,i] then
             mdd:=mas[i,i];
         maxd:=mdd;
       end;
      {/dad}

      {son}
    procedure son.pp;
      var
        i,j:byte;
      begin
        pr:=1;
        for i:=1 to n do
          for j:=1 to n do
            pr:=pr*mas[i,j];
      end;

    procedure son.pp(o:integer);
       var
         i,j:byte;
       begin
          pr:=o;
          for i:=1 to n do
            for j:=1 to n do
              pr:=pr*mas[i,j];
       end;

    procedure son.output;
     var
       i,j:byte;
     begin
       for i:=1 to n do
         begin
           for j:=1 to n do
             write ('son[',i,',',j,']=',mas[i,j]:4);
           writeln;
         end;
     end;


      {/son}



var
  daddy:dad;
  guy:son;
  st:string;

begin
  try
    daddy.create(20);
    daddy.output;
    writeln('daddy.max=',daddy.maxd);

    guy.create(15);
    guy.output;
    guy.pp;
    writeln ('pp1=', guy.pr);
    guy.pp(6);
    writeln ('pp2=', guy.pr);
  except
     writeln ('error');
  end; {/try}
  readln (st);
end.

Ошибка в конструкторе?


 

Member
Статус: Не в сети
Регистрация: 07.01.2010
ты пытаешься в массиве с 10 элементами обратиться к одиннадцатому.
Код:
const
  n=10;

Код:
    daddy.create(20);


 

Member
Статус: Не в сети
Регистрация: 06.05.2009
Код:
 constructor dad.create(ra:integer);
        <...>
               mas[i,j]:=random(ra);

Код:
daddy.create(20);

Нет, ra задает диапазон рандомных чисел для заполнения масива (в обоих классах содержатся массивы 10х10 элментов).


 

Member
Статус: Не в сети
Регистрация: 07.01.2010
да, точно, не туда взгляд упал. запусти в консоли через cmd и посмотри результат, что пишет


 

Member
Статус: Не в сети
Регистрация: 06.05.2009
Примерно ~1-2 сек ничего не происходит, потом "прекращена работа project2.exe".
Цитата:
Microsoft Windows [Версия 6.0.6002]
(C) Корпорация Майкрософт, 2006. Все права защищены.

C:\Users\1>D:\OOP\nasled\V2\Project2.exe
Runtime error 216 at 004042D6

C:\Users\1>


 

Member
Статус: Не в сети
Регистрация: 07.01.2010
в дебагере пройдись пошагово, особое внимание уделяй индексам в массивах


 

Member
Статус: Не в сети
Регистрация: 06.05.2009
Так, компилятор уже с daddy.create(20); уходит на readln(st);
в конструкторе почему-то уже при i=1 и j=1 на строке mas[i,j]:=random(ra); все вываливается...
UPD: guy.create(15); выполняется успешно, но вываливается, не начав выполнять guy.output;


 

Member
Статус: Не в сети
Регистрация: 30.05.2007
Откуда: Москва
А есть какая нибудь стоящая литература на данный вопрос? Хотелось бы освоить данный язык для нужд производства...


 

Member
Статус: Не в сети
Регистрация: 06.05.2009
lRiddick основы паскаля и структрного программирования имхо доступно описаны в книге "программирование на языке паскаль" (автор О.Н.Перминов, издательство "Радио и связь", 1988 год :-) )


 

Member
Статус: Не в сети
Регистрация: 30.05.2007
Откуда: Москва
mars478
Спасибо почтаю на досуге, есть еще пару книг именно про Делфи -надеюсь какькулятор научусь делать :D


 

Member
Статус: Не в сети
Регистрация: 07.01.2010
mars478 писал(а):
Так, компилятор уже с daddy.create(20); уходит на readln(st);
в конструкторе почему-то уже при i=1 и j=1 на строке mas[i,j]:=random(ra); все вываливается...
UPD: guy.create(15); выполняется успешно, но вываливается, не начав выполнять guy.output;

ты через step into в дебаге шёл или step over? если в начале конструктора поставить
Код:
mas[1,1] = 1;
то на этой строке падать не будет?


 

Member
Статус: Не в сети
Регистрация: 06.05.2009
Через trace into (F7).
И да, на mas[1,1]:=1; все вываливается. В конструкторе точно можно заполнять массив? Компилятор- Delphi 7.
UPD: подправил прогу, теперь все вываливается сразу после выполнения конструктора:
Код:
program Project2;

{$APPTYPE CONSOLE}

const
  n=3;

type
   dad=class
      public
        mas:array [1..n,1..n] of integer;
        procedure init(ra:integer);
        procedure output;
        constructor create;
      private
        mdd:integer;
        function maxd:integer;
      end;

   son=class(dad)
      public
         procedure output;
      private
         pr:real;
         procedure pp;            overload;
         procedure pp(o:integer); overload;
      end;

   {dad}
   constructor dad.create;
     var
        i,j:byte;
      begin
         for i:=1 to n do
           for j:=1 to n do
             mas[i,j]:=0;
         mdd:=0;   
      end;

   procedure dad.init(ra:integer);
     var
        i,j:byte;
      begin
         for i:=1 to n do
           for j:=1 to n do
             mas[i,j]:=random(ra);
      end;

   procedure dad.output;
     var
       i,j:byte;
     begin
       for i:=1 to n do
         begin
           for j:=1 to n do
             write (mas[i,j]:4);
           writeln;
         end;
     end;

    function dad.maxd:integer;
       var
         i:byte;
       begin
         mdd:=mas[1,1];
         for i:=2 to n do
           if mdd<mas[i,i] then
             mdd:=mas[i,i];
         maxd:=mdd;
       end;
      {/dad}

      {son}
    procedure son.pp;
      var
        i,j:byte;
      begin
        pr:=1;
        for i:=1 to n do
          for j:=1 to n do
            pr:=pr*mas[i,j];
      end;

    procedure son.pp(o:integer);
       var
         i,j:byte;
       begin
          pr:=o;
          for i:=1 to n do
            for j:=1 to n do
              pr:=pr*mas[i,j];
       end;

    procedure son.output;
     var
       i,j:byte;
     begin
       for i:=1 to n do
         begin
           for j:=1 to n do
             write ('son[',i,',',j,']=',mas[i,j]:4);
           writeln;
         end;
     end;
      {/son}

var
  daddy:dad;
  guy:son;
  st:string;

begin

    daddy:=daddy.create;
    daddy.init(20);
    daddy.output;
    writeln('daddy.max=',daddy.maxd);
                                     {
    guy.create(15);
    guy.output;
    guy.pp;      writeln ('pp1=', guy.pr);
    guy.pp(6);   writeln ('pp2=', guy.pr);}
 
  readln (st);
end.

При выполнении выдает такую ошибку в компиляторе:
#77
Из-под cmd ничего не происходит (программа молча запускается и не завершается).


 

Junior
Статус: Не в сети
Регистрация: 01.10.2009
Ты вызываешь метод неинициализированного объекта
Код:
daddy:=daddy.create;

daddy в этот момент может быть черти-чем. Поэтому возникает такая "странная" ошибка.
правильно
Код:
daddy := dad.create;

соответственно,
Код:
guy.create

тоже писать нельзя.
Еще желательно 1й строчкой вписать вызов Randomize иначе у тебя при каждом запуске случайные числа будут одни и те же.


 

Member
Статус: Не в сети
Регистрация: 06.05.2009
Mamohtenok огромное спасибо, все заработало!


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 2313 • Страница 111 из 116<  1 ... 108  109  110  111  112  113  114 ... 116  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  



Лаборатория














Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan