Язык Паскаль и среда PascalABC



Паскаль обычно применяют для обучения школьников, в реальной промышленности он на момент 2017 года мало где применяется и является несерьёзным. Хотя раньше, м.б. в 90-х, этот язык был гораздо более популярен наряду с Бейсиком. Тем не менее полезно изучить хотя бы основы. Т.к. мы уже знакомы с одним языком, изучение второго не представляет особой трудности- основные принципы программирования тебе уже и так понятны, поэтому не нужно долго размусоливать то, что ты уже и так знаешь.

Для программирования на паскаль мы можем использовать среду разработки PascalABC, она абсолютно бесплатна и общедоступна, скачать её можно на официальном сайте: pascalabc.net.

К слову сказать, это и среда разработки, и версия языка одновременно. Сделано нашими российскими разработчиками- вся инфа есть на их сайте. Сам язык Паскаль придуман человеком с интересной фамилией Вирт (есть же слово- виртуальный- вряд ли это связано, просто интересно) в конце 60-х, опубликован 1970-м году. К слову, с++ придуман тоже товарищем с интересной фамилией- Страуструп.

Изначально в паскале не было ООП (объектно-ориентированного программирования), но позже его добавили и язык уже стал называться Delfi (дельфи) или Delfi Object Pascal. Чем-то похоже на эволюцию с++ из языка си. В среде PascalABC немного изменённая и доработанная версия уже дельфи паскаля с ООП. Кроме того, тут есть упрощающие модуля для графики и виндовс окон. Виндовс приложения тут создавать гораздо легче чем в с++, потому что тут можно видеть сразу и явно дизайн, предлагаются варианты что можно прописывать и прочее. Также тут есть задачник для тренировки, справка по языку- в общем, можно самостоятельно освоить Паскаль на базовом уровне лишь по тем материалам, которые уже есть в самой программе PascalABC. В общем, тут всё создано для того чтобы какому-нибудь школьнику или студенту освоить с нуля разные части программирования (основы, ООП, виндовс окна, графика и прочее) было как можно легче и доступнее.

Итак, скачиваешь программу PascalABC c официального сайта:

http://pascalabc.net/downloads/PascalABCNETWithDotNetSetup.exe

Устанавливаешь, запускаешь- проект создаётся при запуске автоматически. Вместо int main() у нас используется начало и конец:

begin

// тут будет вся программа (комментарии делаются так же двумя слэшами)

end.

Кстати, есть у всей системы веб-версия, которая позволяет проверять код без использования самой среды на компьютере, своеобразный онлайн-компилятор:

http://wde.pascalabc.net

Здесь мы рассмотрим только основы, потому что можно написать целую аналогичную книгу, рассмотрев чуть ли не все типы, команды и прочее. Впрочем, ты сам это можешь посмотреть в справке (F1). Также тут есть примеры программ для самообучения: помощь -> изучаем pascalabc.net. И ещё есть задачник для самотренировки: модули -> посмотреть задания.

Никаких include, using namespace- этой всей фигни тут нет. Регистр букв тоже не важен, т.е. ты можешь писать Begin c большой буквы и разницы для компилятора никакой не будет. То же самое касается всех остальных команд.

Переменные объявляются после поля var. Например ниже примеры объявления целых чисел, вещественных и строк. Для строк ничего подключать не надо.

var

x,y : integer;

r : real;

s,s1,s2 : string;

Можно писать и так:

var x,y : integer;

var r : real; и т.п.

Переменные можно объявлять как до главного бегина, так и внутри.

Для ввода из консоли используются функции read или readln. В pascalABC разницы никакой не замечено. Для вывода- write и writeln. Если мы пишем writeln, то после вывода происходит переход на новую строку.

Ниже пример всей программы: создаём 2 переменные целого цисла, складываем и выводим:

begin

var a,b : integer;

write('a= '); read(a);

write('b= '); read(b);

writeln('a+b= ', a+b);

end.

Для запуска жмём зелёную кнопочку наверху или F5. Вывод будет внизу в самой среде, без консольных окон. Если нам нужно консольное окно, то программу нужно скомпилировать: верхнее меню -> программа -> компилировать (CTRL + F9). Далее в корневой папке диска С находим папку PABCWork.NET, в ней будет уже готовый exe файл с программой.

Для того чтобы не вылетало, тут нет system("pause"), поэтому запросим ввести какую-нибудь переменную, например тут в конце программы напишем просто read(a). И как только мы введём любое число и нажмём enter, консольное окно закроется. Можно предварительно также выводить что-то вроде "Программа завершена. Для выхода введите любое число и нажмите enter"

Можно вводить несколько переменных сразу: read(a,b,c,d);

Чтобы сделать просто лишний переход на новую строку, пишем: writeln(); это аналог cout << endl;

Присваивание идёт через двоеточие и равно. Например:

var pi : real; pi:= 3.141592653;

Также есть отличия в плане целых и дробных: если мы поделим 2 целых, которые нацело не делятся, то получится дробное и так выведется. Пусть мы делим 2 целых числа: a/b. Если нам нужна целая часть, пишем a div b. Остаток находится так: a mod b. Округлить до целого можно так: trunc(x);

Также работают операции изменения: a+=2 всё равно что a:= a+2;

Математические функции во многом аналогичны: sqrt(), abs(), sin() и т.д. Для них подключать ничего не надо. Точный список функций можно найти в справке.

Условие реализуется так:

if (условие) then делать;

Или так: if(условие) then делать одно else делать другое ;

Если действие больше чем одно, то вместо фигурных скобок у нас begin и end; Главный end с точкой, все остальные- с точкой с запятой.

Ниже пример упрощённой программы, которая считает корни квадратного уравнения:

begin

var a,b,c,d : real;

read(a,b,c);

if(a<>0) then begin

           d:= b*b - 4*a*c;

           if (d<0) then writeln('Корней нет');

           if (d=0) then writeln('x= ', -b/(2*a));

           if (d>0) then begin

                           writeln('x1= ', (-b + sqrt(d) ) / (2*a));

                           writeln('x2= ', (-b - sqrt(d) ) / (2*a));

           end;

end;

end.

Ах да, знаки тут немного отличаются: присваивание (:=), равенство (=). В отличие от с++, где у нас присваивание(=), равенство(==). Ну а "не равно" на паскале пишется как меньше или больше, т.е. <>

Для объединения условий: or (или), and (и), not (не). При этом тут не нужно заключать в скобки всё условие, если мы например что-то перечисляем:

if (x mod 2 = 0) and (x>=100) and (x<=999) then writeln(x);

Теперь циклы. Тут в основном 2 типа:

var i: integer;

for i:=1 to 100 do что-то делаем 100 раз

или

while (условие соблюдается) do делаем

Также есть третий редкий тип, аналог do while в c++, но с одним отличием: в с++ мы делаем пока условие какое-то соблюдается, а в паскале делаем пока какое-то условие не станет таким как надо:

repeat

делаем что-то

until (нужное нам условие чтобы выйти из цикла) ;

Например:

var a: real;

Repeat

read(a);

if(a<10) then writeln('Ошибка');

until (a>=10);

Прям так копируется как в паскаль абс- это даже круто ))) масштаб мы можем менять колёсиком, как и в visual studio.

Для цикла for в паскале у нас по умолчанию i++, в этом плане функционал меньше. Если мы хотим наоборот уменьшать итератор, то можно писать например так:

for var i:=8 downto 2 do write(i,' ');

Теперь посмотрим как делать массивы и функции. Массив из 10 целых чисел объявится к примеру так:

var mass : array[1..10] of integer;

и у нас есть элементы mass[1], mass[2] и т.д. до mass[10]. Нумерация здесь может идти не только с 0, но и с любого числа, например var a:array[4..14] of real; в этом плане функционал больше.

Можно сделать двумерный массив: var m:array[1..7, 1..5] of integer; И обращаться к элементу так: m[3,2];

Функции создаются так. Ниже на примере факториала:

function fact (n:integer) : integer;

begin

var res, i: integer;

res:=1;

for i:=1 to n do res:= res*i;

fact:= res;

end;

Заметим разницу: return тут нет, вместо этого присвоение значения имени функции, в нашем случае fact. Также всегда пишется кодовое слово function, а тип возвращаемого значения указывается после аргументов. И ещё точка запятой после этого.

Аргументов может быть несколько и разного типа, например так:

function mrrow (a,b : real; c:string) : integer;

Используется функция как обычно, например write(fact(6)); или a:= fact(5);

Функции, которые ничего не возвращают, называются процедурами, а типа void тут нет, пишется так: procedure имя (аргументы) ;

Например, процедура перехода на новую строку n раз:

procedure nl (n:integer);

begin

for var i:=1 to n do writeln();

end;

Также можно использовать перегрузку функций.

Случайное число от 1 до n можно вызвать так: random(n)- это будет целое значение, которое можно использовать как мы хотим.

Вместо класса тут может использоваться структура (запись), т.е. без ООП (объектно-ориентированного программирования). Например, точка:

type point = record

x,y : integer;

end;

Обращение как к обычному элементу класса, например var a:point; a.x:= 100; a.y:= random(100); и т.п.

...

Теперь посмотрим как тут можно делать графику. Это гораздо проще чем в си плюс плюс. В начале программы пишем uses GraphABC; и можно сделать далее begin и end основные. Запустим- вылезет окошечко.

Система координат начинается с левого верхнего угла. Окно по умолчанию: 640 по ширине вправо и 480 по высоте вниз. Вместо 640 и 480 можно писать WindowWidth и WindowHeight. Также можно задать размеры окна самому, например 500 на 400:

SetWindowSize(500,400);

Теперь напишем, начиная с точки с координатой 100 вправо и 200 вниз, слово "привет". Для этого пишем такую программу, покажу всю:

uses GraphABC;

Begin

textout(100,200,'Привет');

end.

Можно выводить и числа- надо вместо 'Привет' написать какое-нибудь число.

Далее мы можем рисовать круги, прямоугольники и линии. Для этого используются свои функции:

circle(x,y,r); нарисовать круг с центром в (x,y) и радиусом r.

rectangle(x1,y1,x2,y2); нарисует прямоугольник между 2 диагональными точками: (х1,у1) и (х2,у2).

line(x1,y1,x2,y2); рисует линию по 2 точкам.

Можно в цикле рисовать несколько таких фигур. А ещё можно задавать цвет. Для этого перед рисованием фигуры пишем: SetBrushColor(цвет); Чтобы закрасить обводку, пишем SetPenColor(цвет). По умолчанию обводка чёрная, а цвет фигуры белый. Цвет начинается с cl и далее название на английском. Ниже пример рисования 5 красных линий:

uses GraphABC;

Begin

for var i:=1 to 5 do begin

SetPenColor(clRed);

line(0,0+i*50, 640, i*50);

end;

end.

Можно использовать случайный цвет: clRandom. Ниже мы нарисуем картину из 100 красных кругов со случайным радиусом и в случайных местах:

uses GraphABC;

Begin

for var i:=1 to 100 do begin

SetPenColor(clRed);

SetBrushColor(clRed);

circle(random(300), random(300), random(100));

end;

end.

Можно даже сделать простую анимацию, для этого делается задержка: sleep(миллисекунды); Например, будем рисовать круги вправо с задержкой:

uses GraphABC;

Begin

for var i:=1 to 10 do begin

sleep(300);

SetBrushColor(clRandom);

circle(i*50,100,50-i*4);

end;

end.

Посмотрим как загружать картинки. Нужно создать переменную типа picture:

var p : picture;

Естественно, у нас подключено graphabc. Далее я сделал в пэинте тестовую картинку, сохранил как jpg и переместил в папку PABCWork.NET на диске C.

Загрузка картинки: p:= picture.Create('example.jpg');

Помещение этой картинки в нужную координату: p.Draw(300,200);

Ниже я приведу код игры сапёр, на примере которого ты можешь со всеми этими технологиями ознакомиться:

uses graphABC;

 

Var

mass: array [0..11,0..11] of integer;

pic: array [0..15] of Picture;

x,y,i,j,n:integer;

size:integer;

 

procedure GameOver();

var i,j:integer;

Begin

for i:=1 to 10 do

for j:=1 to 10 do

pic[mass[i][j]].Draw(i*size, j*size);

end;

 

 

procedure MouseDown(x,y,mb:integer);

Begin

 i:=x div size;

 j:=y div size;

 if mb=1 then pic[mass[i,j]].Draw(i*size,j*size);

 if mb=2 then pic[11].Draw(i*size,j*size);

 if (mb=1) and (mass[i,j]=9) then GameOver();

end;

 

Begin

size:=32;

SetWindowSize(400,400);

OnMouseDown:=MouseDown;

 

for i:=0 to 11 do pic[i]:=Picture.Create('images/'+i.ToString()+'.jpg');

 

for i:=1 to 10 do for j:=1 to 10 do begin

mass[i,j]:=10;

if (random(5)=0) then mass[i,j]:=9;

end;

 

for i:=1 to 10 do for j:=1 to 10 do begin

n:=0;

if mass[i,j]=9 then continue;

if mass[i+1,j]=9 then n:=n+1;

if mass[i,j+1]=9 then n:=n+1;

if mass[i-1,j]=9 then n:=n+1;

if mass[i,j-1]=9 then n:=n+1;

if mass[i+1,j+1]=9 then n:=n+1;

if mass[i-1,j-1]=9 then n:=n+1;

if mass[i-1,j+1]=9 then n:=n+1;

if mass[i+1,j-1]=9 then n:=n+1;

mass[i,j]:=n;   

end;

 

for i:=1 to 10 do for j:=1 to 10 do pic[10].Draw(i*size, j*size);

 

end.

Картинки от этого сапёра ты можешь скачать и использовать здесь:

https://yadi.sk/d/72lR8VFy3KZT9Z

Про рисование игр на паскале можно было написать отдельную книгу, возможно я даже когда-нибудь её напишу, поэтому здесь мы на этом закончим. Всё-таки тут предполагался просто ознакомительный режим.

 

57. Язык Си и отличия от С++

Как известно, язык с++ произошёл от си. В си нет объектно-ориентированного программирования. Сначала появился язык "си с классами", а позже уже и сам си плюс плюс. Название исходит из инкрементации си- как бы на единицу больше, т.е. чуточку получше. Язык си разработан в 1969-73 годах, примерно когда появился и язык паскаль.

Полезно посмотреть, как писать хотя бы простые вещи на языке си, тут во многом всё похоже на си плюс плюс. Кроме того, сам язык си входит в с++ (если упрощённо рассматривать, хотя всё чуточку сложнее), т.е. ты можешь в программе на с++ спокойно писать участки кода с конструкциями языка си и компилятор будет это переваривать. Хотя в общем случае это не так, но для начала для простоты мы можем принять и так. Язык си также называют "чистый си", в отличие от c++, c# и прочих. С++ был разработан в начале 80-х как усовершенствование языка си, опубликован в 1985 году.

Но мы можем создать и проект чисто на языке си. Для этого не нужна какая-то отдельная среда. В devcpp ты так же создаёшь проект, только выбираешь при этом не с++, а просто с. Создастся файл main.c. В visual studio ты тоже просто можешь создать файл main.c

В си заметно больше заморочек, чем в с++, и он кажется сложнее- поэтому поняв с++, изучение языка си уже не кажется таким страшным. Просто нужно больше кода писать и больше нюансов помнить и учитывать. Потому что си- это более низкоуровневый язык чем с++, т.е. он ближе к машинному языку, а поэтому быстрее- но при этом сложнее для программиста (для человека). На си часто программируют микроконтроллеры, например калькуляторы какие-то и прочие устройства.

Итак, приступим. В языке си тоже нужно подключать библиотеки, только они называются немного по-другому. Например, вместо iostream у нас stdio.h. Для подключения библиотек используется та же команда #include.

Для вывода информации используется функция printf(); Как в паскале примерно. Например, чтобы вывести привет, мы пишем: printf("Privet"); Для поддержки русского языка можно использовать такие же приёмы. Для перехода на новую строку можно использовать только последовательность "\n"; Типы переменных такие же: int, char, double и прочие.

Программа, которая выводит Privet:

#include <stdio.h>

int main() {

           printf("Privet\n");

           system("pause");

}

Теперь попробуем создать 2 переменные целого числа и сложить. В си есть заморочка с вводом и выводом переменных и ты сейчас офигеешь насколько в с++ в этом плане сделали всё проще.

Чтобы создать переменную a, мы пишем как привыкли: int a;

Можно через запятую создать две: int a,b;

А вот вводить переменную, например a, нужно так: scanf("%d",&a);

Т.е. мы не просто вводим переменную, а указываем через "%d" что мы вводим именно целое число. Для каждого типа переменной нужно указывать свои буквы после процента. А далее мы вводим не просто переменную, а ещё и с амперсентом, чем обозначается адрес.

На этом заморочки не заканчиваются. Выводить тоже надо с процентными последовательностями до переменных, но адрес ставить уже не надо. Вот вся программа, которая складывает 2 целых числа:

#include <stdio.h> // библиотека ввода-вывода

int main() {

           int a,b; // освобождение 2 ячеек памяти под целые числа с именами a,b

           scanf("%d",&a); // ввод переменной a

           scanf("%d",&b); // ввод b

           printf("%d",a+b); // вывод суммы

           printf("\n"); // переход на новую строку

           system("pause"); // пауза чтобы консольное окно не вылетало

}

А как же с типами float, double и прочими? Ниже список с процентными символами, которые нужно указывать:

%d — целое число типа int со знаком в десятичной системе счисления;

%u — целое число типа unsigned int;

%x — целое число типа int со знаком в шестнадцатеричной системе счисления;

%o — целое число типа int со знаком в восьмеричной системе счисления;

%hd — целое число типа short со знаком в десятичной системе счисления;

%hu — целое число типа unsigned short;

%hx — целое число типа short со знаком в шестнадцатеричной системе счисления;

%ld — целое число типа long int со знаком в десятичной системе счисления;

%lu — целое число типа unsigned long int;

%lx — целое число типа long int со знаком в шестнадцатеричной системе счисления;

%f — вещественный формат (числа с плавающей точкой типа float);

%lf — вещественный формат двойной точности (числа с плавающей точкой типа double);

%e — вещественный формат в экспоненциальной форме (числа с плавающей точкой типа float в экспоненциальной форме);

%c — символьный формат;

%s — строковый формат.

Поехали дальше. Арифметика в языке си такая же как в с++, т.е. знаки плюс, минус и прочее всё то же самое. Условия и циклы имеют такой же синтаксис.

Тогда теперь сосчитаем сумму чисел от 1 до 100 с помощью цикла на языке си. Это выглядит так:

#include <stdio.h>

int main() {

           int sum= 0, i;

           for (i=1; i<=100; i++) sum+= i;

           printf("%d",sum);

           system("pause");

}

Важно: в printf мы указываем только 2 аргумента: процентный символ и выводимое число. Все дальнейшие аргументы через запятую игнорируются. Приходится prinf писать несколько раз.

Если мы хотим вывести "Сумма: 5050" то тогда это выглядит так:

printf("Сумма: %d",sum);

Для русского языка как обычно прописываем setlocale(0,"");

...

Для корня, модуля и т.п. всё то же самое, но библиотека уже <math.h>

Ниже программа, которая считает арифметический корень из семи:

#include <stdio.h>

#include <math.h>

int main() {

           setlocale(0,"");

           printf("%lf",sqrt(7));

           printf("\n");

           system("pause");

}

Помним про процентные символы для ввода-вывода.

...

Статические массивы создаются и используются так же. Пример:

int a[5]= {2,4,7,5,1}; printf("%d", a[2]);

А вот динамические создаются по-другому. Нужно подключить библиотеку:

#include <malloc.h>

Массив целых чисел под именем mass и с числом элементов n создаётся так:

int *mass; mass = (int*)malloc(n * sizeof(int));

Ниже будет программа, где мы создаём массив, вводим элементы и затем выводим:

#include <stdio.h> // для ввода-вывода

#include <malloc.h> // для динамических массивов

int main() {

           setlocale(0,""); // для вывода русских символов

           int i,n;

           printf("Размер массива: "); scanf("%d", &n); // сколько элементов

           int *a; a = (int*)malloc(n * sizeof(int)); // создали массив

           // вводим элементы

           for (i = 0; i<n; i++) {

                    printf("a[%d] = ", i); // выводится будет a[0]=, a[1]= и т.д. в цикле

                  scanf("%d", &a[i]);

      }

      for (i = 0; i<n; i++) printf("%d ", a[i]); // выводим

           printf("\n"); system("pause");

}

Случайные числа создаются такими же функциями, только библиотеки <stdlib.h>, <time.h>

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

Функции делаются так же как в си плюс плюс. Ниже пример генерация случайного двузначного числа через функцию:

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

int getrand() { return rand()%90 + 10; }

int main() {

           setlocale(0,"");

           srand(time(NULL));

           printf("%d ", getrand());

           printf("\n");

           system("pause");

}

Напоследок посмотрим работу с файлами поверхностно. Тут не нужно подключать библиотеки кроме stdio.h.

1. Для работы с файлами создаём переменную-указатель типа FILE:

FILE *f;

2. Для открытия файла с записью туда пишем:

f= fopen("test.txt", "w");

Если файла с таким именем в папке с exe нет, то он создатся.

Запишем туда число 134: fprintf(f,"%d", 134);

3. Закрытие файла: fclose(f);

4. Открытие файла для чтения: f= fopen("test.txt", "r");

Извлечём число: int a; fscanf(f,"%d", &a);

5. Закроем файл и выведем в консоль:

fclose(f); printf("%d",a);

Ну вот и всё. На этом, думаю, общее знакомство с языком С мы закончим.

Основы языка Java

Язык java является также одним из самых распространённых языков программирования. Он появился позже чем с++ (в 1995 году) и является более высокоуровневым, поэтому и более медленным, но в каких-то случаях более удобным для разработки на нём. Тем не менее java является си-подобным языком и поэтому похож на си плюс плюс. Но всё же тут очень много отличий и сложностей, это мы и посмотрим- как написать самые простые вещи на языке джава или ява.

Джава используется для программирования приложений на операционной системе для смартфонов Android, в этом может быть весомый интерес. К слову сказать, на iOS приложения пишутся на другом языке- Objective C. Изначально джава создавался как кроссплатформенный язык, чтобы можно было его использовать хоть на мобильниках, хоть в кофемолках (отсюда и название с логотипом), хоть и на компьютерах- в этом его особенность. Программы, написанные на java, переводятся в т.н. байт-код (машинно-независимый код низкого уровня), благодаря чему они могут работать на любой компьютерной архитектуре. Даже на старейших кнопочных телефонах обычно игры написаны на джава. А ещё на java написана легендарная игра майнкрафт. Ну вот, теперь после такого экскурса можно и приступать.

Для работы с java нам нужна виртуальная машина- скачать её можно на официальном сайте, называется java virtual machine. Или можно просто ввести "скачать джава на компьютер". Если ты когда-то играл в игры или пользовался приложениями, написанными на джаве, ты уже наверняка это скачивал и знаешь про это.

https://java.com/ru/download

Далее нам нужно скачать пакет разработчика- java development kit (JDK). Так же вбиваем в поисковик, заходим на официальный сайт и скачиваем. Эта вещь нужна чтобы писать программы на джава, т.е. уже для разработчика, а не просто для пользователя. Если у тебя 64-битная система, то выбираешь именно эту версию.

Ну и далее мы скачаем среду для программирования, хотя можно обойтись и без неё- но это для любителя будет слишком сложно и он бросит затею попробовать писать на джава ещё на старте. Поэтому мы скачаем IDE. Их несколько самых используемых: Eclipse, Netbeans, Intellij idea, а также android studio. Я пользовался eclipse, она у меня прижилась и работает, поэтому на её примере я и буду всё показывать. Скачать её можно бесплатно с официального сайта.

Также я подготовил jdk и eclipse на яндекс диске (jdk, ide и прочее), можешь просто скачать тут:

https://yadi.sk/d/1clDTWOy3KZSRn

Но т.к. у всех этих вещей часто появляются новые версии, то мои версии будут старыми, а последние версии ты можешь найти в интернете как я выше написал.

JDK: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

Eclipse: https://www.eclipse.org/downloads/

Теперь как создать новый проект в eclipse. Естественно, сначала мы её скачиваем и устанавливаем. Всё, теперь можно использовать. Запускаем.

 

Основы языка C#

Ссылочные

 

Основы языка Python

Ссылочные

________________________________________________

КОНЕЦ

Васька Мырт, 2017


Дата добавления: 2018-09-22; просмотров: 322; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!