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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2017, 15:50   #1
Anastaszhar
Новичок
Джуниор
 
Регистрация: 10.12.2017
Сообщений: 2
По умолчанию Генерация всех перестановок заданного множества - C++

Никак не могу понять в чем проблема, задача состояла в генерации всех перестановок заданного множества, и вот выводила же прога все верно когда объявлял глобально массив, а вот как решил сделать красиво, динамически... Вобщем все пошло не по плану, памагити...

Ошибка: Необработанное исключение в "0x013a1642" в "LogicCourseWork.exe": 0xC0000005: Нарушение прав доступа при чтении "0xcccccccc".

C++
Код:
// LogicCourseWork.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
int fact(int N)
{
    // если пользователь ввел отрицательное число
    if(N < 0)
        // возвращаем ноль
        return 0;
    // если пользователь ввел ноль
    if (N == 0)
        // возвращаем факториал нуля
        return 1;
    // Во всех остальных случаях
    else
        // делаем рекурсию
        return N * fact(N - 1);
}
 
 
//int a[4]={1,2,3,4};
//int n=4,k=0, vrem;
//int result[24];
 
void generate (int t,long int *a[],int n,long int *result[],int size)
{
    int k=0;
    if (t==n-1) //Вывод очередной перестановки
    {
        for (int i=0;i<n;i++)
        {
            *result[k]+=*a[i]*(int)pow((double)10,n-1)/(int)pow((double)10,i);
        }
        k++;
    }
    else
    {
        for (int j=t;j<n;++j) //Запускаем процесс обмена
            { 
                swap(a[t],a[j]); //a[t] со всеми последующими
                t++;
                generate(t,a,n,result,size); //Рекурсивный вызов
                t--;
                swap(a[t],a[j]);
            }
    }
}
 
int main()
{
    int n; // размер массива
    cout << "Enter integer value: ";
    cin >> n; // получение от пользователя размера массива
 
    long int *a = new long int[n]; // Выделение памяти для массива
    for (int i = 1; i <= n; i++)
        // Заполнение массива 
    {
        a[i]=i;
    }
    int size=fact(n);
    long int *result = new long int[size];
    for(int i=0;i<size;i++)
        result[i]=0;
    generate(0,&a,n,&result,size);
    for (int i = 0; i < size - 1; i++) 
    {
       for (int j = 0; j < size - i - 1; j++) 
       {
           if (result[j] > result[j + 1]) 
           {                                                                            
               swap(result[j],result[j + 1]); // меняем элементы местами
           }
       }
    }
    for (int i=0;i<size;i++)
    {
        cout<<result[i]<< " ";
        cout<<endl;
    }
    delete [] a; // очистка памяти
    delete [] result;
    return 0;
}
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 11.12.2017 в 10:09.
Anastaszhar вне форума Ответить с цитированием
Старый 10.12.2017, 15:53   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Код:
for (int i = 1; i <= n; i++)
// Заполнение массива
C 0

Код:
(*result)[k]+=(*a)[i]*(int)pow((double)10,n-1)/(int)pow((double)10,i);
p51x вне форума Ответить с цитированием
Старый 10.12.2017, 16:20   #3
Мановар
Пользователь
 
Регистрация: 13.11.2016
Сообщений: 84
По умолчанию

Код:
#include <iostream>
#include <string>
#include <algorithm>

int main() {
	int num;
	std::cin >> num;
	std::string s = std::to_string(num);
	std::sort(s.begin(), s.end());
	do
		std::cout << s << std::endl;
	while (std::next_permutation(s.begin(), s.end()));
	system("pause");
}
Мановар вне форума Ответить с цитированием
Старый 10.12.2017, 21:09   #4
Anastaszhar
Новичок
Джуниор
 
Регистрация: 10.12.2017
Сообщений: 2
По умолчанию

Он все равно ту же ошибку выдает(((

Код:
#include "stdafx.h"
#include <iostream>

using namespace std;

int fact(int N)
{
// если пользователь ввел отрицательное число
if(N < 0)
// возвращаем ноль
return 0;
// если пользователь ввел ноль
if (N == 0)
// возвращаем факториал нуля
return 1;
// Во всех остальных случаях
else
// делаем рекурсию
return N * fact(N - 1);
}


//int a[4]={1,2,3,4};
//int n=4,k=0, vrem;
//int result[24];

void generate (int t,long int *a[],int n,long int *result[],int size)
{
int k=0;
if (t==n-1) //Вывод очередной перестановки
{
for (int i=0;i<n;i++)
{
(*result)[k]+=(*a)[i]*(int)pow((double)10,n-1)/(int)pow((double)10,i);
}
k++;
}
else
{
for (int j=t;j<n;++j) //Запускаем процесс обмена
{ 
swap(a[t],a[j]); //a[t] со всеми последующими
t++;
generate(t,a,n,result,size); //Рекурсивный вызов
t--;
swap(a[t],a[j]);
}
}
}

int main()
{
int n; // размер массива
cout << "Enter integer value: ";
cin >> n; // получение от пользователя размера массива

long int *a = new long int[n]; // Выделение памяти для массива
for (int i = 0; i < n; i++)
// Заполнение массива 
{
a[i]=i+1;
}
int size=fact(n);
long int *result = new long int[size];
for(int i=0;i<size;i++)
result[i]=0;
generate(0,&a,n,&result,size);
for (int i = 0; i < size - 1; i++) 
{
for (int j = 0; j < size - i - 1; j++) 
{
if (result[j] > result[j + 1]) 
{ 
swap(result[j],result[j + 1]); // меняем элементы местами
}
}
}
for (int i=0;i<size;i++)
{
cout<<result[i]<< " ";
cout<<endl;
}
delete [] a; // очистка памяти
delete [] result;
return 0;
}
Необработанное исключение в "0x003d163d" в "LogicCourseWork.exe": 0xC0000005: Нарушение прав доступа при чтении "0xcccccccc".
Anastaszhar вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Генерация всех перестановок элементов массива в С++. bender91 Помощь студентам 4 19.04.2012 14:14
C#.LINQ Генерация всех перестановок без рекурсии Lasur Помощь студентам 2 08.04.2012 19:38
Генерация всех перестановок массива aly-lucenko Помощь студентам 4 28.04.2011 14:14
Генерация всех перестановок 10-элементного множества aly-lucenko Помощь студентам 0 17.04.2011 20:04
Генерация перестановок vereney Паскаль, Turbo Pascal, PascalABC.NET 3 21.03.2011 21:04