Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Из паскаля в С++, Помогите найти ошибку 
V
    Опции темы
PascalC
Дата 20.10.2008, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 19.10.2008

Репутация: нет
Всего: нет



Здравствуйте! Начал кодить на С++ Столкнулся с такой проблемой. Есть код на паскале:
Код

    var M,N,mins,maxs:byte;
          posl:array [0..255] of byte;
          isx,isy:boolean;
        x,y:integer;
      procedure Generate(k:byte);
        var i,j:byte;
      begin
        if k=m then
          begin
        isx:=false; isy:=false;
        for i:=1 to m do
        begin
        if posl[i]=x then isx:=true;
        if posl[i]=y then isy:=true;
        write(posl[i]);
        end;
        if isx and isy then write(' -Decision');
        writeln;
        end else
          for j:=posl[k]+mins to maxs do
              begin
          posl[k+1]:=j;
          Generate(k+1);
          end;
      end;
    begin
    x:=2;y:=5;
    m:=3;
    mins:=1;
    maxs:=5;
      Generate(0);
    end.

Как его перевести в код на с++?
Вот что получилось у меня:
Код

#include <iostream>
#include <conio.h>
#include <stdio.h>
using namespace std;
int n,m,j,i=0,mins=150,maxs=0,msum=0,sum=0;
int x[150],y[150],posl[150];
bool isx,isy;
void Generate(int k)
{
    if (k==m) 
        {
        isx=false; isy=false;
        for (i=1;i<=m;i++) 
            {
            if (posl[i]==x[1]) isx=true;
            if (posl[i]==y[1]) isy=true;
            cout<<posl[i];
            }
        if (isx&&isy) cout<<"Decision";
        cout<<endl;
        } else
          for (j=posl[k]+mins;j<=maxs;j++)
            {
            posl[k+1]=j;
            Generate(k+1);
            }
}
void main()
{
x[1]=2;y[1]=5;
m=3;
mins=1;
maxs=5;
Generate(0);
getch();
}

Но результат выводится другой :( Подскажите, где может быть ошибка

Это сообщение отредактировал(а) PascalC - 20.10.2008, 13:27
PM MAIL   Вверх
Lazin
Дата 20.10.2008, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



в с++ массивы индексируются с нуля

Добавлено через 48 секунд
Цитата(PascalC @  20.10.2008,  13:25 Найти цитируемый пост)
for (i=1;i<=m;i++) 

Код

for(i = 0; i < m; i++)
...

PM MAIL Skype GTalk   Вверх
volvo877
Дата 20.10.2008, 15:19 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: нет
Всего: 116



Цитата(Lazin @  20.10.2008,  12:28 Найти цитируемый пост)
в с++ массивы индексируются с нуля
Ну, допустим, в приведенной выше программе массив тоже индексируется с нуля, так что ни разу не причина делать изменение i от 0... Раз автор сделал от 1 - значит, так и надо было...

Дословный перевод:
Код

#include <iostream>

using namespace std;

int m, n, mins, maxs;
int posl[256];
bool isx, isy;
int x, y;

void Generate(int k) {
    if(k == m) {
        isx = isy = false;
        for(int i = 1; i <= m; i++) {
            if(posl[i]==x) isx = true;
            if(posl[i]==y) isy = true;
            cout << posl[i];
        }
        if(isx && isy) cout << " -Decision";
        cout << endl;
    }
    else
      for(int j = posl[k]+mins; j <= maxs; j++) {
          posl[k+1] = j;
          Generate(k+1);
      }
}

int main() {
    x = 2; y = 5;
    m = 3;
    mins = 1; maxs = 5;
    Generate(0);
    return 0;
}
Выдает абсолютно идентичный с Паскалем ответ... Что я делаю не так?

Присоединённый файл ( Кол-во скачиваний: 11 )
Присоединённый файл  generate.PNG 53,79 Kb
PM MAIL   Вверх
PascalC
Дата 20.10.2008, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 19.10.2008

Репутация: нет
Всего: нет



volvo877, Большое спасибо! Все работает, попробую все же определить, в чем была ошибка.
PM MAIL   Вверх
PascalC
Дата 20.10.2008, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 19.10.2008

Репутация: нет
Всего: нет



Все, путем сравнения моего варианта и volvo877 нашел ошибку - я объявлял i,j как глобальные переменные, нужно было объявить локально, в самой функции.
В результате чего при рекурсии значения i и j не обнулялись.
Еще раз спасибо

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0468 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.