Free pascalban egy Valós típusú változónak, hogy lehet megkapni az egész részét?
Round: Valós típusú kifejezést a legközelebbi egészre kerekít.
Szintaxis: Round(x : real) : longint;
Trunc: az x valós kifejezés 0 felé kerekített egészrészét adja vissza.
Szintaxis: Trunc(x : real) : longint; x valós típusú kifejezés.
Remélem működnek, nem próbáltam de google fél perc alatt megsegített.
Rég nem használtam pascalt, de azt hiszem a div kell neked:
2,134 div 1 = 2
Két szám hányadosából írja ki az egész részt.
Ez nem kerekít, hanem egész rész ad vissza.
a div csak egész változóknál működik, de köszi.
1-nek : nem jó, hibát észlel
Round(x2:real):longint;
Round(y2:real):longint;
így néz ki nálam, de ebben a sorban : ill. ) hibát észlel
Talán ezt keresed:
int(x)
Elvileg egy valós szám egész részét kell, hogy visszaadja.
itt a teljes program, az istenért se tudom megcsinálni. A program lényege: bekéri egy test gyorsulását(a) majd ebből kiszámolja 0,5 másodpercekre lebontva a test sebességét és a megtett utat, majd ezt egy koordináta rendszerben .
program gyorsulas;
uses crt, graph;
var gd,gm: integer;
a,t,v,v0,s,x1,y1,x2,y2:extended;
begin
clrscr;
t:=0;
v0:=0;
Writeln('Add meg a test gyorsulását! ');
readln(a);
writeln;
{ grafika inicializalasa }
gd := d4bit;
gm := m640x480;
initgraph(gd,gm,'');
{ rajzolas }
setcolor(red);
line(80,350,600,350);
line(100,20,100,370);
setcolor(green);
outtextxy(550,375,'t (s)');
outtextxy(60,40,'s');
outtextxy(50,50,'(m)');
setcolor(red);
outtextxy(105,355,'0');
line(95,300,105,300);
line(95,250,105,250);
line(95,200,105,200);
line(95,150,105,150);
line(95,100,105,100);
line(95,50,105,50);
outtextxy(75,305,'50');
outtextxy(75,255,'100');
outtextxy(75,205,'150');
outtextxy(75,155,'200');
outtextxy(75,105,'250');
outtextxy(75,55,'300');
line(150,345,150,355);
line(200,345,200,355);
line(250,345,250,355);
line(300,345,300,355);
line(350,345,350,355);
line(400,345,400,355);
line(450,345,450,355);
line(500,345,500,355);
line(550,345,550,355);
outtextxy(155,355,'2,5');
outtextxy(205,355,'5');
outtextxy(255,355,'7,5');
outtextxy(305,355,'10');
outtextxy(355,355,'12,5');
outtextxy(405,355,'15');
outtextxy(455,355,'17,5');
outtextxy(505,355,'20');
outtextxy(555,355,'22,5');
outtextxy(600,347,'>');
outtextxy(97,16,'^');
x1:=100;
y1:=350;
repeat
t:=t+0.5;
s:=v0*t+a/2*t*t;
writeln(' t :',t:3:1 );
writeln('s :',s:3:3);
v:=v0+a*t;
writeln('v :',v:3:1);
v0:=v;
delay(100);
x2:=x2+t;
y2:=350-s;
int(x2);
int(y2);
line(x1,y1,x2,y2);
x1:=x2;
y1:=y2;
until s>250;
readln;
end.
az eggyik baja ezzel van: x2:=x2+t;
itt nem adtál meg értéket az x2-nek előtte megkéne adnod neki 1 értéket
Ahogy most van a programod,
int(x2);
int(y2);
nem használod fel semmire.
szerintem ezen értékeket tedd egy változóba:
intx2:=int(x2);
inty2:=int(y2);
Szerintem egyszerűbb lett volna egy növekményes ciklussal dolgozni, mert valójában most ezzel pont azt helyettesíted, csak szvsz kicsit bonyolítva.
megcsináltam úgy ahogy mondtad, de még mindig baja van:S így néz ki:
intx2:=int(x2);
inty2:=int(y2);
line(x1,y1,intx2,inty2);
és az intx2 és inty2 az integer típusú változó. for ciklusra gondoltál? igen azzal egyszerűbb lenne, viszont akkor az idő csak 1s lehetne min. és olyan programot már írtam, ami másodpercenként számolja ki, de ha a:=70, akkor a grafikon elég csúnya, azért gondoltam, hogy megcsinálom úgy, hogy akár 0,1s-onként is számoljon.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!