Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2015, 16:34   #1
Danteeee
 
Регистрация: 20.11.2014
Сообщений: 7
По умолчанию Корректировка кода

Как мне сделать чтобы то что считывалось в s4ituvanie() можно было отсортировать в Vibor() и piramid() ?
Код:
#include "stdafx.h"
#include "iostream"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
 
int p; //количество элементов
int i;
int j;
float temp;
float arr[100];
int vvod(){
 
    printf("Сколько элементов будет в массиве? ");
    //cout << "Введите размер массива" << endl;
 
    scanf_s("%d", &p);
    //cin >> p;
 
    arr[100] = arr[p];
    //ввод элементов
    for (i = 0; i < p; i++){
        printf("Введите  %d  элемент: ", i);
        //cout << "Введите " << i << " элемент: \n";
        scanf_s("%f", arr + i);
    }
    return 1;
}
template<class T> void SiftDown(T* const heap, int i, int const n)
{   
    int nMax(i);
   
    T const value(heap[i]);
 
    while (true)
    { 
 
        int childN(i * 2 + 1); //Индекс левого потомка
        //Если есть левый потомок и он больше текущего элемента,
        if ((childN < n) && (heap[childN] > value))
            nMax = childN; //  то он считается максимальным
 
        ++childN; //Индекс правого потомка
        //Если есть правый потомок и он больше максимального,
        if ((childN < n) && (heap[childN] > heap[nMax]))
            nMax = childN; //  то он считается максимальным
 
        //Если текущий элемент является максимальным из трёх
        //  (т.е. если он больше своих детей), то конец:
        if (nMax == i) break;
 
        //Меняю местами текущий элемент с максимальным:
        heap[i] = heap[nMax]; heap[nMax] = value;
        //  при этом значение value будет в ячейке nMax,
        //  поэтому в начале следующей итерации значение value
        //  правильно, т.к. мы переходим именно к этой ячейке
 
        //Переходим к изменившемуся потомку
        i = nMax;
 
    };
}
template<class T> void HeapSort(T* const heap, int n)
{   //Пирамидальная сортировка массива heap.
    //  n -- размер массива
 
    //Этап 1: построение пирамиды из массива
    for (int i(n / 2 - 1); i >= 0; --i) SiftDown(heap, i, n);
 
    //Этап 2: сортировка с помощью пирамиды.
    //  Здесь под «n» понимается размер пирамиды
    while (n > 1) //Пока в пирамиде больше одного элемента
    {
        --n; //Отделяю последний элемент
 
        //Меняю местами корневой элемент и отделённый:
        T const firstElem(heap[0]);
        heap[0] = heap[n];
        heap[n] = firstElem;
 
        //Просеиваю новый корневой элемент:
        SiftDown(heap, 0, n);
    }
}
void piramid() {
 
    HeapSort(arr, p);
    printf("[");
    //cout << "[ ";
    for (int i = 0; i < p; ++i)
        printf(" %g ", arr[i]);
    //cout << arr[i] << " ";
    printf("]");
    //cout << "]" << endl;
 
    system("pause");
 
}
 
int Vibor(){
    for (i = 0; i < p; i++)
 
    {
        for (j = p - 1; j >= i; j--)
            if (arr[j - 1] > arr[j])
            {
                temp = arr[j - 1];
                arr[j - 1] = arr[j];
                arr[j] = temp;
            }
    }
    printf("[");
    for (i = 0; i < p; i++)
    {
        printf(" %g ", arr[i]);
 
        //cout << a[i] << " ";
    }
    printf("]");
    printf("\n");
    system("pause");
    return 1;
}
 
void s4ituvanie(){
    FILE *fp;
    fp=fopen("in.txt", "r");
    if (fp != NULL)
    {
 
        fscanf(fp, "%d", p);
        for (i = 0; i < p; ++i){
 
            fscanf(fp, "%f", arr[i]);
        }
        fclose(fp);
    }
    else{
        printf("невозможно открыть файл");
    }
 
}
 
int _tmain(int argc, _TCHAR* argv[])
{
menu:
    setlocale(LC_ALL, "Russian");
    system("cls");
    printf("-----Сделайте выбор-----\a\n");
    printf("1. Ввод массива с клавиатуры\n");
    printf("2. Считывание массива с файла(input.txt)\n");
    printf("3. Сортировка массива пирамидальным методом\n");
    printf("4. Сортировка массива методом выбора\n");
    printf("5. Записать результат в файл (output.txt)\n");
    printf("6. Выход из программы\n");
    printf("Ваш выбор: ");
    int input;
    scanf_s("%d", &input);
    switch (input) {
    case 1:
        system("cls");
        printf("Ввод массива с клавиатуры\n\a");
        vvod();
        goto menu;
        break;
    case 2:
    {
        system("cls");
        printf("2. Считывание массива с файла(input.txt)\n\a");
        s4ituvanie();
        goto menu;
    }
    case 3:
    {system("cls");
    printf("3. Сортировка массива пирамидальным методом\n\a");
    piramid();
    goto menu;
    break;
    }
    case 4:
    {system("cls");
    printf("4. Сортировка массива методом выбора\n\a");
    Vibor();
    goto menu;
    break;
    }
    /*case 5:{system("cls");
    }
    */
    case 6: {
        printf("До свидания");
        break;
    }
 
    default:
        printf("Неправильный ввод.\n");
    }
    return 0;
}
Danteeee вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Корректировка кода для конвертера Владилена Помощь студентам 0 18.12.2011 00:17
Корректировка кода Benjus Общие вопросы C/C++ 0 08.12.2011 01:07
С++ нужна корректировка\доработка кода. Akmall Помощь студентам 1 19.12.2010 16:34
С++ нужна корректировка\доработка кода. Akmall Помощь студентам 3 10.12.2010 22:51
Обучение распознаванию программы. Корректировка кода. artemavd Общие вопросы Delphi 0 25.06.2010 20:28