Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
Модератор
2639 / 1751 / 920
Регистрация: 16.10.2013
Сообщений: 5,067
Записей в блоге: 14
1

Ввод, сортировка и вывод массива в виде подпрограмм

17.12.2015, 17:40. Показов 3333. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, друзья! Недавно пишу на Си, поэтому требуется ваша помощь.
Мне нужно написать программу сортировки массива вставками, разбив ее на подпрограммы.

В самом начале должна вызываться функцию ввода массива, затем процедура сортировки, и наконец процедура вывода массива:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
int main()
{
vvod(); // функция ввода массива
choises_sort(arr, n); // процедура сортировки
vivod(arr, n); // процедура вывода массива
return 0;
}
 
int vvod()
{
int arr[100], i, n;
printf("Vvedite razmernost' massiva: ");
scanf("%d",&n);
 
printf("Teper' vvedite elementi massiva: \n");
for(i=0; i<n; i++)
 {
  scanf("%d",&arr[i]);
 }
 return(arr, n);
}
 
void choises_sort(int mas[], const int n)
{
    int j, i;
  for (i = 0; i < n - 1; i++) {
        int min = i;
        for (j = i + 1; j < n; j++)
            if (mas[j] < mas[min])
                min = j;
        if (min != i){
            int tmp = mas[min];
            mas[min] = mas[i];
            mas[i] = tmp;
        }
    }
}
 
void vivod(int arr[], const int n)
{
    int i;
printf("\nOtsortirovanniy massiv: \n");
for(i=0; i<n; i++)
 {
  printf("%d " , arr[i]);
 }  
}
Вопрос в том, как грамотно вернуть из функции массив и его размерность vvod() и как это записать в переменные? Чтобы потом эти данные уже передать процедурам сортировки и вывода.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.12.2015, 17:40
Ответы с готовыми решениями:

Определение и вывод номеров минимальных элементов двумерного массива и ввод массива меньшей размерности
Доброго времени суток. Пожалуйста, помогите с решением задания. Заранее спасибо. Исходная...

Вывод массива в виде таблицы
Здравствуйте. Помогите, пожалуйста, вывести массив в виде такой таблицы. Составить программу,...

Ввод-вывод двумерного массива
Задание- нужно ввести двумерный массив, записать в него строки заданного с консоли количества....

Ввод и вывод массива структур
все вроде ничего, прога работает, но не получается вывести в консоль то, что нужно.. в размерности...

3
0 / 0 / 0
Регистрация: 01.11.2015
Сообщений: 2
17.12.2015, 18:12 2
Много всякой не нужной ерунды,проделывал недавно работу
"идеальный код"
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#include <iostream>
#include <stdio.h>
 
const int RAZMER = 10; //максимальное число элементов массива
 
int main()
    {
     setlocale(LC_ALL, "Russian");
 
     
     int N;         //Размер массива
     int a[RAZMER]; //Исходный массив
     int b[RAZMER]; //Массив-дубликат для отбора элементов
     int flag = 0;  //Организатор цикла продолжения работы
     int W;         //Способ сортировки
     int bubble;    //Временное хранилище для обмена значениями
     int O = 0;     //Номер текущий незанятого элемента 
 
    
    do
      {
       do
         {
          printf("Введите N. \n");
          scanf("%d", &N);
          if (N <= 0 || N > RAZMER)
              printf("N должен быть положительным и не превышать %d. \n", RAZMER);
         } 
       while (N <= 0 || N > RAZMER);
 
       do
         {
          printf("Введите элементы массива. \n");
          for (int i = 0; i < N; i++)
               scanf("%d", &a[i]);
          printf("Контрольный вывод элементов. \n");
          for (int i = 0; i < N; i++)
               printf("%d ", a[i]);
          printf("\nЖелаете ввести данные заново? (1 / 0) \n");
          scanf("%d", &flag);
         } 
        while (flag == 1);
        
        do
         {
          printf("Выберете способ сортировки массива:\n");
   printf("1)По возрастанию\n2)По убыванию\n");
       printf("3)Четные, кратные трём, кратные пяти, все остальные\n");
          scanf("%d", &W);
          if (W == 3)
          {
              for (int I = 0; I < N; I++) //Создаем массив-дубликат
                   b[I] = a[I];
 
              for (int I = 0; I < N; I++) //Отбираем чётные элементы
                   if (b[I] % 2 == 0)
                      { 
                       a[O] = b[I];
                       b[I] = 0;
                       O++;
                      }
 
               
  for (int I = 0; I < N; I++) //Отбираем элементы кратные трём
                     if (b[I] % 3 == 0 && b[I] != 0)
                        {
                         a[O] = b[I];
                         b[I] = 0;
                         O++;
                        } 
 
                for (int I = 0; I < N; I++) //Отбираем элементы кратные пяти
                     if (b[I] % 5 == 0 && b[I] != 0)
                        {
                         a[O] = b[I];
                         b[I] = 0;
                         O++;
                        }
 
                for (int I = 0; I < N; I++) //Отбираем все остальные элементы
                     if (b[I] != 0)
                        {
                         a[O] = b[I];
                         O++;
                        }
 
                 O = 0; //Обнуление для повторного использования сортировки
           }
           else
               {
                for (int I = 0; I < N; I++) //сортировка по возрастанию/убыванию
                    for (int J = 0; J < N; J++)
                         if ((a[J]>a[I] && W == 2 || a[J]<a[I] && W == 1) && J>I)
                            {
                             bubble = a[I];
                             a[I] = a[J];
                             a[J] = bubble;
                            }
               }
 
            printf("Была произведена сортировка следующим способом:");
            if (W == 1)
                printf("по возрастанию.\n");
            else
                if (W == 2)
                    printf("по убыванию.\n");
                else 
                    printf("Четные, кратные трём, кратные пяти, все остальные\n");
 
            printf("Полученные элементы. \n");
            for (int i = 0; i < N; i++)
                 printf("%d ", a[i]);
 
            printf("\nЖелаете отсортировать данные другим способом? (1 / 0) \n");
            scanf("%d", &flag);
          }
        while(flag == 1);
        
        printf("Желаете ввести данные заново? (1 / 0) \n");
        scanf("%d", &flag);
      }
     while (flag == 1);
 
     return 0;
    }
0
Модератор
2639 / 1751 / 920
Регистрация: 16.10.2013
Сообщений: 5,067
Записей в блоге: 14
17.12.2015, 20:10  [ТС] 3
Подскажите как создать указатель на массив? Нашел только как в C++ это делается
C++
1
int * mas = new int [n];
но в си нет оператора new
0
67 / 65 / 61
Регистрация: 11.11.2015
Сообщений: 392
17.12.2015, 20:14 4
Лучший ответ Сообщение было отмечено long399 как решение

Решение

C
1
int * mass = (int*)malloc(sizeof(int)*n);
Вместо delete:

C
1
free(mass);
1
17.12.2015, 20:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.12.2015, 20:14
Помогаю со студенческими работами здесь

Ввод и вывод двухмерного массива
Здравствуйте! Не могу найти у себя ошибку в коде. Нашел похожие темы-не помогло. Помогите,...

Ввод/вывод динамического массива
нужно ввести массив и вывести его на экран. размерность и массив вводит, вывод не показывает.не...

Ввод и вывод одномерного массива
Объясните, пожалуйста, почему мой вариант не верен: #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt;...

Ввод элементов массива, вещественных чисел и вывод в виде матрицы
Задача в курсовой. Разработать алгоритм и составить программу, выполняющей ввод элементов...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru