Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam

Топ прошлой недели

  • Oskanov Oskanov 8 постов
  • AlexKud AlexKud 26 постов
  • StariiZoldatt StariiZoldatt 3 поста
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Новости Пикабу Помощь Кодекс Пикабу Реклама О компании
Команда Пикабу Награды Контакты О проекте Зал славы
Промокоды Скидки Работа Курсы Блоги
Купоны Biggeek Купоны AliExpress Купоны М.Видео Купоны YandexTravel Купоны Lamoda
Мобильное приложение

Паскаль

С этим тегом используют

Программирование Pascal Помощь Информатика Программист Все
188 постов сначала свежее
16
stalkself
stalkself
1 год назад
Серия Программирую, пока программируется

Сделал головоломку⁠⁠

Попалась на глаза замечательная головоломка, под названием Slide Elox от широко известного в узких кругах создателя головоломок Жан Клода Константина. Сама головоломка доступна в магазинах, но стоит немалых денег, поэтому решил портировать ее для ПК, воспользовавшись олдскульным Дельфи (писал на Паскале). Собственно результат:

1/4

Цель игры - расположить пластинки таким образом, чтобы их цвета совпали с цветами на доске.

Всего производителем разработны 8 уровней. Скачать для ПК, если есть желание можно здесь.

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

Пока что мне самому удалось решить только первый уровень. Как оказалось, проще написать код головоломки, чем самому решить ее (правда и код здесь элементарный).

Другие мои проекты:

Игра в кольца

Головоломка Nur 8 Elox

Игра "Гексогональные кольца"

Игра "Водопроводчик"

Паззлы из картинок

Все доступно полностью бесплатно. Без донатов, попрошайничества и рекламы.

Показать полностью 4
[моё] Программирование Инди игра Gamedev Инди Паскаль Delphi Разработка Головоломка Пазл Длиннопост
12
5
stalkself
stalkself
1 год назад
Серия Программирую, пока программируется

Сделал головоломку⁠⁠

Решил тряхнуть стариной и написал несложную головоломку, взяв за основу ролик с канала чувака, где он, собственно, их и разгадывает:

Очень понравился внешний вид и идея, поэтому решил как можно точнее воссоздать, внеся кое-какие свои изменения.

Собственно результат:

Сделал головоломку Инди игра, Программирование, Delphi, Паскаль, Pascal, Головоломка, Игры, Компьютерные игры, Видео, YouTube

Скачать, если интересно можно здесь.

Оригинальная головоломка называется Nur 8 Elox - она изготовлена известным производителем из Германии, которого зовут Жан Клод Константин. В магазине такая головоломка стоит весьма приличных денег, однако теперь вы сможете оценить ее бесплатно.

Суть головоломки - переместить фишки из верхней части в нижнюю, так, чтобы соответствовали цвета (игра А) и наоборот (игра Б). Также добавил пару игр со случайным распределением цветов. Ну и для разнообразия нарисовал несколько скинов.

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

Показать полностью 1
[моё] Инди игра Программирование Delphi Паскаль Pascal Головоломка Игры Компьютерные игры Видео YouTube
9
2
SL.Clemens1835
1 год назад
Лига программистов

Помощь Паскаль⁠⁠

Всем здравствуйте. Нужна помощь. Суть задания заключается в том, что нужно создать матрицу С из А и В по условию. Но у меня получается пока ерунда какая-то. Вот, собственно, код
Program Matrix;

var

A:array[1..3,1..3] of real;

i,j:integer;

B:array[1..3,1..3] of real;

k,l:integer;

C:array[1..3,1..3] of real;

x,y:integer;

BEGIN

Writeln('Введите элемента матрицы А:');

for i:=1 to 3 do

for j:=1 to 3 do

Read(A[i,j]);

Writeln('Введите элемента матрицы B:');

for i:=1 to 3 do

for j:=1 to 3 do

Read(B[i,j]);

for i:=1 to 3 do

for j:=1 to 3 do

begin

if a[i,j]+2<b[i,j] then

c[a,j]:=a[i,j]+b[i,j]

else

c[i,j]:=a[i,j]-1/b[i,j];

end;

Writeln('Матрица C:');

for i:=1 to 3 do

begin

for j:=1 to 3 do

Write(C[i,j]:4:2,' ');

Writeln;

end;

END.

Буду признателен за помощь.

Показать полностью
[моё] Программирование Паскаль Текст
19
663
iTmr
iTmr
1 год назад

Ответ на пост «Стало известно, что на 90-ом году жизни умер Никлаус Вирт — создатель языка программирования "Паскаль"»⁠⁠1

Закон Вирта даже после смерти автора продолжит выполняться:

«программы становятся медленнее куда шустрее, чем компьютеры становятся быстрее» — отражает озабоченность учёного тенденциями к раздуванию программного обеспечения и «индустрализации» процессов разработки, снижающих качество программ.

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

Вирт часто критиковал «американский подход» к разработке средств программирования, в котором маркетинговые соображения превалируют над требованиями математической стройности и гарантированной надёжности, и каждое новое модное поветрие сопровождается некритичным внесением в языки программирования новых синтаксических элементов. Это приводит к неправильной оценке роли некоторых идей и, в конечном итоге, к неправильной расстановке приоритетов в разработке программного обеспечения.

Если думаете, что паскаль остался где-то там, позади, то удивлю, последние версии вышли в 2023 году (есть как OpenSource, так и коммерческие версии):

Embarcaredo Delphi (бывшая Borland Delphi) -- последняя версия 12 Athens (07.11.2023)

Delphi 11 Community Edition -- бесплатно для некоммерческого использования:

Если вы являетесь сотрудником небольшой компании, где менее 5 сотрудников или организации с доходом до $5,000 в год, вы можете использовать Community Edition

OpenSource:

FreePascal -- May 20th, 2021

  • FPC version 3.2.2 has been released!

Lazarus 3.0 - December 21, 2023. OpenSource версия, клон Delphi. В качестве компилятора используется FreePascal.

Те, кто помнят TurboPascal, могут перейти на FreePascal, сняв ограничения MS-DOS. Там и поддержка х32, и х64, и 64-битные типы, и компиляция DLL, и куча других плюшек.

Через FastCGI можно хоть бекенд для веб-сервера писать, фреймворки тоже есть. Например, из Индонезии один энтузиаст клепает fastplaz. Еще есть BrookFramework. И в самом FreePascal есть FCL-web.

Игровой движок на паскале тоже существует: Castle Game Engine.

Внезапно, даже C# у себя в предках отметил Delphi. И Модула-3, но это отдельная академическая история. Я кодил на C# после Delphi, повеяло ностальгией. И если C# можно в веб, то почему паскалю нельзя?

Показать полностью
[моё] Персонажи Паскаль Программирование Delphi Lazarus Turbopascal Freepascal Ответ на пост Текст
379
898
orlandofurioso
orlandofurioso
1 год назад
Лига программистов

Николас Вирт всё...⁠⁠

Николас Вирт всё... Паскаль, Программирование, Информатика, Некролог

Press F

Показать полностью 1
Паскаль Программирование Информатика Некролог
48
4662
dnevteh
dnevteh
1 год назад

Стало известно, что на 90-ом году жизни умер Никлаус Вирт — создатель языка программирования «Паскаль»⁠⁠1

Стало известно, что на 90-ом году жизни умер Никлаус Вирт — создатель языка программирования «Паскаль» Паскаль, Программирование, Telegram (ссылка), Личность, Некролог

Стало известно, что на 90-ом году жизни умер Никлаус Вирт — создатель языка программирования «Паскаль».

Специалист в области информатики, один из известнейших теоретиков в области разработки языков программирования ушел из жизни 1 января 2024 года в своём доме в окружении семьи и близких.

Дневник технаря

Показать полностью 1
Паскаль Программирование Telegram (ссылка) Личность Некролог
431
7
stalkself
stalkself
1 год назад
Серия Программирую, пока программируется

Немного о создании лабиринтов (Delphi)⁠⁠

Заинтересовался идеей создания двухмерных лабиринтов, после того, как случайно набрел на ресурс https://www.mazegenerator.net/.

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

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

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

Итак, предлагаю вашему вниманию двухходовый алгоритм stalkself построения идеального прямоугольного лабиринта произвольной формы. Идеальный, в нашем случае означает, что две любых точки лабиринта можно соединить единственным путем. И соответственно к ним относятся точки входа и выхода.

Вот фрагмент получаемого лабиринта.

Немного о создании лабиринтов (Delphi) Программирование, Паскаль, Windows, IT, Программа, Delphi, Лабиринт, Длиннопост

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

Два этапа алгоритма:

Создание пространства путей в матрице за один ее проход

Объединение путей в единственный также за один проход

Программу писал на Паскале, поскольку это лучшее, что придумало человечество (ну или потому, что других языков не знаю), взяв за основу Эмбаркадеровскую Дельфи.

Бросил на форму два TEdit, чтобы указывать в них размерность матрицы лабиринта по Х и по Y. И компонент TImage для отрисовки лабиринта.

В первую очередь указываем тип матрицы:

type

cell = record

group:integer;

r,d:integer;

end;

И наши переменные:

var

form1: Tform1;

count:integer; //счетчик групп

cel:array of array of cell; //массив ячеек

x,y:integer;

Каждая ячейка в массиве cel имеет три поля:

group – номер группы

r и d – правая и нижняя границы соответственно (стенки лабиринта)

Создаем и заполняем массив после нажатия на кнопку:

x:=strtoint(edit1.Text); //Наши значения размера массива из эдитов

y:=strtoint(edit2.Text);

setlength(cel,x+1,y+1); //Задаем размеры массива ячеек с запасом +1, чтобы не возиться с нулевыми индексами

for j := 1 to y do //Заполняем пространство group нолями, а все стенки делаем закрытыми

for i := 1 to x do

begin

cel[i,j].group:=0;

cel[i,j].r:=1;

cel[i,j].d:=1;

end;

Все, теперь можем начинать работу алгоритма

1. Этап - создаем пространство путей, которые будут проложены трактором.

count:=1; // Наш счетчик номеров и количества групп

for j := 1 to y do //Первый проход матрицы по высоте и ширине

for I := 1 to x do

if cel[i,j].group=0 then //Находим пустую клетку и пускаем из нее трактор

begin

track(i,j);

inc(count); //Увеличиваем счетчик, после того, как трактор построил путь

end;

Собственно, код трактора:

procedure tform1.track(x1: Integer; y1: Integer);

var

k,mx,my:integer;

label start;

begin

//Процедура прохода и построения трактором лабиринта

mx:=x1;my:=y1;

cel[mx,my].group:=count; //присваиваем стартовой клетке номер новой группы

start:

k:=random(4)+1; //Случайное направление движения

case k of

1:

if (mx>1) then

if (cel[mx-1,my].group=0) then //Если слева пусто, идем туда и заодно убираем стенку

begin

cel[mx-1,my].r:=0;

cel[mx-1,my].group:=count;

mx:=mx-1;

goto start;

end;

2:

if (mx<x) then //Аналогично остальные направления

if (cel[mx+1,my].group=0) then

begin

cel[mx,my].r:=0;

cel[mx+1,my].group:=count;

mx:=mx+1;

goto start;

end;

3:

if (my>1) then

if (cel[mx,my-1].group=0) then

begin

cel[mx,my-1].d:=0;

cel[mx,my-1].group:=count;

my:=my-1;

goto start;

end;

4:

if (my<y) then

if (cel[mx,my+1].group=0) then

begin

cel[mx,my].d:=0;

cel[mx,my+1].group:=count;

my:=my+1;

goto start;

end;

end;

//Проверяем не тупик ли

if canmove(mx,my) then goto start;

end;

В конце проверка на возможность дальнейшего движения для трактора:

function tform1.canmove(x1: Integer; y1: Integer): LongBool;

begin

//Проверка на возможность хода

result:=false;

if x1>1 then if cel[x1-1,y1].group=0 then

begin

result:=true;exit;

end;

if x1<x then if cel[x1+1,y1].group=0 then

begin

result:=true;exit;

end;

if y1>1 then if cel[x1,y1-1].group=0 then

begin

result:=true;exit;

end;

if y1<y then if cel[x1,y1+1].group=0 then

begin

result:=true;exit;

end;

end;

Все, наше пространство путей готово. Оно будет иметь примерно такой вид:

Немного о создании лабиринтов (Delphi) Программирование, Паскаль, Windows, IT, Программа, Delphi, Лабиринт, Длиннопост

Соответствующая ему матрица групп:

Немного о создании лабиринтов (Delphi) Программирование, Паскаль, Windows, IT, Программа, Delphi, Лабиринт, Длиннопост

Как видно из точки S в точку F дойти невозможно, тем не менее у нас уже есть четыре отдельных группы, каждая из которых представляет собой путь, пройденный трактором.

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

Осталось объединить их в один идеальный путь:

for i:= 1 to x do //Запускаем второй проход матрицы (первая ячейка всегда имеет номер группы 1)

for j:= 1 to y do

begin

if i<x then if cel[i+1,j].group<>1 then //Если находим группу справа от нас отличную от единицы то присоединяем к нашей единичной следующим образом:

begin

cel[i,j].r:=0; //Убираем заодно стенку

del(cel[i+1,j].group,i+1); //Меняем все найденные индексы группы на нашу единицу, для оптимизации процесса делаем это не с начала, а с ряда, где находится наша найденная клетка

end;

if j<y then if cel[i,j+1].group<>1 then //Аналогично смотрим клетку снизу

begin

cel[i,j].d:=0;

del(cel[i,j+1].group,i);

end;

end;

Процедура замены на единички:

procedure tform1.del(x1,x2: Integer); //x1 – наша группа, х2 – точка старта

var

i,j,f:integer;

begin

for i:= x2 to x do

begin

f:=0; //Флаг поиска групп в ряду для оптимизации

for j:= 1 to y do

if cel[i,j].group=x1 then

begin

cel[i,j].group:=1;

f:=1;

end;

if f=0 then exit; //Если не найдено групп в хотя бы в одном ряду, то в оставшихся рядах и искать нет смысла, чтобы не тратить ресурсы ПК

end;

end;

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

Осталось только нарисовать любым доступным способом, например, так:

image1.width:=x*20;

image1.Height:=y*20;

image1.Picture.Bitmap.Width:=x*20;

image1.Picture.Bitmap.Height:=y*20;

with image1.Canvas do

begin

brush.Color:=clwhite;

fillrect(rect(0,0,width,height));

pen.Color:=clblack;

pen.Style:=psSolid;

pen.Width:=2;

Rectangle(1,1,x*20,y*20);

for j := 1 to y do

for i := 1 to x do

begin

moveto(i*20,(j-1)*20);

if cel[i,j].r=1 then lineto(i*20,j*20);

moveto((i-1)*20,j*20);

if cel[i,j].d=1 then lineto(i*20,j*20);

end;

Ну тут и объяснять ничего не надо.

Из особенностей этого алгоритма можно отметить высокую скорость работы – генерация матрицы размером 5000 на 5000 без отрисовки заняла всего 2 минуты, на моем не самом быстром домашнем ПК, а это 25 миллионов ячеек. Генерация 500х500 с отрисовкой – всего 6 секунд!

У меня нет возможности сравнить с другими алгоритмами, но там, в статье как раз на скорость и жаловались. Генерация маленьких лабиринтов – мгновенна. Стандартный размер 200х200 делает как раз за секунду.

Естественно рисовать таким способом большой лабиринт нет смысла – никакой памяти не хватит, можно делать частичную отрисовку на TImage и распечатывать частями. Но для лабиринтов размером до 300-400 ячеек на сторону подходит вполне.

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

Еще недостаток – на мой взгляд, не слишком высокая сложность, но, если сделать хотя бы 15х15 уже сразу глазом не зацепишься за правильное решение.

Готовую программу выложил на Гитхабе, если кому интересно – можете скачать здесь. Хотелось бы услышать мнение специалистов.

Другие проекты:

Игра в пазлы: https://github.com/stalkself/SuperPuzzleMaster

Показать полностью 3
[моё] Программирование Паскаль Windows IT Программа Delphi Лабиринт Длиннопост
12
SL.Clemens1835
1 год назад

Помощь по информатике⁠⁠

Добрый день други, нужна помощь. Есть тест из 10 вопросов по Паскалю. Я в некоторых уверен, но хотелось бы убедиться, что это так, как я думаю.

  1. Var z: array[1..5, 1..2] of integer;

Укажите вариант ответа, в которых верно использован оператор присваивания.

Выберите один ответ:

z[2,2]:=15.2; z[5,1]:=z[1,2] z[1,4]:=15 z[5]:=17

3 Отметьте вариант ответа, в котором правильно построена операция присваивания для массива A и переменных X и Y

Var x: real;

y: integer;

a: array [2..5] of integer;

Выберите один ответ:

a[3]:=x; x:=a[4]; a[1]:=y; a[4]:=a[0].

7 Найдите значение переменной xпосле выполнения следующего фрагмента программы:

x:=0;

Repeat x:=x+1 Until x<=4;

8 Найдите значение переменной xпосле выполнения следующего фрагмента программы

x:=0;

While x<=4 do x:=x+1;

Мои ответы:

  1. z[5,1]:=z[1,2] (думаю, потому что это двумерный массив).

  2. a[4]:=a[0] (потому что x,a - вещ тип, y - целочисленный, их нельзя приравнивать).

  3. 5

  4. 4

[моё] Информатика Паскаль Текст
38
Посты не найдены
О Нас
О Пикабу
Контакты
Реклама
Сообщить об ошибке
Сообщить о нарушении законодательства
Отзывы и предложения
Новости Пикабу
RSS
Информация
Помощь
Кодекс Пикабу
Награды
Команда Пикабу
Бан-лист
Конфиденциальность
Правила соцсети
О рекомендациях
Наши проекты
Блоги
Работа
Промокоды
Игры
Скидки
Курсы
Зал славы
Mobile
Мобильное приложение
Партнёры
Промокоды Biggeek
Промокоды Маркет Деливери
Промокоды Яндекс Путешествия
Промокоды М.Видео
Промокоды в Ленте Онлайн
Промокоды Тефаль
Промокоды Сбермаркет
Промокоды Спортмастер
Постила
Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии