Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
KL_PrJAVU230200.doc
Скачиваний:
23
Добавлен:
17.03.2015
Размер:
702.46 Кб
Скачать

Функции и двумерные массивы

Любой двумерный массив определяется тремя параметрами:

  • Адресом первого элемента в массиве int*p.

  • Количество строк в матрице int n.

  • Количество столбцов в матрице int m.

При этом определение адреса элемента массива с индексами i,j будет производится по формуле p+i*m+j. Для организации вызова функции (main) необходимо уметь определить адрес первого элемента в массиве.

Если память под массив выделена статически: int mas [3][4]; то mas [0] – адрес первого элемента в массиве.

Если память под двумерный массив выделена динамически: int*p;

p=new int[3*4]; p-адрес первого элемента в массиве.

Переданный в функцию массив может играть роль исходного или результата. Передавая несколько матриц надо помнить об их соразмерности и не передавать лишних размерностей.

Для обработки матрицы построчно можно использовать готовые функции для одномерного массива

Задача 1.

Демонстрирует получение матрицы результата с выделением памяти внутри main

Дана матрица,создать транспонированную.

Выделяем функции:

1. Заполнение матрицы случайными числами, по-скольку перебор идет построчно, используем ранее записанную функцию InMasRnd

2. Вывод матрицы на экран в матричной форме

3. Создание транспонируемой матрицы

Анализ характеристик функции:

2/

1. OutMas

2. Исходные данные:

матрица

int *p;

int n;

int m;

3. Результат: нет (void)

3/

1. TransMas

2. Исходные данные:

матрица исходная

int *p1;

int n;

int m;

матрица транспонированая - int *p2;

3. Результат: нет (void)

файл: mas2.h

----------------

#ifndef MAS2_H

#define MAS2_H

void InMasRnd(int *p, int n, int min, int max);

void OutMas(int *p, int n, int m);

void TransMas(int *p1, int *p2, int n, int m);

#endif

----------------

файл: mas2.cpp

----------------

#include<iostream> //подключение системных средств для

using namespace std; //возможности использовать потоки ввода-вывода

#include <iomanip>

#include <stdlib.h>

#include <time.h>

void InMasRnd(int *p, int n, int min, int max)

{

int i;

for (i=0; i<n; i++)

p[i]=rand()%(max-min+1)+min;

return;

}

void OutMas(int *p, int n, int m)

{

int i,j;

cout << endl;

for (i=0; i<n; i++) {

for (j=0; j<m; j++) {

cout << setw(5) << *(p+i*m+j);

}

cout << endl;

}

return;

}

void TransMas(int *p1, int *p2, int n, int m)

{

int i,j;

for (i=0; i<n; i++) {

for (j=0; j<m; j++) {

*(p2+j*n+i)=*(p1+i*m+j);

}

}

return;

}

----------------

файл: main.cpp

----------------

#include<iostream> //подключение системных средств для

using namespace std; //возможности использовать потоки ввода-вывода

#include <stdlib.h>

#include <time.h>

#include "mas2.h"

int main(void)

{

const int N=3;

const int M=5;

int m1[N][M], m2[M][N];

srand((unsigned)time(NULL));

InMasRnd(m1[0],N*M,-20,30); // m1[0] - адрес нулевой строки, // соответ-но адрес первого числа

cout << "\nИсходный массив:";

OutMas(m1[0],N,M);

cout << "\nВторой массив:";

TransMas(m1[0],m2[0],N,M);

OutMas(m2[0],M,N);

return 0;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]