Обращение к элементам массива по имени.

Обращение к элементам массива осуществляется по индексу, значение которого начинается с нуля.

Пример:

int a[ 5];

a [0]-к первому по счету или с инд=0.

a [1]-

a [2]-

…….

a[4] – к последнему элементу массива.

Одномерные массивы и указатели.

Имя массива, объявленного статически, является адресом-константой элемента массива с индексом 0.

Начальный адрес определяется в момент описания массива и не может быть переопределен. Зная адрес элемента массива с индексом 0, можно получить адрес любого элемента массива, добавляя соответствующее смещение к адресу элемента массива с индексом 0. По выражению адреса можно получить значение любого элемента массива.

номер 1 2 3 4 5

индекс 0 1 2 3 4

         

.

имя эл.масс.a[0]a[1]a[2] a[3] a[4]

адрес эл.масс.a a+1 a+2 a+3 a+4

знач.эл.масс. *a *(a+1) *(a+2) *(a+3) *(a+4)

По адресу

Выделение памяти под массив динамически.

Выделение памяти динамически – выделение памяти под массив в процессе выполнения программы.

Выделить память под 7 элементов массива целого типа:

# define SIZE 7

int *p;

p=new int[SIZE];

p-содержит адрес начала массива..

Организация перебора элементов числового массива.

int a [10];

cin>>* a;

cin>>* (a+1); или for (i=0; i<10; i++)

cin>>*( a+2); cin>>* (a+i); //или cin>>a[i];

…………………

cin>>* (a+9);

Стандартный цикл перебора символов в строке.

char str [80];

int kol=0;

cin>>str;

for (i=0; str [i]!=0; i++) //подсчет количества символов в строке

kol++;

Задача 1:

Дан массив статически, заполнить с клавиатуры

Вычислить сумму элементов кратных числу k.

#include<iostream> //подключение системных средств для

using namespace std; //возможности использовать потоки ввода-вывода

int main (void)

{

const int N=5;

int mas[N],k,i,sum=0;

cout << "\nВведите K: ";

cin >> k;

cout << "\nВведите массив: ";

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

cin >> mas[i];

for (i=0; i<N; i++) {

if (mas[i]%k==0)

sum += mas[i];

}

cout << "\nS=" << sum << endl;;

return 0;

}

Задача 2:

Выделить память динамически. Заполнить массив случайными числами. Вывести массив на экран. Вычислить минимум в массиве

#include<iostream> //подключение системных средств для

using namespace std; //возможности использовать потоки ввода-вывода

#include "time.h"

#include "stdlib.h"

int main (void)

{

srand((unsigned)time(NULL));

int n, i, m=10000;

double min;

cout << "\nВведите размерность массива: ";

cin >> n;

double *p=new double[n];

for (i=0; i<n; i++) {

p[i] = (rand()%(2*m+1)-m)*0.9738179;

}

min = p[0];

cout << "\nмассив ";

for (i=0; i<n; i++) {

cout << i << "=" << p[i] << " ";

if (min>p[i])

min=p[i];

}

cout << "\nmin=" << min << endl;;

return 0;

}

Задача 3.

Задать строку статически. Ввести с клавиатуры и определить кол-во символов в строке

#include<iostream> //подключение системных средств для

using namespace std; //возможности использовать потоки ввода-вывода

int main(void)

{

char str[80];

int n, i;

cout << "\n Введите строку:";

cin.getline(str,80);

for (i=0, n=0; str[i]!=0; i++) {

n++;

}

cout << "\n Кол-во=" << n << endl;

return 0;

}

Задача 4.

Решить задачу 1, выделяя память динамически и работая через адрес

#include<iostream> //подключение системных средств для

using namespace std; //возможности использовать потоки ввода-вывода

int main(void)

{

char *p=new char[80];

int n=0;

cout << "\n Введите строку:";

cin.getline(p,80);

// цикл построен таким образом, что p содержит адрес текущего символа

while(*p!=0) {

n++;

p++; // Увеличиваем адрес для перехода к следующему символу

}

cout << "\n Кол-во=" << n << endl;

return 0;

}

Стандартные функции обработки строк

Все строки обязательно должны оканчиваться нуль-символом, и при объявлении размера массива необходимо это учитывать. Когда вы объявляете строковую переменную как массив символов, увеличьте размер массива на один символ для нуль-символа. Использование строк с конечным нулем также имеет то преимущество, что здесь отсутствуют ограничения, накладываемые реализацией C++. Кроме того, структура очень проста.

Ввод строк

В программах, которые мы рассматривали, операторы потокового вывода выводили строковые константы; C++ поддерживает потоковый вывод для строк как специального не-предопределенного типа данных. (Можно сказать, что это было сделано по требованию масс.) Операции и синтаксис для вывода строковых переменных остаются прежними. При вводе строк операция извлечения из потока » не всегда будет работать так, как вы ожидаете, поскольку строки часто содержат пробелы, которые игнорируются оператором ввода; поэтому вместо оператора ввода вам нужно использовать функцию getline. Эта функция вводит заданное количество символов.

Функция getline

Перегруженная функция getline объявляется следующим образом:

istreams getline( signed char *buffer,

int size,

char delimiter = '\n') ;

istreams getline( unsigned char *buffer,

int size,

char delimiter = '\n') ;

istream& getline( char *buffer,

int size,

char delimiter = '\n') ;

Параметр buffer является указателем на строку, в которую помещаются вводимые символы. Параметр size задает максимальное количество вводимых символов. Параметр delimeter определяет символ-ограничитель, при появлении которого ввод символов прекращается прежде, чем будут введены все size символов. Параметр delimeter имеет аргумент по умолчанию, равный '\n'. В случае ввода символов с клавиатуры этот символ появляется в потоке ввода при нажатии клавиши

Пример

#include <iostream>

int main()

{

char name[80] ;

cout « "Enter your name: ";

cin.getline(name, sizeof(name) - 1);

cout « "Hello " « name « ", how are you?";

return 0;

}

Наши рекомендации