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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2012, 23:35   #1
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
Вопрос Не компилируется в Visual C++

Доброе время суток. Почему-то у меня не компилируется код
Код:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>
#include <math.h>

void sortShell(int *nums, int n)
{
    int i, j, k;
    int swap;
    int move, comp;

    int m;
    m = (int)ceil(log2(n) - 1);

    int h[m];
    move = comp = 0;
    for (k = 0; k < m; k++) {
        
        if (!k)
            h[k] = 1;
        else
            h[k] = h[k-1] * 2 + 1;  
        for (i = h[k]; i < n; i++) {
            swap = nums[i];
            move++;

            j = i - k;
            comp++;
            
            while ((j >= 0) && (swap < nums[j])) {
                nums[j + k] = nums[j];
                j = j - k;
                move++;
                comp++;
            }
            
            nums[j + k] = swap;
            move++;
        }
    }

    printf("\n Сортировка Шелла*\n");
    printf("C = %d, M = %d, C + M = %d\n", comp, move, (comp + move));
}
Подскажите в чем может быть причина. Выдает ошибку на этих 2-х строках.
Код:
 m = (int)ceil(log2(n) - 1);

    int h[m];
На Dev C++ все отлично компилируется. В чем может быть причина? Может ошибка в коде?
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 13.12.2012, 00:19   #2
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

Код:
int h[m]; // нельзя только если m имеет статус const
нужно

Код:
int *h = new int[m]
в конце, когда он не нужен

Код:
delete[] h;
Если помог, тут весы есть , Вам не сложно, а мне приятно.
Perchik71 вне форума Ответить с цитированием
Старый 13.12.2012, 01:02   #3
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Где именно в коде должна быть строка
Код:
int *h = new int[m]
Не сталкивался с таким синтаксисом
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 13.12.2012, 01:15   #4
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

Код:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>
#include <math.h>

void sortShell(int *nums, int n)
{
    int i, j, k;
    int swap;
    int move, comp;

    int m = (int)ceil(log2(n) - 1);// я сделаю так ибо так можно мс.

    //int h[m]; <-- нельзя ибо компилятор не знает и статическим массив   создать не может
int *h = new int[m]; // выделяю память под динамический массив
    move = comp = 0;
    for (k = 0; k < m; k++) {
        
        if (!k)
            h[k] = 1;
        else
            h[k] = h[k-1] * 2 + 1;  
        for (i = h[k]; i < n; i++) {
            swap = nums[i];
            move++;

            j = i - k;
            comp++;
            
            while ((j >= 0) && (swap < nums[j])) {
                nums[j + k] = nums[j];
                j = j - k;
                move++;
                comp++;
            }
            
            nums[j + k] = swap;
            move++;
        }
    }

    printf("\n Сортировка Шелла*\n");
    printf("C = %d, M = %d, C + M = %d\n", comp, move, (comp + move));

delete[] h;  // после new должно быть delete поскольку это массив то [].
}
у меня вопрос, а что делает ceil()????
Если помог, тут весы есть , Вам не сложно, а мне приятно.
Perchik71 вне форума Ответить с цитированием
Старый 13.12.2012, 01:24   #5
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Все равно не компилируется. Пишет не объявленный идентификатор new и т.д.
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 13.12.2012, 01:27   #6
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

Цитата:
Сообщение от Bugrimov Посмотреть сообщение
Все равно не компилируется. Пишет не объявленный идентификатор new и т.д.
быть такого не может... new, delete ключевые слова в мс..
смотри... может где ; забыл или скобку...

вот смотри в мсдн
справка в майкрософт
Если помог, тут весы есть , Вам не сложно, а мне приятно.

Последний раз редактировалось Stilet; 13.12.2012 в 13:50.
Perchik71 вне форума Ответить с цитированием
Старый 13.12.2012, 01:33   #7
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

У меня просто Си, а не С++. С этим не может быть связано
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 13.12.2012, 01:45   #8
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

Цитата:
Сообщение от Bugrimov Посмотреть сообщение
У меня просто Си, а не С++. С этим не может быть связано
Ну так и пиши Visual C

короче malloc, free

туда же...

Код:
int *h = (int*)malloc(sizeof(int) * m);// выделить

free(h);//удалить
Если помог, тут весы есть , Вам не сложно, а мне приятно.
Perchik71 вне форума Ответить с цитированием
Старый 13.12.2012, 08:49   #9
Murashov
Форумчанин
 
Аватар для Murashov
 
Регистрация: 30.10.2012
Сообщений: 121
По умолчанию

а не проще const int m... если человеку не нужен динамический массив?
Murashov вне форума Ответить с цитированием
Старый 13.12.2012, 12:54   #10
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

Цитата:
Сообщение от Murashov Посмотреть сообщение
а не проще const int m... если человеку не нужен динамический массив?
я так понимаю m имеет значение результата функции ceil()
оно не может быть константой.... ни в каком образе.
Если помог, тут весы есть , Вам не сложно, а мне приятно.
Perchik71 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В C++ Builder компилируется, а в Visual C++ 2010. В чем может быть проблема? Bags Общие вопросы C/C++ 6 02.12.2012 00:25
Visual studio 2005. Не компилируется программа. Xramoi Общие вопросы C/C++ 8 01.02.2012 09:03
Visual Studio не компилируется программа. Ошибка в iostream.h (no such file or directory). В чем проблема? Mubat Visual C++ 2 19.10.2011 20:41
не компилируется норм (Visual c++) adwaer Visual C++ 4 19.03.2009 01:42