Вставить в матрицу (в файле) два столбца из единиц: один после К1-го столбца, второй - перед К1-ым - C (СИ)

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

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

дан двумерный массив, вставить в него два столбца из чисел 1: один после К1-го столбца. второй-перед К1-м столбом.

Решение задачи: «Вставить в матрицу (в файле) два столбца из единиц: один после К1-го столбца, второй - перед К1-ым»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <locale.h>
  4.  
  5. int main()
  6. {
  7.     setlocale(LC_ALL, "Rus");
  8.     printf(" Введите высоту массива: ");
  9.     int hight;                              // Высота >> Строки
  10.     scanf("%d", &hight);
  11.     printf(" Введите ширину массива: ");
  12.     int weight;                             // Ширина >> Столбцы
  13.     scanf("%d", &weight);
  14.     int arr[hight][weight];                 // Массив
  15.     printf("\nИдет заполнение массива из файла...\n\n");
  16.     FILE * base = fopen("base.txt", "r");   // base - указатель на файл; base.txt - название файла; r - read(читать)
  17.     if(!base) printf("Файл не найден!\n");
  18.     else{
  19.         int i, j;                                    // Для перебора строк и столбцов
  20.         for(i = 0; i < hight; i++){
  21.             for(j = 0; j < weight; j++){
  22.                 if((j == weight-1) || (j == weight-2)) arr[i][j] = 1;
  23.                 else fscanf(base,"%d", &arr[i][j]); // заполняем числом из файла
  24.                 printf(" %2d", arr[i][j]);          // выводим число
  25.             }
  26.             printf("\n");
  27.         }
  28.         fclose(base);
  29.         int k = 1;
  30.         printf("\nk = %d ( 0 - в массиве )\n\n", k);
  31.         /* После k1 столбца */
  32.         for( i = 0; i < hight; i++){
  33.             int tmp = arr[i][weight-1];     // Сохраняем последняю ячейку строки
  34.             for( j = weight -1; j > k; j--){
  35.                 arr[i][j] = arr[i][j-1];    // Смещаем строку на 1 вправо
  36.             }
  37.             arr[i][j] = tmp;                // Вставляем сохраненую ячейку
  38.         }
  39.         /* Перед k1 столбца */
  40.         for( i = 0; i < hight; i++){        // тут так же...
  41.             int tmp = arr[i][weight-1];     // ...
  42.             for( j = weight -1; j > k-1; j--){
  43.                 arr[i][j] = arr[i][j-1];    // ...
  44.             }
  45.             arr[i][j] = tmp;                // ...
  46.         }
  47.         /* Результат */
  48.         for( i = 0; i < hight; i ++){
  49.             for( j = 0; j < weight; j++) printf(" %2d", arr[i][j]);
  50.             printf("\n");
  51.         }
  52.     }
  53.     return 0;
  54. }

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

  1. Ввод данных:
    • Вводятся высота массива и ширина массива с помощью функции scanf().
    • Высота представляет собой количество строк в массиве, а ширина - количество столбцов.
    • Массив создается с помощью оператора new в куче, чтобы избежать переполнения стека.
  2. Чтение данных из файла:
    • Открывается файл с помощью функции fopen().
    • Если файл не найден, выводится сообщение об ошибке.
    • Иначе, используется цикл для чтения каждой ячейки массива из файла.
  3. Вставка двух столбцов из единиц:
    • Первый столбец вставляется после последнего столбца массива.
    • Второй столбец вставляется перед первым столбцом массива.
    • Для этого используются два вложенных цикла.
  4. Вывод результата:
    • Выводится весь массив с помощью двух вложенных циклов.
    • Каждая ячейка массива выводится с помощью функции printf().

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


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

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

14   голосов , оценка 3.857 из 5

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

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

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