program graphics;
uses crt,graph;
TYPE Func=Function(i:real):Real;
CONST k=200;
VAR cx,cy: integer;
Fnx,Fny:Func;
x,y: longint;
procedure Init; {инициализация графики}
var gd,gm:integer;
begin
gd:=detect;
InitGraph(gd,gm,'');
end;
procedure ekran; {рисуем оси координат}
var i:integer; s:string;
begin
cx:=GetMaxX div 2; cy:=GetMaxY div 2;
line(cx,0,cx,2*cy); line(0,cy,cx*2,cy);
line(cx*2-15,cy-4,cx*2,cy); line(cx*2-15,cy+4,cx*2,cy);
line(cx-4,15,cx,0); line(cx+4,15,cx,0);
end;
procedure POSTR(Fnx,Fny:Func); {строим график точками}
var i:real;
begin
i:=0;
repeat
i:=i+0.001;
x:=round(Fnx(i)*k);
y:=round(Fny(i)*k);
PutPixel(cx+x,cy-y,red);
until i>1;
readkey;
end;
{$F+}
Function Dlrx(i:real):Real;
begin
Dlrx:=i;
end;
Function Dlry(i:real):Real; {y=29.27*0.7^x}
begin
Dlry1:=29.27*exp(i*ln(0.7));
end;
{$F-}
begin
textbackground(1);
clrscr;
Init;
ekran;
POSTR(Dlrx,Dlry);
CloseGraph;
readkey;
end.
Ты бы хоть скриншот присобачил, а то не понятно, что именно у тебя не получается.Делал когда-то на паскале. Помогите переписать под С. Процедуры Init, ekran уже написал, а вот с процедурой POSTR проблемы. Проблема в масштабировании функции. Си в полноэкранном режиме получилось запустить с помощью VirtualBox, но всё равно криво как-то.
round менял на floor(int x), но правильно выбрать масштаб не смог
ну вот как график выглядит на Паскале. Меня такое изображение устраивает.Ты бы хоть скриншот присобачил, а то не понятно, что именно у тебя не получается.
И свой код на С тоже пригодился бы.
#include <graphics.h>
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
#include <conio.h>
int main(void){
int gdriver = DETECT, gmode, errorcode;
int x,y,xasp, yasp, cx, cy;
float i;
initgraph(&gdriver, &gmode, "");
errorcode = graphresult();
if (errorcode != grOk) {
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1);
}
cx = getmaxx() / 2;
cy = getmaxy() / 2;
setcolor(getmaxcolor());
getaspectratio(&xasp, &yasp);
/* рисуем оси координат */
line(cx,0,cx,2*cy); line(0,cy,cx*2,cy);
line(cx*2-15,cy-4,cx*2,cy); line(cx*2-15,cy+4,cx*2,cy);
line(cx-4,15,cx,0); line(cx+4,15,cx,0);
/* пытаемся рисовать график */
i=0;
/* ну вообщем, в этом цикле все проблемы. отказывается нормально рисовать... Возможно, все проблемы из-за кривой настройки VirtualBox*/
while (i<20.0/yasp){
x=floor(i*xasp);
y=floor(29.27*pow(0.7,i)*yasp/2);
putpixel(cx+x,cy-y,3);
i+=0.00001;
}
getch();
closegraph();
return 0;
}
program p1;
uses crt;
var a,b,c,S:array[1..3] of real; i:integer;
function geron (x,y,z:real):real;
var p:real;
begin
p:=(x+y+z)/2;
geron:=sqrt(p*(p-x)*(p-y)*(p-z));
end;
procedure maz (x,y,z:real);
begin
if(x>y) and (x>z) then writeln ('s1 bolshe')
else if (y>x) and (y>z) then writeln ('s2 bolshe')
else writeln('s3 bolshe')
end;
begin
writeln('++ Vvedite storonu triygolnika a ++');
for i:=1 to 3 do
begin
write (i,'trukytnuka');
readln(a);
end;
writeln('++ Vvedite storonu triygolnika b ++');
for i:=1 to 3 do
begin
write (i,'trukytnuka');
readln(b);
end;
writeln('++ Vvedite storonu triygolnika c ++');
for i:=1 to 3 do
begin
write (i,'trukytnuka');
readln(c);
end;
Пух ,большое спасибо =)
дописать в конце прогинужна помощь...
ЯЗЫК: Паскаль
ЗАДАЧА: Відомо довжини сторін трьох трикутників. Знайти трикутник з максимальною площею.
S[1]=geron(a[1],a[2],a[3]);
S[2]=geron(b[1],b[2],b[3]);
S[3]=geron(c[1],c[2],c[3]);
maz(S[1],S[2],S[3]);
readln;
end.
program fynkci9;
uses crt;
var Xmin,Xmax,deltaX,x,y:real; i:integer;
begin
clrscr;
writeln ('Vvedite Xmin, Xmax, deltaX');
readln (Xmin,Xmax,deltaX);
x:=Xmin;
if (x>=-2) and (x<0) then
while (x<=xmax) and (i<8) do begin
y:=x/(-2);
i:=i+1;
writeln('x=',x:2:2,' y=',y:2:2);
x:=x+deltax; end else begin
if (x>=0) and (x<2) then
while (x<=xmax) and (i<8) do begin
y:=x-2;
i:=i+1;
writeln('x=',x:2:2,' y=',y:2:2);
x:=x+deltax; end else begin
if (x>=2) and (x<=4) then
while (x<=xmax) and (i<8) do begin
y:=2*(x-2);
i:=i+1;
writeln('x=',x:2:2,' y=',y:2:2);
x:=x+deltax; end else writeln('** Ne prenadlegut promegytky! **')
end;
end;
readkey;
end.
будешь считать значение функции и выводить сразу его на экран.i:=0; x:=xmin;
while (i<8) or (x>xmax) do
begin
y=func(x); //твоя функция
writeln('x=',x:2:2,' y=',y:2:2);
inc(i);
end;