Поиск
 
 

Результаты :
 


Rechercher Расширенный поиск

Кто сейчас на форуме
Сейчас посетителей на форуме: 1, из них зарегистрированных: 0, скрытых: 0 и гостей: 1

Нет

[ Посмотреть весь список ]


Больше всего посетителей (9) здесь было Вс Фев 11, 2018 12:54 pm
Самые активные пользователи за неделю


Домашнее задание №15

Перейти вниз

Домашнее задание №15

Сообщение автор Дмитрий в Вс Апр 16, 2017 10:53 am

Ярослав, здравствуйте!

Возникли проблемы с ДЗ№15 часть 1.
Написал код пока только для добавления строк. Всё вроде верно, но программа не работает.
Не могу понять в чём ошибаюсь.

Код:

/*1. Создать динамический двумерный массив размера, заданного пользователем.
Заполнить его случайными числами. Пользователь может вставлять строки и столбцы в любое место массива.
Вставленные строки и столбцы заполняются нулями.
*/

#include <iostream>
#include <iomanip>
using namespace std;

int **new_matrix(int**, int, int);
int **delete_matrix(int**, int, int);
void display_matrix(int**, int, int);

void main()
{
 int **matrix1 = nullptr, **matrix2 = nullptr;
 int row, column;

 cout << "Enter the number of rows and columns in the matrix:\n";
 cin >> row >> column;
 cout << "\n\n";

 matrix1 = new_matrix(matrix1, row, column);

 for (int i = 0; i < row; i++)
 for (int j = 0; j < column; j++)
 matrix1[i][j] = rand() % 50 + 1;

 display_matrix(matrix1, row, column);

 int menu;
 int number;

 while (true)
 {
 cout << "1 - Add a row.\n";
 cout << "2 - Add a column.\n";
 cout << "3 - Exit.\n";
 cin >> menu;
 cout << "\n\n";

 switch (menu)
 {
 case 1:
 cout << "Enter the number of the row: ";
 cin >> number;
 cout << "\n\n";

 if (number <= 0 || number > row)
 {
 cout << "Entered data is not correct!!!\n";
 cout << "Enter new data.\n\n";
 break;
 }

 number--;
 row++;

 matrix2 = new_matrix(matrix2, row, column);

 for (int j = 0; j < column; j++)
 matrix2[number][j] = 0;

 for (int i = 0, k = 0; i < row; i++)
 {
 if (i == number)
 continue;
 for (int j = 0, l = 0; j < column; j++)
 {
 matrix2[i][j] = matrix1[k][l];
 k++;
 l++;
 }
 }
 matrix1 = delete_matrix(matrix1, row - 1, column);
 
 matrix1 = matrix2;
 matrix2 = nullptr;

 display_matrix(matrix1, row, column);
 break;
 case 2:
 break;
 case 3:
 break;
 default:
 break;
 }
 }
 
 matrix1 = delete_matrix(matrix1, row, column);

}

 int **new_matrix(int **matrix, int row, int column)
{
 matrix = new int*[row];
 for (int i = 0; i < row; i++)
 matrix[i] = new int[column];

 return matrix;
}

int  **delete_matrix(int **matrix, int row, int column)
{
 for (int i = 0; i < row; i++)
 delete[] matrix[i];
 delete[] matrix;
 matrix = nullptr;
 return matrix;
}

void display_matrix(int **matrix, int row, int column)
{
 for (int i = 0; i < row; i++)
 {
 for (int j = 0; j < column; j++)
 cout << setw(3) << matrix[i][j] << ' ';
 cout << endl;
 }
 cout << "\n\n";
}


Дмитрий

Posts : 10
Join date : 2017-01-23

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Домашнее задание №15

Сообщение автор Ярослав в Вс Апр 16, 2017 9:42 pm

В этом цикле косяки с управляющими переменными:
Код:
      for (int i = 0, k = 0; i < row; i++) {
        if (i == number)
          continue;
        for (int j = 0, l = 0; j < column; j++) {
          matrix2[i][j] = matrix1[k][l];
          k++;
          l++;
        }
      }
i, j и l меняются предсказуемо и управляемо, а вот k нет. k очень быстро выходит за допустимые пределы, потому что оно увеличивается слишком часто. Где должно быть k++ на самом деле?
avatar
Ярослав
Admin

Posts : 599
Join date : 2016-12-21
Location : Москва

Посмотреть профиль http://itstep.forum2x2.ru

Вернуться к началу Перейти вниз

Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения