Форум программистов, компьютерный форум CyberForum.ru

Некорректная работа компилятора - C++

Войти
Регистрация
Восстановить пароль
 
Abbattar
 Аватар для Abbattar
1 / 1 / 0
Регистрация: 06.04.2011
Сообщений: 21
13.05.2011, 04:53     Некорректная работа компилятора #1
простая схема для метода пузырькового упорядочения

Код
/*
 * Проект 4-1. Метод пузырькового 
 * упорядочения.
 */

#include <iostream>
#include <cstdlib>
using namespace std;

int main(){
  short int a,
	    b,
	    t,
	    size;
  short int numsArray[size];
  
  cout << "\nЭта программа упорядочивает\n"
       << "элементы одномерного массива.\n";
  
  cout << "\nВведите число элементов массива: ";
  cin  >> size;
  
  for(t = 0; t < size; t++)
    numsArray[t] = random();   // дадим элементам массива случайные значения
  
  cout << "\nМассив сгенерирован из случайных чисел:\n  ";
    for(t = 0; t < size; t++)
      cout << numsArray[t] << "  ";      // выведем массив чисел на экран
  cout << '\n';
  
  for(a = 1; a < size; a++)              // применяем метод пузырькового упорядочения
    for(b = size - 1; b >= a; b--){
      if(numsArray[b-1] > numsArray[b]){  // если не в этом порядке, то элементы меняются местами
	t = numsArray[b-1];
	numsArray[b-1] = numsArray[b];
	numsArray[b] = t;
      }
    }
  cout << "\nМассив упорядоченных элементов:\n  ";   // выведем упорядоченный массив
  for(t = 0; t < size; t++)
    cout << numsArray[t] << "  ";
  cout << "\n\n";
  return 0;
}
но после компиляции оказывается, что если число элементов массива int size >= 9, то первые 9 элементов массива равны 0, почему так получается? О_о
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Runa
 Аватар для Runa
131 / 83 / 3
Регистрация: 28.08.2009
Сообщений: 363
13.05.2011, 05:28     Некорректная работа компилятора #2
А ты уверен что программа компилируется?
C++
1
short int numsArray[size];
если создается статический массив, то size должна быть константой, а если все -таки динамический массив, то это вообще по другому делается
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
13.05.2011, 05:33     Некорректная работа компилятора #3
Потому что размер статического массива при обьявлении должен задаваться константой.

Добавлено через 1 минуту
Runa, такая конструкция прокатывает в Dev-C++.
Runa
 Аватар для Runa
131 / 83 / 3
Регистрация: 28.08.2009
Сообщений: 363
13.05.2011, 05:37     Некорректная работа компилятора #4
да и насколько я знаю функции random нет в c вместо нее используй
C++
1
numsArray[t] = rand();
Добавлено через 55 секунд
kazak, вот оно что буду знать

Добавлено через 1 минуту
kazak, может там и random() поддерживается?
Abbattar
 Аватар для Abbattar
1 / 1 / 0
Регистрация: 06.04.2011
Сообщений: 21
13.05.2011, 06:07  [ТС]     Некорректная работа компилятора #5
[QUOTE=Runa;1643634]да и насколько я знаю функции random нет в c вместо нее используй
C++
1
numsArray[t] = rand();
разницы нет, что random(), что rand(), для gcc linux /* который у меня */ компилятора всё-равно
Runa
 Аватар для Runa
131 / 83 / 3
Регистрация: 28.08.2009
Сообщений: 363
13.05.2011, 06:17     Некорректная работа компилятора #6
Цитата Сообщение от Abbattar Посмотреть сообщение
разницы нет, что random(), что rand(), для gcc linux /* который у меня */ компилятора всё-равно
ну и отлично, тогда с массивом разберитесь и будет вам счастье
Abbattar
 Аватар для Abbattar
1 / 1 / 0
Регистрация: 06.04.2011
Сообщений: 21
13.05.2011, 07:25  [ТС]     Некорректная работа компилятора #7
Цитата Сообщение от Runa Посмотреть сообщение
ну и отлично, тогда с массивом разберитесь и будет вам счастье
в учебнике собственно и написано, что ранг массива фиксированный (=10), просто хотел разобраться, почему, если мы к примеру задаём size=8 всё работает корректно, а как только size >= 9, то происходит ошибка.
mimicria
return (true);
 Аватар для mimicria
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,344
13.05.2011, 08:31     Некорректная работа компилятора #8
Потому что динамический массив создавать надо так:
C++
1
short int *numsArray = new short int[size];
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2011, 09:20     Некорректная работа компилятора
Еще ссылки по теме:

C++ Некорректная работа сложения строки
C++ Некорректная работа Map.find
C++ Некорректная работа scanf & printf
C++ Некорректная работа программы
Некорректная работа программы C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Abbattar
 Аватар для Abbattar
1 / 1 / 0
Регистрация: 06.04.2011
Сообщений: 21
13.05.2011, 09:20  [ТС]     Некорректная работа компилятора #9
Цитата Сообщение от mimicria Посмотреть сообщение
Потому что динамический массив создавать надо так:
C++
1
short int *numsArray = new short int[size];
благодарствую, тема закрыта.
Yandex
Объявления
13.05.2011, 09:20     Некорректная работа компилятора
Ответ Создать тему
Опции темы

Текущее время: 16:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru