Динамические матрицы и иже с ними
От: S10  
Дата: 08.12.08 22:29
Оценка: 19 (1)
Пишу лабу по динамическим массивам, сделал библиотеку:
using namespace std;
/* Создание матрицы. */
int **new_matrix (int height, int width)
{
    int **mx = new int *[height];
    for (int i = 0; i < height; i ++)
        mx[i] = new int[width];
    return mx;
}
/* Тотальный дестрой матрицы ^_^ */
void del_matrix (int **mx, int height)
{
    for (int i = 0; i < height; i++)
        delete mx[i];
    delete[] mx;
}
/* Заполнение матрицы случайным образом. */
void fill_matrix (int **mx, int height, int width)
{
    for (int i = 0; i < height; i ++)
        for (int j = 0; j < width; j ++)
            mx[i][j] = rand () % 151 - 50;
}
/* Заполнение матрицы нулями. */
void null_matrix (int **mx, int height, int width)
{
    for (int i = 0; i < height; i ++)
        for (int j = 0; j < width; j ++)
            mx[i][j] = 0;
}
/* Распечатка матрицы. */
void print_matrix (int **mx, int height, int width)
{
    cout << endl;
    cout << "Матрица:" << endl;
    for (int i = 0; i < height; i ++)
    {
        for (int j = 0; j < width; j ++)
            cout << mx[i][j] << "\t";
        cout << endl;
    }
    cout << endl;
}
/* Поиск числа а в матрице*/
int find_in_matrix (int **mx, int height, int width, int a)
{
    for (int i = 0; i < height; i ++)
        for (int j = 0; j < width; j ++)
            if (mx[i][j] == a)
                return i;
    return -1;
}
/* Вставка последней строки после строки с индексом n. */
void insert_last_after_n (int **mx, int &height, int width, int n)
{
    int **tmp = new_matrix (height + 1, width);
    /*null_matrix (tmp, height + 1, width);*/
    for (int i = 0; i <= n; i ++)
        for (int j = 0; j < width; j ++)
            tmp[i][j] = mx[i][j];
    n ++;
    int last = height - 1;
    for (int j = 0; j < width; j ++)
        tmp[n][j] = mx[last][j];
    if (n == height)
    {
        height ++;
        return;
    }
    for (int i = n + 1; i <= height; i ++)
        for (int j = 0; j < width; j ++)
            tmp[i][j] = mx[i - 1][j];
    del_matrix (mx, height);
    mx = tmp;
    height ++;
}


А вот собственно сама программа с заданием:
/* Вставить после строки, в которой есть заданное число А,
последнюю строку. */
#include "stdafx.h"
#include <iostream>
#include <ctime>
#include "..\matrix.h"
using namespace std;
int main ()
{
    setlocale (LC_ALL, "russian");
    srand ((unsigned) time (0));
    int a, m, n, index;
    do
    {
        cout << "Введите размерность матрицы (высота, ширина): ";
        cin >> m >> n;
    }
    while ((m <= 0) || (n <= 0));
    int **matrix = new_matrix (m, n);
    fill_matrix (matrix, m, n);
    print_matrix (matrix, m, n);
    cout << "Введите число для поиска: ";
    cin >> a;
    index = find_in_matrix (matrix, m, n, a);
    if (index < 0)
    {
        cout << "Число не было найдено в матрице" << endl;
        system ("pause");
        exit (1);
    }
    insert_last_after_n (matrix, m, n, index);
    print_matrix (matrix, m, n);
    del_matrix (matrix, m);
    system ("pause");
    return 0;
}


Проблема: комплится, вставка последней строки после строки с индексом n вроде работает под отладчиком, но при распечатке результирующей матрицы всё валится В чём мои ошибки?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.