алгоритм Merge_Sort
#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
Цитата: 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. Оформляйте код как следует.
Код:
#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;
...
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;
}
{
int ind = 9;
MERGE_SORT(0, ind);
for (int i=0; i<=ind; i++)
printf("%d\n", array);
return 0;
}
Вот листинг исправленной программы:
Код:
#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;
}
#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;
}
#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
Цитата: SergPas
Ненужно по "сто" раз объявлять одну и ту же переменную: цикл - это не функция, в которой время жизни переменной заканчивается на выходе из тела этой функции. Все такие "переобъявления" жестко пресекаются компилятором:
Это кстати регулируется опцией компилятора Force Conformance In For Loop Scope.
А автора топика я предлагаю отправить читать книги по С++ (ну или хотя бы в раздел "Я начинающий...") и изучать английский. И еще и нарушение дать за мат.
Слушайте, народ.. Вот я смотрю все советуют добавлять стандартные инклюды прямо в заголовочные файлы проекта. А почему не в stdafx.h?! Просто недавно разбирался с этой темой и вроде выяснил что precompiled headers именно для этого и созданы? Тем более видно что у автора они используются. Прояните, плиз, ситуацию!
А автора топика я предлагаю отправить читать книги по С++ (ну или хотя бы в раздел "Я начинающий...") и изучать английский. И еще и нарушение дать за мат.[/QUOTE]
Там и так написано что я начинающий. А когда я спрашиваю надо отвечать
Цитата: Phodopus
Слушайте, народ.. Вот я смотрю все советуют добавлять стандартные инклюды прямо в заголовочные файлы проекта. А почему не в stdafx.h?! Просто недавно разбирался с этой темой и вроде выяснил что precompiled headers именно для этого и созданы? Тем более видно что у автора они используются. Прояните, плиз, ситуацию!
Вообще-то да. Они для этого и созданы.
Цитата:
Q: Для чего это сделано.
A: Все это сделано для ускорения компиляции проектов и не более того. Из-за того, что объем части общих .h-файлов превосходит все разумные пределы (например windows.h, цепляющий ещё десяток win*.h), и компилировать все эти заголовочники для каждого source-файлы просто накладно. Поэтому один раз генерится PCH-файл, а потом он (PCH) используется. Ускорение, кстати, в десятки раз, особенно заметное при работе с ATL/MFC проектами.
Просто так чуть наглядней показывается где ошибка, когда включаешь файл напрямую.