Объединить два меню пункта в один - C (СИ)
Формулировка задачи:
Здравствуйте! Столкнулся с такой проблемой - есть меню и в нём есть два пункта, которые надо обьеденить в один. Эти два пункта выполняют одинаковые функции, только один написан без указателей, а второй с указателями. Надо обьеденить их в один пункт, чтобы вводились числа но ответ выдавал два раза- один ответ программы без указателей, второй ответ программы с указателями! Ка это сделать? Помогите пожалуйста..
Надо обьеденить 2 и 3 пункты
#include <conio.h> #include <stdio.h> #include <stdlib.h> #define SWAP(a, b) ({ int t = *a; *a = *b; *b = t; }) #define n 15 void info() { printf("blablabla\n"); } void program() { int m[n]; printf("Ievadiet 15 masiva elementus\n"); for(int i = 0; i < n; i++) { printf("mass[%d] = ", i); scanf("%d", &m[i]); } for(int i = n - 1; i >= 1; i--) for(int j = 0; j < i; j++) { if(m[j] > m[j+1]) { int foo = m[j]; m[j] = m[j+1]; m[j+1] = foo; } } printf("\n"); for(int i = 0; i < n; i++) printf(" %d ", m[i]); getch(); } void ukazateli() { int * arr, * i, * j, size; printf("Size: "); scanf("%d", &size); if ( ( arr = (int*)malloc(sizeof(int) * size) ) == NULL ){ perror("malloc"); exit(1); } for ( i = arr; i < arr + size; ++i ){ printf("Array[%d] = ", i - arr); scanf("%d", i); } for ( i = arr + size - 1; i > arr; --i ) for ( j = arr; j < i; ++j ) if ( *j > *i ) SWAP(i, j); for ( i = arr; i < arr + size; ++i ) printf("%d ", *i); printf("\n"); free(arr); system("pause"); } int main() { int x; while(x!=4) { printf("Izveleties:\n" "1 - Informacija par programmu" "\n" "2 - Ieiet programma" "\n" "3 - Ieiet programma, kura izveidota ar raditajiem" "\n" "4 - Iziet" "\n"); scanf("%d",&x); switch(x) { case 1: info(); break; case 2: program(); break; case 3: ukazateli(); break; case 4: break; default: break; } } return 0; }
Решение задачи: «Объединить два меню пункта в один»
textual
Листинг программы
#include <conio.h> #include <stdio.h> #define n 15 int main(void) { int m[n], *mp, *mq; printf("Bedute 15 elemeHtoB macuBa\n"); for(mp = m; mp < m + n; mp++) { printf("mass[%ld] = ", mp - m); scanf("%d", mp); } /* for(int i = n - 1; i >= 1; i--) for(int j = 0; j < i; j++) { if(m[j] > m[j+1]) { int foo = m[j]; m[j] = m[j+1]; m[j+1] = foo; } } printf("\n"); */ for (mp = m + n - 1; mp >= m + 1; mp--) /* проверишь как сортирует */ for (mq = m; mq < mp; mq++) if (*mq > *(mq + 1)) { int foo = *mq; *mq = *(mq + 1); *(mq + 1) = *mq; } printf("\n"); for(mp = m; mp < m + n; mp++) printf(" %d ", *mp); getch(); return 0; }
Объяснение кода листинга программы
В этом коде:
- Объявлены массив
m
и указателиmp
иmq
. - Выводится сообщение
Bedute 15 elemeHtoB macuBa
. - С помощью цикла
for
и функцииscanf
происходит заполнение массиваm
значениями, которые вводит пользователь. - С помощью двух вложенных циклов
for
происходит сортировка массиваm
методом пузырька. - С помощью двух вложенных циклов
for
и условного оператораif
происходит сортировка массиваm
методом выбора. - С помощью цикла
for
происходит вывод значений массиваm
через пробел. - Используется функция
getch
для приостановки выполнения программы до нажатия клавиши. - Возвращается 0, что означает успешное окончание работы программы. Код реализует сортировку массива методом пузырька и методом выбора. Пользователю предлагается ввести 15 чисел, после чего программа выводит их в порядке возрастания. Пример ввода: 5, 3, 8, 2, 1, 9, 7, 6, 11, 12, 13, 14, 10, 4, 15. Пример вывода: 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д