Другие языки программирования и технологии

Помогите кто знает Паскаль

Помогите исправить ошибки в программе, чёт не работает. Программа рисует кусок круга в середине экрана с радиусом 5 звёздочками. uses crt; procedure round; var x:integer; y:real; begin gotoxy(35,12); write('*'); begin for x:=35 to 40 do y:=sqrt(sqr(5)-sqr(x)); gotoxy(x,y); write('*'); end; round; readln; end.
1) У вас нету главного бегина.
2) Процедуре gotoxy необходимо передавать целые аргументы.
3) Бегин для цикла пишется после for...
4) При вычислении точки Y у вас будет вычисляться корень из отрицательного числа, т. к. вы вычитаете sqr(x) из квадрата радиуса.. . На самом деле необходимо вычитать квадрат расстояния от центра до вычисляемой точки по координате Х.
5) Ну и при рисовании, т. к. в y будет хранится расстояние от центра до вычисляемой точки по координате Y, то надо будет произвести соответствующее преобразование.

В итоге получается примерно следующее.. .

uses crt;
procedure round;
var
x,y:integer;
begin
clrscr;
gotoxy(35,12);
write('*');
for x:=35 to 40 do
begin
y:=trunc(sqrt(sqr(5)-sqr(x-35)));
gotoxy(x,12-y);
write('*');
end;
readln;
end;

begin
round;
end.

Соглашусь с пред. ответом про имя процедуры. Если хочется, можно, но не рекомендуется.. . В больших программах будет возникать путаница.
Юрий K
Юрий K
598
Лучший ответ
Интернет Магазин Да ваша прграмма оказалась действительно рабочей, тока создаётся такое ощущение что она рисует звёздочки в рандомных координатах определённой области
Юрий K Вохможно что создается такое впечатление, т.к. маленький радиус...
Можете поэксперементировать с этим кодом, попробовать поменять радиус и центр... Вроде все верно :)

uses crt;
procedure draw_circle;
var
r,xc,yc,x,y:integer;
begin
clrscr;
xc:=40;
yc:=40;
r:=35;
gotoxy(xc,yc);
write('*');
for x:=xc to xc+r do
begin
y:=round(sqrt(sqr(r)-sqr(x-xc)));
gotoxy(x,yc-y);
write('*');
end;
readln;
end;

begin
draw_circle;
end.

поставил в данной программе round вместо trunc... с этим тоже можете поэкспериментировать... результаты чуть чуть различаются...
Вы не сказали, на что именно и как именно ругается компилятор.
Скорее всего y должен быть целым
y:=round(sqrt(sqr(5)-sqr(x)));
Vaso Vaso
Vaso Vaso
81 790
Интернет Магазин Спасибо, действительно нужно округление и ещё скажите пожалуйста как в паскале выделять модуль числа?
К предыдущим ответам добавлю, что перед вызовом round пропущен begin

Вот как должно быть:

uses crt;

procedure Draw_round;
var x, y:integer;
begin
gotoxy(35,12);
write('*');
for x:=35 to 40 do begin
y:=Round(sqrt(sqr(5)-sqr(x)));
gotoxy(x,y);
write('*');
end;
end;

begin
Draw_round;
readln;
end.

Round -- стандартная процедура, ее имя использовать в кач-ве имени своей процедуры нехорошо ;)
La Renardeau
La Renardeau
40 192
Я не профи, но походу begin должно быть после for:
for x:=35 to 40 do begin
Omur Mamatov
Omur Mamatov
671