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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] необходима блок схема, карманная сортировка с неповторяющ.ключ 
:(
    Опции темы
gilardino
  Дата 11.1.2011, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код
#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <cstdlib>
#include <iostream>
#include <cstdlib>
using namespace std;


int *Create(int n)
{//Создание массива
    if (n <= 99999 && n > 1)
    {
        int *arr = new int [n];
        for (int i = 0; i < n; i++)//Заполнение массива
            arr[i] = i;
        int k;
        for (int i = 0; i < n; i++)//Перемешивание элементов
        {
            k = rand() % n;
            int z = arr[i];
            arr[i] = arr[k];
            arr[k] = z;
        }
        return arr;
    } else return NULL;
}

void Show(int *arr, int n)
{//Вывод массива на экран
    cout << endl;
    for (int i = 0; i < n; i++)
        cout << arr[i] << " ";
    cout << endl;
}

void Copy(int *arr1, int *arr2, int n)
{//Копирование массива из arr1 в arr2
    for (int i = 0; i < n; i++)
        arr2[i] = arr1[i];
}

void PocketSortArray(int *arr, int n)
{//Сортировка с дополнительным массивом
    int moves = 0;
    int *sort = new int [n];
    for (int i = 0; i < n; i++, moves++)
        sort[arr[i]] = arr[i];
    Show(sort, n);
    cout << endl << "Сравнений = 0. Пересылок = " << moves << endl;
    delete[] sort;
}

void PocketSort(int *arr, int n)
{//Сортировка без дополнительного массива
    int moves=0, srav=0;
    for (int i = 0; i < n; i++)
        while(++srav && arr[i] != i)
        {
            int tmp = arr[i];
            arr[i] = arr[tmp];
            arr[tmp] = tmp;
            moves++;
        }
    Show(arr ,n);
    cout << endl << "Сравнений = " << srav << " Пересылок = " << moves << endl;
}

int _tmain(int argc, _TCHAR* argv[])
{//Точка входа в программу
    srand(1);
    setlocale(LC_ALL, "Russian");
    int *mas, *sortMas;
    int n = -1;
    char action;
    do
    {
        cout << endl << "1. Создать массив;"
        << endl << "2. Показать исходный массив;"
        << endl << "3. Карманная сортировка с дополнительным массивом;"
        << endl << "4. Карманная сортировка без дополнительного массива;"
        << endl << "0. Выход." << endl;
        action = getche(); //Ввод символа
        switch(action)//Выбор действия
        {
        case '1':
            if (n > 0)
            {
                delete[] mas;//Освобождение памяти
                delete[] sortMas;
            }
            cout << endl << "Введите размер массива = ";
            cin >> n;
            mas = Create(n); //Создание массива
            if (mas != NULL)
            {
                sortMas = new int [n];//Выделение памяти
                cout << endl << "Массив элементов создан." << endl;
            }
            else
            {
                cout << endl << "Невозможно создать массив." << endl;
                n = 0;
            }
            break;

        case '2':
            if (n > 0) Show(mas, n); //Вывод массива на экран
            else cout << endl << "Сначала создайте массив." << endl;
            break;

        case '3':
            if (n > 0)
            {        
                Copy(mas, sortMas, n); //Создание копии массива
                PocketSortArray(sortMas, n); //Сортировка массива
            } else cout << endl << "Сначала создайте массив." << endl;            
            break;

        case '4':
            if (n > 0)
            {
                Copy(mas, sortMas, n); //Создание копии массива
                PocketSort(sortMas, n); //Сортировка массива
            } else cout << endl << "Сначала создайте массив." << endl;
            break;

        case '0':
            break;

            default:
            cout << endl << "Выберите один из предлогаемых вариантов." << endl;
            break;
        }
    } while(action != '0');
    //cin.get();//Ожидание нажатия любой клавиши
}



Модератор: Не забываем пользоваться кнопочкой "Код"

Это сообщение отредактировал(а) bsa - 11.1.2011, 22:04
PM MAIL   Вверх
bsa
Дата 11.1.2011, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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