2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Программирование С++, не могу исправить ошибку
Сообщение25.03.2017, 12:22 
Задание. На вход подаютя числа через пробел, с помощью сортировки слиянием упорядочить их и вывести на экран.

Код:
#include <iostream>
using namespace std;
void main()
{
   int n;
   int* a = (int*)malloc(sizeof(n) * n);
   for (int i = 0; i < n; i++)
   {
      cin >> a[i];

   }
   merge_sort(a, n);

   for (int d = 0; d < n; d++)
   {
      cout << a[d];

   }
}
void merge_sort(int*a, int start, int end, int mid)
{
   mid = (start + end) / 2;
   if ((end - start) <= 1);
   return;
   else
      merge_sort(a, start, mid);
       merge_sort(a, mid + 1, end);
       merge(a, start, mid, end);

}
void merge(int start, int mid, int end, int *a1)
{
   int p1 = start;//позиция чтения из 1 последновательности
   int p2 = mid + 1;//позиция чтения из второй последовательности
   int n;
   int*result = &a1[n];
   while (start + p1 < mid) && (mid + p2 < end);
      if (a1[start + p1] < a1[mid + p2])
         result[p1 + p2] = a1[start + p1];
      p1++;
      else
      {
         result[p1 + p2] = a1[mid + p2];
      }
   p2++;

   while (start + p1 < mid)
      result[p1 + p2] = a1[start + p1];
   p1++;

   while (mid + p2 < end)
      result[p1 + p2] = a1[mid + p2];
   p2++;

   for (int i = 0; p1 + p2;i++)
      a1[start + i] = result[i];


}

 
 
 
 Re: Программирование С++, не могу исправить ошибку
Сообщение25.03.2017, 12:28 
Аватара пользователя
А где Вы устанавливаете размер массива?

 
 
 
 Re: Программирование С++, не могу исправить ошибку
Сообщение25.03.2017, 12:31 
ну через маллок,разве нет? мы же не знаем размерность, сколько угодно может быть чисел

 
 
 
 Re: Программирование С++, не могу исправить ошибку
Сообщение25.03.2017, 12:33 
Определитесь, сколько у вас все-таки аргументов у функции merge_sort, два, три или четыре. И еще лишняя точка с запятой после if ((end - start) <= 1).

 
 
 
 Re: Программирование С++, не могу исправить ошибку
Сообщение25.03.2017, 12:35 
Код:
#include <iostream>
using namespace std;
void main()
{
   int n;
   int* a = (int*)malloc(sizeof(n) * n);
   for (int i = 0; i < n; i++)
   {
      cin >> a[i];

   }
   int h = 0;
   merge_sort(a,h, n);

   for (int d = 0; d < n; d++)
   {
      cout << a[d];

   }
}
void merge_sort(int*a, int start, int end)
{
   int mid = (start + end) / 2;
   if ((end - start) > 1)
   {
      merge_sort(a, start, mid);
      merge_sort(a, mid + 1, end);
      merge(start, mid, end, a);
   }
}
void merge(int start, int mid, int end, int *a1)
{
   int p1 = start;//позиция чтения из 1 последновательности
   int p2 = mid + 1;//позиция чтения из второй последовательности
   int n;
   int*result = &a1[n];
   while( (start + p1 < mid) && (mid + p2 < end));
   if (a1[start + p1] < a1[mid + p2]){
      result[p1 + p2] = a1[start + p1];
      p1++;
   }
      else
      {
         result[p1 + p2] = a1[mid + p2];
      }
      p2++;

   while (start + p1 < mid)
      result[p1 + p2] = a1[start + p1];
   p1++;

   while (mid + p2 < end)
      result[p1 + p2] = a1[mid + p2];
   p2++;

   for (int i = 0; p1 + p2;i++)
      a1[start + i] = result[i];


}





более исправленный код, без синтаксических ошибок, только мердж и мерджсорт не работают

 
 
 
 Re: Программирование С++, не могу исправить ошибку
Сообщение25.03.2017, 12:47 
nedoprogrammist в сообщении #1203342 писал(а):
только мердж и мерджсорт не работают
Ещё и ещё раз: не бывает, чтобы программы не работали. Программы работают всегда. Иногда, правда, не так, как вам бы того хотелось.
Итак, как именно ведёт себя ваша программа?

 
 
 
 Re: Программирование С++, не могу исправить ошибку
Сообщение25.03.2017, 12:49 
1>------ Build started: Project: ConsoleApplication20, Configuration: Debug Win32 ------
1> Source.cpp
1>c:\users\user\documents\visual studio 2013\projects\consoleapplication20\consoleapplication20\source.cpp(14): error C3861: 'merge_sort': identifier not found
1>c:\users\user\documents\visual studio 2013\projects\consoleapplication20\consoleapplication20\source.cpp(29): error C3861: 'merge': identifier not found
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
консоль не выводит, ничего не подчеркивает как ошибку, возможно дело в переменных, не могу понять

 
 
 
 Posted automatically
Сообщение25.03.2017, 12:53 
Аватара пользователя
 i  Тема перемещена из форума «Помогите решить / разобраться (Ф)» в форум «Программирование»
Причина переноса: не указана.

nedoprogrammist, для оформления кода используйте теги code и tt. Посмотрите на свой стартовый пост в теге code

 
 
 
 Re: Программирование С++, не могу исправить ошибку
Сообщение25.03.2017, 13:10 
Аватара пользователя
функция должна быть объявлена перед тем, как она используется.

 
 
 
 Re: Программирование С++, не могу исправить ошибку
Сообщение25.03.2017, 13:10 
#include <malloc>
#include <iostream>
using namespace std;
void merge(int start, int mid, int end, int *a1)
{
int p1 = start;//позиция чтения из 1 последновательности
int p2 = mid + 1;//позиция чтения из второй последовательности
int n;
int*result = &a1[n];
while ((start + p1 < mid) && (mid + p2 < end));
if (a1[start + p1] < a1[mid + p2]){
result[p1 + p2] = a1[start + p1];
p1++;
}
else
{
result[p1 + p2] = a1[mid + p2];
}
p2++;

while (start + p1 < mid)
result[p1 + p2] = a1[start + p1];
p1++;

while (mid + p2 < end)
result[p1 + p2] = a1[mid + p2];
p2++;

for (int i = 0; p1 + p2; i++)
a1[start + i] = result[i];


}
void merge_sort(int*a, int start, int end)
{
int mid = (start + end) / 2;
if ((end - start) > 1)
{
merge_sort(a, start, mid);
merge_sort(a, mid + 1, end);
merge(start, mid, end, a);
}
}

void main()
{
int n;
int* a = (int*)malloc(sizeof(n) * n);
for (int i = 0; i < n; i++)
{
cin >> a[i];

}
int h = 0;
merge_sort(a, h, n);

for (int d = 0; d < n; d++)
{
cout << a[d];

}
}



Еще исправила, теперь вижуал вообще ломается и не хочет запускать. можете исправить???

 
 
 
 Re: Программирование С++, не могу исправить ошибку
Сообщение25.03.2017, 13:13 
nedoprogrammist, для оформления кода используйте тэги [code] или [syntax]

 
 
 
 Posted automatically
Сообщение25.03.2017, 13:14 
 i  Тема перемещена из форума «Программирование» в форум «Карантин»
по следующим причинам:

- не оформлен код (см. topic26708.html );

Исправьте все Ваши ошибки и сообщите об этом в теме Сообщение в карантине исправлено.
Настоятельно рекомендуется ознакомиться с темами Что такое карантин и что нужно делать, чтобы там оказаться и Правила научного форума.

 
 
 [ Сообщений: 12 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group