Форум
» Назад на решение задач по физике и термеху
Регистрация | Профиль | Войти | Забытый пароль | Присутствующие | Справка | Поиск

» Добро пожаловать, Гость: Войти | Регистрация
    Форум
    Информационные технологии
        Решение задач на Pascal. Форум 2
Отметить все сообщения как прочитанные   [ Помощь ]
» Добро пожаловать на форум "Информационные технологии" «

Переход к теме
<< Назад Вперед >>
Несколько страниц [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 ]
Модераторы: paradise, KMA
  

MzSpider



Новичок

Cпс большое =)))
Работает чучуть неправельно , попробую подрехтовать =)))

Всего сообщений: 19 | Присоединился: июль 2009 | Отправлено: 27 сен. 2009 8:15 | IP
MzSpider



Новичок

Терь над чтоб назад не хадил , тип если вперед сходил то рандом на назад , Я сделал так ток не работает
var l : byte
....
function getXY:integer;
var b:integer;
begin
while not IsMovPosible(b) do  b:=random(4)+1;
if l <> b then getXY:=b;
l := b;
end;

Всего сообщений: 19 | Присоединился: июль 2009 | Отправлено: 27 сен. 2009 11:11 | IP
KrisRu


Новичок

у кого-нибудь есть легкие игры на Паскале(тетрис, змейка...), с подключенной клавиатурой и мышкой (меню тоже должно быть)... Скиньте, пожалуйста на ящик KrisRu@bk.ru
Заранее спасибо!!!

Всего сообщений: 14 | Присоединился: сентябрь 2009 | Отправлено: 27 сен. 2009 17:37 | IP
Dale



Участник

var mas2   : array [1..80, 1..25] of boolean;
....
procedure LoadMap(MapNum : byte);
var
mn : string;
begin
for i:=1 to 80 do
for j:=1 to 25 do mas2[i,j]:=false;

...

function isUzel(x,y:integer):boolean;
var num:integer;
begin
  num:=0;
  if mas[x,y-1]='0' then num:=num+1;
  if mas[x,y+1]='0' then num:=num+1;
  if mas[x-1,y]='0' then num:=num+1;
  if mas[x+1,y]='0' then num:=num+1;
  isUzel:=(num>=3);
end;

function getXY_2(z:integer;var x,y:integer):integer;
begin
case z of
1:begin
   x:=px;
   y:=py-1;
  end;
2:begin
   x:=px;
   y:=py+1;
  end;
3:begin
   x:=px-1;
   y:=py;
  end;
4:begin
   x:=px+1;
   y:=py;
  end;
end;
end;

function getXY:integer;
var b:integer;
   b2,b3,b4:integer;
   flag:boolean;
   num,num2,num3,num4,numX,numY:integer;
   x1,y1,x2,y2,x3,y3,x4,y4,rn:integer;
begin

{пол. куда двигаться: вверх, низ, лево или прво}
{проверяем, узел ли это}
num:=0;

if (not(mas2[px,py-1]) and (IsMovPosible(1))) then num:=1;
if (not(mas2[px,py+1]) and (IsMovPosible(2)))  then num:=2;
if (not(mas2[px-1,py]) and (IsMovPosible(3)))  then num:=3;
if (not(mas2[px+1,py]) and (IsMovPosible(4)))  then num:=4;

if (num<>0)  then b:=num else
begin

  if (IsMovPosible(k) and (not(isUzel(px,py)))) then b:=k else
   

  if {random(2)=1}false then begin
   for i:=1 to mx do
   for j:=1 to my do
   if mas[i,j]='3' then begin
       numX:=i;
       numY:=j;
   end;
   getXY_2(1,x1,y1);
   getXY_2(2,x2,y2);
   getXY_2(3,x3,y3);
   getXY_2(4,x4,y4);

   num:=(abs(x1*x1-numX*numX)+abs(y1*y1-numY*numY));
   num2:=(abs(x2*x2-numX*numX)+abs(y2*y2-numY*numY));
   num3:=(abs(x3*x3-numX*numX)+abs(y3*y3-numY*numY));
   num4:=(abs(x4*x4-numX*numX)+abs(y4*y4-numY*numY));
   b:=1;
   if (num>num2)  then b:=2;
   if (num>num3)  then b:=3;
   if (num>num4)  then b:=4;
   while not IsMovPosible(b) do  b:=random(4)+1;

 end else  while not IsMovPosible(b) do  b:=random(4)+1;

end;
getXY:=b;
end;



.........

clrscr;
 write_map;
 writeln(px,' ',py,' ',px2,' ',py2);
 gotoxy(px,py);
 mas2[px,py]:=true;


.......

(Сообщение отредактировал Dale 28 сен. 2009 17:44)

-----
Прикольная песня :-)

Всего сообщений: 139 | Присоединился: май 2009 | Отправлено: 28 сен. 2009 17:28 | IP
Dale



Участник

mas2   - массив, показывающий, на каких клетках был минотавр.
isUzel показывает, есть ли узел в позиции x,y
getXY_2 выдает координаты клетки x и y в направлении z


Алгоритм действия getXY:
1) Проверяем, ступал ли минотавр на окружающие клетки?
Если нет, то идем туда.
Иначе, если минотавр побывал на всех окружающих клетках:

2) принуждаем минотавра сохранить направление, если он не находится на узле.

Иначе
3)вычисляем квадраты длин вектора расстояний от итоговой клетки до соседних клеток. Делаем так, чтобы минотавр свернул туда, где расстояние до логова наименьшее; random оставлен для того, чтобы в случае чкего минотавр смог выйти з тупика.

Всего сообщений: 139 | Присоединился: май 2009 | Отправлено: 28 сен. 2009 17:43 | IP
Dale



Участник

Интересно пробовать в больших лабиринтах :-)  
Правда, иногда минотавр надолго застревает в сложных тупиках.
Стоит как-нибудь порыть в сторону алгоритма Дейкстры


(Сообщение отредактировал Dale 28 сен. 2009 17:54)

-----
Прикольная песня :-)

Всего сообщений: 139 | Присоединился: май 2009 | Отправлено: 28 сен. 2009 17:52 | IP
MzSpider



Новичок

Dale, спс большое =))

Всего сообщений: 19 | Присоединился: июль 2009 | Отправлено: 28 сен. 2009 18:57 | IP
Dale



Участник

Незачто)


KrisRu
На счет меню - смотрите  страницу 68 текущей темы

Игра с "подключенной клавиатурой" рассматривается в текущий момент(авторство  MzSpider )

Еще на  стр. 69 выложена вроде работающая версия игры "камень ножницы бумага" для трех человек.

Если хотите подключить мышь, то гугл в помощь...

(Сообщение отредактировал Dale 29 сен. 2009 5:08)

-----
Прикольная песня :-)

Всего сообщений: 139 | Присоединился: май 2009 | Отправлено: 29 сен. 2009 4:49 | IP
Alsebra



Новичок

ребят,мне задали задачку
Найти сумму членов арифметической прогрессии  a, a+d, a+2d, ... ,a+(n-1)d по заданным a,d и n.
кто подскажет с чего начать?а то я пока слаба в турбопаскале.Всем спасибки :-*

Всего сообщений: 3 | Присоединился: сентябрь 2009 | Отправлено: 29 сен. 2009 17:00 | IP
Dale



Участник

Alsebra  

Щас по-быстрому научим прогить на пскале :-)

Начнем с простого примера. Итак, самая простая программа:
Code Sample:
 
begin
end.


Как видите, все просто.

Теперь сделаем так, чтобы пользователь мог ввести целые числа a, d, n.

Целые числа (а так же не целые числа, строки и т.п. )хранятся в переменных. Нам понадобятся три целочисленные переменные, чтобы хранить числа a d и n.
Раздел объявления переменных начинается с ключевого слова var, за которым через запятую следуют имена переменных , и в конце указывается тип переменных.
Для целых чисел существует несколько типов данных. Нам достаточно типа integer.

Для ввода чисел с клавиатуры будем использовать процедуру readln, которая считывает значения с клавиатуры  с новой сроки. (если надо не с новой, используйте read)

Итак: объявляем переменные, и вводим их с клавиатуры:
Code Sample:
 
var a,d,n:integer;
begin
readln(a);
readln(b);
readln(n);
end.



Теперь нам нужно сосчитать сумму членов прогрессии.


Как известно из математики, сумма n членов арифметической прогрессии вычисляется по формуле:

Sn=((2a1+d(n-1))/2)*n

Так что в рамках данной задачи нам не понадобится даже цикл. Просто ввод чисел и вывод результата.
Вывод на экран производится с помощью процедур write или writeln.

В итоге наш код будет выглядеть тким образом
Code Sample:
 
var a,d,n:integer;

begin
 readln(a);
 readln(b);
 readln(n);
 writeln(((2*a+d*(n-1))/2)*n);
 readln;
end.



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

Всего сообщений: 139 | Присоединился: май 2009 | Отправлено: 30 сен. 2009 1:54 | IP

Эта тема закрыта, новые ответы не принимаются

Переход к теме
<< Назад Вперед >>
Несколько страниц [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 ]

Форум работает на скрипте © Ikonboard.com