Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

алгоритм Merge_Sort

42K
10 ноября 2008 года
arman47
4 / / 30.10.2008
Написал программу в Microsoft Visual Studio 2005. Вот она

#include "stdafx.h"
#include <math.h>

int array[10] = {1, 4, 6, 2, 3, 8, 9, 11, 12, 13};

void MERGE(int p,int q, int r)
{
int array_right[10];
int array_left[10];

int isize1 = 0;
for (int i=p; i<=q; i++)
array_left[isize1++] = array;

int isize2 = 0;
for (int i=q+1; i<=r; i++)
array_right[isize2++] = array;

int icur1 = 0;
int icur2 = 0;

for (int i=r; i>=p; i--)
{
icur1 = isize1-1;
icur2 = isize2-1;
if(icur1>=0 && icur2>=0)
{
if (array_left[icur1]>array_right[icur2])
{
array = array_left[icur1];
isize1--;
}else
{
array = array_right[icur2];
isize2--;
}
continue;
}else
if (icur1>=0 && icur2<0)
{
array = array_left[icur1];
isize1--;
continue;
}else
if (icur2>=0 && icur1<0)
{
array = array_right[icur2];
isize2--;
continue;
}
}
}

void MERGE_SORT(int p, int r)
{
if (p<r)
{
int q = floor((p+r)/2.0);
MERGE_SORT(p, q);
MERGE_SORT(q+1, r);
MERGE(p, q, r);
}
}

int_tmain(int argc, _TCHAR* argv[])
{
int ind = 9;

MERGE_SORT(0, ind);
for (int i=0; i<=ind; i++)
printf("%d\n", array);
return 0;

}
Она не компилируется и пишет 'printf': identifier not found
и там где скобка перед int ind = 9 пишет: error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
288
10 ноября 2008 года
nikitozz
1.2K / / 09.03.2007
Цитата: arman47

Она не компилируется и пишет 'printf': identifier not found



После #include <math.h> добавьте следующий код

 
Код:
#include <stdio.h>


Цитата: arman47

и там где скобка перед int ind = 9 пишет: error C4430: missing type specifier - int assumed. Note: C++ does not support default-int



 
Код:
int _tmain(int argc, _TCHAR* argv[])


Между int и _tmain не хватает пробела.

P.S. Оформляйте код как следует.
397
10 ноября 2008 года
SergPas
527 / / 03.02.2007
Функция printf объявлена в библиотеке <stdio.h>, поэтому пишем:
 
Код:
#include <stdio.h>
Цитата:
 
Код:
for (int i=p; i<=q; i++)
         array_left[isize1++] = array;
for (int i=q+1; i<=r; i++)
         array_right[isize2++] = array;
...

Ненужно по "сто" раз объявлять одну и ту же переменную: цикл - это не функция, в которой время жизни переменной заканчивается на выходе из тела этой функции. Все такие "переобъявления" жестко пресекаются компилятором:

Цитата:
'i' : redefinition; multiple initialization

Ну а вот эта строка меня вообще "убила":

Цитата:
 
Код:
int_tmain(int argc, _TCHAR* argv[])

Здесь вообще забыли про синтаксис C++...
Нужно писать так:

 
Код:
int main()
{
    int ind = 9;
    MERGE_SORT(0, ind);
    for (int i=0; i<=ind; i++)
        printf("%d\n", array);
    return 0;
}
Параметры в функцию "main" в Вашем случае передавать нет необходимости...
Вот листинг исправленной программы:
Код:
#include <stdio.h>
#include <math.h>

int array[10] = {1, 4, 6, 2, 3, 8, 9, 11, 12, 13};

void MERGE(int p,int q, int r)
{
    int array_right[10];
    int array_left[10];
   
    int isize1 = 0;
    for (int i=p; i<=q; i++)
        array_left[isize1++] = array;

    int isize2 = 0;
    for (i=q+1; i<=r; i++)
        array_right[isize2++] = array;

    int icur1 = 0;
    int icur2 = 0;

    for (i=r; i>=p; i--)
        {
        icur1 = isize1-1;
        icur2 = isize2-1;
        if(icur1>=0 && icur2>=0)
            {
            if (array_left[icur1]>array_right[icur2])
                {
                array = array_left[icur1];
                isize1--;
                }else
                    {
                    array = array_right[icur2];
                    isize2--;
                    }
                continue;
            }else
                if (icur1>=0 && icur2<0)
                    {
                    array = array_left[icur1];
                    isize1--;
                    continue;
                    }else
                        if (icur2>=0 && icur1<0)
                            {
                            array = array_right[icur2];
                            isize2--;
                            continue;
                            }
        }
}

void MERGE_SORT(int p, int r)
{
    if (p<r)
        {
        int q = floor((p+r)/2.0);
        MERGE_SORT(p, q);
        MERGE_SORT(q+1, r);
        MERGE(p, q, r);
        }
}

int main()
{
    int ind = 9;
    MERGE_SORT(0, ind);
    for (int i=0; i<=ind; i++)
        printf("%d\n", array);
    return 0;
}
P.S. Оформляйте посты в соответствии с правилами их оформления, если хотите, чтобы Ваша тема не осталась нерассмотренной!
42K
10 ноября 2008 года
arman47
4 / / 30.10.2008
include <stdio.h>
#include <math.h>

int array[10] = {1, 4, 6, 2, 3, 8, 9, 11, 12, 13};

void MERGE(int p,int q, int r)
{
int array_right[10];
int array_left[10];

int isize1 = 0;
for (int i=p; i<=q; i++)
array_left[isize1++] = array;

int isize2 = 0;
for (i=q+1; i<=r; i++)
array_right[isize2++] = array;

int icur1 = 0;
int icur2 = 0;

for (i=r; i>=p; i--)
{
icur1 = isize1-1;
icur2 = isize2-1;
if(icur1>=0 && icur2>=0)
{
if (array_left[icur1]>array_right[icur2])
{
array = array_left[icur1];
isize1--;
}else
{
array = array_right[icur2];
isize2--;
}
continue;
}else
if (icur1>=0 && icur2<0)
{
array = array_left[icur1];
isize1--;
continue;
}else
if (icur2>=0 && icur1<0)
{
array = array_right[icur2];
isize2--;
continue;
}
}
}

void MERGE_SORT(int p, int r)
{
if (p<r)
{
int q = floor((p+r)/2.0);
MERGE_SORT(p, q);
MERGE_SORT(q+1, r);
MERGE(p, q, r);
}
}

int main()
{
int ind = 9;
MERGE_SORT(0, ind);
for (int i=0; i<=ind; i++)
printf("%d\n", array);
return 0;

Всё равно не компилируется. Выдает такую хуйню: fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source?
Как только добавил #include "stdafx.h" он уже пишет error C2065: 'i' : undeclared identifier
288
10 ноября 2008 года
nikitozz
1.2K / / 09.03.2007
Цитата: SergPas
Ненужно по "сто" раз объявлять одну и ту же переменную: цикл - это не функция, в которой время жизни переменной заканчивается на выходе из тела этой функции. Все такие "переобъявления" жестко пресекаются компилятором:



Это кстати регулируется опцией компилятора Force Conformance In For Loop Scope.

А автора топика я предлагаю отправить читать книги по С++ (ну или хотя бы в раздел "Я начинающий...") и изучать английский. И еще и нарушение дать за мат.

14
10 ноября 2008 года
Phodopus
3.3K / / 19.06.2008
Слушайте, народ.. Вот я смотрю все советуют добавлять стандартные инклюды прямо в заголовочные файлы проекта. А почему не в stdafx.h?! Просто недавно разбирался с этой темой и вроде выяснил что precompiled headers именно для этого и созданы? Тем более видно что у автора они используются. Прояните, плиз, ситуацию!
42K
10 ноября 2008 года
arman47
4 / / 30.10.2008
[QUOTE=nikitozz;
А автора топика я предлагаю отправить читать книги по С++ (ну или хотя бы в раздел "Я начинающий...") и изучать английский. И еще и нарушение дать за мат.[/QUOTE]

Там и так написано что я начинающий. А когда я спрашиваю надо отвечать
288
10 ноября 2008 года
nikitozz
1.2K / / 09.03.2007
Цитата: Phodopus
Слушайте, народ.. Вот я смотрю все советуют добавлять стандартные инклюды прямо в заголовочные файлы проекта. А почему не в stdafx.h?! Просто недавно разбирался с этой темой и вроде выяснил что precompiled headers именно для этого и созданы? Тем более видно что у автора они используются. Прояните, плиз, ситуацию!



Вообще-то да. Они для этого и созданы.

Цитата:

Q: Для чего это сделано.
A: Все это сделано для ускорения компиляции проектов и не более того. Из-за того, что объем части общих .h-файлов превосходит все разумные пределы (например windows.h, цепляющий ещё десяток win*.h), и компилировать все эти заголовочники для каждого source-файлы просто накладно. Поэтому один раз генерится PCH-файл, а потом он (PCH) используется. Ускорение, кстати, в десятки раз, особенно заметное при работе с ATL/MFC проектами.


Просто так чуть наглядней показывается где ошибка, когда включаешь файл напрямую.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог