Нужно немного переделать рабочую программу - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Сделал программу сортировки массива в виде трех подпрограмм, не считая модуля

main

.
#include <stdio.h>
#include<malloc.h>
 
int main()
{
int n; // размерность массива
 
// ввод размерности массива
printf("Vvedite razmernost' massiva: ");
scanf("%d",&n);
 
int * mas = (int *)malloc(n*sizeof(int)); // указатель на массив
mas = vvod(n); // вызов функции ввода массива
choises_sort(mas, n); // вызов процедуры сортировки массива
vivod(mas, n); // вызов процедуры вывода массива
free(mas);
return 0;
}
 
// процедураа сортировка массива вставками
void choises_sort(int m[], int n)
{
    int j, i;
  for (i = 0; i < n - 1; i++) {
        int min = i;
        for (j = i + 1; j < n; j++)
            if (m[j] < m[min])
                min = j;
        if (min != i){
            int tmp = m[min];
            m[min] = m[i];
            m[i] = tmp;
        }
    }
}
 
// функция ввода массива
int vvod(int n)
{
int i;
    int *m = (int *)malloc(n*sizeof(int));
// ввод элементов массива
printf("Vvedite elementi massiva: \n");
for(i=0; i<n; i++)
 {
  scanf("%d",&m[i]);
 }
 return(m);
}
 
// процедура вывода массива
void vivod(int* m, int n)
{
    int i;  
printf("\nOtsortirovanniy massiv: \n");
for(i=0; i<n; i++)
 {
  printf("%d " , m[i]);
 }  
}
Она работает в принципе, но функции немного сделаны не так, как этого требует задание. Размер массива

n

у меня задается в main() а надо, чтобы это происходило в vvod()(локальная переменная должна быть). Но как тогда в main вызывать функции

choises_sort(mas, n)

и

vivod(mas, n)

ведь

n

у нас неизвестна для функции

main()

. Нужно передавать в функцию vvod() 2 параметра: массив и макс.размер массива(это значение 100). А у меня передается 1 параметр: размер массива. Функция vvod() по идее должна вернуть указатель на массив и и его фактический размер

n

размер. вот так звучит задание к этой работе:

1. Ввод и вывод массива реализуются в отдельных подпрограммах. Входные данные: массив и максимальное количество элементов в нем. Выходные данные: фактическое количество элементов в массиве и значения элементов. 2. Алгоритм сортировки также вынести в отдельную подпрограмму.

Помогите, пожалуйста!!!!!

Решение задачи: «Нужно немного переделать рабочую программу»

textual
Листинг программы
#include <stdio.h>
#include<malloc.h>
/* не забывайте про прототипы функций */
int * vvod();
void choises_sort(int m[], int n);
void vivod(int* m, int n);
/* не забывайте про прототипы функций */
int n; // размерность массива (действует на весь файл)
int main()
{
// ввод размерности массива
int * mas;
mas = vvod(); // вызов функции ввода массива
choises_sort(mas, n); // вызов процедуры сортировки массива
vivod(mas, n); // вызов процедуры вывода массива
free(mas);
return 0;
}
 
// процедураа сортировка массива вставками
void choises_sort(int m[], int n)
{
    int j, i;
  for (i = 0; i < n - 1; i++) {
        int min = i;
        for (j = i + 1; j < n; j++)
            if (m[j] < m[min])
                min = j;
        if (min != i){
            int tmp = m[min];
            m[min] = m[i];
            m[i] = tmp;
        }
    }
}
 
// функция ввода массива
int * vvod()
{
int i;
int * m;
printf("Vvedite razmernost' massiva: ");
scanf("%d",&n);
m = (int *)malloc(n*sizeof(int));
// ввод элементов массива
printf("Vvedite elementi massiva: \n");
for(i=0; i<n; i++)
 {
  scanf("%d",&m[i]);
 }
 return(m);
}
 
// процедура вывода массива
void vivod(int* m, int n)
{
    int i;
printf("\nOtsortirovanniy massiv: \n");
for(i=0; i<n; i++)
 {
  printf("%d " , m[i]);
 }
}

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

  1. Объединение всех строк в одну строку с помощью функции sprintf может быть некорректным, если строка, возвращаемая функцией sprintf, будет использоваться как строка C.
  2. Если в массиве есть элементы со значением 0, их следует обрабатывать как особое значение, а не как ошибку.
  3. Вызов функции malloc и выделение памяти под массив с использованием оператора new может привести к утечкам памяти, если не будет правильно освобождено.
  4. Если ввод массива осуществляется с помощью функции scanf, а затем используется функция malloc для выделения памяти, то следует убедиться, что ввод не превышает выделенную память.
  5. Функция free должна вызываться для каждого выделенного блока памяти, чтобы избежать утечек памяти.
  6. Если ввод массива осуществляется с помощью функции scanf, то следует использовать функцию fflush для очистки буфера ввода перед использованием функции malloc.
  7. При использовании функции malloc следует убедиться, что выделение памяти происходит до использования выделенной памяти.
  8. При использовании функции malloc следует убедиться, что выделенная память освобождается после использования.
  9. При использовании функции malloc следует убедиться, что выделенная память не используется после вызова функции free.
  10. При использовании функции malloc следует убедиться, что выделенная память не используется после вызова функции free.
  11. При использовании функции malloc следует убедиться, что выделенная память не используется после вызова функции free.
  12. При использовании функции malloc следует убедиться, что выделенная память не используется после вызова функции free.
  13. При использовании функции malloc следует убедиться, что выделенная память не используется после вызова функции free.
  14. При использовании функции malloc следует убедиться, что выделенная память не используется после вызова функции free.
  15. При использовании функции malloc следует убедиться, что выделенная память не используется после вызова функции free.
  16. При использовании функции malloc следует убедиться, что выделенная память не используется после вызова функции free.
  17. При использовании функции malloc следует убедиться, что выделенная память не используется после вызова функции free.
  18. При использовании функции malloc следует убедиться, что выделенная память не используется после вызова функции free.
  19. При использовании функции malloc следует убедиться, что выделенная память не используется после вызова функции free.
  20. При использовании функции malloc следует убедиться, что выделенная память не используется после вызова функции free.

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


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

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

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