Поменять первую и последнюю строки в двумерном динамическом массиве - C (СИ)

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

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

Помогите пожалуйста разобраться, почему не работает цикл для перестановки строк и почему после замены индексов с i=0 на i=1 у меня перестало работать два последних цикла(открывается окно Windows, где написано,что программа не работает), до замены только строки не переставлялись.
Листинг программы
  1. #include <stdio.h>
  2. #include <malloc.h>
  3. #include <stdlib.h>
  4. int main()
  5. {
  6. float *p;
  7. int i,j,n,m;
  8. printf("Vvedite kolichestvo strok = ");
  9. scanf("%d", &n);
  10. printf("Vvedite kolichestvo stolbcov = ");
  11. scanf("%d", &m);
  12. p = (float*) malloc(n*m*sizeof(float));
  13. for(i=1;i<=n;i++)
  14. {
  15. for(j=1;j<=m;j++)
  16. {
  17. printf("p[%d][%d] = ", i,j);
  18. scanf("%f", (p+i*m+j));
  19. }
  20. }
  21. for(i=1;i<=n;i++)
  22. {
  23. for(j=1;j<=m;j++)
  24. {
  25. printf("%.2f \t", *(p+i*m+j));
  26. }
  27. printf("\n");
  28. }
  29. float *t;
  30. t = (float*) malloc(n*m*sizeof(float));
  31. for(i=1;i<=n;i++)
  32. {
  33. for(j=1;j<=m;j++)
  34. {
  35. *t = *(p+i*m+j);
  36. *(p+i*m+j) = *(p+n-1*m+j);
  37. *(p+n-1*m+j) = *t;
  38. }
  39. }
  40. printf("Izmenneniy massiv:\n");
  41. for(i=1;i<=n;i++)
  42. {
  43. for(j=1;j<=m;j++)
  44. {
  45. printf("%.2f \t", *(p+i*m+j));
  46. }
  47. printf("\n");
  48. }
  49. free(t);
  50. free(p);
  51. return 0;
  52. }

Решение задачи: «Поменять первую и последнюю строки в двумерном динамическом массиве»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.    float **p = NULL, *t = NULL;
  7.    int i, j, n, m;
  8.    printf("Vvedite kolichestvo strok = ");
  9.    scanf("%d", &n);
  10.    printf("Vvedite kolichestvo stolbcov = ");
  11.    scanf("%d", &m);
  12.    p = malloc(n * sizeof(*p));
  13.    for(i = 0; i < n ; i++)
  14.         p[i] = malloc(m * sizeof(p));
  15.     puts("Enter the value of the element:");
  16.    for(i = 0; i < n; i++){
  17.        for(j = 0;j < m; j++){
  18.            printf("p[%d][%d] = ", i, j);
  19.            scanf("%f", &p[i][j]);
  20.        }
  21.    }
  22.    puts("Source array:");
  23.    for(i = 0; i < n; i++){
  24.         for(j = 0; j < m; j++)
  25.             printf("%9g", p[i][j]);
  26.         printf("\n");
  27.    }
  28.    puts("Sorted array:");
  29.    t = p[0];
  30.    p[0] = p[n - 1];
  31.    p[n - 1] = t;
  32.     for(i = 0; i < n; i++){
  33.         for(j = 0; j < m; j++)
  34.             printf("%9g", p[i][j]);
  35.         printf("\n");
  36.    }
  37.    free(p);
  38.    for(i = 0; i < n; i++)
  39.         free(p[i]);
  40.    free(t);
  41.    return 0;
  42. }

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

Вывод: Код представляет собой программу на языке C, которая сначала запрашивает у пользователя количество строк и столбцов для двумерного массива, а затем позволяет пользователю ввести значения для всех его элементов. Затем программа выводит исходный массив, сортирует его путем замены первой и последней строки местами и выводит отсортированный массив. В конце программа освобождает все выделенные ею ресурсы. Список действий:

  1. Включаем необходимые заголовочные файлы:
    • stdio.h для работы с вводом/выводом
    • stdlib.h для работы с функцией malloc и free
  2. Определяем функцию main()
  3. Выделяем память под указатель на указатель на float:
    • p = NULL - указатель на указатель на float, инициализирован нулем (NULL)
    • t = NULL - указатель на float, инициализирован нулем (NULL)
  4. Запрашиваем у пользователя количество строк и столбцов матрицы:
    • printf(Vvedite kolichestvo strok = );
    • scanf(%d, &n);
    • printf(Vvedite kolichestvo stolbcov = );
    • scanf(%d, &m);
  5. Выделяем память под двумерный массив:
    • p = malloc(n * sizeof(*p));
    • for(i = 0; i < n ; i++) p[i] = malloc(m * sizeof(p));
  6. Получаем значения для элементов матрицы:
    • puts(Enter the value of the element:);
    • for(i = 0; i < n; i++){
    • for(j = 0;j < m; j++){
    • printf(p[%d][%d] = , i, j);
    • scanf(%f, &p[i][j]);
    • }
    • }
  7. Выводим исходный массив:
    • puts(Source array:);
    • for(i = 0; i < n; i++){
    • for(j = 0; j < m; j++) printf(%9g, p[i][j]);
    • printf(\n);
    • }
  8. Сортируем массив путем замены первой и последней строки местами:
    • t = p[0];
    • p[0] = p[n - 1];
    • p[n - 1] = t;
  9. Выводим отсортированный массив:
    • puts(Sorted array:);
    • for(i = 0; i < n; i++){
    • for(j = 0; j < m; j++) printf(%9g, p[i][j]);
    • printf(\n);
    • }
  10. Освобождаем выделенную память:
    • free(p);
    • for(i = 0; i < n; i++) free(p[i]);
    • free(t);
  11. Возвращаем 0:
    • return 0;

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


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

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

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

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

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

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