Помогите построить график
    
  ![]()  | 
Наши проекты:
 Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту  | 
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS | 
| [216.73.216.5] | 
 
 | 
		
  | 
| Страницы: (5) [1] 2 3 ... Последняя » все ( Перейти к последнему сообщению ) | 
    Помогите построить график
    
  | 
         
         
         
          
           Сообщ.
           #1
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          помогите построить график на любом языке программирования для  функции (см. прикрепленный файл - там уже график есть - в маткаде получила, надо такой же на паскале или в др. среде получить): 
        
      то есть даны промежутки и два значения Im=5.3 и Im=-5.37. Я пыталась построить - нашла пример для лазуруса и набрала, но он чего-то не хочет работать. Ну хоть схемку накидайте или саму программку, плиззз. Прикреплённый файл  задание_функции.jpg (26.45 Кбайт, скачиваний: 567)
		 | 
    
| 
         
         
         
          
           Сообщ.
           #2
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата Prutvel @  То есть, присоединить сюда проект для Лазаруса, который ты уже набрала - нельзя было, мы должны сделать ту же работу, с нуля набирать, тестировать, вместо того, чтобы (возможно) исправить один символ... Ну-ну... Подождем, может и найдется тот, у кого лишнего времени навалом...  Я пыталась построить - нашла пример для лазуруса и набрала, но он чего-то не хочет работать.   | 
    
| 
         
         
         
          
           Сообщ.
           #3
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          посмотрите, пожалуйста: 
        
      ![]() ![]() unit Unit1; interfaceace uses Classes,SysUtils,LResources,Forms,Graphics,Dialogs,Extctrls,Stdctrls; function I(t:real):real; procedure Graphica (a,b:real); type TForm1=class(TForm); Button1: TButton; Image1: TImage; procedure ButtonClick(Sender:TObject); procedure FormCreate(Sender:TObject); private public end; const Im=0.57,tau=0.062; L=0.1; f1=5.37; f2=8.06; var Form1: TForm1;     t0,y0,tk,yk,a,b:real;     t,y:array[0..1000] of real;     u,v:array [0..1000] of integer;     N:integer;     implementation     functiion I(t:real):real;     begin     T1:=1/f1; T2:=1/f2; T:=T1+T2;     if mod(t,T)<tau then Result:=Im;     if (mod(t,T)>=tau) and (mod(t,T)<T1) then Result:=-Im;     if (mod(t,T)>=T1) and (mod(t,T)<(T1+tau)) then Result:=Im;     if (mod(t,T)>=(T1+tau)     and (mod(t,T)<T) then Result:=-Im;     end;     procedure Graphica(a,b:real);     const kt=5;ky=5;     var     dt,dy,c,d,g,h,max,min:real;     i,tempt,tempy:integer;     s:string;     begin     h:=(b-a)/(N-1);     t[0]:=a;y[0]:=I(t[0]);     for i:=1 to N do     begin     t[i]:=t[i-1]+h;     y[i]:=I(t[i]);     end;     max:=y[0]; min:=y[0];     for i:=1 to N do     begin     if y[i]>max then max:=y[i];     if y[i]<min then min:=y[i];     end;     c:=(Form1.Image1.ClientWidth-t0-tk)/(b-a);     d:=t0-c*t[0];     g:=(Form1.Image1.ClientHeight-y0-yk)/(min-max);     h:=yk-g*max;     for i:=1 to N do      begin      u[i]:=trunc(c*x[i]+d);      v[i]:=trunc(g*y[i]+h);      end;      Form1.Image1.Canvas.Color:=clGray;       Form1.Image1.Canvas.Pen.Mode:=pmNot;        Form1.Image1.Canvas.MoveTo(u[0],v[0]);        Form1.Image1.Canvas.Pen.Width:=2;        Form1.Image1.Canvas.Pen.Color:=clGreen;     for i:=1 to N do      Form1.Image1.Canvas.LineTo(u[i],v[i]);     Form1.Image1.Canvas.Pen.Width:=1;     Form1.Image1.Canvas.Pen.Color:=clBlack     Form1.Image1.Canvas.MoveTo(trunc(t0),trunc(h));     if (trunc(h)>yk) and (trunc(h)<trunc(Form1.Image.ClientHeight-y0)) then     Form1.Image1.Canvas.LineTo(trunc(Form1.Image1.ClientWidth-tk),trunc(h));      Form1.Image1.Canvas.MoveTo(trunc(d),trunc(yk));      if (trunc(d)>0)      and (trunc (trunc(d),trunc(Form1.Im      ag1.ClientHeight-y0));      dt:=(Form1.Im      age1.ClientWidth-t0-tk)/KT3;      for i:=0 to KT3 do      begin      if (i=0) or (i=KT3) then      Form1.Image1.‘anvas.Pen.Style:=psSolid else      Ferm1.Image1.Canvas.Pen.Style:=psDash;      Form1.Image1.Canvas.MoveTo(trunc(t0+i*dt),trunc(yk));       Form1.Image1.Canvas.LineTo(trunc(t0+i*dt),trunc(Form1.Image1.ClientHeight-y0));       end;       dy:=(Form1.Image1.ClientHeight-y0-yk)/KY;       for i:=0 to KY do       begin       if (i=0) or (i=KY) then        Form1.Image1.‘anvas.Pen.Style:=psSolid else        Form1.Image1.‘anvas.Pen.Style:=psDash;         Form1.Image1.‘anvas.MoveTo(trunc(t0),trunc(yk+i*dy));         Form1.Image1.‘anvas.LineTo(trunc(Form1.Image1.ClientWidth-tk),trunc(yk+i*dy));end;          Form1.Image1.‘anvas.Pen.Style:=psSolid;          dt:=(b-a)/KT3;          tempy:=trunc(Form1.Image1.ClientHeight-y0+1);          for i:=0 to KT3 do          begin          str(a+i*dt:5:2,s);          tmpt:=trunc(t0+i*(Form1.Image1.ClientWidtg-t0-tk)/KT3-1;           Form1.Image1.‘anvas.TextOut(trunc(d)-5,tempy,'0');           dy:=(max-min)/KY;           tempt:=5;           for i:=1 to KY do           begin           str(ma           x-i*dy:5:2,s);           tempy:=trunc(yk-5+i*( Form1.Image1.ClientHeight-y0-yk)/KY);            Form1.Image1.‘anvas.TextOut(tempt,tempy,s);end;            if (trunc(h)>yk) and trunc(h)<Form1.Image1.ClientHeight-1) then             Form1.Image1.‘anvas.TextOut(tempt+1,trunc(h)-5,'0');             tempt:=trunc(t0+i*( Form1.Image1.ClientWidth-t0-tk)/2);              Form1.Image1.‘anvas.TextOut(temp1,'График');end;              procedure TForm1.FormCreate(Sender:TObject);              var s:string;              kod:integer;              begin              N:=300,t0:=40;y0:=40;tk:=40; yk:=40;              s:=InputBox('введите левую границу',-1);              val(s,a,kod=0;              until kod=0 repeat s:=InputBox('Введите правую границу','1')              val(s,b,kod)              until kod=0; end;              procedure TForm1.ButtonClick(Sender:YObject);              begin              Graphica(a,b);              end;              Initialization;              end.  | 
    
| 
         
         
         
          
           Сообщ.
           #4
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата Prutvel @  посмотрите, пожалуйста: Это не проект. Это один модуль. А вас просили весь проект присоединить.  | 
    
| 
         
         
         
          
           Сообщ.
           #5
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          В приведённом коде будто нарочно сделаны опечатки, которые видны невооружённым глазом. Проект, скорее всего, чужой.  
        
      Добавлено Операция mod действует только на целых числах.  | 
    
| 
         
         
         
          
           Сообщ.
           #6
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата Romtek @  В приведённом коде будто нарочно сделаны опечатки, Добавлено а не подскажете конкретно - где.  | 
    
| 
         
         
         
          
           Сообщ.
           #7
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата Prutvel @  а не подскажете конкретно - где.  Начиная со 2-й строки...   Далее смотреть лень. И незачем, я думаю... Проект вы не прикладываете, выложив какую-то мешанину. О чем с вами разговаривать?     | 
    
| 
         
         
         
          
           Сообщ.
           #8
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          если Вы знаете, как это делать, написали бы хотя бы алгоритм или примерчик какой-нибудь сбросили бы... пожалуйста  
        
          | 
    
| 
         
         
         
          
           Сообщ.
           #9
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата Prutvel @  написали бы хотя бы алгоритм Так вот как раз алгоритм хотелось бы от вас увидеть. А помочь с программой можно.  | 
    
| 
         
         
         
          
           Сообщ.
           #10
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата Prutvel @  Да, пожалуйста!а не подскажете конкретно - где.  1. Цитата Prutvel @  interfaceace  2. Цитата Prutvel @  functiion I(t:real):   real; 3. Цитата Prutvel @   Form1.Image1.‘anvas.Pen.Style:=psSolid else Ferm1.Image1.Canvas.Pen.Style:=psDash; Добавлено Prutvel, прости, а ты синтаксис Паскаля знаешь? Сложилось впечатление, что вовсе нет. Добавлено Цитата Prutvel @  Такую чушь может написать только человек, ничего не понимающий в Паскале. За Делфи даже и речи нет.![]() ![]()     functiion I(t:real):real;     begin     T1:=1/f1; T2:=1/f2; T:=T1+T2;     if mod(t,T)<tau then Result:=Im;     if (mod(t,T)>=tau) and (mod(t,T)<T1) then Result:=-Im;     if (mod(t,T)>=T1) and (mod(t,T)<(T1+tau)) then Result:=Im;     if (mod(t,T)>=(T1+tau)     and (mod(t,T)<T) then Result:=-Im;     end; Начиная от синтасиса и заканчивая знанием базовых понятий. Цитата Prutvel @    ![]() ![]()              N:=300,t0:=40;y0:=40;tk:=40; yk:=40;              s:=InputBox('введите левую границу',-1);              val(s,a,kod=0;  | 
    
| 
         
         
         
          
           Сообщ.
           #11
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата Оззя @  Цитата Prutvel @  написали бы хотя бы алгоритм Так вот как раз алгоритм хотелось бы от вас увидеть. А помочь с программой можно. Дело в том, что по заданию, надо сделать численный расчет напряжения на катушке идуктивности в цепи переменного тока прямоугольной формы, где L=0.1 Гн - индуктивность, Im=0.57 А - амплитуда тока, tau=62 мс - длительность импульса. Частота на четных периодах f1=5.37 Гц, на нечетных периодах f2=8.06 Гц. Периоды T1 и T2 равны. Я сделала это в маткаде, получилось, что сам график-то задается как система: то есть функция I(t) принимает вообще говоря 2 значения, это Im и -Im, но при разных промежутках времени, то есть получается так: Im if mod(t,T)<tau -Im if (mod(t,T)>=tau) and (mod(t,T)<T1) I(t):= Im if (mod(t,T)>=T1) and (mod(t,T)<T1+tau) -Im if (mod(t,T)>=T1+tau) and (mod(t,T)<T) Так мы задали в маткаде этот ток, а потом приняли, что i:=0..300, dt:=T/100, t1:=i*dt; И, следовательно, получили отсюда график по точкам: написали Ii(ti), то есть получили точки. Так вот, то есть у меня есть точки...А дальше - надо построить такой же график на языке высокого уровня   ... Помогите, пожалуйста..., очень надо     | 
    
| 
         
         
         
          
           Сообщ.
           #12
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Напиши функцию I(t), которая на входу получала бы необходимые параметры, а на выходе - некоторое значение. С графикой поможем. 
        
      Только функция должна быть правильной и компилироваться!  | 
    
| 
         
         
         
          
           Сообщ.
           #13
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата Romtek @  Напиши функцию I(t), которая на входу получала бы необходимые параметры, а на выходе - некоторое значение. С графикой поможем. Только функция должна быть правильной и компилироваться! Спасибо, сейчас попробую.  | 
    
| 
         
         
         
          
           Сообщ.
           #14
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          У меня, почему-то, пишет ошибки  
        
         Я с функциями во фри паскале не работала раньше... Подскажите, что не так, пожалуйста. Прикреплённый файл  фри_паскаль.jpg (81 Кбайт, скачиваний: 516)
		 | 
    
| 
         
         
         
          
           Сообщ.
           #15
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Что делает mod  в Маткаде? 
        
      Лучше прикладывайте не скриншот, а текст программы. Добавлено Заметьте, что: Цитата Romtek @    Операция mod действует только на целых числах.   |