Циклы. Инициализация массива размерности n случайными целыми положительными значениями от 0 до 32767, страница 5

//естественно, 2-ой параметр должен быть меньше                                                     //количества элементов массива n

cout << "isum=" << isum <<  endl;

getch();

return 0;

}

int adder  (int iarray[ ], int k)          //заголовок функции

{int i, ipartial=0;

for (i=0; i<k; i++)                     //k – формальный параметр функции, его значение равно 3

ipartial +=iarray[i];  //накопление суммы

return (ipartial);                                //накопленная сумма возвращается в функцию

}

При передаче массива в функцию он (в качестве формального параметра) может быть описан как указатель на целое:

#include <iostream.h>                        //способ 3

#include <conio.h>

int adder  (int [ ]);

const int n=7;                          //размер массиваглобальная константа, видима везде

main()

{ int isum;

 static int  iarray[n] = {5, 1, 6, 20, 15, 0, 12};

  isum= adder(iarray);

cout << "isum=" << isum <<  endl;

getch();

return 0;

}

int adder  (int *piarray)                   //массив описан как указатель на целое

{int i, ipartial=0;

for (i=0; i<n; i++)                              //используется глобальная константа n

ipartial += *(piarray+i);  //разыменовывается  указатель на i-ый  элемент массива 

return (ipartial);

}

Можно задать размер массива как локальную константу, передавать его в функцию как аргумент, а также обращаться к элементу массива в функции adder  иначе:

#include <iostream.h>                             //способ 4

#include <conio.h>

int adder  (int [], int);

main()

{ const int n=7;

static int  iarray[n] = {5, 1, 6, 20, 15, 0, 12};

int isum;

  isum= adder(iarray, n);

cout << "isum=" << isum <<  endl;

getch();

return 0;

}

int adder  (int *piarray, int k)

{int i , ipartial = 0;

for (i=0; i<k; i++)                             //k – формальный параметр, его значение равно n

ipartial +=piarray[i];   //напомним, что piarray[i] есть *(piarray +i);    

return (ipartial);

}

Обратите внимание на возможность вычисления суммы части элементов массива (начиная с некоторого индекса):

#include <iostream.h>                          

#include <conio.h>

int adder  (int [ ], int);

main()

{const int n=7;

  static int  iarray[n] = {5, 1, 6, 20, 15, 0, 12};

int isum, i=3;

isum= adder(iarray+i, n-i);    // функции adder передается адрес 4-го элемента и                                                     // предполагается вычисление суммы n-i элементов,                                                     //начиная с 4-гои до конца массива  

cout << "isum=" << isum <<  endl;

getch();

return 0;

}

int adder  (int *piarray, int k)

{int i, ipartial=0;

for (i=0; i<k; i++)

ipartial +=piarray[i];    //вычисление смещения адреса для piarray[i]; выполняется                                                   // от переданного в piarray  значения адреса 4-го элемента

return (ipartial);

}

Передача одного элемента массива

#include <iostream.h>

#include <conio.h>

int adder  (int [ ]);

main()

{const int n=7;

  static int  iarray[n] ={5, 1, 6, 20, 15, 0, 12};

int isum;

  isum= adder(iarray+3);                       // или adder(&iarray[3]);

cout << "isum=" << isum <<  endl;

getch();

return 0;

}

int adder  (int *piarray)

{int i , ipartial;

ipartial=*piarray;    //берется только одно значение, переданное по адресу piarray

return (ipartial);

}

В одномерном целочисленном массиве найти числа с наибольшим количеством единиц в его двоичном представлении:

#include<iostream.h>

#include<conio.h>

unsigned NUM(int);        //прототип функции

main()

{int i;

int const n=5;