Объединить два меню пункта в один - 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.