Неправильный вывод данных в программе, которая определяет минимальный элемент на главной диагонали - 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() происходит инициализация массива случайными значениями.