Неправильный вывод данных в программе, которая определяет минимальный элемент на главной диагонали - C (СИ)
Формулировка задачи:
Еще одна бессонная ночь породила из моего недалекого разума еще одну программу
Вот листинг самой программы
программа должна находить максимальный элемент в строке и менять местами энтый элемент и элемент находящийся на главной диагонали. Но когда надо выводить таблицу с полученными значениями программа выводит таблицу которая была до исполнения алгоритма замены. Спасайте хлопцы, помогите изгнать из кода моего всех бесов
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- #include <locale.h>
- int main()
- {
- void ini_array(int* arr,int n);
- void print_array(int* arr,int n);
- void zamena_array(int* arr, int n);
- setlocale(LC_CTYPE, "RUSSIAN");
- {
- printf ("Программа определяет минимальный элемент на главной диагонали.");
- printf ("\nСтроку, содержащую этот элемент, меняет местами со столбцом,");
- printf ("\nв котором число положительных элементов максимально.");
- }
- int n;
- printf("\nВведите размерность матрицы : ");
- scanf("%d",&n);
- int* pointer;
- pointer = (int *)malloc(n*n * sizeof(int));
- ini_array(pointer,n);
- printf("\nИСХОДНАЯ МАТРИЦА\n");
- print_array(pointer,n);
- zamena_array(pointer,n);
- printf("\nОБРАБОТАННАЯ МАТРИЦА\n");
- print_array(pointer,n);
- return 0;
- }
- void print_array(int* arr,int n)//Выводит массив
- {
- int i,j;
- for(i=0;i<n;i++)
- {
- for(j=0;j<n;j++)
- printf("%4d ",arr[i*n+j]);
- printf("\n");
- printf("\n");
- }
- }
- void zamena_array(int* arr, int n)//заменяет строку столбцом а столбец строкой
- {
- int i,j,m;
- int* arr_string=(int *)malloc(n* sizeof(int));
- int maxx=0;//переменная для хранения индекса минимального элемента.Задаем ей индекс первого элемента матрицы.
- for(i=0;i<n;i++)
- {
- maxx=arr_string[i*n+0];
- for (j=0;j<m;j++)
- if (arr_string[i*n+j]>maxx)
- {
- maxx=arr_string[i*n+j];
- m=j;
- }
- if (maxx!=arr_string[i*n+i])
- {
- arr_string[i*n+m]=arr_string[i*n+i];
- arr_string[i*n+i]=maxx;
- }
- }
- }
- void ini_array(int* arr,int n)//инициализирует массив
- {
- int i,j;
- for(i=0;i<n;i++)
- for(j=0;j<n;j++){
- arr[i*n+j]=rand()%20;
- }
- }
Решение задачи: «Неправильный вывод данных в программе, которая определяет минимальный элемент на главной диагонали»
textual
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- void ini_array(int* arr,int n);
- void print_array(int* arr,int n);
- void zamena_array(int* arr, int n);
- int main()
- {
- int n;
- int* pointer;
- printf("\nВведите размерность матрицы : ");
- scanf("%d",&n);
- pointer = malloc(n*n * sizeof(int));
- ini_array(pointer,n);
- printf("\nИСХОДНАЯ МАТРИЦА\n");
- print_array(pointer,n);
- zamena_array(pointer,n);
- printf("\nОБРАБОТАННАЯ МАТРИЦА\n");
- print_array(pointer,n);
- free(pointer);
- return 0;
- }
- void print_array(int* arr,int n)//Выводит массив
- {
- int i,j;
- for(i=0;i<n;i++)
- {
- for(j=0;j<n;j++)
- printf("%d ",arr[i*n+j]);
- printf("\n");
- printf("\n");
- }
- }
- void zamena_array(int* arr_string, int n)//заменяет строку столбцом а столбец строкой
- {
- int i,j,m;
- int maxx=0;
- int tmp;
- for(i=0;i<n;i++)
- {
- for (j=0;j<n;j++)
- if (arr_string[i*n+j]>maxx)
- {
- maxx=arr_string[i*n+j];
- m=j;
- }
- if (maxx!=arr_string[i*n+i])
- {
- tmp = arr_string[i*n+m];
- arr_string[i*n+m]=arr_string[i*n+i];
- arr_string[i*n+i]=tmp;
- }
- }
- }
- void ini_array(int* arr,int n)//инициализирует массив
- {
- int i,j;
- for(i=0;i<n;i++)
- for(j=0;j<n;j++){
- arr[i*n+j]=rand()%20;
- }
- }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы:
, , . - Определяются функции: ini_array, print_array, zamena_array.
- В функции main() считывается размерность матрицы с помощью scanf().
- Выделяется память под массив с помощью malloc().
- Вызывается функция ini_array для инициализации массива.
- Выводится исходная матрица с помощью функции print_array().
- Вызывается функция zamena_array для замены строки столбцом, а столбца - строкой.
- Выводится обработанная матрица с помощью функции print_array().
- Освобождается память с помощью функции free().
- Возвращается 0, что означает успешный конец работы программы.
- В функции print_array() происходит вывод массива на экран.
- В функции zamena_array() происходит замена строки столбцом, а столбца - строкой.
- В функции ini_array() происходит инициализация массива случайными значениями.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д