Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   К какому типу данных относиться key ? Pascal. (http://www.tehnari.ru/f41/t33235/)

mary yu 17.02.2010 22:45

К какому типу данных относиться key ? Pascal.
 
Код:

program sharik;
uses graph,crt;
var
x1,x2:integer;
y1,y2:real;
x,xx,xx1,xx2:real;
y,yy:real;
dx:real;
l,b,k,i:integer;
w,h:integer;
mx,my:real;
x0,y0:integer;
st:string;
key:char;
function f(x:real):real;
begin
f:=x*x*x;
begin
clrscr;
i:=0;
InitGraph(i,i,'i:\prg\tp\bgi');
textcolor(5);
gotoxy(22,8);
writeln('Laboratornay rabota 3');
readln;
clrscr;
setfillstyle(1,0);
floodfill(0,0,0);
settextstyle(0,0,1);
setcolor(2);
outtextxy(50,100,'Vvedite levju granitsy(>-5):');
textcolor(green);
gotoxy(8,8);
readln(x1);
setcolor(2);
outtextxy(50,150,'Vvedite pravju granitsy(<5):');
gotoxy(8,11);
readln(x2);
setcolor(4);
outtextxy(50,200,'Vvedite skoroct k:=1-10');
gotoxy(8,14);
readln(k);
k:=100*k;
k:=1000-k;
clrscr;
setfillstyle(1,0);
floodfill(0,0,0);
settextstyle(0,0,1);
dx:=0.01;
l:=10;
b:=420;
h:=440;
w:=600;

y1:=f(x1);
y2:=f(x2);
x:=x1;
  while x<=x2 do
    begin
      y:=f(x);
      if y<y1 then y1:=y;
      if y<21 then y2:=y;
      x:=x+dx;
    end;
my:=h/ abs(y2-y1)+50;
mx:=w/ abs(x2-x1)+50;

x0:=300;
y0:=220;
setcolor(3);
line(x0,b+h,x0,b-h);
line(x0-w,y0,x0+w,y0);
setcolor(4);
str(y2:5:1,st);
str(x1:5,st);
str(x2:5,st);

x:=x1;
  while x<=x2 do
  begin
    y:=f(x);
  Putpixel(x0+round(x*mx/2),y0-round(y*my/2),4);

x:=x+dx;
  end;
x:=x2;
  while x<=x2 do
  begin
  setcolor(0);
  circle(x0+round((x-dx)*mx/2),y0-round(f(x-dx)*my/2),8);
  setfillstyle(1,0);
  floodfill(x0+round((x-dx)*mx/2),y0-round(f(x-dx)*my/2),0);
  setcolor(4);
  setfillstyle(1,1);
  circle(x0+round(x*mx/2),y0-round(f(x)*my/2),8);
  floodfill(x0+round(x*mx/2),y0-round(f(x)*my/2),red);
  xx:=x1+x/2;
  xx2:=x;
  delay(k*10);
  while xx<=xx2 do
  begin
  yy:=f(xx);
  putpixel(x0+round(xx*mx/2),y0-round(yy*my/2),5);

  xx:=xx+dx;
  end;
  setcolor(3);
  line(x0,b+h,x0,b-h);
  line(x0-w,y0,x0+w,y0);
  setcolor(13);
  {str(y2;5;1,st);
  outtextxy(x0,5,st);
  str(y1:5:st);
  outtextxy(x0,y0-9,st);}
  str(x1:5,st);
  outtextxy(0,y0+2,st);
  str(x2:5,st);
  outtextxy(w-5,y0+5,st);
  setcolor(6);
  outtextxy(100,100,'Grafik y=x^3');
  {y:=f(x);
  putpixel(x0+round(x),y0-round(10),5);}
  x:=x+dx;end;readln;
  closegraph;
  gotoxy(10,10);
  write('Povtorit?(y/n)');
  readkey;
  if key ='y' then goto 1;
  end.


Vladimir_S 17.02.2010 22:57

Цитата:

Сообщение от mary yu (Сообщение 296549)
К какому типу данных относиться key?

К литерному. Значением переменной Key может быть ОДИН символ - буква, цифра, знак, пробел и т.п.

DDS 17.02.2010 23:02

А зачем Вы приложили программу?
Кстати, она не рабочая.

mary yu 17.02.2010 23:16

выразила key:char; Правильно?
Но теперь не может определить 1 после goto.

Vladimir_S 17.02.2010 23:26

Цитата:

Сообщение от mary yu (Сообщение 296571)
выразила key:char; Правильно?
Но теперь не может определить 1 после goto.

Нет. Не правильно.
Надо не просто Readkey, а Key:=Readkey;
Кроме того, а где у Вас описана метка, к которой Вы пытаетесь перейти? Не вижу что-то. А еще не закрыта функция f (не поставлен end). Как у Вас при этом программа транслируется, ума не приложу.
P.S. Запускал я эту программу. Ну рисует кубическую параболу. И ради этого стоило столько воротить?

mary yu 17.02.2010 23:42

а шарик по параболе катиться?^^'
Если не затруднит, можете представить исправленный код?

mary yu 17.02.2010 23:42

а метку да, забыла поставить,торопилась на паре....

Vladimir_S 18.02.2010 14:08

Цитата:

Сообщение от mary yu (Сообщение 296581)
Если не затруднит, можете представить исправленный код?

Ну что Вы, право, какие пустяки - 2-3 часика работы, связанной в основном с разгадыванием смысла задания, и вот:

Код:

program sharik;
uses graph,crt;
var
 x1,x2:integer;
 y1,y2:real;
 x,xx,xx1,xx2:real;
 y,yy:real;
 dx:real;
 l,b,k,i:integer;
 w,h:integer;
 mx,my:real;
 x0,y0:integer;
 st:string;
 key:char;

function f(x:real):real;
begin
f:=x*x*x;
end;

begin
 i:=0;
 InitGraph(i,i,'i:\prg\tp\bgi');
 ClearDevice;
 SetColor(5);
 SetTextStyle(DefaultFont,HorizDir,3);
 SetTextJustify(CenterText,CenterText);
 OutTextXY((GetMaxX div 2),(GetMaxY div 2),'Laboratornaya rabota 3');
 Delay(1000);
 RestoreCRTMode;
 ClrScr;
 TextColor(2);
 Write('Vvedite levju granitsy(>-5): ');
 ReadLn(x1);
 Write('Vvedite pravju granitsy(<5): ');
 ReadLn(x2);
 Write('Vvedite skoroct k:=0-10 ');
 ReadLn(k);
 SetGraphMode(GetGraphMode);
 SetLineStyle(SolidLn,0,NormWidth);
 k:=1000-k*100;
 dx:=0.01;
 h:=440;
 w:=600;

 y1:=f(x1);
 y2:=f(x2);

 If (x1<0) and (x2>0) then
  mx:=w/abs(x2-x1) else
 If (x1<0) and (x2<0) then
  mx:=w/(-x1) else
  mx:=w/x2;
 If (y1<0) and (y2>0) then
  my:=h/abs(y2-y1) else
 If (y1<0) and (y2<0) then
  my:=h/(-y1) else
  my:=h/y2;

 If (x1<0) and (x2>0) then
  begin
  x0:=320-(w div 2)-Round(x1*mx);
  y0:=240-(h div 2)+Round(y2*my);
  end else
 If (x1<0) and (x2<0) then
  begin
  x0:=620;
  y0:=20;
  end else
  begin
  x0:=20;
  y0:=460;
  end;

 Repeat
  ClearDevice;
  setcolor(3);
  line(x0,((480-h) div 2),x0,((480+h) div 2));
  line(((640-w) div 2),y0,((640+w) div 2),y0);
  setcolor(4);

  x:=x1;
  while x<=x2 do
  begin
    y:=f(x);
    Putpixel(x0+round(x*mx),y0-round(y*my),4);
    x:=x+dx;
  end;
  SetTextStyle(DefaultFont,HorizDir,1);
  SetTextJustify(CenterText,TopText);
  SetColor(13);
  Str(x1,st);
  OutTextXY(x0+round(x1*mx),y0+4,st);
  Str(x2,st);
  OutTextXY(x0+round(x2*mx),y0+4,st);
  SetColor(6);
  OutTextXY(100,100,'Grafik y=x^3');

  x:=x1;
  while x<=x2 do
  begin
    setcolor(0);
    circle(x0+round((x-dx)*mx),y0-round(f(x-dx)*my),8);
    setfillstyle(1,0);
    floodfill(x0+round((x-dx)*mx),y0-round(f(x-dx)*my),0);
    setcolor(4);
    setfillstyle(1,1);
    circle(x0+round(x*mx),y0-round(f(x)*my),8);
    floodfill(x0+round(x*mx),y0-round(f(x)*my),red);
    xx:=x1;
    xx2:=x;
    delay(k);
    while xx<=xx2 do
    begin
      yy:=f(xx);
      putpixel(x0+round(xx*mx),y0-round(yy*my),5);
      xx:=xx+dx;
    end;
    setcolor(3);
    line(x0,((480-h) div 2),x0,((480+h) div 2));
    line(((640-w) div 2),y0,((640+w) div 2),y0);
    x:=x+dx;
  end;
  SetTextStyle(DefaultFont,HorizDir,2);
  SetTextJustify(CenterText,CenterText);
  OutTextXY(480,360,'Povtorit?(y/n)');
  Key:=ReadKey;
  Until (Key='n') or (Key='N');
end.

Исправил. А то в предыдущей версии асимметричные интервалы неправильно отрабатывались.

mary yu 18.02.2010 21:06

Vladimir_S ,спасибо, мой спаситель!
буду больше ботать, чтобы Вас не беспокоить

Vladimir_S 18.02.2010 21:30

Цитата:

Сообщение от mary yu (Сообщение 296903)
Vladimir_S ,спасибо, мой спаситель!
буду больше ботать, чтобы Вас не беспокоить

Ну... надеюсь, что Вы всё-таки будете больше работать, а не "ботать" (по фене):D. Но в любом случае - успехов!


Часовой пояс GMT +4, время: 21:59.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.