Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2009, 12:56   #21
bobby2008
Пользователь
 
Аватар для bobby2008
 
Регистрация: 13.04.2009
Сообщений: 37
По умолчанию

В идеале это выглядело бы так: цифра вводится пользователем и в тот же момент выводится в нужное поле(главное, чтобы не было дублирования в углу), далее без нажатия "Ентер" вводиться вторая цифра и т.д. Если же это не цифра, то не выводить ничего, а писать "Неверный ввод" и так, чтобы количество введенных цифр было ровно 4. Если менее, то при нажатии "Ентер" ничего происходить не должно(либо "Неверный ввод") и когда их четыре, дальше чтобы ничего не писало(либо "Нажмите ентер для продолжения"). При нажатии "Backspace" стирает одну цифру и пишет в той же позиции, что и стертая буква. Буду очень признателен за подробные советы.И еще, где можно посмотреть коды клавиш, которые получаются при нажатии? Спасибо.

Последний раз редактировалось bobby2008; 09.05.2009 в 13:02.
bobby2008 вне форума Ответить с цитированием
Старый 09.05.2009, 13:04   #22
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
цифра вводится пользователем и в тот же момент выводится в нужное поле(главное, чтобы не было дублирования в углу), далее без нажатия "Ентер" вводиться вторая цифра и т.д. Если же это не цифра, то не выводить ничего, а писать "Неверный ввод" и так, чтобы количество введенных цифр было ровно 4.
В таком случае, как и посоветовал Serge_Bliznykov, используйте Readkey (модуль CRT).
Эта функция возвращает код нажатой клавиши (и ничего не выводит). То есть за вывод и обработку отвечаете вы. Коды цифр находятся в диапазоне 48-57 (от 0 до 9).
Цитата:
При нажатии "Backspace" стирает одну цифру и пишет в той же позиции, что и стертая буква.
Это вам нужно будет придумать (ничего сложного), как реализовать. Например, будет массив из 4-х символов. Еще некая переменная-указатель (показывает, какой элемент вводится). При нажатии на клавишу проверяется, нажата ли цифра (если нет, то можно просто игнорировать, вместо вывода ошибки). Если да, то выводим цифру, заносим ее в массив и смещаем указатель вправо. Если нажат Backspace, то смещаем указатель влево.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]

Последний раз редактировалось Sazary; 09.05.2009 в 13:07.
Sazary вне форума Ответить с цитированием
Старый 11.05.2009, 02:34   #23
bobby2008
Пользователь
 
Аватар для bobby2008
 
Регистрация: 13.04.2009
Сообщений: 37
По умолчанию

Я, конечно, извиняюсь, но...посмотрите, пожалуйста, куда и что мне дописать, чтобы при вводе мне проверяло, вводится новая цифра либо та, что уже была введена(то есть защита от повторений цифр в числе). Посмотрите, пожалуйста, правильно ли я с вводом разобрался. И подскажите, что еще не так, что можно было бы еще исправить - там куча недоделок, но на них не обращайте внимания. Извините, что в двух сообщениях, но в одно не влезало...Спасибо.
Код:
Uses crt,Graph;
const bul:array [1..28,1..22]of integer=
((0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0),
 (0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0),
 (0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0),
 (0,0,0,0,1,1,0,0,0,7,7,7,7,0,0,0,1,1,0,0,0,0),
 (0,0,0,1,1,0,0,7,7,7,7,7,7,7,7,0,0,1,1,0,0,0),
 (0,0,1,1,1,0,0,7,7,7,7,7,7,7,7,0,0,1,1,1,0,0),
 (0,0,1,1,1,1,7,7,0,0,7,7,0,0,7,7,1,1,1,1,0,0),
 (0,0,0,1,1,1,7,7,0,0,7,7,0,0,7,7,1,1,1,0,0,0),
 (0,0,0,1,1,1,7,0,0,7,7,7,7,0,0,7,1,1,1,0,0,0),
 (0,0,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0,0,0),
 (0,0,0,4,4,7,7,7,7,7,7,7,7,7,7,7,7,4,4,0,0,0),
 (0,0,4,4,4,7,7,7,7,7,7,7,7,7,7,7,7,4,4,4,0,0),
 (0,4,4,4,7,7,7,8,8,8,8,8,8,8,8,7,7,7,4,4,4,0),
 (4,4,0,0,7,8,8,8,8,8,8,8,8,8,8,8,8,7,0,0,4,4),
 (4,0,0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,0,0,4),
 (0,0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,0,0),
 (0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,0),
 (8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8),
 (8,8,8,0,0,8,8,8,8,8,8,8,8,8,8,8,8,0,0,8,8,8),
 (8,8,8,0,0,8,8,8,8,8,8,8,8,8,8,8,8,0,0,8,8,8),
 (0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,0),
 (0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,0),
 (0,0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,0,0),
 (0,0,0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,0,0,0),
 (0,0,0,0,8,8,5,5,5,5,5,5,5,5,5,5,8,8,0,0,0,0),
 (0,0,0,0,0,8,8,5,5,5,5,5,5,5,5,8,8,0,0,0,0,0),
 (0,0,0,0,0,0,8,8,8,8,8,8,8,8,8,8,0,0,0,0,0,0),
 (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0));

	cow:array[1..22,1..30] of integer=
((1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
 (1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
 (1,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
 (1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
 (0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
 (0,1,1,1,1,1,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
 (0,1,1,1,1,1,1,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
 (1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0),
 (1,1,0,1,1,0,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4),
 (0,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,4),
 (0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,4),
 (0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0),
 (0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0),
 (0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0),
 (0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0),
 (0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0),
 (0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0),
 (0,0,0,0,0,0,3,3,0,3,3,0,0,0,0,0,0,4,4,4,4,4,0,3,3,3,0,0,0,0),
 (0,0,0,0,0,3,3,0,0,3,3,0,0,0,0,0,0,0,4,0,4,0,0,3,3,3,0,0,0,0),
 (0,0,0,0,0,3,3,0,0,0,3,3,0,0,0,0,0,0,0,0,0,0,3,3,0,3,3,0,0,0),
 (0,0,0,0,0,3,3,0,0,0,3,3,0,0,0,0,0,0,0,0,0,0,3,3,0,3,3,0,0,0),
 (0,0,0,0,3,3,0,0,0,0,0,3,3,0,0,0,0,0,0,0,0,3,3,0,0,0,3,3,0,0));

Var	Gd,Gm,x1,i,j,k,p1,p2,p3,p4,x_c:Integer;
	v,o,j1,j2,p_norm,j3,bul_s,cow_s,j4,j6:integer;
	c:char;
	s,r_str,ss:string;
	q:pointer;
	p,n:array[1..4]of integer;
begin
randomize;
Gd:=Detect;
InitGraph(Gd,Gm,'');
setbkcolor(green);
setcolor(blue);
setlinestyle(0,0,3);
line(1,1,1,getmaxy);
line(1,1,getmaxx,1);
line(getmaxx-1,1,getmaxx-1,getmaxy);
line(1,getmaxy-1,getmaxx-1,getmaxy-1);
setcolor(red);
line(5,5,5,getmaxy-5);
line(5,5,getmaxx-5,5);
line(getmaxx-5,5,getmaxx-5,getmaxy-5);
line(5,getmaxy-5,getmaxx-5,getmaxy-5);
setcolor(blue);
line(9,9,9,getmaxy-9);
line(9,9,getmaxx-9,9);
line(getmaxx-9,9,getmaxx-9,getmaxy-9);
line(9,getmaxy-9,getmaxx-9,getmaxy-9);
setcolor(red);
line(11,75,getmaxx-11,75);
moveto(15,15);
settextstyle(0,0,3);
outtext('Input your');
moveto(70,50);
outtext('number!');
line(300,11,300,getmaxy-11);
repeat
  begin
	for i:=4 downto 1 do
	p[i]:=random(10);
  end;
until (p[1]>0)and(p[2]<>p[1])and(p[2]<>p[3])and(p[2]<>p[4])and(p[3]<>p[1])and(p[3]<>p[4])and(p[4]<>p[1]);
p_norm:=p[1]*1000+p[2]*100+p[3]*10+p[4];
str(p_norm,ss);
outtextxy(300,300,ss);
i:=0;
repeat
  setcolor(red);
bobby2008 вне форума Ответить с цитированием
Старый 11.05.2009, 02:35   #24
bobby2008
Пользователь
 
Аватар для bobby2008
 
Регистрация: 13.04.2009
Сообщений: 37
По умолчанию

Код:
begin
	j6:=1;
	repeat
	  c:=readkey;
	  case c of
	  #8:  begin if j6>1 then begin setfillstyle(11,green); bar(50+22*(j6-1),80+30*i,71+22*(j6-1),105+30*i);j6:=j6-1;end;  end;
	  #48: begin if j6<5 then begin outtextxy(50+22*j6,80+30*i,'0');n[j6]:=0;j6:=j6+1;end; end;
	  #49: begin if j6<5 then begin outtextxy(50+22*j6,80+35*i,'1');n[j6]:=1;j6:=j6+1;end; end;
	  #50: begin if j6<5 then begin outtextxy(50+22*j6,80+35*i,'2');n[j6]:=2;j6:=j6+1;end; end;
	  #51: begin if j6<5 then begin outtextxy(50+22*j6,80+35*i,'3');n[j6]:=3;j6:=j6+1;end; end;
	  #52: begin if j6<5 then begin outtextxy(50+22*j6,80+35*i,'4');n[j6]:=4;j6:=j6+1;end; end;
	  #53: begin if j6<5 then begin outtextxy(50+22*j6,80+35*i,'5');n[j6]:=5;j6:=j6+1;end; end;
	  #54: begin if j6<5 then begin outtextxy(50+22*j6,80+35*i,'6');n[j6]:=6;j6:=j6+1;end; end;
	  #55: begin if j6<5 then begin outtextxy(50+22*j6,80+35*i,'7');n[j6]:=7;j6:=j6+1;end; end;
	  #56: begin if j6<5 then begin outtextxy(50+22*j6,80+35*i,'8');n[j6]:=8;j6:=j6+1;end; end;
	  #57: begin if j6<5 then begin outtextxy(50+22*j6,80+35*i,'9');n[j6]:=9;j6:=j6+1;end; end;
	  #13: begin if j6<5 then
		begin   outtextxy(320,30,'Wrong input');
			delay(50000);
			delay(50000);
			setfillstyle(11,green);
			bar(320,30,600,70);
		end else j6:=j6+1;
	       end;
	  end;
	until j6=6;
		begin
		j3:=0;
		setcolor(blue);
		line(11,110+35*i,getmaxx-11,110+35*i);
		bul_s:=0;
		cow_s:=0;
		for j2:=1 to 4 do begin
		  for j4:=1 to 4 do begin
   	           if n[j2]=p[j4] then begin
		    if j2<>j4 then
		    begin
			cow_s:=cow_s+1;
			for j1:=1 to 30 do
			   for j:=1 to 22 do
			    putpixel(320+j1+35*j3,78+j+35*i,cow[j,j1]);
		    end
		    else begin
		    bul_s:=bul_s+1;
		     for j1:=1 to 22 do
		       for j:=1 to 28 do
			putpixel(320+j1+35*j3,78+j+35*i,bul[j,j1]);
		    if bul_s=4 then begin i:=4;setcolor(red); outtextxy(320,30,'You win!!!');end;
		     end;
		    j3:=j3+1;
		    end;
		   end;
		 end;
		i:=i+1;
	end;
  end;
until i=5;
readln;
CloseGraph;
end.
bobby2008 вне форума Ответить с цитированием
Старый 11.05.2009, 02:59   #25
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Так..
Цитата:
куда и что мне дописать, чтобы при вводе мне проверяло, вводится новая цифра либо та, что уже была введена(то есть защита от повторений цифр в числе).
Объявите две переменные:
Код:
 flag : boolean;
 Iflag : integer;
И допишите вот такой кусок:
Код:
j6:=1;
	repeat
	  c:=readkey;

      { --- кусок --}
      flag := true;
      if c in ['0'..'9'] then
       for Iflag:=1 to j6-1 do
        if n[Iflag]=ord(c)-48 then
         begin
         flag := false;
         break;
         end;
       if not flag then continue;
      {----------------}

	  case c of
Здесь проверяется, нет ли введенного символа в массиве n. Если есть, то ввод игнорируется.

------------
Еще замечу вот что. Вместо этого:
Код:
 #48: begin if j6<5 then begin outtextxy(50+22*j6,80+30*i,'0');n[j6]:=0;j6:=j6+1;end; end;
	  #49: begin if j6<5 then begin outtextxy(50+22*j6,80+35*i,'1');n[j6]:=1;j6:=j6+1;end; end;
	  #50: begin if j6<5 then begin outtextxy(50+22*j6,80+35*i,'2');n[j6]:=2;j6:=j6+1;end; end;
	  #51: begin if j6<5 then begin outtextxy(50+22*j6,80+35*i,'3');n[j6]:=3;j6:=j6+1;end; end;
	  #52: begin if j6<5 then begin outtextxy(50+22*j6,80+35*i,'4');n[j6]:=4;j6:=j6+1;end; end;
	  #53: begin if j6<5 then begin outtextxy(50+22*j6,80+35*i,'5');n[j6]:=5;j6:=j6+1;end; end;
	  #54: begin if j6<5 then begin outtextxy(50+22*j6,80+35*i,'6');n[j6]:=6;j6:=j6+1;end; end;
	  #55: begin if j6<5 then begin outtextxy(50+22*j6,80+35*i,'7');n[j6]:=7;j6:=j6+1;end; end;
	  #56: begin if j6<5 then begin outtextxy(50+22*j6,80+35*i,'8');n[j6]:=8;j6:=j6+1;end; end;
	  #57: begin if j6<5 then begin outtextxy(50+22*j6,80+35*i,'9');n[j6]:=9;j6:=j6+1;end; end;
я бы сделал как-то так:
Код:
#48..#57: if j6<5 then
                  begin
                  outtextxy(50+22*j6,80+35*i,c); n[j6] := ord(c)-48; inc(j6);
                  end;
Намного короче )
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]

Последний раз редактировалось Sazary; 11.05.2009 в 03:05.
Sazary вне форума Ответить с цитированием
Старый 11.05.2009, 12:53   #26
bobby2008
Пользователь
 
Аватар для bobby2008
 
Регистрация: 13.04.2009
Сообщений: 37
По умолчанию

Спасибо огромное. Почти доделал уже. Потом еще попрошу посмотреть. можно?..
bobby2008 вне форума Ответить с цитированием
Старый 11.05.2009, 12:59   #27
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от bobby2008
Потом еще попрошу посмотреть. можно?..
Ну а почему нет? )

Я бы, только, на вашем месте делал программу через процедуры. Было бы намного понятнее и удобнее.
А так, очень неплохо )
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 11.05.2009, 13:30   #28
Anatole
Форумчанин
 
Аватар для Anatole
 
Регистрация: 07.04.2009
Сообщений: 245
По умолчанию

Возможно для ускорения рисвания воспользоваться функциями GetImage и PutImage. Кстати в свое время фирма Borland снабдила свой Pascal 7 неплохим демонстрационным примером по работе с графикой. Там демонстрируются приём для вывода подвижных изображений. boby 2008, я вижу вы сможете в неём разобраться. Поэтому вот вам этот пример: BGIDEMO.ZIP
Всякое безобразие должно быть единообразным. Тогда это называется порядком.
Anatole вне форума Ответить с цитированием
Старый 11.05.2009, 18:30   #29
bobby2008
Пользователь
 
Аватар для bobby2008
 
Регистрация: 13.04.2009
Сообщений: 37
По умолчанию

Все будет через процедуры и ф-ции, да и в модуль кое-чего можно было бы загнать, но я редкостный брейнфакер(так иногда называют). Просто мне легче сначала написать все полно, а потом переделывать под процедуры и ф-ции. В примере приблизительно разобрался, но там есть участочки немного на асемблере(если я правильно понял теги асм), а их я никак не осилил))). Спасибо за пример.
bobby2008 вне форума Ответить с цитированием
Старый 12.05.2009, 17:49   #30
bobby2008
Пользователь
 
Аватар для bobby2008
 
Регистрация: 13.04.2009
Сообщений: 37
По умолчанию

Пишет ошибка 121. Пишет , что я пытаюсь обозначить переменную не типа массив массивом. Что нужно сделать, вроде ведь она массив?.. Спасибо.
!!!!ГЛУПАЯ ОШИБКА, ИЗВИНИТЕ,САМ НАШЕЛ, СПАСИБО!!!
Не знаю, как удалить сообщение, поэтому написал вот так. Модераторы, не серчайте.

Последний раз редактировалось bobby2008; 12.05.2009 в 17:59.
bobby2008 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Быки и коровы Димарик Помощь студентам 5 01.12.2009 19:51
Игра "Поле чудес". Нужна trOid Фриланс 15 24.11.2008 18:03
Игра "Ghost Recon Advanced Warfighter 1"(GRAW) Air Gamedev - cоздание игр: Unity, OpenGL, DirectX 0 27.07.2008 08:07
Игра "четный" "нечетный" bigcat Помощь студентам 1 01.03.2008 00:24