Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++]Ввод количества элементов в массиве


Автор: Vampire551 1.6.2008, 16:26
Помогите пожалуйста со вводом количества элементов в массив. Количество элементов вводится, но программа не работает. smile  Заранее благодарен.
Код
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <iostream.h>
#define N 10

//-----------------------------------------------//
void swap (int *a, int *b)
{
   int t;
   t= *a;
   *a= *b;
   *b= t;
}
//-----------------------------------------------//
void reverse (int *P, int m)
{
   int i= 0, j= m;
   while (i < j)
   {
      swap (&P[i], &P[j]);
      i++;
      j--;
   }
}
//-----------------------------------------------//
void antilex (int *P, int m)
{
   int i;
   if (m == 0)
   {
      int sumL= 0, sumR= 0;
      for (i= 0; i < N / 2; i++)
     sumL+= P[i];
      for (; i < N; i++)
     sumR+= P[i];
      if ((sumL == sumR)||(abs(sumL-sumR)==1))
      {
     for (i= 0; i < N; i++)
        printf ("%d ", P[i]);
     printf("\n");
      }
   }
   else
   {
      for (i= 0; i <= m; i++)
      {
     antilex (P, m - 1);
     if (i < m)
     {
        swap (&P[i], &P[m]);
        reverse (P, m - 1);
     }
      }
   } // else if (m == 0)
}
//-----------------------------------------------//
int main()
{
   clrscr();
   int i,k;
   int P[N];
   char v;
   m1:
   cout<<"1. Nachat' programmu\n";
   cout<<"2. Vihod iz programmy\n";
   v=getch();
     switch(v)
     {
       case '1':goto m2;
       case '2':goto m3;
       default:;
     }
   m2:
   clrscr();
   printf("Vvedite chislo elementov: 0<k<%d\n",N);
   scanf("%d",&k);
   for (i= 0; i < k; i++)
   P[i]= i+1;
   antilex (P, k - 1);
   cout<<"Najmite ENTER chtoby vernutsya v menu";
   getch();
   clrscr();
   goto m1;
   getch();
   m3:
   return 0;
}

Автор: Solomon 1.6.2008, 20:10
Цитата(Vampire551 @  1.6.2008,  15:26 Найти цитируемый пост)
 Количество элементов вводится, но программа не работает.

А что  именно не работает то? можно конкретнее?

Автор: Vampire551 1.6.2008, 20:19
Не начинает делать перестановки.

Автор: Solomon 1.6.2008, 20:58
Vampire551, тебе вообще что требуется? отсортировать массив?

Просто более ужасного кода  я не видел(извеняюсь за грубость)  smile 

goto использовать это не есть хорошо. 

Ты сам писал этот код? или скачал откудато? 

Автор: Vampire551 1.6.2008, 21:14
Вообще это программа генерации перестановок в антилексикографическом порядке с отбором "хороших" перестановок по определенному условию. Она еще с пользовательским интерфейсом. Мне нужно так чтобы количество элементов множества я вводил сам, а оно забито в define. Эту прогу я переделывал с Паскаля.

Автор: mrbrooks 2.6.2008, 14:10
Да уж код жестковат. Если хочешь переменную величину массива тогда делай так

Код

int a;
cin >> a;
int *b = new int[a];
....
delete [] b;


вот и будет тебе переменный массив

Автор: anatox91 2.6.2008, 14:43
можно и без new/delete
Код

int size;
std::cin >> size;
int array[size];

Автор: mrbrooks 2.6.2008, 16:16
Цитата(anatox91 @ 2.6.2008,  14:43)
можно и без new/delete
Код

int size;
std::cin >> size;
int array[size];

очень любопытное решение. может подскажешь какой компилер это сжует?

Автор: anatox91 2.6.2008, 19:16
как ни странно все работает (Dev-C++ 4.9.9.2(компилер - MinGW)) smile 
Код

#include <iostream>
#include <cstdlib>
int main() {
    int size;
    std::cin >> size;
    int array[size];
    for(size_t i=0; i < size; ++i) {
               array[i] = rand()%100;
               }
    for(size_t i=0; i < size; ++i) {
               std::cout << array[i] << ' ';
               }
    system("pause");
    return 0;
}

но в VS2008 не пашет

Автор: mrbrooks 3.6.2008, 07:52
Цитата(anatox91 @ 2.6.2008,  19:16)

но в VS2008 не пашет

ага. а так же в VS2005 и старике Бормане  smile  Интересно в чем же фича что в
 
Цитата

Dev-C++ 4.9.9.2(компилер - MinGW
) это работает?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)