Алфавит и словарь языка Паскаль
Выучить конспект (алфавит языка, операции и др.), Просмотреть примеры записи выражений и выполнить домашнее задание в конце этого документа
Алфавит и словарь языка Паскаль
Язык – совокупность символов, соглашений и правил, используемых для общения. При записи алгоритма решения задачи на языке программирования необходимо четко знать правила написания и использования языковых единиц. Основой любого языка является алфавит (набор знаков, состоящий из букв, десятичных и шестнадцатеричных цифр, специальных символов).
Алфавит Паскаля составляют:
· прописные и строчные буквы латинского алфавита: A, B, C…Y, Z, a, b, c,…y, z и знак подчеркивания;
· десятичные цифры: 0, 1, 2,…9;
· Неделимые последовательности знаков алфавита образуют слова, отделенные друг от друга разделителями. Ими могут быть пробел, комментарий или символ конца строки.
· Словарь Паскаля можно разделить на три группы слов: зарезервированные слова, стандартные идентификаторы и идентификаторы пользователя.
Зарезервированные слова (см таб.1) имеют фиксированное написание и навсегда определенный смысл. Они не могут изменяться программистом и их нельзя использовать в качестве имен для обозначения величин.
Идентификатор – имя (identification – установление соответствия объекта некоторому набору символов). Для обозначения определенных разработчиками языка функций, констант и т. д. служат стандартные идентификаторы, например Sqr, Sqrt и т. д. В этом примере Sqr вызывает функцию, которая возводит в квадрат данное число, а Sqrt – корень квадратный из заданного числа. Пользователь может переопределить любой стандартный идентификатор, но чаще всего это приводит к ошибкам, поэтому на практике их используют без изменения. Идентификаторы пользователя – это те имена, которые дает сам программист. При записи программ нужно соблюдать общие правила написания идентификаторов:
· Идентификатор начинается только с буквы или знака подчеркивания(исключение составляют специальные идентификаторы меток).
· Идентификатор может состоять из букв, цифр и знака подчеркивания.
· Максимальная длина – 127 символов, а значащими являются 63 символа.
· При написании идентификаторов можно использовать прописные и строчные буквы.
· Между двумя идентификаторами должен стоять хотя бы один пробел.
Некоторые зарезервированные слова версии Турбо Паскаль
Перевести программу с Паскаля на [любой-язык]
Конкурс окончен, смотрите результаты в конце вопроса.
Я думаю, многие из вас видели вопросы, состоящие из просьбы перевода программы с одного языка на другой. Давайте-ка покажем, как делать такие вещи правильно! В нашем конкурсе мы исходим из такой простой программы на Паскале:
Задание состоит в следующем: вы должны перевести программу на любой-язык так, чтобы сохранить как можно больше от исходного текста программы. В качестве целевого языка, понятно, исключаются языки группы Паскаля (Delphi, Algol, Oberon, Modula, etc., все языки, в которых используется begin / end для группировки команд в составную команду).
Вы можете дописывать конструкции до и после данного в условии текста, но не внутри его (точнее, можете и внутри, но это будет считаться изменением — смотрите ниже условия подсчёта). Сам текст желательно менять как можно меньше.
Ограничения: Строки исходной программы между begin и end должны сохранять свой смысл. Они должны выполняться, и при их выполнении должно происходить в общих чертах то же, что и в исходной программе: readln должно считывать значения с консоли, c := a + b должно складывать значения двух переменных (или что там есть в вашем языке) в третью, writeln должно выводить правильный результат на консоль. (Это означает, что вы не можете просто закомментировать код первоначальной программы.)
В частности, полное совпадение кода выигрывает у неполного независимо от количества подготовительного кода.
Для того, чтобы было легче проверять ваш код, старайтесь публиковать ссылку на онлайн-компилятор с вашим кодом. Код должен компилироваться без ошибок (пусть даже с предупреждениями) и правильно работать в диапазоне входных чисел от 0 до 1000.
Продолжительность конкурса — 1 неделя.
Для исключения разночтений, при неясности в правилах пожалуйста переспрашивайте в комментариях или в чате, посвящённом code golf.
Для примера, вот внеконкурсное решение на plain TeX:
(Если кому интересно, гольфированный вариант.) Транскрипт компиляции:
Просьба к отвечающим писать в начале решения ваш язык, количество изменённых символов и количество символов в подготовительном коде. Также просьба давать не более одного решения на ответ.
Обновление: Конкурс окончен, вот результаты.
Побеждает ответ @Mike, сумевший уложиться в 78 подготовительных символов, и не поменять ни символа в исходном коде.
Другой ответ того же автора выглядит чрезвычайно изящно (подключение паскалевского синтаксиса как внешний модуль, хей!), и почти выиграл приз зрительских симпатий, но проигрывает по количеству символов вследствие своей большей общности. Оба решения пользуются особенностью языка Perl, который в своих модулях позволяет предобработку текста на Perl самим Perl’ом. Мощный язык, мощные средства управления синтаксисом, заслуженная победа.
Второй в списке победителей — ответ @Qwertiy. Это решение продолжает идею «получить текст как строку, обработать, чтобы получился код на нужном языке, и выполнить над ней eval », с симпатичной, очень техничной и компактной реализацией (регулярки!).
Приз зрительских симпатий получает неожиданный ответ @kmv. В этом решении текст исходной программы не объявляется строкой, а «вытягивается» из кода функции! (Это, формально говоря, решение не по стандарту, но фактически в распространённых браузерах toString() работает именно так.)
Третье место получает решение @pavel с комбинацией Unix shell/C, которое обходится без eval за счёт замены строк до компиляции и использования препроцессора C. Такой подход позволяет справиться с двоеточиями, которые вызывают затруднения для препроцессора у чистых решений на C/C++.
Тему интерпретации продолжает ещё одно решение @nuts119 на C# с использованием DataTable как arithmetic engine. Это решение, при всей его сложности, имеет дальний прицел на построение полноценного интерпретатора.
Оставшиеся решения на чистом C/C++ и Javascript/Typescript без eval вынуждены модифицировать исходный текст, хотя они смогли обойтись минимальным количеством изменений. Из этих решений наилучшие с одним удалённым символом решения @kmv (C, препроцессор, использование битовых полей) и @Qwertiy (C++, тонкости препроцессора). Интересно, что эти оба решения убирают из исходного текста соседние символы: из := убрано в первом случае двоеточие, а во втором — знак = (!).
Оставшиеся четыре решения (@Qwertiy, typescript, @pavel, C++, препроцессор (заработало больше голосов, чем победитель), снова @Qwertiy, javascript и @Grundy, C, препроцессор) меняют больше символов в исходном коде, но также интересны и стоят вашего внимания.
Большое спасибо всем, кто принимал участие в конкурсе!
Таблица лидеров: (спасибо @Grundy за адаптацию скрипта и @jfs за идею)
Перевод с языка паскаль на язык с
Почему-то вообще не получается.Никак не могу вникнуть. помогите,если не сложно.Для Вас же это нетрудно и быстро должно быть. пожалуйста,очень нужно.
1.
Program Factorial;
uses Crt;
var
a,b,c:real;
N:Integer;
i:integer;
X:integer;
begin
clrscr;
Write(‘Aaaaeoa cia?aiea X:’);
Readln(x);
Write(‘Aaaaeoa cia?aiea N:’);
Readln(n);
a:=1;
For i:=1 to N do
a:=a*x;
Writeln(‘?acoeuoao:’,a);
b:=1;
For i:=1 to N do
b:=b*i;
Writeln(‘?acoeuoao:’,b);
c:=a/b;
writeln(‘?acoeuoao:’,c);
end.
2.
program summa;
const
N =3;
Type
matrix = Array[1..n,1..n] of Integer;
var
A,B,C : matrix;
i,j: Integer;
procedure Fill(var M:Matrix);
var i,j:integer;
begin
for i:=1 to N do
for j:=1 to N do
M[i,j]:=random(50);
end;
procedure vivod(M:matrix);
var
i,j:Integer;
begin
writeln;
for i:=1 to n do
begin
for j:=1 to N do
write(M[i,j]:4);
writeln;
end;
end;
begin
randomize;
Fill(A);vivod(a);
Fill(B);vivod(b);
for i:=1 to N do
for j:=1 to N do
C[i,j]:= A[i,j]+B[i,j];
vivod(c);
end.
3.
Program func;
Const
Sp=’ ‘;
VAR
S:String;
i:Byte;
BEGIN
WriteLn(‘Enter the string containing Tabs:’);
ReadLn(S);
i:=0;
Repeat
Inc(i);
If Ord(S[i])=9 then
begin
Delete(S,i,1);
Insert(Sp,S,i);
Inc(i,2);
end;
Until i>=Length(S);
WriteLn(S);
ReadLn;
END.
4.
while (i i1 then
begin
str:=Copy(stmp,i1,i2-i1);
Delete(stmp,i1,i2-i1);
for j:=1 to Length(str) do
for k:=1 to Length(str)-j do
if Ord(str[k])>Ord(str[k+1]) then
begin
min:=str[k+1];
str[k+1]:=str[k];
str[k]:=min;
end;
Insert(str,stmp,i1);
end;
end;
writeln(‘Result:’);
writeln(stmp);
readln;
end.
Подсказка вам:
типы переменных real=вещ, integer=цел
циклические конструкции:
for <> to <> do
нц для <> от <> до <> шаг <>
серия
кц
массив=таблица, например, вещ таб а[10]
length()=длин()
read() = ввод ()
write()=вывод()
Что-то вы тут фигню-с сморозили
Школьный алгоритмический язык основывается на алголоподобном алгоритмическом языке с русскими операторами, разработанном в середине 80-х командой Ершова. Изначально среда программирования на ШАЯ называлась E-86, реализация была включена в комплекс Роботландия, также существовала версия KUMIR для УКНЦ, она поставлялась в составе КУВТ в школы, после проект был надолго заброшен. В настоящее время поддерживается НИИСИ и доступен по ссылкам КУМир (комплекс учебных миров) и http://lpm.org.ru/wordpress/?page_id=5. В настоящее время язык относится к free-soft и существуют версии под наиболее распространенные операционные системы, в том числе и под Linux. Современная реализация написана на языке C++ и QT и имеет встроенные средства для перевода листинга с алгоритмического языка на C++ и компиляции программы.
Насколько мне известно, про псевдокод такого сказать нельзя, потому как до сих пор ещё не написали систему, способную корректно переводить разговорную речь в реальный листинг
Кстати, скачайте систему КУМир и справочку почитайте, там много полезного и очень даже развернуто все команды и конструкции описаны



