Инициализация одномерных массивов
Инициализация массива означает присвоение начальных значений его элементам при объявлении.
Инициализация элементов массива осуществляется указанием его начальных значений в фигурных скобках:
int mas[5] = {1, -5, 10, 243, -58};
Если при инициализации задано меньше начальных значений массива, чем размер массива, остальные элементы инициализируются нулевыми значениями. Другими словами, объявление
int mas[10] = {1, 2, 3, 4, 5};
создаёт массив из 10 элементов целого типа, первые 5 из которых проинициализированы указанными значениями, а остальные – нулевыми. Этим можно воспользоваться для инициализации элементов массива нулевыми значениями:
int mas[20] = {0};
Однако если задать значений больше, чем указанный размер массива, компилятор генерирует сообщение об ошибке.
Во время инициализации можно не задавать количество элементов массива:
int mas[] = {1, 2, 3, 4, 5};
Размер массива при таком объявлении определяется количеством значений в списке инициализации. Количество элементов массива в этом случае можно определить как
const int n = (sizeof(mas) / sizeof(mas[0])); где
sizeof(mas) – количество байтов, занимаемое массивом mas, а
sizeof(mas[0]) – количество байтов, занимаемое одним элементом.
При необходимости можно задать массив констант следующим образом:
const int array[] = {5, 4, 3, 2, 1};
Тогда ни один из элементов массива array изменить будет нельзя.
Обработка одномерных массивов
В С++ работать с массивами можно только поэлементно. Если mas является массивом размера n, то отдельный элемент обозначается с помощью имени массива, за которым следует индекс требуемого элемента, например, mas[i]. Значение индекса может изменяться от 0 до n-1. В качестве номера элемента массива могут использоваться:
константа – mas[3];
переменная – mas[i];
выражение – mas[3 * ( i+2 )];
Элементы массива называют индексированными переменными. Индексированные переменные можно использовать как обычные переменные, например, с ними можно производить следующие действия:
присваивать элементу массива значение
mas[1] = 5;
использовать элементы массивов в выражениях
i = 4; y = 2 * mas[i] * sin(mas[5]);
вводить и выводить элементы массивов
cin>>mas[5]; cout<<mas[k];
Для организации ввода/вывода массива следует использовать цикл, осуществляющий ввод/вывод каждого элемента массива (поскольку в С++ работать с массивами можно только поэлементно). Доступ к элементам одномерного массива удобнее всего осуществлять, пользуясь циклом for.
Например, ввод массива можно выполнить следующим образом:
const int n = 10; // именованная константа
float mas[n]; // объявлен массив из 10 элементов
for(int i = 0; i < n; i++){ // цикл для ввода массива
cin>>mas[i];
}
В приведенном выше примере поэлементно вводится массив mas типа float размера n. Параметр оператора цикла for переменная i изменяется от 0 до n-1.
Вывод массива выполняется аналогичным образом:
for(int i = 0; i < n; i++)
cout<<mas[i]<< ' ';
// Пример 6.1. Ввести одномерный массив. Найти сумму элементов.
#include <iostream>
using namespace std;
const int DIM = 50;
int main(){
int a[DIM], n;
cout<<"Vvedi razmer massiva: "; cin>>n;
cout<<"Vvedi massiv "<<endl;
for(int i = 0; i < n; i++)
cin>>a[i];
int sum = 0;
for(int i = 0; i < n; i++)
sum = sum + a[i];
cout<<"Summa all elements = "<<sum<<endl;
system("pause");
}
Если массив достаточно большого размера нужно заполнить одинаковыми значениями или значениями, изменяющимися по строгому закону, то его инициализация нерациональна. Присвоить значения элементам массива в этом случае можно в цикле. Например:
for(int i = 0; i < n; i++) mas[i] = i;
Когда начальные значения массива не играют принципиальной роли, можно организовать заполнение массива случайным образом в нужном диапазоне значений. Для этого используют генератор случайных чисел.
// Пример 6.2. Заполнение массива случайным образом и вывод
// его на экран. Использование функций rand(), srand(n).
#include <iostream>
#include <stdlib.h>
const int DIM = 50;
using namespace std;
int main(){
int a[DIM], n;
while(true){
system("cls");
cout<<"Vvedi n:"; cin >> n;
if(n > 1 && n < DIM) break;
cout<<"Nocorrect n\n";
}
srand(n); // для получения разных послед. чисел
cout<<"\n\t 1___Massiv a(n)\n";
for(int i = 0; i < n; i++)
a[i] = rand() % 6 + 1; // числа от 1 до 6
for(int i = 0; i < n; i++)
cout<<a[i] << ' ';
cout<<"\n\t 2___ Massiv a(n)\n";
for(int i = 1; i <= 25; i++){ // вывод по 5 элементов в строку
cout.width(3);
cout<<rand() % 6 + 1;
if(i % 5 == 0)cout<<endl;
}
cout<<"\n\t 3___Massiv a(n)\n";
for(int i = 0; i < n; i++)
a[i] = rand(); // числа от 0 до RAND_MAX
for(int i = 0; i < n; i++)
cout<<a[i]<< ' ';
cout<<endl;
system("pause");
}
// Пример 6.3. Ввести одномерный массив. Разбить массив на два
// массива: – массив чётных и массив нечетных чисел.
#include<iostream>
using namespace std;
const int DIM = 50;
int main(){
int a[DIM], b[DIM], c[DIM];
int n;
cout<<"Vvedite razmer massiva: "; cin>>n;
cout<<"Vvedi massiv"<<endl;
for(int i = 0; i < n; i++)
cin>>a[i];
int indB = 0, indC = 0;
for(int i = 0; i < n; i++)
if(a[i] % 2){ c[indC] = a[ i ]; indC++; }
else { b[indB] = a[ i ]; indB++; }
cout<<"Isxodni massiv mas\n";
for(int i = 0; i < n; i++)
cout<<a[i]<<' ';
cout<<"\nMassiv chetnix chisel b\n";
for(int i = 0; i < indB-1; i++)
cout<<b[i]<<' ';
cout<<"\nMassiv nechetnix chisel c\n";
for(int i = 0; i < indC-1; i++)
cout<<c[i]<< ' ';
cout<<endl;
system("pause");
}
// Пример 6.4. Одномерный целочисленный массив проинициализировать
// случайным образом. Найти и вывести на экран значения
// минимального и максимального элементов массива и их индексы.
// Обменять местами минимальный и максимальный элементы.
#include <iostream>
#include <stdlib.h>
using namespace std;
const int DIM = 50;
int main(){
double a[DIM]; int n;
while(true){
cout<<" Vvedi razmer massiva: (n): "; cin >> n;
if(n > 0 && n <= DIM) break;
cout<<"No Correct n!\n";
}
srand(n);
cout<<"\n\tIsxodni massiv \n";
for(int i = 0; i < n; i++)
a[i] = rand() % 15 - rand() % 10;
for(int i = 0; i < n; i++)
cout<<a[i]<<' ';
int max = a[0], min = a[0];
int imax = 0, imin = 0;
for(int i = 0; i < n ; i++){
if(a[i] < min){min = a[i]; imin = i;}
if(a[i] > max){max = a[i]; imax = i;}
}
cout<<"\n max = "<<max; cout<<"\t imax = "<<imax;
cout<<"\n min = "<<min; cout<<"\t imin ="<<imin;
a[imin] = max; a[imax] = min;
cout<<"\n\tRezult massiv\n";
for(int i = 0; i < n; i++)
cout<<a[i] << ' ';
cout<<endl;
system("pause");
}
// Пример 6.5. Дан одномерный целочисленный массив.
// Отсортировать массив по не убыванию методом "пузырька".
#include <iostream>
using namespace std;
const int DIM = 50;
int main(){
double a[DIM];
int n, x;
cout<<" Vvdite razmer massiva n: "; cin>>n;
cout<<"\nVvedite massiv:"<<endl;
for(int i = 0; i < n; i++){
cout<<"a["<<i <<"] = "; cin>>a[i];
}
cout<<"\nIsxodni massiv\n";
for(int i = 0; i < n; i++)
cout<<a[i]<< ' ';
cout<<endl;
for(int i = 1; i < n; i++) //Сортировка массива
for(int j = 0; j < n-i; j++)
if(a[j] > a[j+1]){x = a[j]; a[j] = a[j+1]; a[j+1] = x;}
cout<<"\nOtsortirovanni massiv\n";
for(int i = 0; i < n; i++)
cout<<a[i] << ' ';
cout<<endl;
system("pause");
}