Помогите построить график
    
  ![]()  | 
Наши проекты:
 Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту  | 
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS | 
| [216.73.216.5] | 
 
 | 
		
  | 
| Страницы: (5) 1 2 [3] 4 5 все ( Перейти к последнему сообщению ) | 
    Помогите построить график
    
  | 
         
         
         
          
           Сообщ.
           #31
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Диспетчер задач -> ctrl alt delete   
        
       | 
    
| 
         
         
         
          
           Сообщ.
           #32
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          нет, что-то он все равно эту ошибку выводит  
        
        ... ну ладно, спасибо вам все равно большое... Ну предположим, ошибки нет и программа компилируется. Что делать дальше, как строить графики?  | 
    
| 
         
         
         
          
           Сообщ.
           #33
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата Prutvel @  А дальше, предположим, что графики ты сама умеешь строить.Ну предположим,  Продвигаться дальше будем?  | 
    
| 
         
         
         
          
           Сообщ.
           #34
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
           ладно. Начинать надо с этого?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  | 
    
| 
         | 
    |
| 
         | 
      
          Перенёс сообщение в Wiki: Построение графика функции. 	  
        
       | 
    
| 
         
         
         
          
           Сообщ.
           #36
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          спасибо, сейчас попробую...  
        
      Добавлено Цитата Romtek @  Набросок порядка действий такой: Пусть график вида y = f(x) должен размещаться на поверхности холста с размерами CanvasWidth на CanvasHeight. Тогда перед его построением надо: 1. Определить граничные значения входных параметров (ось X): DataXmax, DataXmin. 2. Определить граничные значения выходных параметров (ось Y): DataYmax, DataYmin. 3. Найти коэффициент масштабирования данных для оси X по формуле: Kx = CanvasWidth / (DataXmax - DataXmin) 4. Найти коэффициент масштабирования данных для оси Y по формуле: Ky = CanvasHeight / (DataYmax - DataYmin) WHILE x < DataXmax DO BEGIN y := f(x); px := PixelCoordX(x); py := PixelCoordX(y); LineTo(px, py); (* проводим линию до заданной точки от установленного ранее курсора (процедурами MoveTo/LineTo) *) x := x + deltaX END;[/CODE] а как их найти?     | 
    
| 
         
         
         
          
           Сообщ.
           #37
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          а так полагаю 
        
      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;  | 
    
| 
         
         
         
          
           Сообщ.
           #38
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата Prutvel @  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; только границы надо соблюдать. Или от 1 до N, или от 0 до N-1. Иначе будет ошибка.  | 
    
| 
         
         
         
          
           Сообщ.
           #39
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Function i(t:Double): Double; 
        
      скажите пожалуйста, так правильно? Const Im=0.57; L=0.1; tau=62; f1=5.37; f2=8.06; T1=186;T2=124; T3=310; var t,I:array[0..1000] of real; begin if fmod(t,T3)<tau then i:=Im; if (fmod(t,T3)>=tau) and (fmod(t,T3)<T1) then I:=-Im; if (fmod(t,T3)>=T1) and (fmod(t,T3)<(T1+tau)) then I:=Im; if (fmod(t,T3)>=T1+tau) and (fmod(t,T3)<T3) then I:=-Im; end; max:=i[0]; min:=i[0]; for k:=1 to N do begin if i[k]>max then max:=y[k]; if i[k]<min then min:=y[k]; end;  | 
    
| 
         
         
         
          
           Сообщ.
           #40
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Не стоит спрашивать по каждой мелочи. 
        
      Компилятор сам подсказывает где верно, а где нет. Нужно на бумаге сначала свои мысли привести в порядок, тогда и на экране всё будет работать. Удачи!  | 
    
| 
         
         
         
          
           Сообщ.
           #41
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          вы же обещали мне помочь с графикой...пожалуйста, помогите...   
        
       | 
    
| 
         
         
         
          
           Сообщ.
           #42
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Я и помогаю. Или мне за тебя сделать задание? 
        
      С чем не справляешься - спрашивай. Тут больше геометрии с математикой, чем программирования.  | 
    
| 
         
         
         
          
           Сообщ.
           #43
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Спасибо Вам большое! А не подскажете, Вы в каком паскале загружали программу Free или Turbo: почему-то у меня на компьютере не запускаются программы вообще - пишет ошибку error while linking, причем даже на правильно написанную программу. Я так подумала, он ведь ни одну программу мне вообще не запустил с того времени, как я его (Free Pascal) установила. В чем дело, не подскажете?   
        
       | 
    
| 
         
         
         
          
           Сообщ.
           #44
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата Prutvel @  Подскажем. Только для начала ты зайди в Options -> Compiler -> Verbose, поставь там крестики на Warnings, Notes, Hints и General Info, нажми Ok, пересобери программу (Compile -> Build или Compile -> Make), и если опять не слинкуется - то нажми на F12 и покажи нам все те сообщения, которые тебе выдал компилятор. Иногда в них содержится подсказка, почему не линкуется.В чем дело, не подскажете?  Кстати, какой компилятор у тебя? Версия, в смысле, какая?  | 
    
| 
         
         
         
          
           Сообщ.
           #45
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          я написала программу. Пожалуйста, помогите ее довести до ума, чтобы паскаль не выводил ошибок: 
        
      program r6; Uses graph; Const GlColor=5; MtCount=5; MiCount=5; Dl:real=-2; Dr:Real=2; function FMod (a, b: real): real; begin FMOD:= a - b * Trunc(a / b); end; function i(t:real): real; Const Im=0.57; L=0.1; tau=62; f1=5.37; f2=8.06; T1=186;T2=124; T3=310; begin if fmod(t,T3)<tau then i:=Im; if (fmod(t,T3)>=tau) and (fmod(t,T3)<T1) then I:=-Im; if (fmod(t,T3)>=T1) and (fmod(t,T3)<(T1+tau)) then I:=Im; if (fmod(t,T3)>=T1+tau) and (fmod(t,T3)<T3) then I:=-Im; end; Var D,R:integer; iU,iD:real; begin Procedure CalciRange; Var I:LongInt; i,t:real; Begin iU:=f(Dl); iD:=iU; for k:=1 to GetMaxt begin t:=k*(Dr-Dl)/GetMaxt+Dl; i:=f(t); if iU<i then iU:=i; if iD>i then iD:=i; end; end; Procedure DrawKoord; var I:integer; t,i:integer; temp:string; Maxt,Maxi:integer; begin Maxt:=MtCount-1; Maxi:=MiCount-1; if (iU>0) and (iD<0) then begin i:=round(GetMaxi-GetMaxi*(-iD)/(iU-iD)); Line (0,i,GetMaxt,i); Line (GetMaxt-5,i-5,GetMaxt,i); Line (GetMaxt-5,i+5,GetMaxt,i); OutTextti(GetMaxt-10,i+10,'t'); i:=i+TextHeight('t'); end else if (iU>0) then i:=GetMaxi-TextHeight('1') else i:=0; for k:=0 to Maxt do begin str((k*(Dr-Dl)/Maxt+Dl):5:2,Temp); t:=Round (k*GetMaxt/Maxt); if (t+TextWidth(Temp)>GetMaxt) then x:=GetMaxt-TextWidth(Temp); OutTextti(t,i,Temp); end; if (Dl<=0) and (Dr>0) then begin t:=Round(GetMaxt*(-Dl/(Dr-Dl))); Line(t,0,t,GetMaxi); Line(t-5,5,t,0); Line(t+5,5,t,0); OutTextti(t+10,10,'i'); end else if (Dl<0) then begin if (Abs(iU)>Abs(iD)) then str(iU:5:2,Temp) else str (iD:5:2,Temp); t:=GetMaxt-TextWidth(Temp); end else t:=0; for k:=0 to Maxi do begin str((k*(iU-iD)/Maxi+iD):5:2,Temp); i:=GetMaxi-Round(k*GetMaxi/Maxi); if (i+TextHeight(Temp)>GetMaxi) then i:=GetMaxi-TextHeight(Temp); OutTextti(t,i,Temp); end; end; Procedure DrawGr; var I,i:LongInt; Temp:Real; Ot,Oi:Integeer; begin Ot:=1; Temp:=func((Dr-Dl)/GetMaxt+Dl)-iD; i:=Round(Temp*GetMaxi/(iU-iD)); Oi:=GetMaxi-i; SetColor(GlColor); for k:=1 to GetMaxt do begin Temp:=Func(k*(Dr-Dl)/GetMaxt+Dl)-iD; i:=Round(Temp*GetMaxi/(iU-iD)); i:=GetMaxi-i; Line(Ot,Oi,k,i); Ot:=k; Oi:=i; end; end; begin D:=Detect; InitGraph(D,R,'D:\BP\BGI'); CalciRange; DrawKoord; DrawGr; Readln; CloseGraph; end.  |