Компилятор Turbo Pascal чаще всего используют для обучения начинающих программистов. Тут срабатывает принцип: чем проще - тем лучше. Для новичков не должно быть ничего лишнего, что отвлекало бы внимание. У нас уже есть онлайн-версия WEB-среды разработки Free Pascal. Также новичкам будет полезен и наш редактор програм на Паскале.
Но если вас интересует Турбо Паскаль 5.5 в своем первозданном виде, то теперь у нас есть и такая версия. Посмотреть в работе онлайн-эмулятор компилятора Турбо-Паскаля можно здесь. Вам ничего не надо устанавливать. Важно только, чтобы в вашем браузере была включена поддержка JavaScript (если вы не отключали javascript, то у вас должно быть включено по умолчанию).
Помощь по работе.
У Вас есть всего два режима. Первый режим Edit - редактор кода. Чтобы зайти в редактор, нажмите латинскую букву E - первая буква команды Edit. Второй режим - экран, на котором будет отображаться результат выполнения вашей программы. Запустить программу на выполнение можно, нажав клавишу R - первая буква команды Run.
Скрины эмулятора.
После того, как вы зайдете в онлайн эмулятор компилятора Турбо Паскаля, вы увидите экран с мигающим курсором-приглашением к выполнению программы. На экране будут подсказки, какие клавиши нажимать, а также число байт, занятых кодом программы и количество свободного места в памяти для вашей программы. Все выглядит также как в старом добром Паскале. Ну, по крайней мере очень похоже.
Для того, чтобы написать Вашу первую программу, следует зайти в редактор. Для этого, нажмите клавишу Edit. Вы увидите пустое окно редактора. Наберите там код программы. Например, такой как на скрине слева - простейшая программа приветствие. Дальше надо нажать ссылку (внизу редактора) : закрыть редактор. Вы вернетесь к основному режиму. Вы увидите, что изменилось число байт, занимаемых вашей программой и соответственно уменьшится свободное место.
Следующий шаг - запуск на выполнение Вашей первой программы. Для запуска нажимаем клавишу R. Если программа не содержит ошибок, то на экран будет выведен результат ее выполнения. В примере - это сообщение "Hello world!". Если программа содержит ошибки, то вы получите соответствующее сообщение об ошибке. Как правило, сообщение про ошибку начинается словом "Error:", а дальше следует описание ошибки и строка, в которой ошибка допущена. Все по взрослому.
На скрине слева приведен пример сообщения, которое выдается на экран, если в коде программы встретилась ошибка. "Компилятор-эмулятор" предпринимает попытку идентифицировать ошибку, чтобы помочь начинающему программисту ее исправить. В данном примере, мы чуть подпортили код простейшей программы приветствия, убрав закрывающую кавычку. Компилятор предположил три возможных причины по которой коде не выполнился.
Для "продвинутых" пользователей есть еще один режим, который можно вызвать а затем закрыть, нажав клавишу X. Назовем этот режим режимом отладки. Остановить выполнение программы можно нажав клавишу Esc. Надо отметить, что этот компилятор нельзя считать полностью соответствующим полноценной версии. Кое-что тут отсутствует по понятным причинам. Пробуйте, экспериментируйте.
Примеры программ.
В завершение приведем примеры программы, которые вы можете скопировать (выделить и нажать Ctrl+C), а затем вставить в редактор (Ctrl+V) и выполнить. Примеры приводятся чтобы вы убедились, что возможности "компилятора-эмулятора" весьма впечатляют.
Пример. Программа приветствие.
program TestProgram;
begin
Writeln('Hello world!');
end.
Пример. Фейерверк.
program FireWorks;
{$R+}
uses
Crt, Graph;
var
GraphDriver, GraphMode, ErrorCode : Integer;
Ch : Char;
I, J, K, XStart, YStart : Integer;
XX,YY,CC : Array[1..1000] of Integer;
FX,FY,DX,DY : Array[1..70] of Real;
R, T, X, Y : Real;
procedure Explode (C : Integer);
begin
T := -Pi;
I := 0;
Repeat
I := I + 1;
DX[I] := Sin(T)*5;
DY[I] := Cos(T)*5;
FX[I] := X;
FY[I] := Y;
T := T + 0.15;
Until T > Pi;
K := 0;
Repeat
For J := 1 to I do
begin
If C = 0 then
PutPixel (Round(FX[J]),Round(FY[J]),0)
else
PutPixel (Round(FX[J]),Round(FY[J]),Random(GetMaxColor+1));
FX[J] := FX[J] + DX[J];
FY[J] := FY[J] - DY[J];
DY[J] := DY[J] - 0.2;
end;
K := K + 1;
Delay(10); { This was not in the original. }
Until Keypressed or (K > 50);
end;
procedure ShootFireWork;
begin
{ Delay (1000); }
Randomize;
T := Random / 2 - 0.25 + Pi/2;
X := XStart;
Y := YStart;
R := 20;
I := 0;
Repeat
Inc (I);
XX[I] := Round(X);
YY[I] := Round(Y);
CC[I] := GetPixel (XX[I],YY[I]);
If I > 1 then
If (XX[I] = XX[I-1]) and (YY[I] = YY[I-1]) then CC[I] := CC[I-1];
PutPixel (XX[I],YY[I],Random(GetMaxColor+1));
If I > 5 then
PutPixel (XX[I-5],YY[I-5],CC[I-5]);
X := X + Cos(T)*R;
Y := Y - Sin(T)*R;
If T > Pi/2 then
T := T + 0.02
else
T := T - 0.02;
R := R * 0.93;
Delay (20);
Until KeyPressed or (T < 0) or (T > Pi);
For J := I-5 to I do
PutPixel (XX[J],YY[J],CC[J]);
{ ch := readkey; }
Explode (1);
Explode (0);
end;
begin
GraphDriver := Detect;
InitGraph (GraphDriver, GraphMode, '..');
ErrorCode := GraphResult;
If ErrorCode <> grOk then
begin
Writeln ('Graphics Error: ',GraphErrorMsg(ErrorCode));
Halt;
end;
SetColor (GetMaxColor);
XStart := GetMaxX div 2;
YStart := GetMaxY - 20;
Repeat
ShootFireWork;
Until Keypressed;
Ch := ReadKey;
ClearDevice;
CloseGraph;
end.
Пример. Случайный сплайн.
program BSplineCurve;
{$N+}
uses
Crt, Graph;
const
NumDots = 5;
type
xyzArray = Array[0..100,1..3] of LongInt;
var
N,K,GraphDriver, GraphMode, ErrorCode : Integer;
Ch : Char;
knotK, knotN : Integer;
function Knot (I : Integer) : Integer;
begin
If I < knotK then
Knot := 0
else
If I > knotN then Knot := knotN - knotK + 2
else
Knot := i - knotK + 1;
end;
function NBlend (I,K : Integer; U : Real) : Real;
var
T : Integer;
V : Real;
begin
If K <= 1 then
begin
V := 0;
If (Knot(I) <= U) and (U < Knot(I+1)) then V := 1;
end
else
begin
V := 0;
T := Knot(I+K-1)-Knot(I);
If T <> 0 then V := (u-Knot(i))*NBlend(i,K-1,u)/t;
t := knot(i+K) - knot(i+1);
If T <> 0 then
V := V + (Knot(I+K)-U)*NBlend(I+1,K-1,U)/t;
end;
NBlend := V;
end;
procedure BSpline (var X,Y,Z : Real; U : Real; N,K : Integer; P : xyzArray);
var
I : integer;
B : Real;
begin
KnotK := K;
KnotN := N;
X := 0;
Y := 0;
Z := 0;
For I := 0 to N do
begin
B := NBlend(I,K,U);
X := X + p[I,1]*B;
Y := Y + p[I,2]*B;
end;
end;
procedure DrawCurve;
var
ControlPoints : xyzArray;
I : LongInt;
X, Y, Z : Real;
begin
For I := 0 to 30 do
ControlPoints[I,3] := 0;
For I := 0 to NumDots-1 do
begin
ControlPoints[I,1] := Random(GetMaxX);
ControlPoints[I,2] := Random(GetMaxY);
end;
SetColor (LightCyan);
SetLineStyle (UserBitLn,1,NormWidth);
For I := 0 to NumDots-1 do
If I = 0 then
MoveTo (ControlPoints[I,1],ControlPoints[I,2])
else
LineTo (ControlPoints[I,1],ControlPoints[I,2]);
SetLineStyle (SolidLn,0,NormWidth);
SetColor (Yellow);
N := NumDots-1;
K := 3;
SetColor (K+8);
For I := 0 to 2300 do
begin
BSpline(X,Y,Z,I/2301*(N-K+2),N,K,ControlPoints);
If I = 0 then
MoveTo (Round(X),Round(Y))
else
LineTo (Round(X),Round(Y));
If Keypressed then Halt;
end;
end;
begin
GraphDriver := Detect;
InitGraph (GraphDriver, GraphMode, '..');
ErrorCode := GraphResult;
If ErrorCode <> grOk then Halt;
SetColor (GetMaxColor);
Randomize;
DrawCurve;
Ch := ReadKey;
ClearDevice;
CloseGraph;
end.
cats = 2'
j = 1
while len(cats) <= n:
cats = cats + '2 * j
i = i + 1
print (cats)
Type
tPoint = object
x,y,color:integer;
Procedure draw;
end;
Procedure tPoint.draw(int x, int y, int color);
begin
PutPixel(x,y,color);
end;
var arr_point:array[1..100] of tPoint;
var gd,gm,p:integer;
Begin
clrscr;
gd:=0;
initgraph(gd,gm,'C:\tp7\tp7\bgi');
Randomize;
for p:=1 to 100 do
begin
x:=Random(601);
y:=Random(451);
color:=Random(15)+1;
arr_point[p].draw(x,y,color);
end;
End.
Имя входного файла: стандартный ввод
Имя выходного файла: стандартный вывод
Ограничение по времени: 1 секунда
Ограничение по памяти: 256 мегабайт
Жарасхан работает в крупной корпорации "ӘСЕМ".
У Жарасхана есть n документов выложенных в ряд. В каждом документе содержится секретное
число ai
. Также у Жарасхана есть некоторые поручения от начальника. Есть 3 типа поручений:
• В поручениях первого типа начальник просит сообщить секретное число в самом левом доку-
менте, а затем уничтожить этот документ.
• В поручениях второго типа начальник просит сообщить секретное число в самом правом до-
кументе, а затем уничтожить этот документ.
• В поручениях третьего типа начальник просит сообщить секретное число в документе кото-
рый лежит в середине всех документов, а затем уничтожить этот документ. Если у списка
документов нет серединного документа, выбрать документ который лежит слева от середины.
Но Жарасхан заранее знает что начальство даст все поручения в повторяющемся порядке. А
именно начальник даст поручение первого типа, затем второго, затем третьего, и еще раз первого,
второго, третьего и так далее пока список документов не окажется пуст.
Жарасхан очень занят другими поручениями. Он просит вас помочь, иначе он лишится работы.
Формат входных данных
В первой строке входных данных содержит единственное целое положительное число n
(1 ⩽ n ⩽ 105
) — количество документов в списке.
Вторая строка содержит n целых чисел ai (1 ⩽ ai ⩽ 109
) — секретные числа в документах.
Формат выходных данных
Выведите n чисел — секретные числа которых должен Жарасхан сообщить начальнику после
каждой операции.
Система оценки
56% тестов имеют ограничения 1 ⩽ n ⩽ 1000
44% тестов имеют ограничения 1 ⩽ n ⩽ 105
В данной задаче ровно 50 тестов.
За каждый пройденный тест участник получает 2 балла.
Пример
стандартный ввод стандартный вывод
6
4 5 9 8 6 7
4 7 9 5 6 8
Замечание
В первом тестовом примере удаляется первое число. Оставшиеся документы: [5, 9, 8, 6, 7] Затем
удаляется последнее число. Оставшиеся документы: [5, 9, 8, 6] Так как список не имеет серединного
документа, следует выбрать число которое лежит слева от середины. Оставшиеся документы: [5, 8,
6] Эти поручения обрабатываются и дальше по такому же порядку.
Имя входного файла: стандартный ввод
Имя выходного файла: стандартный вывод
Ограничение по времени: 1 секунда
Ограничение по памяти: 256 мегабайт
Так как, Арсен является тренером знаменитого футбольного клуба Арсенал, он решил позабо-
титься о будущем клуба и объявил набор в футбольный кружок для юношей. Количество детей
пришедших в кружок — n оказалось очень большим числом. Тем не менее, Арсен не хочет никого
обидеть и хочет распределить всех детей в команды ровно по 11 человек. Получится ли у него?
Формат входных данных
В первой строке дано целое число n (1 ⩽ n ⩽ 101000) — количество детей пришедших в кружок.
Формат выходных данных
В первой строке выведите слово «YES» (без кавычек), если возможно всех распределить по
командам, иначе, «NO» (без кавычек).
Система оценки
Для 38% тестов — (1 ⩽ n ⩽ 109
)
Для 62% тестов — (1 ⩽ n ⩽ 101000)
Примеры
стандартный ввод стандартный вывод
121 YES
1000 NO
Замечание
В первом примере, число 121 без остатка делится на 11, поэтому, ответ «YES».
Во втором примере, число 1000 не делится на 11 без остатка, поэтому, ответ «NO».
Имя входного файла: стандартный ввод
Имя выходного файла: стандартный вывод
Ограничение по времени: 0.5 секунд
Ограничение по памяти: 256 мегабайт
Алихан собирается нарядить ёлку к Новому году. Чтобы это сделать, он представил ёлку в виде
n уровней.
Алихан решил, что с каждым уровнем, количество игрушек на этом уровне елки будет на два
больше чем на предыдущем. После этого он отправился в магазин за игрушками.
Таким образом, он использовал одну игрушку, чтобы нарядить первый уровень, три — второй
уровень, пять — третий уровень, и так до уровня n (известно, что на уровне n количество игрушек
2 × n − 1). Сколько игрушек купил Алихан, если он нарядил все n уровней?
Формат входных данных
На единственной строке находится число n - количество уровней, на которые Алихан разделил
ёлку.
Формат выходных данных
На единственной строке выведите количество игрушек, которые были куплены Алиханом.
Система оценки
Для 24% тестов — (1 ⩽ n ⩽ 102
)
Для 42% тестов — (1 ⩽ n ⩽ 105
)
Для 34% тестов — (1 ⩽ n ⩽ 109
)
Примеры
стандартный ввод стандартный вывод
2 4
3 9
Замечание
В первом примере: 1 + 3 = 4. Во втором примере: 1 + 3 + 5 = 9.
Uses graphabc, events,timers;
const
r=5 ;
d=7;
type
TDirection = (None, Left, Right, Up, Down);
var x,t,y,i,z,xr,yr,prin1,prin2,prin3,prin4,prin5,k,s4et,prin6: integer;
Direction :TDirection;
xs,ys,bufx,bufy:array[1..200]of integer;
procedure shar3;
begin
SetBrushColor(clYellow);
circle(xs[k],ys[k],r);
end;
procedure Circl;
begin
SetBrushColor(clBlack);
circle(x,y,r);
end;
procedure rshar ;
begin
xr:=Random(WindowWidth) ;
yr:=Random( WindowHeight);
end;
procedure rshar2;
begin
SetBrushColor(clYellow);
circle(xr,yr,r);
end;
procedure XP(Key:integer);
begin
case Key of
VK_Left: Direction := Left ;
VK_Right:Direction := Right ;
VK_UP: Direction := UP ;
VK_Down: Direction :=Down ;
end;
circle(x,y,r);
end;
procedure pause;
begin
for i:=1 to 1 do
begin
Circl;
rshar2;
ClearWindow;
rshar2 ;
prin1:=(xr-x+r)*(xr-x+r)+(yr-y)*(yr-y) ;
prin2:=(xr-x-r)*(xr-x-r)+(yr-y)*(yr-y) ;
prin3:=(xr-x)*(xr-x)+(yr-y+r)*(yr-y+r) ;
prin4:=(xr-x)*(xr-x)+(yr-y-r)*(yr-y-r) ;
prin5:=R*R;
if (prin1)<=(prin5) then begin
rshar ;
s4et:=s4et+1;
end;
if (prin2)<=(prin5) then begin
rshar ;
s4et:=s4et+1;
end;
if (prin3)<=(prin5) then begin
rshar ;
s4et:=s4et+1;
end;
if (prin4)<=(prin5) then begin
rshar ;
s4et:=s4et+1;
end;
case Direction of
Left: begin x:=x-d; if x<=0 then x:=WindowWidth end;
Up: begin y:=y-d; if y<=0 then y:=WindowHeight end;
Right: begin x:=x+d; if x>=WindowWidth then x:=0 end;
Down: begin y:=y+d; if y>=WindowHeight then y:=0 end;
end;
xs[1]:=x;
ys[1]:=y;
for k:=1 to s4et do
begin
bufx[k]:=xs[k];
bufy[k]:=ys[k];
end;
for k:=1 to s4et do
begin
xs[k+1]:=bufx[k];
ys[k+1]:=bufy[k] ;
end;
for k:=2 to s4et do
shar3;
Circl;
end;
end;
begin
rshar;
s4et:=2;
Direction := None;
x:=WindowWidth div 2;
y:=WindowHeight div 2;
OnKeyDown:=XP;
CreateTimer(150,pause);
end.
a:longint;
s:integer;
begin
readln(a);
repeat
s:=s+a mod 10;
a:=a div 10;
until a=0;
writeln(s);
end.
s:=0;
for k:= 5 to 9 do
S:= s+ k*8 ;
writeln(s) ;
end.
var A,B,C,D,T,E: real;
begin
writeln ( 'Enter A, B, C, D ');
readln ( A, B, C, D );
T:=exp(1⁄3*ln(1+A))+(((sin(2*a))⁄(cos(2*a))))⁄((1+sqrt(A)));
E:=2*sqr(T)+ln(B)+(exp(pi*c*d));
writeln ( 'T=' , T );
writeln ( 'E=' , E );
End.