Неправильный вывод данных в программе, которая определяет минимальный элемент на главной диагонали - C (СИ)

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

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

Еще одна бессонная ночь породила из моего недалекого разума еще одну программу Вот листинг самой программы
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <locale.h>
  4. int main()
  5. {
  6. void ini_array(int* arr,int n);
  7. void print_array(int* arr,int n);
  8. void zamena_array(int* arr, int n);
  9. setlocale(LC_CTYPE, "RUSSIAN");
  10. {
  11. printf ("Программа определяет минимальный элемент на главной диагонали.");
  12. printf ("\nСтроку, содержащую этот элемент, меняет местами со столбцом,");
  13. printf ("\nв котором число положительных элементов максимально.");
  14. }
  15. int n;
  16. printf("\nВведите размерность матрицы : ");
  17. scanf("%d",&n);
  18. int* pointer;
  19. pointer = (int *)malloc(n*n * sizeof(int));
  20. ini_array(pointer,n);
  21. printf("\nИСХОДНАЯ МАТРИЦА\n");
  22. print_array(pointer,n);
  23. zamena_array(pointer,n);
  24. printf("\nОБРАБОТАННАЯ МАТРИЦА\n");
  25. print_array(pointer,n);
  26. return 0;
  27. }
  28. void print_array(int* arr,int n)//Выводит массив
  29. {
  30. int i,j;
  31. for(i=0;i<n;i++)
  32. {
  33. for(j=0;j<n;j++)
  34. printf("%4d ",arr[i*n+j]);
  35. printf("\n");
  36. printf("\n");
  37. }
  38. }
  39. void zamena_array(int* arr, int n)//заменяет строку столбцом а столбец строкой
  40. {
  41. int i,j,m;
  42. int* arr_string=(int *)malloc(n* sizeof(int));
  43. int maxx=0;//переменная для хранения индекса минимального элемента.Задаем ей индекс первого элемента матрицы.
  44. for(i=0;i<n;i++)
  45. {
  46. maxx=arr_string[i*n+0];
  47. for (j=0;j<m;j++)
  48. if (arr_string[i*n+j]>maxx)
  49. {
  50. maxx=arr_string[i*n+j];
  51. m=j;
  52. }
  53. if (maxx!=arr_string[i*n+i])
  54. {
  55. arr_string[i*n+m]=arr_string[i*n+i];
  56. arr_string[i*n+i]=maxx;
  57. }
  58.  
  59. }
  60. }
  61. void ini_array(int* arr,int n)//инициализирует массив
  62. {
  63. int i,j;
  64. for(i=0;i<n;i++)
  65. for(j=0;j<n;j++){
  66. arr[i*n+j]=rand()%20;
  67. }
  68. }
программа должна находить максимальный элемент в строке и менять местами энтый элемент и элемент находящийся на главной диагонали. Но когда надо выводить таблицу с полученными значениями программа выводит таблицу которая была до исполнения алгоритма замены. Спасайте хлопцы, помогите изгнать из кода моего всех бесов

Решение задачи: «Неправильный вывод данных в программе, которая определяет минимальный элемент на главной диагонали»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. void ini_array(int* arr,int n);
  6. void print_array(int* arr,int n);
  7. void zamena_array(int* arr, int n);
  8.  
  9. int main()
  10. {
  11.  
  12. int n;
  13. int* pointer;
  14. printf("\nВведите размерность матрицы : ");
  15. scanf("%d",&n);
  16.  
  17. pointer = malloc(n*n * sizeof(int));
  18. ini_array(pointer,n);
  19. printf("\nИСХОДНАЯ МАТРИЦА\n");
  20. print_array(pointer,n);
  21. zamena_array(pointer,n);
  22. printf("\nОБРАБОТАННАЯ МАТРИЦА\n");
  23. print_array(pointer,n);
  24.  
  25. free(pointer);
  26. return 0;
  27. }
  28.  
  29. void print_array(int* arr,int n)//Выводит массив
  30. {
  31. int i,j;
  32. for(i=0;i<n;i++)
  33.  {
  34.   for(j=0;j<n;j++)
  35.   printf("%d ",arr[i*n+j]);
  36.   printf("\n");
  37.   printf("\n");
  38.  }
  39.  
  40. }
  41.  
  42. void zamena_array(int* arr_string, int n)//заменяет строку столбцом а столбец строкой
  43. {
  44. int i,j,m;
  45.  
  46. int maxx=0;
  47. int tmp;
  48.  
  49. for(i=0;i<n;i++)
  50.   {
  51.  
  52.   for (j=0;j<n;j++)
  53.     if (arr_string[i*n+j]>maxx)
  54.      {
  55.       maxx=arr_string[i*n+j];
  56.       m=j;
  57.      }
  58.  
  59. if (maxx!=arr_string[i*n+i])
  60.    {
  61.     tmp = arr_string[i*n+m];
  62.     arr_string[i*n+m]=arr_string[i*n+i];
  63.     arr_string[i*n+i]=tmp;
  64.    }
  65.  
  66.  
  67.   }
  68.  
  69. }
  70.  
  71. void ini_array(int* arr,int n)//инициализирует массив
  72. {
  73. int i,j;
  74. for(i=0;i<n;i++)
  75. for(j=0;j<n;j++){
  76. arr[i*n+j]=rand()%20;
  77.  
  78. }
  79.  
  80. }

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

  1. Включаются необходимые заголовочные файлы: , , .
  2. Определяются функции: ini_array, print_array, zamena_array.
  3. В функции main() считывается размерность матрицы с помощью scanf().
  4. Выделяется память под массив с помощью malloc().
  5. Вызывается функция ini_array для инициализации массива.
  6. Выводится исходная матрица с помощью функции print_array().
  7. Вызывается функция zamena_array для замены строки столбцом, а столбца - строкой.
  8. Выводится обработанная матрица с помощью функции print_array().
  9. Освобождается память с помощью функции free().
  10. Возвращается 0, что означает успешный конец работы программы.
  11. В функции print_array() происходит вывод массива на экран.
  12. В функции zamena_array() происходит замена строки столбцом, а столбца - строкой.
  13. В функции ini_array() происходит инициализация массива случайными значениями.

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


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

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

15   голосов , оценка 3.8 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы