Указатели на указатели

  • Автор темы Z1ppeR
  • Дата начала
Z

Z1ppeR

Гость
#1
Вот пример консольной программы на C++ :

Код:
#include <iostream.h> 
#include <conio.h> 
#include <math.h> 

int** csmatr(int**,int); // --- Функция создания и вывода матрицы ------- 
double determinant(int**,int); // --- Функция вычисления определителя --------- 

void main(void) 
{ 
int **a,i,N,**matr; 
// -------------------- Указываем порядок матрицы ------------------------ // 
clrscr(); 
cout<<"Введите порядок матрицы: "; cin>>N; 
cout<<'\n'; 
// -------------------- Создание матрицы и вывод ее на экран ------------- // 
a=csmatr(matr,N); 
// -------------------- Вывод определителя на экран ---------------------- // 
cout<<"Определитель матрицы = "<<determinant(a,N); 
// -------------------- Освобождение памяти ------------------------------ // 
for (i=0;i<=N-1;i++) delete a[i]; 
delete a; 

getch(); 
} 


/*--------------------------------------------------------------------------- 
Функция создания матрицы (обязательно должен быть динамический массив) 
---------------------------------------------------------------------------*/ 
int** csmatr(int **matr,int N) 
{ 
int i,j; 

// -------------------- Формирование строк матрицы ----------------------- // 
matr=new int*[N]; 
// -------------------- Формирование столбцов матрицы -------------------- // 
for (i=0;i<=N-1;i++) {matr[i]=new int[N];} 

return matr; 

} 


/*--------------------------------------------------------------------------- 
Функция вычисления определителя (должна быть обязательно рекурсия) 
---------------------------------------------------------------------------*/ 
double determinant(int **a, int N) 
{ 
int i,j; 
int **matr1; 
/* int sign=1;*/ 
double determ=0; 

if (N==2) 
{ 
determ=a[0][0]*a[1][1]-a[0][1]*a[1][0]; 
} 
else 
{ 
matr1=new int*[N-1]; 

for(i=0;i<N;i++) 
{ 
for(j=0;j<N-1;j++) 
{ 
if(j<i) {matr1[j]=a[j];} 
else {matr1[j]=a[j+1];} 
} 
determ+=pow(-1,(i+j))*determinant(matr1,N-1)*a[i][N-1]; 
} 
delete matr1; 
} 

return determ; 
cout<<'\n'; 
}

Сам не до конца понимаю всё, но здесь исп. двойные указатели для того, чтобы определить квадратную матрицу. Проблема в том, что фактические данные не вводятся и определитель всегда равен 0! Как их ввести (например, заполнить случ. числами)?
 
G

gamecreator

Гость
#2
cin - считывает данные с клавиатуры
random(n) - генерирует случайное число от 0 до n-1
учи матчасть.
 
F

Folderx

Гость
#3
<!--QuoteBegin-gamecreator+-->
<span class="vbquote">(gamecreator)</span><!--QuoteEBegin-->random(n) - генерирует случайное число от 0 до n-1
учи матчасть.[/quote]
Это где такое найти ?
 
04.09.2006
2 566
2
#5
<!--QuoteBegin-gamecreator+5:01:2008, 12:05 -->
<span class="vbquote">(gamecreator @ 5:01:2008, 12:05 )</span><!--QuoteEBegin-->нажми в среде shift+f1 и узнаешь
[snapback]92246" rel="nofollow" target="_blank[/snapback]​
[/quote]
Вот сначала сам нажми! Где определена эта функция? В CRT есть только rand
 
F

Folderx

Гость
#6
<!--QuoteBegin-gamecreator+-->
<span class="vbquote">(gamecreator)</span><!--QuoteEBegin-->нажми в среде shift+f1 и узнаешь[/quote]
Вопрос остаётся, среда это не матчасть, давай матчасть где искать :(
 
F

Folderx

Гость
#8
Код:
/* These are the functions that actually do things. The `random', `srandom',
`initstate' and `setstate' functions are those from BSD Unices.
The `rand' and `srand' functions are required by the ANSI standard.
We provide both interfaces to the same random number generator. */
/* Return a random long integer between 0 and RAND_MAX inclusive. */
We provide both interfaces

короче то же самое
 
04.09.2006
2 566
2
#9
<!--QuoteBegin-gamecreator+6:01:2008, 13:04 -->
<span class="vbquote">(gamecreator @ 6:01:2008, 13:04 )</span><!--QuoteEBegin-->у тебя корявый хелп. она в stdlib.h
[snapback]92308" rel="nofollow" target="_blank[/snapback]​
[/quote]
У тя руки корявые! Не надо в разделе "Общие вопросы по С и С++" давать ссылки на функции, не определенные в стандарте. А если даешь то указывай компилятор! Вот нет у в VS 2005 в stdlib.h random(n). Что мне сделать? Скопировать из твоего любимого BC++ 3.1?