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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2011, 18:23   #11
j2ko
Пользователь
 
Регистрация: 18.05.2010
Сообщений: 25
По умолчанию

да... она самая))))
j2ko вне форума Ответить с цитированием
Старый 25.04.2011, 18:31   #12
j2ko
Пользователь
 
Регистрация: 18.05.2010
Сообщений: 25
По умолчанию

Сечас возьмусь за вторую, напиши всьо ли работает ?
j2ko вне форума Ответить с цитированием
Старый 25.04.2011, 18:43   #13
j2ko
Пользователь
 
Регистрация: 18.05.2010
Сообщений: 25
По умолчанию

Вопрос масив одномерний ?
j2ko вне форума Ответить с цитированием
Старый 25.04.2011, 20:50   #14
Fallenangel
Новичок
Джуниор
 
Регистрация: 25.04.2011
Сообщений: 7
По умолчанию

да массив одномерный...Спасибо за помощь
Fallenangel вне форума Ответить с цитированием
Старый 25.04.2011, 22:04   #15
j2ko
Пользователь
 
Регистрация: 18.05.2010
Сообщений: 25
По умолчанию

Код:
#include <iostream>
#include <conio.h>
#include <stdio.h>
/*
2. Составьте класс для работы с массивом, включив в него сам массив, его размерность, а также предусмотрите следующие методы:
 • ввод массива;
 • генерацию всех перестановок элементов массива;
 • вывод каждой перестановки в файл.
 */


class MatrixR {
private:
    unsigned long count;
    long  * m;


void swap_elements(long m[], int i, int j){
   int c = m[i];
   m[i] = m[j];
   m[j] = c;
}

void swap_subarray(long m[], int i, int j)
{
// необходимо поменять "развернуть" кусок массива m, включающий индексы [i, j]
// не будем заводить новых переменных - попортим старые (уже неважно, даже если они ссылки)
   while (i < j)
      swap_elements(m, i++, j--);
}
int find_min_but_greater(long m[], int i, int N)
{
//   среди элементов хвоста массива m ищем минимальный элемент, больший чем m[i-1]
   int j_min = i;
   for (int j = i + 1; j < N; j++)
   {
      if ((m[j] > m[i - 1]) && (m[j] < m[j_min]))
         j_min = j;
   }
   return j_min;
}

void next(long m[], int N)
{
   int i = N - 1;
   while (i > 0)
   {
      if (m[i - 1] < m[i])
      {
// нашли место, вида ????? m[i-1] < m[i] > m[i+1] > ... > m[N - 1]
// сейчас надо найти номер j > i, который минимальным образом превосходит m[i - 1]
         int j_min = find_min_but_greater(m, i, N);
// теперь обменяем элементы массива с индексами j_min и i - 1
         swap_elements(m, j_min, i - 1);
// теперь осталось только перевернуть часть массива с индексами [i, N - 1]
         swap_subarray(m, i, N - 1);
// очередной шаг сделан - можно возвращаться
         return;
      }
// обязательно двигаемся
      i--;
   }
// у нас массив оказался упорядоченным по убыванию, значит необходимо упорядочить по возрастанию
// мог бы написать, например, for (i = 0; i < N; i++) m[i] = i + 1;
// где "+ 1" используется для создания массива 1..N вместо 0..N-1
// но воспользуемся уже готовой функцией, которая корректно работает с любыми массивами
   swap_subarray(m, 0, N - 1);
}



public :
    MatrixR(){
        count=0;
        m=NULL;
    };
    ~MatrixR(){
         if(m!=NULL)delete[] m;
    };
    void Input(){
        std::cout<<"Enter length of array: ";
        std::cin>>count;
        if(count<=0){
           std::cout<<"Error, count can't be less then zero!!!";
           return;
        }
        if(m!=NULL)
             delete[] m;
        m = new long[count];
        for(int i=0;i<count;i++)
           std::cin>>m[i];
    }
    void AllReplasesToScreen(){
           int i,factor = 1;
           // количество перестановок
           for (i = 1; i <= count; i++)
              factor *= i;
           while (factor > 0)
           {
              // напечатаем масив на екран
              for (i = 0; i < count-1; i++)
                   printf("%d,", m[i]);
              printf("%d",m[i]);
              printf("\r\n");
              factor--;
              // делаем шаг
              next(m, count);
           }
    }
    void AllReplasesToFile(){
        FILE * f;
        char filename[255];
        if(count<=0)return;
        puts("Enter file name to save: ");
        gets(filename);
        f= fopen(filename,"w");
        if(f==NULL){
            std::cout<<"Error, can't create file";
            return;
        }
        int i,factor = 1;
        // количество перестановок
        for (i = 1; i <= count; i++)
            factor *= i;
         while (factor > 0)
         {
              // напечатаем массив в файл
              for (i = 0; i < count-1; i++)
                   fprintf(f,"%d,", m[i]);
              fprintf(f,"%d",m[i]);
              fprintf(f,"\r\n");
              factor--;
              // и сделаем этот шаг
              next(m, count);
           }
          fclose(f);
    }




};

int main(int argc, _TCHAR* argv[])
{
        MatrixR p;
        p.Input();
        std::cout<<"Replases";
        p.AllReplasesToScreen();
        std::cin.get();
        p.AllReplasesToFile();
        getch();
	return 0;
}

Последний раз редактировалось j2ko; 25.04.2011 в 22:14.
j2ko вне форума Ответить с цитированием
Старый 25.04.2011, 22:57   #16
mishanqa
 
Регистрация: 25.04.2011
Сообщений: 5
По умолчанию

j2ko, спасибо огромное!
для нашего borlanda немного подправленный код
Код:
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
/*
2. Составьте класс для работы с массивом, включив в него сам массив, его размерность, а также предусмотрите следующие методы:
 • ввод массива;
 • генерацию всех перестановок элементов массива;
 • вывод каждой перестановки в файл.
 */


class MatrixR {
private:
    unsigned long count;
    long  * m;


void swap_elements(long m[], int i, int j){
   int c = m[i];
   m[i] = m[j];
   m[j] = c;
}

void swap_subarray(long m[], int i, int j)
{
// необходимо поменять "развернуть" кусок массива m, включающий индексы [i, j]
// не будем заводить новых переменных - попортим старые (уже неважно, даже если они ссылки)
   while (i < j)
      swap_elements(m, i++, j--);
}
int find_min_but_greater(long m[], int i, int N)
{
//   среди элементов хвоста массива m ищем минимальный элемент, больший чем m[i-1]
   int j_min = i;
   for (int j = i + 1; j < N; j++)
   {
      if ((m[j] > m[i - 1]) && (m[j] < m[j_min]))
         j_min = j;
   }
   return j_min;
}

void next(long m[], int N)
{
   int i = N - 1;
   while (i > 0)
   {
      if (m[i - 1] < m[i])
      {
// нашли место, вида ????? m[i-1] < m[i] > m[i+1] > ... > m[N - 1]
// сейчас надо найти номер j > i, который минимальным образом превосходит m[i - 1]
         int j_min = find_min_but_greater(m, i, N);
// теперь обменяем элементы массива с индексами j_min и i - 1
         swap_elements(m, j_min, i - 1);
// теперь осталось только перевернуть часть массива с индексами [i, N - 1]
         swap_subarray(m, i, N - 1);
// очередной шаг сделан - можно возвращаться
         return;
      }
// обязательно двигаемся
      i--;
   }
// у нас массив оказался упорядоченным по убыванию, значит необходимо упорядочить по возрастанию
// мог бы написать, например, for (i = 0; i < N; i++) m[i] = i + 1;
// где "+ 1" используется для создания массива 1..N вместо 0..N-1
// но воспользуемся уже готовой функцией, которая корректно работает с любыми массивами
   swap_subarray(m, 0, N - 1);
}



public :
    MatrixR(){
        count=0;
        m=NULL;
    };
    ~MatrixR(){
         if(m!=NULL)delete[] m;
    };
    void Input(){
        cout<<"Enter length of array: ";
        cin>>count;
        if(count<=0){
           cout<<"Error, count can't be less then zero!!!";
           return;
        }
        if(m!=NULL)
             delete[] m;
        m = new long[count];
        for(int i=0;i<count;i++)
           cin>>m[i];
    }
    void AllReplasesToScreen(){
           int i,factor = 1;
           // количество перестановок
           for (i = 1; i <= count; i++)
              factor *= i;
           while (factor > 0)
           {
              // напечатаем массив на экран
              for (i = 0; i < count-1; i++)
                   printf("%d,", m[i]);
              printf("%d",m[i]);
              printf("\r\n");
              factor--;
              // делаем шаг
              next(m, count);
           }
    }
    void AllReplasesToFile(){
        FILE * f;
        char filename[255];
        if(count<=0)return;
        puts("Enter file name to save: ");
        gets(filename);
        f= fopen(filename,"w");
        if(f==NULL){
            cout<<"Error, can't create file";
            return;
        }
        int i,factor = 1;
        // количество перестановок
        for (i = 1; i <= count; i++)
            factor *= i;
         while (factor > 0)
         {
             // напечатаем массив в файл
              for (i = 0; i < count-1; i++)
                   fprintf(f,"%d,", m[i]);
              fprintf(f,"%d",m[i]);
              fprintf(f,"\r\n");
              factor--;
               // и сделаем этот шаг
              next(m, count);
           }
          fclose(f);
    }




};

int main()
{
        MatrixR p;
        p.Input();
        cout<<"Replases"<<endl;
        p.AllReplasesToScreen();
        cin.get();
        p.AllReplasesToFile();
        getch();
	return 0;
}
Всем удачи на зачете!
mishanqa вне форума Ответить с цитированием
Старый 25.04.2011, 23:45   #17
Fallenangel
Новичок
Джуниор
 
Регистрация: 25.04.2011
Сообщений: 7
По умолчанию

Спасибо огромное всем кто участвовал в этой теме. по поступлении отписывайтесь сюда и вам помогут или кодом или добрым советом))
Fallenangel вне форума Ответить с цитированием
Старый 25.04.2011, 23:48   #18
Fallenangel
Новичок
Джуниор
 
Регистрация: 25.04.2011
Сообщений: 7
По умолчанию

J2KO Оставляю свои координаты. 392-849-525. аська Напиши если что отплачю помощью если смогу
Fallenangel вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Классы (C#) Andrey_k Помощь студентам 0 23.09.2009 20:56
классы Dimarik Общие вопросы C/C++ 1 18.09.2009 20:32
классы elenSV Общие вопросы C/C++ 0 31.05.2009 09:48