|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
03.10.2007, 18:24 | #1 |
Пользователь
Регистрация: 15.06.2007
Сообщений: 40
|
Быки и коровы
Всем доброго времени суток.
- немогли бы во попробовать мне помочь? -задача такая, обычная игра быки и коровы. только вот особенность она должна загадывать число в 8ми ричной системе. - чувстую что все просто, но вот только пока немагу понять с чего начать и как лучше реализовать. |
04.10.2007, 00:39 | #2 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
Начать можно с реализации в 10-тичной системе
А если мысли отсутствуют как класс, то лучше перенести эту тему в раздел "Работа для программиста" или "Помощь студентам"... |
04.10.2007, 14:16 | #3 |
Забанен
Форумчанин Подтвердите свой е-майл
Регистрация: 01.11.2006
Сообщений: 420
|
проблемы помоему нет
просто по циферно нужно загадать число цифры рандом от 1 до 7 главное чтобы они были разные
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана
|
04.10.2007, 15:14 | #4 |
Новичок
Джуниор
Регистрация: 04.10.2007
Сообщений: 1
|
Я видно нетуда попал, быки коровы?
|
04.10.2007, 16:56 | #5 |
Форумчанин
Регистрация: 26.04.2007
Сообщений: 440
|
вот делал год-два назад.
здесь выкладывал систему счисления. Обьедините и получится ваша прога. Последний раз редактировалось bill; 04.10.2007 в 17:18. |
01.12.2009, 19:51 | #6 |
Регистрация: 14.11.2009
Сообщений: 4
|
Всем доброго времени суток.
Помогите, пожалуйста, решить задачу, обычная игра быки и коровы (delphi) Нашел алгоритм своей задачи на паскале, решил переделать ее в делфи. Подскажите, как правильно сделать обращение на ввод быков и коров (Form1.Edit2.Text)? Код: const MaxSgn = 6; {Максимальное значение в числе} Sgn = 4; {Количество цифр в числе} type S = 1..MaxSgn; Numb = array[1..Sgn] of S; type Step = Record {Информация об одном вопросе - ответе} n : Numb; {Спрошенное число} answer : integer; {Ответ} end; Game = array[1..32] of step; {Информация о всех вопросах - ответах} type TForm1 = class(TForm) MainMenu1: TMainMenu; N1: TMenuItem; N2: TMenuItem; N3: TMenuItem; N4: TMenuItem; N5: TMenuItem; N7: TMenuItem; N6: TMenuItem; ImageList1: TImageList; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Label1: TLabel; Label2: TLabel; procedure N6Click(Sender: TObject); procedure N3Click(Sender: TObject); procedure N4Click(Sender: TObject); procedure Edit2KeyPress(Sender: TObject; var Key: Char); procedure N5Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses About_unit, F_help; {$R *.dfm} procedure TForm1.N6Click(Sender: TObject); begin Close; end; procedure TForm1.N3Click(Sender: TObject); begin AboutForm.ShowModal; end; procedure TForm1.N4Click(Sender: TObject); begin Help_Form.ShowModal; end; function cows(n1,n2:Numb):integer; {Сравнивает два числа и возвращает результат сравнения в виде <количество быков>*10+<количество коров>} var i1,i2 : 1..Sgn; a : integer; begin {Необходимо сравнивать все цифры первого числа со всеми цифрами второго} a:=0; for i1:=1 to Sgn do for i2:=1 to Sgn do if n1[i1]=n2[i2] then if i1=i2 then a:=a+10 {Встретился 'Бык'} else inc(a); cows:=a; end; function vvv():Numb; var i,j : integer; Curnumb:Numb; BEGIN Form1.Edit2.Text:=''; for i:=1 to Sgn do Curnumb[i]:=i; for i:=1 to Sgn do Form1.Edit1.Text:=Form1.Edit1.Text+ IntToStr(Curnumb[i]); Form1.Edit1.Text:=Form1.Edit1.Text+ '?'; vvv:=Curnumb; Form1.Edit2.SetFocus; end; procedure FTK; {пересчет } var Nstep : integer; {Номер текущего шага} Info : Game; Curnumb : Numb; i,j : integer; b : boolean; BEGIN Nstep:=0; Curnumb:=vvv; Form1.Edit2.SetFocus; if (Length(Form1.Edit2.Text)<>2) then Form1.Edit2.Text;//FFF; while true do {Пока не будут перебраны все числа или не найденно решение} begin {Спросить текущее число} inc(Nstep); Info[Nstep].n:=Curnumb; Info[Nstep].Answer:=StrToint(Form1.Edit2.Text) ; {Пользователь должен ввести число, первая цифра которого 'Быки', вторая - 'Коровы'} if (Info[Nstep].Answer div 10+Info[Nstep].Answer mod 10)>Sgn then begin Form1.Label2.Caption:='Плохая игра !'; exit; end; {'Быков' и 'Коров' вместе не может быть больше, чем цифр} if Info[Nstep].Answer=10*Sgn then exit; {Далее идет генерация нового числа} repeat i:=Sgn; {Увеличение числа на 1-цу} while (i>=1) and (Curnumb[i]=MaxSgn) do begin Curnumb[i]:=1; dec(i); end; if i<1 then begin {Все числа перебраны, а ответ не найден} Form1.Label2.Caption:='Вы неправильно отвечали !'; exit; end; inc(Curnumb[i]); b:=true; {Проверка на встречающиеся одинаковые цифры} for i:=1 to Sgn do for j:=i+1 to Sgn do b:=b and (Curnumb[i]<>Curnumb[j]); for i:=1 to Nstep do b:=b and (cows(Curnumb,Info[i].n)=Info[i].Answer); until b; end; {while} end; procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char); begin if (Length(Edit2.Text)=2) and (key <> #8) then Begin if (key=chr(13)) and (Length(Edit2.Text)<>0) Then FTK; Key:=Chr(0); end; case Key of '0'..'4',Chr(8) : ; else Key:=Chr(0); {запрещенные символы не отображать} end; end; procedure TForm1.N5Click(Sender: TObject); begin Form1.Edit1.Text:=''; FTK; end; end. |