Нужно немного переделать рабочую программу - 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]); } }
Объяснение кода листинга программы
- Объединение всех строк в одну строку с помощью функции sprintf может быть некорректным, если строка, возвращаемая функцией sprintf, будет использоваться как строка C.
- Если в массиве есть элементы со значением 0, их следует обрабатывать как особое значение, а не как ошибку.
- Вызов функции malloc и выделение памяти под массив с использованием оператора new может привести к утечкам памяти, если не будет правильно освобождено.
- Если ввод массива осуществляется с помощью функции scanf, а затем используется функция malloc для выделения памяти, то следует убедиться, что ввод не превышает выделенную память.
- Функция free должна вызываться для каждого выделенного блока памяти, чтобы избежать утечек памяти.
- Если ввод массива осуществляется с помощью функции scanf, то следует использовать функцию fflush для очистки буфера ввода перед использованием функции malloc.
- При использовании функции malloc следует убедиться, что выделение памяти происходит до использования выделенной памяти.
- При использовании функции malloc следует убедиться, что выделенная память освобождается после использования.
- При использовании функции malloc следует убедиться, что выделенная память не используется после вызова функции free.
- При использовании функции malloc следует убедиться, что выделенная память не используется после вызова функции free.
- При использовании функции malloc следует убедиться, что выделенная память не используется после вызова функции free.
- При использовании функции malloc следует убедиться, что выделенная память не используется после вызова функции free.
- При использовании функции malloc следует убедиться, что выделенная память не используется после вызова функции free.
- При использовании функции malloc следует убедиться, что выделенная память не используется после вызова функции free.
- При использовании функции malloc следует убедиться, что выделенная память не используется после вызова функции free.
- При использовании функции malloc следует убедиться, что выделенная память не используется после вызова функции free.
- При использовании функции malloc следует убедиться, что выделенная память не используется после вызова функции free.
- При использовании функции malloc следует убедиться, что выделенная память не используется после вызова функции free.
- При использовании функции malloc следует убедиться, что выделенная память не используется после вызова функции free.
- При использовании функции malloc следует убедиться, что выделенная память не используется после вызова функции free.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д