Посчитать количество столбцов матрицы, в которых все элементы отличаются - C (СИ)
Формулировка задачи:
помогите пжлста разобраться с массивами, в си новичок, на форуме похожие задачки не нашла. задание следующее:программа должна состоять из главной функции и двух подпрограмм(функций). каждая функция должна выполнять обработку одного и того же массива, одна функция должна использовать индексы, другая указатели. Необходимо посчитать кол-во столбцов, в которых все элементы отличаются.
В главной программе предусмотерть заполнение( рандомно или с клавиатуры) и вывод массива. Для проверки программы использовать два массива.(5x10, 7x11).
Мне непонятно начиная с главной программы, вот что получилось:
с подпрограммами вообще не могу разобраться(
/*pos4itatj koli4estvo stolbcov s raznimi elementami*/ # include <stdio.h> # include <conio.h> # define m1 5 # define m2 10 main() { int masivs[m1][m2],i,j ; float raznie1(int mas[m1][m2],int,int); float raznie2(int*,int,int); for (i=0;i<m1; ++i) for (j=0;j<m2; ++j) { scanf ("%d",&masivs[i][j]); } printf("s indeksami:\n"); raznie1(masivs,m1,m2); printf("\nS ukazateljami:\n"); raznie2(*masivs,m1,m2); getch(); }
Решение задачи: «Посчитать количество столбцов матрицы, в которых все элементы отличаются»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <time.h> 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(){ // по такой аналогии сделаешь матрицу 7x11 прсто изменив кол-во строк и столбцов int r, c1, rows = 5, // 7 cols = 10; // 11 int** mat; if((mat = mat_alloc(rows, cols)) == NULL) return 1; // заполняем матрицу случайными числами srand(time(NULL)); for(r = 0; r < rows; r++) { for(c1 = 0; c1 < cols; c1++) mat[r][c1] = 10 + rand() % 20; } // подсчёт уникальных столбцов(индексацией) printf("count index unique columns: %d\n", mat_unique_index(mat, rows, cols)); // подсчёт уникальных столбцов(адресно-указательным) printf("count ptr unique columns: %d\n", mat_unique_ptr(mat, rows, cols)); // для резульирующего примера вывести в консоль for(r = 0; r < rows; r++) { for(c1 = 0; c1 < cols; c1++) printf("%d ", mat[r][c1]); putchar('\n'); } // в конце нужно освободить память занимаемой матрицой mat_free(mat, rows); getchar(); return 0; } // подсчёт уникальных столбцов(индексированный пример) 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++) { if(mat[r][c1] == mat[ir][c1]) { if(++ts > 1) goto _abort; } } } cnt++; _abort: ; } return cnt; } // подсчёт уникальных столбцов(адресно-указательный пример) 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; } // выделение памяти из кучи для 2D-матриц 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; } // удаление памяти занимаемой 2D-матрицой 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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д