I am trying to write 2 functions, one to read the matrix (2D array) and other one to print it out. So far I have:
/* Read a matrix: allocate space, read elements, return pointer. The
number of rows and columns are given by the two arguments. */
double **read_matrix(int rows, int cols){
double **mat = (double **) malloc(sizeof(double *)*rows);
int i=0;
for(i=0; i<rows; i++){
/* Allocate array, store pointer */
mat[i] = (double *) malloc(sizeof(double)*cols);
//what to do after??
return mat;
}
then the print matrix function, not sure if it is correct
void print_matrix(int rows, int cols, double **mat){
for(i=0; i<rows; i++){ /* Iterate of each row */
for(j=0; j<cols; j++){ /* In each row, go over each col element */
printf("%f ",mat[i][j]); /* Print each row element */
}
}
}
and here is the main function I am using to run:
#include <stdlib.h>
double **read_matrix(int rows, int cols);
void print_matrix(int rows, int cols, double **mat);
void free_matrix(int rows, double **mat);
int main(){
double **matrix;
int rows, cols;
/* First matrix */
printf("Matrix 1\n");
printf("Enter # of rows and cols: ");
scanf("%d %d",&rows,&cols);
printf("Matrix, enter %d reals: ",rows*cols);
matrix = read_matrix(rows,cols);
printf("Your Matrix\n"); /* Print the entered data */
print_matrix(rows,cols,matrix);
free_matrix(rows, matrix); /* Free the matrix */
return 0;
}
The elements of 2-D array can be accessed with the help of pointer notation also. Suppose arr is a 2-D array, we can access any element arr[i][j] of the array using the pointer expression *(*(arr + i) + j).
"#include int main() { int arr[][4]={ {12,23,34,45}, {56,67,78,89} }; int **ptr=NULL; ptr=(int **)arr; printf("n The array first element Access %d %d",arr[0][0],*ptr); ptr++; printf("n The array first element Access %d %d",arr[0][0],*ptr); printf("n The array first element Access %d %d",arr[0][0],*(*(ptr+0)+0)); printf ...
public class Print2DArray { public static void main(String[] args) { final int[][] matrix = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; for (int i = 0; i < matrix. length; i++) { //this equals to the row in our matrix. for (int j = 0; j < matrix[i].
Try this one. may be helpful to you.
#include <stdio.h>
#include <stdlib.h>
double **read_matrix(int rows, int cols);
void print_matrix(int rows, int cols, double **mat);
void free_matrix(int rows, double **mat);
double **read_matrix(int rows, int cols){
double **mat = (double **) malloc(sizeof(double *)*rows);
int i=0,j=0;
for(i=0; i<rows; i++)
/* Allocate array, store pointer */
mat[i] = (double *) malloc(sizeof(double)*cols);
for(i=0; i<rows; i++){
for(j=0; j<cols; j++){
scanf("%lf",&mat[i][j]);
}
}
return mat;
}
void print_matrix(int rows, int cols, double **mat){
int i=0,j=0;
for(i=0; i<rows; i++){ /* Iterate of each row */
for(j=0; j<cols; j++){ /* In each row, go over each col element */
printf("%lf ",mat[i][j]); /* Print each row element */
}
printf("\n");
}
}
void free_matrix(int rows, double **mat){
int i=0;
for(i=0;i<rows;i++)
free(mat[i]);
free(mat);
}
int main(){
double **matrix;
int rows, cols;
/* First matrix */
printf("Matrix 1\n");
printf("Enter # of rows and cols: ");
scanf("%d%d",&rows,&cols);
printf("Matrix, enter %d reals: \n",rows*cols);
matrix = read_matrix(rows,cols);
printf("Your Matrix\n"); /* Print the entered data */
print_matrix(rows,cols,matrix);
free_matrix(rows, matrix); /* Free the matrix */
return 0;
}
Execution:
:~$ gcc exam.c
:~$ ./a.out
Matrix 1
Enter # of rows and cols: 3
4
Matrix, enter 12 reals:
1
2
3
4
5
6
7
8
9
9
0
1
Your Matrix
1.000000 2.000000 3.000000 4.000000
5.000000 6.000000 7.000000 8.000000
9.000000 9.000000 0.000000 1.000000
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With