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

Тема в разделе "Общие вопросы по С и С++", создана пользователем Z1ppeR, 4 янв 2008.

  1. Z1ppeR

    Z1ppeR Гость

    Репутация:
    0
    Вот пример консольной программы на 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! Как их ввести (например, заполнить случ. числами)?
     
  2. gamecreator

    gamecreator Гость

    Репутация:
    0
    cin - считывает данные с клавиатуры
    random(n) - генерирует случайное число от 0 до n-1
    учи матчасть.
     
  3. Folderx

    Folderx Гость

    Репутация:
    0
    <!--QuoteBegin-gamecreator+-->
    <span class="vbquote">(gamecreator)</span><!--QuoteEBegin-->random(n) - генерирует случайное число от 0 до n-1
    учи матчасть.[/quote]
    Это где такое найти ?
     
  4. gamecreator

    gamecreator Гость

    Репутация:
    0
    нажми в среде shift+f1 и узнаешь
     
  5. European

    Репутация:
    0
    Регистрация:
    4 сен 2006
    Сообщения:
    2.566
    Симпатии:
    2
    <!--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
     
  6. Folderx

    Folderx Гость

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

    gamecreator Гость

    Репутация:
    0
    у тебя корявый хелп. она в stdlib.h
     
  8. Folderx

    Folderx Гость

    Репутация:
    0
    Код:
    /* 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

    короче то же самое
     
  9. European

    Репутация:
    0
    Регистрация:
    4 сен 2006
    Сообщения:
    2.566
    Симпатии:
    2
    <!--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?
     
Загрузка...

Поделиться этой страницей