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

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

В этом коде:

  1. Объявлены массив m и указатели mp и mq.
  2. Выводится сообщение Bedute 15 elemeHtoB macuBa.
  3. С помощью цикла for и функции scanf происходит заполнение массива m значениями, которые вводит пользователь.
  4. С помощью двух вложенных циклов for происходит сортировка массива m методом пузырька.
  5. С помощью двух вложенных циклов for и условного оператора if происходит сортировка массива m методом выбора.
  6. С помощью цикла for происходит вывод значений массива m через пробел.
  7. Используется функция getch для приостановки выполнения программы до нажатия клавиши.
  8. Возвращается 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.

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


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

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

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