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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.06.2013, 17:41   #1
LifeWind
Пользователь
 
Регистрация: 30.09.2012
Сообщений: 10
Вопрос Шахматный номер, рекурсия(Из Pascal в С++)

Здравствуйте, вот задача: Телефонный номер называется “шахматным”, если его цифры набираются на телефонном кнопочном номеронабирателе ходом шахматного коня. Написать программу, подсчитывающую, сколько можно набрать различных семизначных “шахматных” номеров, начинающихся с заданной цифры.(Задачу надо сделать через рекурсивную функцию).
Есть код на паскале, а мне нужно на C++. Помогите переделать пожалуйста, сам не смог. В mas - варианты хода для чисел от 0 до 9, -1 означает что хода нет(три хода есть только для цифр 4 и 6, и нет вообще для цифры 5).
Код:
const
  mas:array[0..9,1..3] of integer =
      ((4,6,-1), (6,8,-1), (7,9,-1),
      (4,8,-1), (3,9,0), (-1,-1,-1),
      (1,7,0), (2,6,-1), (1,3,-1), (2,4,-1));
 
 
var
  N:integer;
  Tel:integer;
 
 
procedure Find(digit:integer; count: integer);
var i:integer;
begin
  if digit=-1 then exit;
  if count =7 then begin inc(Tel);exit;end;
  for i:=1 to 3 do
  Find(mas[digit,i],count+1);
end;
 
begin
writeln('Введите число: ')
read(N);
find(N,1);
writeln(Tel);
readln;
end.
LifeWind вне форума Ответить с цитированием
Старый 22.06.2013, 18:13   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Покажите свою попытку (тут чисто механическая работа - заменить конструкции одного языка на конструкции другого).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 22.06.2013, 18:18   #3
LifeWind
Пользователь
 
Регистрация: 30.09.2012
Сообщений: 10
По умолчанию

Код:
#include <iostream>
using namespace std;
void find(int digit, int count, int Tel)
{
	int mas[9][2] = {(4,6,-1), (6,8,-1), (7,9,-1),
      (4,8,-1), (3,9,0), (-1,-1,-1),(1,7,0), (2,6,-1), (1,3,-1), (2,4,-1)};
  if (digit==-1) return;
  if (count==7) {
	  Tel++;
	  return;}
  for (int i=0;i<=2;i++)
  find(mas[digit][i],count+1,Tel);
  return;
}



void main()
{
	int Tel=0;
	int n;  
	cin>>n;
	find(n,1,Tel);
	cout<<endl<<Tel;
	return;
}
Не работает, что-то сделал не правильно, пробовал разные варианты.И вопрос, какой аналог на C++ "паскалевскоого" exit?
LifeWind вне форума Ответить с цитированием
Старый 22.06.2013, 18:38   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Код:
#include <iostream>

using namespace std;

const int mas[10][3] = {
    {4,6,-1},
    {6,8,-1},
    {7,9,-1},
    {4,8,-1},
    {3,9,0},
    {-1,-1,-1},
    {1,7,0},
    {2,6,-1},
    {1,3,-1},
    {2,4,-1}
};

void
find(int digit, int count, int &Tel)
{
    if (digit == -1)
        return;
    if (count == 7) {
        Tel++;
        return;
    }
    for (int i = 0; i < 3; ++i)
        find(mas[digit][i], count + 1, Tel);
}

int
main()
{
    int Tel = 0;
    int n;
    cin >> n;
    find(n, 1, Tel);
    cout << endl << Tel;
}
return вместо паскалевского exit правилен.
Есть и exit (http://www.cplusplus.com/reference/cstdlib/exit/), но в c++ он завершает сам процесс, а не только функцию.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal рекурсия Dover12 Помощь студентам 0 06.02.2013 21:39
pascal.Рекурсия. kelly Помощь студентам 2 16.12.2011 18:37
Рекурсия [Pascal] <Tyz> Помощь студентам 5 18.12.2010 16:03
Pascal - рекурсия darsinella Помощь студентам 4 22.12.2009 21:39
Pascal: Рекурсия MaGWaY_minsk Помощь студентам 2 19.02.2009 09:46