Форум программистов, компьютерный форум CyberForum.ru

Ошибка в пирамидальной сортировке - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вывести сумму полученных чисел на экран http://www.cyberforum.ru/cpp-beginners/thread813104.html
Сначала пользователь с помощью клавиатуры задает основу (8, 10 или 16), а потом целыеконстанты, записанные этой основой. Каждый раз программа выводит сумму полученных чисел наэкран. Работа заканчивается с помощью сочетания клавиш Ctrl-Z вместо следующейконстанты. Сумма выводится: ​​а) в десятичной записи б) в записи с заданной основой.
C++ Создание текста Написать программу создания текста, в первой строке которого записано целые числа m и n -строк и столбцов числовой матрицы (не более 20). Следующие m строк текста содержатпо n целых чисел (элементов матрицы), разделенных пробелами. Размеры матрицы задаютсяна клавиатуре, а ее элементы образуются с помощью генератора псевдослучайных чисел.Числа в столбце должны иметь один и тот же правый край. http://www.cyberforum.ru/cpp-beginners/thread813103.html
C++ Файл и потоки
Слово - произвольная последовательность непустых символов. Длину слов в файле ничем неограничено. Вывести все слова из текста на экран по одному на строку.
Какой прогой можно по быстрому посмотреть таблицу, создаваемую SQL файлом? C++
Тоесть как открыть sql файл и посмотреть таблицу? Варианты типа открыть ноутпадом не предлагать.
C++ Запись нескольких слов в одну строку http://www.cyberforum.ru/cpp-beginners/thread813086.html
Подскажите, пожалуйста, как записать несколько слов в одну строку....мне необходимо, чтобы высчитывалось количество гласных букв в каждом слове...а у меня только подсчитывается количество гласных в первом слове (хотя я ввожу несколько строк..) #include <iostream> #include <cstring> #include <conio.h> int main(){ int n; std::cin >> n; char *str = new char; //std::cin.getline...
C++ подсчитать количество слов В введенной строке подсчитать количество слов, что одинаково начинаются и заканчиваются (Примечание: Слова в текстовой строке отделены пробелами или группами пробелов. Я эту программу делал на Паскале, а теперь мне надо сделать ее на С++, код паскаля ниже uses crt; const Letters = ; var StringS, Symbol :string; CounterI, Number:byte; begin подробнее

Показать сообщение отдельно
anmartex
...
1701 / 1194 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
20.03.2013, 08:05     Ошибка в пирамидальной сортировке
Ошибки:
  • Строка 16: Должно быть while(m < k), т.к. k - это размерность, а m - это индекс (ваша запись для pascal-я верна, но не для C/C++)
  • Строка 38: i передаваемое функции Surface должно быть не 1-цу меньше (опять та же путаница: индекс - размер)
Рабочий код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <stdio.h>
#include <stdlib.h>
 
//Параметры: array - массив,
// i - начало подмножества (корень дерева)
// k - конец подмножества (последний лист дерева)
 
void Surface(int array[], int i, int k)
{
   int copy = array[i];
 
   int m = 2 * i + 1, j = 0;
 
   while (m < k)
   {
      if (m == (k-1))
      {
         j = m;
      }
      else if (array[m] > array[m + 1])
      {
         j = m;
      }
      else
      {
         j = m + 1;
      }
 
      if (array[j] > copy)
      {
         array[i] = array[j];
         i = j;
         m = 2 * i + 1;
      }
      else
      {
         break;
      }
   }
 
   array[i] = copy;
}
 
 
void FloidSort(int array[], int num)
{
   for (int i = num / 2; i > 0; i--)
   {
      Surface(array, i-1, num);
   }
 
   for (int k = num - 1; k > 0; k--)
   {
 
      Surface(array, 0, k);
 
      int tmp  = array[k];
      array[k] = array[0];
      array[0] = tmp;
   }
}
 
 
int main(void)
{
   int arr[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
   int size = sizeof(arr) / sizeof(*arr);
   printf("Do sort\n");
   for (int i = 0; i < size; i++)
   {
      printf("%d ", arr[i]);
   }
   printf("\n");
 
   FloidSort(arr, size);
   printf("Posle sort\n");
   for (int i = 0; i < size; i++)
   {
      printf("%d ", arr[i]);
   }
   printf("\n");
 
   system("pause");
 
   return 0 ;
}
Ошибка в пирамидальной сортировке

Бинарник + исходник: program.7z
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru