Sunday, 4 December 2011

 C ++ Programming Examples



Example:

Maximal number of rows and columns matrix can have is predefined. Write your own main program which reads given number of matrix’s rows and columns, and additionally reads matrix’s given elements. Main program prints:

  1. Matrix’s elements sum (calls upon a function that calculates elements sum)
  2. Maximal value in every row of a matrix (calls upon a function that finds the biggest element in a flow)



Matrix mat is declared in a way of two dimensional array (2D array):

float mat[MAXROW][MAXCOL];

Variables nrRow and nrCol store matrix’s dimensions provided by user. The image below shows you this in a visual way. Click on the image to enlarge it.





Memory of a computer allocates MAXROW * MAXCOL * sizeof(float) byte.Matrix’s rows follow one after another, in a way where every next row is placed right after the previous one; and so on. Picture below describes this perfectly. Click on the image to enlarge it.





Generally speaking, for mat[i][j] – number of elements from the beginning of an array is: i * MAXCOL + j
#include <stdio.h>
#define MAXROW     100
#define MAXCOL     100


float max( int len, float *p ) {
// OR: float max( int len, float p[] )

   float res;
   int i;

printf("\nIn function max :");
   printf("\nRow’s beginning address
         in memory : %ld", p);
   res = p[0];
   for( i=1; i<len; i++ )
      if( p[i] > res )
         res = p[i];
   return res;
}


float sumEl(int nrRow,int nrCol,
        int maxCol,float *mat) {

int i, j;
   float sum;

   printf("\nIn function sumEl:");
   printf("\nMatrix’s beginning address
         in memory: %ld", mat);
printf("\nBegin. of 2nd row’s addr.
         in mem.: %ld", &mat[maxCol]); 
   printf("\nBegin. of 3rd row’s addr.
         in mem.: %ld", &mat[2* maxCol]);

   sum = 0.0;
   for( i=0; i<nrRow; i++ )
      for( j=0; j<nrCol; j++ )
         sum += mat[i*maxCol + j];
  // or: sum += *(mat + i*maxCol + j)

   return sum;
}


int main(void) {
   int row, col, i, j;
   float add, maxRow, mat[MAXROW][MAXCOL];

   printf("\nInput nr. of rows and columns:");
   scanf("%d %d", &row, &col );

   printf("\nIn function main");
   printf("\nMatrix’s beginning address
         in memory: %ld", mat);
   printf("\nBegin. of 2nd row’s
         addr.: %ld\n\n", &mat[1][0]);
   printf("\nBegin. of 3rd row’s
         addr.: %ld\n\n", &mat[2][0]);
   for( i=0; i<row; i++ )
      for( j=0; j<col; j++ ) {
         printf("Input element[%d,%d]:",i,j);
         scanf("%f", &mat[i][j] );
   }



   //calculates elements sum in matrix

   add=sumEl(row,col,MAXCOL,(float *) mat);
   printf("\n\nSum of matrix
           elements is %f", add );



   //prints maximal value of every mat. row 

   for(i=0;i<row;i++) {
      maxRow = max(col, &mat[i][0]);
        // or: max(col, mat+i*MAXCOL)
      printf("\nBiggest element in
            row %d is %f\n",i,maxRow);
   }
}




Example of program’s execution:
Input nr. of rows and columns:  3  2

In function main :
Matrix’s beginning address in memory :  1205032
Begin. of 2nd row’s addr.  :                      1205432
Begin. of 3rd  row’s addr.  :                      1205832


3rd:

 1205432     =  125032 + 1 * MAXCOL * sizeof(float)                    =  125032 + 400;
 1205832     =  125032 + 2 * MAXCOL * sizeof(float)
                    =  125032 + 800;




Input element [0,0]:  2
Input element [0,1]:  3
Input element [1,0]:  4
Input element [1,1]:  3
Input element [2,0]:  1
Input element [2,1]:  5



In function sumEl:
Matrix’s beginning address in memory:  1205032
Begin. of 2nd row’s addr. in mem.:         1205432
Begin. of 3rd  row’s addr. in mem.:         1205832


Sum of matrix elements is 18.000000
In function max:
Row’s beginning address in memory:  1205032
Biggest element in row 0 is 3.000000



In function max:
Row’s beginning address in memory:  1205432
Biggest element in row 1 is 4.000000


In function max:
Row’s beginning address in memory:  1205832
Biggest element in row 2 is 5.000000





Example:

Write your own C function which returns flow of matrix row’s maximal values.
  
void maxFlow(float *mat,int nrRow,int nrCol,
         int maxCol,float *flow) {

//OR: void maxFlow(float mat[], int nrRow,
     int nrCol,int maxCol,float flow[])

   int i, j;
   for (i = 0; i < nrRow; i++) {
      flow[i] = mat[i * maxCol];
      for(j = 1; j < nrCol; j++)
         if (mat[i*maxCol+j] > flow[i])
            flow[i]=mat[i*maxCol+j];
   }
}


harap menjadi yek....

Sunday, 21 August 2011


Selamat hari raya



kepada sesiapa yang mengenali diriku, aku ingin mengucapkan selamat hari raya la pada semua..sempena hari nak dekat ni harap2 kanak2 jangan la bermain mercun nanti takut beraya di hospital la pulak.tak lupa juga pada ibu dan bapaku di kampung selamat hari raya maaf zahir dan batin.Aku  rasa raya tahun ni lemang xda kot.tp apa apa pun lepas ni aku kena berdikari sendiri kena bekerja n macam2 lg la.kehidupan seharian semakin mencabar apabila dewasa ni.waktu dewasa ni kalau silap pilih jalan, merana seumur hidup.aku berharap[ jalan yang aku  pilih ni adalah benar.


inpian aku adalah ingin berjaya di dunia dan akhirat.dapat kerja bagus, gaji bagus, rumah cantik,bini can tik n bermacam2 lagi la.raya tahun ni tak tahu lagi plan kawan2ku, nak beraya sekali ka tak, tapi apa2 i not forget you all.hum nampaknya aku dah tak tahu nak taip ape lg ni. aku berharap dapat belajar  di luar negara.Jauh berjalan banyak pengalaman.


                                                             Anikkina

Sunday, 7 August 2011

                                                    selamat menyambut bulan puasa
                                                                     SALAM RAMADAN