Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2011, 14:10   #1
letnjaja
Новичок
Джуниор
 
Регистрация: 22.10.2011
Сообщений: 2
Восклицание Массивы

Помогите,пжлста, разобрать данный код, конкретно инетересует часть кода с указателями и индексами, объясните пожалуйста, подробней заранее спасибо
Код:
//pods4et koli4estva stolbcov s raznimi elementami
#include <stdio.h>//standartnij vvod/vivod
#include <stdlib.h>//videlenie pamjati,kontrolj processa vipolnenija programmi, preobrazovanie tipov
#include <time.h>//soderwit funkcii dlja raboti so vremenem
int** mat_alloc(const int, const int);
void  mat_free(int**, const int);
int   mat_unique_index(int**, const int, const int);
int   mat_unique_ptr(int**, const int, const int);
 
int main()//na4alo glavnoj funkcii
{
   int r, c1, rows  = 5,   // 7
              cols  = 10;  // 11
   int** mat;
   if((mat = mat_alloc(rows, cols)) == NULL)
        return 1;
   
   // zapolnenie matrici slu4ajnimi 4islami
   srand(time(NULL));//ustanavlivaet v ka4estve bazi tekuwee vremja(ispoljzuetsja, 4tobi pri zapuske generetora slu4ajnih 4isel, bila vzjata raznaja baza)
   for(r = 0; r < rows; r++) {
        for(c1 = 0; c1 < cols; c1++)
             mat[r][c1] = 10 + rand() % 20; //formula dlja mawtabirovanija i sdviga slu4ajnih 4isel:10-zna4enie smewenija,koefficient mawtabirovanija
   }
   // pods4et stolbcov s nepovtorrjajuwimi elementami(indeksacija)
   printf("count index unique columns: %d\n", mat_unique_index(mat, rows, cols));
 
   // pods4et stolbcov s nepovtorjajuwimi elementami(pri pomowi ukazatelej)
   printf("count ptr unique   columns: %d\n", mat_unique_ptr(mat, rows, cols));
 
   // dlja rezuljtirujuwego primera vivesti v konsolj
   for(r = 0; r < rows; r++) {
       for(c1 = 0; c1 < cols; c1++)
            printf("%d  ", mat[r][c1]);
       putchar('\n');//funkcija za odno obrawenie k nej, vidaet 1 simvol v standartnij vihodnoj potok
   }
   // v  konce nuwno osvobodij pamjatj zanimaemoj matricej
   mat_free(mat, rows);
   getchar();//funkcija, kotoraja 4itaet 1 simvol, vvedenij s klaviaturi
   return 0;//pokazivaet uspewnoe zaverwenie programmi
}
 
// pods4et stolbcov(indeksi)
int   mat_unique_index(int** mat, const int rows, const int cols) {
   int ts, ir, r, c1, cnt = 0;
   for(c1 = 0; c1 < cols; c1++) {
        for(r = 0; r < rows; r++) {
             for(ts = 0, ir = 0; ir < rows; ir++) {  (ts-? ir-?)
                 if(mat[r][c1] == mat[ir][c1]) {  (c1-? что делает эта строчка?)
                       if(++ts > 1)   (????)
                           goto _abort;
                 }
             }
         }
         cnt++;
_abort: ;
  }
   return cnt;
}
 
// pods4et stolbcov (ukazateli) (с указателями вообще не понятно,нужны комментарии к каждой строке)
int   mat_unique_ptr(int** mat, const int rows, const int cols) {
   int c = 0, ts, cnt = 0;
   int **aptr, **bptr, *a, *b; (переменные не понятны)
   for(c = 0; c < cols; c++) {
          for(aptr = mat; aptr != mat + rows; ++aptr) {
               a = *aptr + c;
               for(ts = 0, bptr = mat; bptr != mat + rows; ++bptr) {
                       b = *bptr + c;
                       if( *b == *a ) {
                            if(++ts > 1) 
                                goto _abort;
                       }
                }
          }
          cnt++;
_abort: ;
   }
   return cnt;
}
 
// videlenie pamjati dlja matric
int** mat_alloc(const int rows, const int cols) {
   int r;
   int** mat = (int**) malloc(sizeof(int)*rows);
   if(mat == NULL)
          return NULL;
   for(r = 0; r < rows; r++)
          *((mat)+r) = (int*) malloc(sizeof(int)*cols);
   return mat;
}
 
// videlenie pamjati dlja matric
void  mat_free(int** mat, const int rows) {
   int r;
   for(r = 0; r < rows; r++) {
       free( *((mat)+r) );
       *((mat)+r) = NULL;
   }
   free(mat);
   mat = NULL;
}
letnjaja вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
указатели на массивы и массивы указателей blacktener Общие вопросы C/C++ 16 13.06.2011 20:45
массивы Пе4енька Паскаль, Turbo Pascal, PascalABC.NET 1 12.04.2011 15:36
Динамические массивы и массивы варианты N@stya Помощь студентам 0 11.06.2010 21:09
С++, Массивы, динамические массивы. -Sunshine- Помощь студентам 1 19.04.2010 02:17
Даны одномерные массивы А и В. Сформировать массивы, состоящие из элемент LyaLya Помощь студентам 15 20.12.2009 14:12