Создать графическое меню в консоли к готовой программе - 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; }
Объяснение кода листинга программы
- Ввод массива с клавиатуры
- Считывание массива
- Сортировка массива пирамидальным методом
- Сортировка массива методом выбора
- Записать результат в файл (output.txt)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д