Нужно немного переделать рабочую программу - 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.