Форум: Форум C++Разное
Новые темы: 00
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сортировка методом Шелла
 
 автор: bad.76   (18.01.2007 в 22:26)   письмо автору
4.9 Кб
 
 

мне тут прогу надо написать на VC++. вообщем я нашел похожию и переделал. все работает только по заданию надо чтоб показывала количество четных и не четных чисел. я тут понамудрил но всеравно не получается. подскажите как сделать.

срр фаил получается кривой сдесь, я его прикрипил в эл. вар.

вот основ часть проги:

#include "afxwin.h"

#define IDC_Ed 100
#define IDC_But 101
#define IDI_ICO 102
//////////////////////////////////////////////////////////////////////////////////////////////
int u=0;
int A[50];
//////////////////////////////////////////////////////////////////////////////////////////////


void shell_sort(int A[], int size)
{
int i, j, r, t, incrmnt, temp;

incrmnt = size/2;
while (incrmnt > 0)
{
for (i = incrmnt; i < size; i++)
{
j = i;
temp = A[i];
while ((j >= incrmnt) && (A[j-incrmnt] > temp))
{
A[j] = A[j - incrmnt];
j = j - incrmnt;
}
A[j] = temp;
}
incrmnt /= 2;
}
if(i%2==0){i=r;}
else {i=t;}
}
//////////////////////////////////////////////////////////////////////////////////////////////
CEdit* Edit;
CEdit* Edit2;
CEdit* Edit3;
CEdit* Edit4;
//////////////////////////////////////////////////////////////////////////////////////////////
class CBut:public CButton
{
public:
CBut(){};
~CBut(){};
afx_msg void OnLButtonDown(UINT nFlags,CPoint Point);
protected:
DECLARE_MESSAGE_MAP();
};

BEGIN_MESSAGE_MAP(CBut,CButton)
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()

void CBut::OnLButtonDown(UINT nFlags,CPoint Point)
{
u=0;
Edit->SetWindowText("");
Edit2->SetWindowText("");
Edit3->SetWindowText("");
Edit4->SetWindowText("");
}
//////////////////////////////////////////////////////////////////////////////////////////////
class CEd:public CEdit
{
public:
CEd(){};
afx_msg void OnKeyDown(UINT nChar);
~CEd(){};
protected:
DECLARE_MESSAGE_MAP();
};

BEGIN_MESSAGE_MAP(CEd,CEdit)
ON_WM_KEYDOWN()
END_MESSAGE_MAP()

void CEd::OnKeyDown(UINT nChar)
{
if (nChar==VK_RETURN)
{
char st[10];
CString w(st);
this->GetWindowText(w);
int temp=atoi(w);
A[u]=temp;
u++;
shell_sort(A,u);
this->SetWindowText("");
Edit2->SetWindowText("");
CString qw;
Edit2->GetWindowText(qw);
for(int i=0;i<u;i++)
{itoa(A[i],st,10);
Edit2->SetWindowText(qw+" "+(CString)st);
Edit2->GetWindowText(qw);
}

Edit3->GetWindowText(qw);
{itoa(A[r],st,10);
Edit3->SetWindowText(qw+" "+(CString)st);
}

Edit4->GetWindowText(qw);
A[i]=A[t];
{itoa(A[t],st,10);
for(int t=0;t<u;t++)
Edit4->SetWindowText(qw+" "+(CString)st);
}
}
}

/////////////////////////////////////////////////////////////////////////////////////////////////

  Ответить  
 
 автор: cheops   (19.01.2007 в 00:14)   письмо автору
 
   для: bad.76   (18.01.2007 в 22:26)
 

Не могли бы вы прикрепить весть проект к сообщению, дело в том, что ситуацию воспроизвести по одному cpp файлу сложно (ни ресурсов, ни заголовочных файлов), а что должен делать проект не очень понятно...

  Ответить  
 
 автор: bad.76   (19.01.2007 в 00:29)   письмо автору
3.7 Кб
 
   для: cheops   (19.01.2007 в 00:14)
 

хорошо
вот задание: Масив B(22) упорядкувати по зростанню методом Шелла. Знайти додатки парних та непарних елементів.
вобщем надо отсортировать масив методом Шелла. показать четные и не четные (или количиство, я в украинском не очень)

  Ответить  
 
 автор: cheops   (19.01.2007 в 00:54)   письмо автору
 
   для: bad.76   (19.01.2007 в 00:29)
 

Метода Шелла, я так понимаю реализован уже в функции shell_sort() - напишите словами, что должена представлять впрограмма визуально, если не хотите весь проект прикрепить, чтобы его можно было вопроизвести. На форме 4 текстовые области? Что происходит при их заполнении?

  Ответить  
 
 автор: bad.76   (19.01.2007 в 01:09)   письмо автору
576.1 Кб
 
   для: cheops   (19.01.2007 в 00:54)
 

вот что получается

  Ответить  
 
 автор: bad.76   (19.01.2007 в 01:33)   письмо автору
 
   для: cheops   (19.01.2007 в 00:54)
 

я на мыло вам отаслал, тут не прикрепляется заархивированая папка чето ошибку выдает постаянно

  Ответить  
 
 автор: cheops   (19.01.2007 в 14:42)   письмо автору
 
   для: bad.76   (19.01.2007 в 01:33)
 

Да, письмо получил, но у меня под VC++ 2003 проект почему-то запускаться не хочет... У вас какая сложность - возникает какая-то ошибка или программа выдаёт не правильные резульаты?

  Ответить  
 
 автор: bad.76   (19.01.2007 в 14:58)   письмо автору
5.4 Кб
 
   для: cheops   (19.01.2007 в 14:42)
 

там вв полученом вами пакете есть экзешный фаил который запускает готовую програму.
сортировка там работает отлично но окна где должны показываться четные и не четные числа показывают все что угодно не то что надо. ошибка в написании програмы. мне просто не хватает знаний как вывисти на экран переменые r и t

вот примерно сдесь:

#include "afxwin.h"

#define IDC_Ed 100
#define IDC_But 101
#define IDI_ICO 102
//////////////////////////////////////////////////////////////////////////////////////////////
int u=0;

int A[50];
int B[50];
int C[50];
//////////////////////////////////////////////////////////////////////////////////////////////


void shell_sort(int A[], int size)
{
int i, j, incrmnt, temp,r,t;

incrmnt = size/2;
while (incrmnt > 0)
{
for (i = incrmnt; i < size; i++)
{
j = i;
temp = A[i];
while ((j >= incrmnt) && (A[j-incrmnt] > temp))
{
A[j] = A[j - incrmnt];
j = j - incrmnt;
}
A[j] = temp;
}
incrmnt /= 2;
}
if(i%2==0){i=r;} сдесь я определ чет не чет если чет то r не чет t
else {i=t;}
}
//////////////////////////////////////////////////////////////////////////////////////////////
CEdit* Edit;
CEdit* Edit2;
CEdit* Edit3;
CEdit* Edit4;
//////////////////////////////////////////////////////////////////////////////////////////////
class CBut:public CButton
{
public:
CBut(){};
~CBut(){};
afx_msg void OnLButtonDown(UINT nFlags,CPoint Point);
protected:
DECLARE_MESSAGE_MAP();
};

BEGIN_MESSAGE_MAP(CBut,CButton)
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()

void CBut::OnLButtonDown(UINT nFlags,CPoint Point)
{
u=0;
Edit->SetWindowText("");
Edit2->SetWindowText("");
Edit3->SetWindowText("");
Edit4->SetWindowText("");
}
//////////////////////////////////////////////////////////////////////////////////////////////
class CEd:public CEdit
{
public:
CEd(){};
afx_msg void OnKeyDown(UINT nChar);
~CEd(){};
protected:
DECLARE_MESSAGE_MAP();
};

BEGIN_MESSAGE_MAP(CEd,CEdit)
ON_WM_KEYDOWN()
END_MESSAGE_MAP()

void CEd::OnKeyDown(UINT nChar)
{
if (nChar==VK_RETURN)
{
char st[10];
CString w(st);
this->GetWindowText(w);
int temp=atoi(w);
A[u]=temp;
u++;
shell_sort(A,u);
this->SetWindowText("");
Edit2->SetWindowText("");
CString qw;
Edit2->GetWindowText(qw);
for(int i=0;i<u;i++)
{itoa(A[i],st,10);
Edit2->SetWindowText(qw+" "+(CString)st);
Edit2->GetWindowText(qw);
}

this->SetWindowText("");
Edit3->SetWindowText("");
Edit3->GetWindowText(qw);
for(int r=0;r<u;r++) сдесь должно по идеи довать
{itoa(B[r],st,10); команду на ввывод
Edit3->SetWindowText(qw+" "+(CString)st);
Edit3->GetWindowText(qw);
}


shell_sort(C,u);
this->SetWindowText("");
Edit4->SetWindowText("");
Edit4->GetWindowText(qw); и сдесь
for(int t=0;t<u;t++)
{itoa(C[t],st,10);
Edit4->SetWindowText(qw+" "+(CString)st);
Edit4->GetWindowText(qw);
}
}
}

/////////////////////////////////////////////////////////////////////////////////////////////////

но тут не правельно написано, а как надо я не знаю, а время поджимает

Программа была написана на языке высокого уровня С++, а точнее создавалась и компилировалась в программной оболочке Microsoft Visual C++ 6.0. Стоит отметить, что оконная реализация программы использует библиотеку классов MFC и для удачной компиляции программы требуется следующее: Во-первых, создать проект вида Win32 Application;
Во-вторых, в настройках проекта(Project->Settings или Alt-F7) на вкладке Общие (General) в подразделе Microsoft Foundation Classes выбрать Use MFC

  Ответить  
 
 автор: bad.76   (21.01.2007 в 02:49)   письмо автору
 
   для: bad.76   (19.01.2007 в 14:58)
 

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

#include "afxwin.h"

#define IDC_Ed 100
#define IDC_But 101
#define IDI_ICO 102
//////////////////////////////////////////////////////////////////////////////////////////////
int u=0;
int A[50];
int B[50];
int C[50];
//////////////////////////////////////////////////////////////////////////////////////////////


void shell_sort(int A[], int size)
{
int i, j, incrmnt, temp;

incrmnt = size/2;
while (incrmnt > 0)
{
for (i = incrmnt; i < size; i++)
{
j = i;
temp = A[i];
while ((j >= incrmnt) && (A[j-incrmnt] > temp))
{
A[j] = A[j - incrmnt];
j = j - incrmnt;
}
A[j] = temp;
}
incrmnt /= 2;

}

}


//////////////////////////////////////////////////////////////////////////////////////////////
CEdit* Edit;
CEdit* Edit2;
CEdit* Edit3;
CEdit* Edit4;
//////////////////////////////////////////////////////////////////////////////////////////////
class CBut:public CButton
{
public:
CBut(){};
~CBut(){};
afx_msg void OnLButtonDown(UINT nFlags,CPoint Point);
protected:
DECLARE_MESSAGE_MAP();
};

BEGIN_MESSAGE_MAP(CBut,CButton)
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()

void CBut::OnLButtonDown(UINT nFlags,CPoint Point)
{
u=0;
Edit->SetWindowText("");
Edit2->SetWindowText("");
Edit3->SetWindowText("");
Edit4->SetWindowText("");
}
//////////////////////////////////////////////////////////////////////////////////////////////
class CEd:public CEdit
{
public:
CEd(){};
afx_msg void OnKeyDown(UINT nChar);
~CEd(){};
protected:
DECLARE_MESSAGE_MAP();
};

BEGIN_MESSAGE_MAP(CEd,CEdit)
ON_WM_KEYDOWN()
END_MESSAGE_MAP()

void CEd::OnKeyDown(UINT nChar)
{
if (nChar==VK_RETURN)
{
char st[10];
CString w(st);
this->GetWindowText(w);
int temp=atoi(w);
A[u]=temp;
u++;
shell_sort(A,u);

int n1=0;
int n2=0;
int fori;

for (fori = 0; fori < u; fori++) {
if(A[fori]%2==0)
{ B[n1]=A[fori]; n1++;}
else
{ C[n2]=A[fori]; n2++;}
}
CString qw;

this->SetWindowText("");
Edit2->SetWindowText("");
Edit2->GetWindowText(qw);
for(int i=0;i<u;i++)
{itoa(A[i],st,10);
Edit2->SetWindowText(qw+" "+(CString)st);
Edit2->GetWindowText(qw);
}

this->SetWindowText("");
Edit3->SetWindowText("");
Edit3->GetWindowText(qw);
for( i=0;i<n1;i++)
{itoa(B[i],st,10);
Edit3->SetWindowText(qw+" "+(CString)st);
Edit3->GetWindowText(qw);
}


this->SetWindowText("");
Edit4->SetWindowText("");
Edit4->GetWindowText(qw);
for( i=0;i<n2;i++)
{itoa(C[i],st,10);
Edit4->SetWindowText(qw+" "+(CString)st);
Edit4->GetWindowText(qw);
}

}
}

/////////////////////////////////////////////////////////////////////////////////////////////////


class CMainWin:public CFrameWnd
{
public:
CMainWin();
CBrush color;
afx_msg HBRUSH OnCtlColor(CDC* pDC, CFrameWnd* pWnd, UINT nCtlColor);
DECLARE_MESSAGE_MAP()
private:
CStatic* StaticC;
CStatic* Static;
CStatic* Static2;
CStatic* Static3;
CStatic* Static4;
CStatic* Static5;
CBut* Button;
};

CMainWin::CMainWin()
{
Create(NULL,"Курсовая работа по программированию.");
MoveWindow(CRect(200,50,650,360),TRUE);

Edit = new CEd();
if (Edit!=NULL)
Edit->Create(WS_CHILD|WS_VISIBLE|WS_BORDER,CRect(15,48,150,68),this,IDC_Ed);

Edit2 = new CEd();
if (Edit2!=NULL)
Edit2->Create(WS_CHILD|WS_VISIBLE|WS_BORDER,CRect(5,90,430,110),this,IDC_Ed);

Edit3 = new CEd();
if (Edit3!=NULL)
Edit3->Create(WS_CHILD|WS_VISIBLE|WS_BORDER,CRect(5,140,430,160),this,IDC_Ed);

Edit4 = new CEd();
if (Edit4!=NULL)
Edit4->Create(WS_CHILD|WS_VISIBLE|WS_BORDER,CRect(5,190,430,210),this,IDC_Ed);

Static=new CStatic();
if (Static!=NULL)
Static->Create("Сортировщик масива.",WS_CHILD|WS_VISIBLE|SS_LEFT,CRect(100,3,410,20),this);

Static2=new CStatic();
if (Static2!=NULL)
Static2->Create("Вводим масив через Enter:",WS_CHILD|WS_VISIBLE|SS_LEFT,CRect(5,30,220,45),this);

Static3=new CStatic();
if (Static3!=NULL)
Static3->Create("Отсортированный масив:",WS_CHILD|WS_VISIBLE|SS_LEFT,CRect(5,70,450,90),this);

Static4=new CStatic();
if (Static4!=NULL)
Static4->Create("Четные:",WS_CHILD|WS_VISIBLE|SS_LEFT,CRect(5,120,450,140),this);

Static5=new CStatic();
if (Static5!=NULL)
Static5->Create("Не четные:",WS_CHILD|WS_VISIBLE|SS_LEFT,CRect(5,170,450,190),this);

StaticC=new CStatic();
if (StaticC!=NULL)
StaticC->Create("Создал студент группы КСМз-04 Калинка Алексей",WS_CHILD|WS_VISIBLE|SS_LEFT,CRect(60,255,460,270),this);

Button = new CBut();
if (Button!=NULL)
Button->Create("Сброс!",WS_CHILD|WS_VISIBLE|SS_CENTER,CRect(100,225,350,246),this,IDC_But);

color.CreateSolidBrush(RGB(255, 255, 255));
}

HBRUSH CMainWin::OnCtlColor(CDC* pDC, CFrameWnd* pWnd, UINT nCtlColor)
{
return color;
}


class CApp:public CWinApp
{
public:
BOOL InitInstance();
};

BOOL CApp::InitInstance()
{
m_pMainWnd = new CMainWin;
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
}

BEGIN_MESSAGE_MAP(CMainWin,CFrameWnd)
ON_WM_CTLCOLOR()
END_MESSAGE_MAP()

CApp theApp;

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования