Создать графическое меню в консоли к готовой программе - C (СИ)

Узнай цену своей работы

Формулировка задачи:

как сделать графическое меню для этой программы:
#include "stdafx.h"
#include "iostream"
#include <stdio.h>
#include <conio.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[30] = arr[p];
    //ввод элементов
    for (i = 0; i < p; i++){
        printf("Введите  %d  элемент: ", i);
        //cout << "Введите " << i << " элемент: \n";
        scanf_s("%f", arr + i);
    }
    return 0;
}
template<class T> void SiftDown(T* const heap, int i, int const n)
{   //Просеивает элемент номер i вниз в пирамиде heap.
    //n -- размер пирамиды
 
    //Идея в том, что вычисляется максимальный элемент из трёх:
    //  1) текущий элемент
    //  2) левый потомок
    //  3) правый потомок
    //Если индекс текущего элемента не равен индексу максималь-
    //  ного, то меняю их местами, и перехожу к максимальному
 
    //Индекс максимального элемента в текущей тройке элементов:
    int nMax(i);
    //Значение текущего элемента (не меняется):
    T const value(heap[i]);
 
    while (true)
    { //Рассматривается элемент i и его потомки i*2+1 и i*2+2
        //В начале каждой итерации nMax == i и value == heap[i]
 
        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(" %f ", arr[i]);
    //cout << arr[i] << " ";
    printf("]");
    //cout << "]" << endl;
    printf("\n");
    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(" %f ", arr[i]);
 
        //cout << a[i] << " ";
    }
    printf("]");
    printf("\n");
    system("pause");
    return 1;
}
void zapis(){
 
    FILE * fo;
    fopen_s(&fo, "out.txt", "wt");
    for (i = 0; i<p; i++) {
        fprintf(fo, "|%5.2f|", arr[i]);
    }
    fclose(fo);
}
int z4ituvanie(){
    FILE *file;
    file = fopen("in.txt", "r");
    if (file == NULL){
        printf("error");
        system("pause\n");
    }
    fscanf(file, "%d", &p);
    printf("n=%d\n", p);
    for (i = 0; i<p; i++){
        fscanf(file, "%f", &arr[i]);
        printf("%f\n", arr[i]);
    }
    fclose(file);
    system("pause");
    return 0;
}
void main()
{
menu:
    setlocale(LC_ALL, "Russian");
    system("cls");
    printf("-----Сделайте выбор-----\a\n");
    printf("1. Ввод массива с клавиатуры\n");
    printf("2.считывание массива\n");
    printf("3. Сортировка массива пирамидальным методом\n");
    printf("4. Сортировка массива методом выбора\n");
    printf("5. Записать результат в файл (out.txt)\n");
    printf("6. Выход из программы\n");
    printf("Ваш выбор: ");
    int input;
    scanf_s("%d", &input);
    switch (input) {
    case 1:
        system("cls");
        printf("1. Ввод массива с клавиатуры\n\a");
        vvod();
        goto menu;
        break;
    case 2:
 
        system("cls");
        printf("2. Считывание массива\n\a");
        z4ituvanie();
        goto menu;
        break;
 
    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");
        printf("5. Записать результат в файл (output.txt)\n\a");
        zapis();
        goto menu;
        break;
    case 6:
        printf("До свидания");
        break;

    default:
        printf("Неправильный ввод.\n");

    }
}

Решение задачи: «Создать графическое меню в консоли к готовой программе»

textual
Листинг программы
void ShowMenu(int iItem)
{
    system("cls");
    printf("\t***MENU***\n");
    printf("%s1 - Ввод массива с клавиатуры\n", iItem == 1 ? ">" : " ");
    printf("%s2 - Считывание массива\n", iItem == 2 ? ">" : " ");
    printf("%s3 - Сортировка массива пирамидальным методом\n", iItem == 3 ? ">" : " ");
    printf("%s4 - Сортировка массива методом выбора\n", iItem == 4 ? ">" : " ");
    printf("%s5 - Записать результат в файл (output.txt)\n", iItem == 5 ? ">" : " ");
    printf("%s  - EXIT\n", "ESC");
}
 
int main()
{
    setlocale(LC_ALL, "");
    int iItem = 1;//Отвечает какой пункт меню активен в данный момент
    int nLast = 5;//Отвечает какой индекс у последнего пункта меню
    BOOL bRUN = TRUE;
    ShowMenu(iItem);
    while (bRUN)
    {
        if (GetAsyncKeyState(VK_UP))
            if (GetAsyncKeyState(VK_UP))
            {
                if (0 < iItem - 1)
                    iItem = iItem - 1;
                else
                    iItem = nLast;
                ShowMenu(iItem);
            }
        if (GetAsyncKeyState(VK_DOWN))
            if (GetAsyncKeyState(VK_DOWN))
            {
                if (iItem < nLast)
                    iItem = iItem + 1;
                else
                    iItem = 1;
                ShowMenu(iItem);
            }
        if (GetAsyncKeyState(VK_RETURN))
            if (GetAsyncKeyState(VK_RETURN))
            {
                ShowMenu(iItem);
                switch (iItem)
                {
                case 1:
                    printf("1. Ввод массива с клавиатуры\n\a");
                    vvod();
                    break;
                case 2:
                    printf("2. Считывание массива\n\a");
                    z4ituvanie();
                    break;
                case 3:
                    printf("3. Сортировка массива пирамидальным методом\n\a");
                    piramid();
                    break;
                case 4:
                    printf("4. Сортировка массива методом выбора\n\a");
                    Vibor();
                    break;
                case 5:
                    printf("5. Записать результат в файл (output.txt)\n\a");
                    zapis();
                    break;
                }
            }
        if (GetAsyncKeyState(VK_ESCAPE))
            bRUN = FALSE;
    
        Sleep(100);
        
    }
    return 0;
}

Объяснение кода листинга программы

  1. Ввод массива с клавиатуры
  2. Считывание массива
  3. Сортировка массива пирамидальным методом
  4. Сортировка массива методом выбора
  5. Записать результат в файл (output.txt)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.867 из 5
Похожие ответы