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


Автор: Aleksandra24 6.3.2013, 15:34
Здравствуйте мальчики!Можете мне помочь не могу никак разобраться с моей ошибкой!!Задан  массив мне нужно элементы между максимальным и минимальным переставить в обратном порядке!!
Вот моя программа она работает но не выдает то что нужно можете пожалуйста найти ошибку которую я сделала пожалуйста!

Код
#include <iostream>
#include <conio.h>
 
using namespace std;


struct VALUE
{
    int value;
    int index;
};
 
int main()
{ 

int n , i, j; 
     cout<<"\nVedite razmer massiva:";
     cin>>n;
     int array[n];
     for(i=0;i<n;i++)
     {

       cout<<"\nVvedite element massiva:";
       cin>>array[i];
       }

    VALUE max = {array[0],0};   
    VALUE min = {array[0],0};
    for (int i = 1; i < sizeof(array)/sizeof(int); i++)
    {   
       
        if (array[i] < min.value)
        {
            min.value = array[i]; 
            min.index = i;
        }
     
        if (array[i] > max.value)
        {
            max.value = array[i];
            max.index = i;
        }
            
    }
    array[min.index] = max.value; 
    array[max.index] = min.value;
   

cout<<"\nMinimalniy element massiva:\n"<<min.value; //
 

    cout<<"\nMaximalniy element massiva:\n"<<max.value;
    cout<<"\n";

    int b;
 if (min.value <max.value)
 {

  for ( j = min.value; j <= max.value; j++)
  {
  b = array[j];
  array[j] = array[min.value+1-j];
  array[max.value+1-j] = b;
  }
  }
  else {
   
   b = array[min.value];
   array[min.value] = array[max.value];
   array[max.value] = b;
   for ( j = min.value; j <= max.value; j++)
  {
  b=array[j];
  array[j]=array[max.value+1-j];
  array[max.value+1-j] = b;
  }
  }
  for (j=0; j<n; j++)
  {
     
        
        cout<<"Poluchenniy massiv:\n"<<array[j] <<"\n";
    }
    cout<<endl;
    system("pause");
    return 0;        
}
}

Спасибо заранее! 

Модератор: не забываем пользоваться кнопочкой "Код"

Автор: bsa 6.3.2013, 17:42
первую часть программы у кого-то взяла? по заданию тебе необходимо поменять расположение элементов между максимальным и минимальным. А ты зачем-то меняешь только сами эти элементы... Но это еще ладно. Дальше ты перепутала index и value, в итоге, у тебя программа вообще вылетать должна.

Автор: kosmonaFFFt 8.3.2013, 15:24
Цитата(Aleksandra24 @  6.3.2013,  19:34 Найти цитируемый пост)
int array[n];


Так делать можно только для известного во время компиляции n, у тебя же оно вводится с клавиатуры...

Код

int n;
...
::std::cin >> n;
int* array = new int[n]; // Создаем динамический массив размера n.
... // Тут работаем с массивом.
delete [] array; // Освобождаем память, занятую массивом.

Автор: IValdemar 9.3.2013, 01:57
Цитата(kosmonaFFFt @ 8.3.2013,  15:24)
Цитата(Aleksandra24 @  6.3.2013,  19:34 Найти цитируемый пост)
int array[n];


Так делать можно только для известного во время компиляции n, у тебя же оно вводится с клавиатуры...


Так можно делать, начиная со стандарта С99. Такой массив называется "массив переменной длины" (variable length array).

Автор: kosmonaFFFt 9.3.2013, 07:22
Хм, и в C++  тоже выходит можно?

Автор: Dem_max 9.3.2013, 07:29
ТС у тебя не массивы С++, а массивы С
для использования массивов С++ воспользуйся std::vector 

Автор: borisbn 9.3.2013, 07:56
> Хм, и в C++  тоже выходит можно?
Нет.
2 ТС - Dem_max дал очень ценный совет

Автор: kosmonaFFFt 9.3.2013, 12:40
Цитата(borisbn @  9.3.2013,  11:56 Найти цитируемый пост)
> Хм, и в C++  тоже выходит можно?
Нет.


Ну, поскольку у ТС C++, то мое замечание корректно...

Автор: NoviceF 9.3.2013, 14:22
Цитата(kosmonaFFFt @  9.3.2013,  08:22 Найти цитируемый пост)
Хм, и в C++  тоже выходит можно? 


gcc (4.5.3 во всяком случае) по-умолчанию поддерживает и возможности c99 (вероятно, только их часть), и позволяет объявлять массивы таким образом.

Но, соответственно, это не стандарт.

Автор: IValdemar 9.3.2013, 14:33
kosmonaFFFt, получается вы правы. Если писать именно на С++ то замечание корректно. 

Автор: Фантом 9.3.2013, 15:28
Цитата(NoviceF @  9.3.2013,  15:22 Найти цитируемый пост)

Но, соответственно, это не стандарт.


Поскольку в исходном коде есть conio.h, то надо думать, что соблюдение стандартов не является для ТС приоритетом.  smile 

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