Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Алгоритм сортировки целочисленного массива на C, Ошибки компиляции 
V
    Опции темы
red2
Дата 13.5.2013, 07:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 13.5.2013

Репутация: нет
Всего: нет



Код

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void fillDesc(int size, int * array);
void fillAsc(int size, int * array);
void fillRand(int size, int * array);

void sortBubble(int size, int * array);
void sortInsertion(int size, int * array);
void sortSelection(int size, int * array);
void MergingSort(int size, int * array);
void displayArray(int size, int * array);



int main()
{
    int size = 0, item = 0;
    int * array;

    printf("Input size array: ");                    /*Просьба ввести размер массива*/
    scanf("%i", &size);                                  /*Вводим размер массива*/

array = malloc(size * sizeof(int));          /* Функция malloc - возвращает указатель на первый байт области памяти размером size, которая была выделена из динамически распределяемой области памяти*/

    while(!item)
    {
        printf("\nFill array:\n");                       /*Заполним массив отдним из способов*/
        printf("1 - Descending order\n");                /*По убыванию*/
        printf("2 - In ascending\n");                    /*По возрастанию*/
        printf("3 - Random\n");                          /*Случайными числами*/
        printf("Enter the item number... ");         /*Введите номер элемента*/
        scanf("%i", &item);                              /*Вводим как мы хотим заполнить массив*/

switch(item)                                     /* Взависимости какой способ мы выбрали switch выполняет  переход на ту или иную метку*/
        {
            case 1: fillDesc(size, array); break;        /*А  операторы case определяют эти самые метки,   в данном случае по убыванию*/
            case 2: fillAsc(size, array); break;          /*По возрастанию*/
            case 3: fillRand(size, array); break;          /*Случайными числами*/
            default : printf("\n Invalid item\n"); item = 0; break;         /*Проверка соответствия введенному значению*/
        }
    }

displayArray(size, array);                          /*Выводим на экран размер и массив с выбраным заполнением*/

    item = 0;
    while(!item)
    {
        printf("\n\nSorting array:\n");                      /* Сортирвка массива*/
        printf("1 - Buble sort\n");                          /* Пузырьковая. */
        printf("2 - Insertion sort\n");                          /*Сортировка вставкой..*/
        printf("3 - Selection sort\n");                              /*Сортировка выбором.*/
        printf("4 - MergingSort\n");                                 /*Сортировка слиянием*/
        printf("Enter the item number...");                        /*Введите номер элемента*/
        scanf("%i", &item);

switch(item)                                                 /* Взависимости какой способ мы выбрали switch выполняет
                                                                             переход на ту или иную метку*/
        {
            case 1: sortBubble(size, array); break;                /*пузырьковая сортировка*/
            case 2: sortInsertion(size, array); break;              /*сортировка вставкой*/
            case 3: sortSelection(size, array); break;               /*сортировка выбором*/
            case 4: MergingSort(size, array); break;                 /*сортировка слиянием*/
            default : printf("\n Invalid item\n"); item = 0; break;      /*Проверка соответствия веденному значению*/
        }
    }

    displayArray(size, array);

    free(array);

    return 0;
}

void fillDesc(int size, int * array)                     /*Метод заполнения по убыванию*/
{
    int i;
    for(i = 0; i < size; i++)
        array[i] = size - i - 1;
}

void fillAsc(int size, int * array)              /*Метод заполнения по возрастанию*/
{
    int i;
    for(i = 0; i < size; i++)
        array[i] = i;
}

void fillRand(int size, int * array)             /*Метод заполнения случайными числами*/
{
    srand(time(NULL));

    int i;
    for(i = 0; i < size; i++)
        array[i] = rand()%100;
}

void sortBubble(int size, int * array)                   /*Метод сортировки пузырьком*/
{
    int i, j, tmp;
    for(i = 0; i < size - 1; i++)
    {
        for(j = 0; j < size - i - 1; j++)
        {
            if(array[j] > array[j + 1])
            {
                tmp = array[j];
                array[j] = array[j + 1];
                array[j + 1] = tmp;
            }
        }
    }
}

void sortInsertion(int size, int * array)                    /*Метод сортировки вставкой*/
{
    int i, j, tmp;
    for (i = 1; i < size; i++)
    {
        tmp = array[i];

        j = i - 1;
        while(j >= 0 && array[j] > tmp)
        {
            array[j + 1] = array[j];
            j--;
        }

        array[j + 1] = tmp;
    }
}

void sortSelection(int size, int * array)                       /*Метод сортировки выбором*/
{
     int i, j, min, tmp;
     for (i = 0; i < size - 1; i++)
     {
        min = i;

        for(j = i + 1; j < size; j++)
        {
            if(array[j] < array[min])
                min = j;
        }
        if(min != i)
        {
            tmp = array[i];
            array[i] = array[min];
            array[min] = tmp;
        }
    }
}
void MergingSort(int size, int * array)  /*Метод сортровки слиянием */
{
  int i, j, k, t, s, min, min2;
  int * tmp = new int[size];
  k = 1;
  while (k < size){
    t = 0;
    s = 0;
    while (t+k < size){
      min = t+k;
      min2 = (t+2*k < size ? t+2*k : size);
      i = t; 
      j = min;
      for ( ; i < min && j < min2 ; s++){
        if (array[i] < array[j]) {
          tmp[s] = array[i];
          i++;
        }
        else {
          tmp[s] = array[j];
          j++;
        }
      }
      for ( ; i < min; i++, s++)
        tmp[s] = array[i];
      for ( ; j < min2; j++, s++)
        tmp[s] = array[j];
      t = min2;
    }
    k *= 2;
    for (s = 0; s < t; s++)
      array[s] = tmp[s];
  }
  delete(tmp);
}

void displayArray(int size, int * array)
{
    int i;
    printf("\nArray: ");
    for(i = 0; i < size; i++)
        printf("%i ", array[i]); }

Код вызывает такие ошибки. В чем может быть проблема?
user posted image


Это сообщение отредактировал(а) red2 - 13.5.2013, 07:44
PM MAIL   Вверх
kolesnle
Дата 13.5.2013, 08:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Упертый сишник
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 22.3.2013

Репутация: нет
Всего: нет



 В начале допиши 
Код

#include "stdafx.h"

Код

array =(int*) malloc(size * sizeof(int)); 

лучше
Код

array = new int[size]; 

но, тогда и освобождать память надо с помощью delete
PM MAIL   Вверх
red2
Дата 13.5.2013, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 13.5.2013

Репутация: нет
Всего: нет



Теперь он мне выдает, вот такую штуку.
user posted image
PM MAIL   Вверх
math64
Дата 13.5.2013, 11:52 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



Да не нужен этот #include "stdafx.h" ! Просто отключи в проекте использование прекомпилированных заголовков!
PM   Вверх
red2
Дата 13.5.2013, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 13.5.2013

Репутация: нет
Всего: нет



Всем большое спасибо за помощь! Программа заработала!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1182 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.