КАК победить массив?

КАК применяются массивы?
КАКие свойства у массивов?
КАК объявляются и применяются массивы float?
КАК ещё объявляются массивы?
КАК с помомщью массива строк заставить компьютер говорить?
КАК сортировать элементы массива? Метод пузырька


Вопрос: КАК применяются массивы?

Наверное, если раньше вы не встречались с этим словом, само понятие "массив" у вас вызывает исключительно архитектурные ассоциации: "жилой массив". Это своего рода набор зданий, расположенных на некоторой территории. Массив в программировании на любом языке - это набор данных одного типа (int, float, double...), также объединённых на одной территории. КАК? Сейчас расскажу.

До сих пор мы задавали отдельно переменные: int a=9; float f=4.14, char *str="Машина". Однако, вы удивитесь, когда я скажу, что массивы мы давно уже используем. А вы-то и не знали. Когда мы задавали строчку:

char str[6]="машина"

мы объявляли массив типа char, иными словами резервировали некоторую область памяти, длиной в 6 ячеек или клеточек (0, 1, 2, 3, 4, 5), в которую записывали символы типа char. В каждой клеточке может храниться только один символ. В любой момент мы могли обратиться к любому символу, используя индексацию, номер этой клеточки. Так, команда:

cout<<str[2];

даст нам на экране букву: "ш". Если же мы напишем такое выражение:

str[0]='п';

то в строке str (массиве str), будет записано: "пашина".

Идём дальше. Используя индексацию, мы можем вывести слово наоборот:

int i;
for(i=0; i<strlen(str)-1; i++) //вывод элементов массива
cout<<str[i]<<endl;


Меняя переменную цикла i от 0 до длины строки str -1, то есть до 6-1=5, мы последовательно выводим её содержимое на экран в столбик.

Так же можно осуществить и заполнение массива значениями:

int i;
for(i=0; i<strlen(str)-1; i++) //ввод элементов массива
cin>>str[i]>>endl;


Учтите, что число элементов массива меняться не может! Чтобы знать свои права, рассмотрим остальные свойства массивов.


Вопрос: КАКие свойства у массивов?

Свойства массивов:

1. В массиве хранятся отдельные значения, которые называются элементами.
2. Все элементы массива должны быть одного типа данных (int, float, char*...).
3. Все элементы хранятся в памяти последовательно, и первый имеет нулевой адрес.
4. Имя массива является константой и содержит адрес первого элемента массива.


Массивы могут состоять не только из символов, но и из строк. Представьте себе, что вы пишите игру-говорилку, где игрок попадает в гости к симпатичной девушке, которая вступает с ним в диалог. От того, как он ответит на них, зависит обломится ему что-то или нет. Поскольку мы сами не можем говорить за электронную девушку, должен быть какой-то набор фраз, из которого случайным образом выбирается какая-то одна. Программным языком выражаясь, мы создаём массив строк. Выбирая случайным образом индекс i, мы выводим на экран фразу: cout<<massiv[i]; i может быть и 0 и 20 и 40, поэтому вопросы и высказывания девушки не предсказуемы. А задать такой массив можно так:

char *massiv[4]={"Привет, как дела?", "Как тебя зовут?", "Какой твой любимый цвет?", "Кем ты работаешь?"};

Обратите внимание, что объявляя массив, мы помещаем его элементы в фигурные скобки, разделяя их запятыми. В конце обязательно надо поставить ;

Вопрос: КАК объявляются и применяются массивы float?

Массивы float
Пример1. Найти среднее арифметическое элементов заданного массива.

#include<stdio.h>
#define TEN 10 //так объявляются константы. Менять значения TEN после этого объявления мы не имеем права
//Здесь же константе TEN мы присвоили значение 10
void main()
{
float a[TEN], s=0; //мы объявили массив типа float из TEN(десяти) элементов и переменную s
int i; //переменная цикла

printf("Введите массив: ");

for(i=0; i<TEN; i++)
scanf("%d", m[i]); /*последовательный ввод массива*/

for(i=0; i<TEN; i++)
s = s+a[i]; /*нахождение суммы элементов*/

s=s/TEN; //нахождение среднего арифметического делением суммы на TEN, то есть на 10
printf("s = %8.2f", s);
}

Как видите, работа с массивами почти не отличается от работы с обычными числами. Удобно представлять массивы, как наборы чисел. Как правило инициализация, ввод и вывод элементов массива осуществляются через цикл for, так как в данном случае заранее известно число элементов.


Вопрос: КАК ещё объявляются массивы?

Вот примеры объявления массивов разных типов:

int masi[6]={0, 5, 345, 123, 4, -5};

float masf[4]={0.001, 0.01, 0.1, 1};

char masc1[4]={'R', 'o', 'c', 'k'};

char masc2[4]="Rock";

char *masc3="Rock";

char masc4[]="Rock"; //когда заранее не известно сколько элементов

Как видите, массивы символов можно объявлять четрьмя разными способами, и это не предел.


Вопрос: КАК с помомщью массива строк заставить компьютер говорить?

Игра-"Говорилка".

Хочется верить, что я заинтриговал вас словами об игре-говорилке, в которой ведётся диалог с компьютерной девушкой. В своё время я сам написал такую игру, под названием "Ночное рандеву". Теперь ваша очередь. Думаю, когда я дам вам в руки средства Windows, вы без труда сможете украсить свою игру полями ввода, кнопками, картинками и цветами. Пока же предлагаю вам заготовку. Строковый массив, элементы которого выводятся случайно. Заодно мы поговорим о случайных числах.

#include<iostream.h>
#include<iomanip.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>

#define SIZE 4

main()
{
int i;
char *mas[SIZE]={"Как дела?", "Что новенького?", "Я тебе нpавлюсь?", "Как тебя зовут?"}; //типичный строковый массив
char *ans; //ответ пользователя

srand(time(NULL)); //обнуляем генератор случайных чисел

//задаём цикл, который работает
do {
i=rand()%4;
cout<<"Компьютеp: "<<mas[i]<<endl<<"Человек: ";
cin>>ans;
}while(strncmp(ans, "exit",10)!=0); //пока пользователь не введёт слово "exit"

}

Вопрос: КАК сортировать элементы массива? Метод пузырька.

Метод "пузырька".

Часто при хранении разного рода информации сталкиваются с проблемой её сортировки. Пусть мы храним фамилии целого взвода солдат в базе данных. Мы бы хотели, чтобы каждый раз они выводились на экран в алфавитном порядке. Тем не менее, введены они были, возможно вразнобой, и, кроме того, время от времени в базу данных добавляют новые фамилии, а старые удаляют. Программа же должна работать всегда. Есть много разных алгоритмов сортировки. Самый простой - метод пузырька, потому что наименьшее значение постоянно "всплывает", двигаясь к вершине массива, как пузырь воздуха двигается к поверхности воды. Для примера можем рассмотреть не строки, а простые числа типа int.

#include<iostream.h>
#include<iomanip.h>
#define SIZE 10

void main()
{
int mas[SIZE]={2, 6, 4, 8, 10, 12, 89, 68, 45, 37}; //массив целых чисел
int hold; //переменная - буфер

cout<<"Элементы в исходном порядке: "<<endl;

for(int i=0; i<SIZE; i++) //выводим на экран массив mas
cout<<mas[i];

for(int p=1; p<SIZE; p++) //Запускаем 1-й цикл
for(i=0; i<SIZE-1; i++) //в котором выполняется второй

if(mas[i]>mas[i+1]) //Если предыдущее число больше последущего
{
hold=mas[i]; //предыдущее записывается в буфер
mas[i]=mas[i+1]; //в предыдущее записывается число из последующего
mas[i+1]=hold; //в последующее записывается число из буфера
}

cout<<"Элементы в исходном порядке "<<endl;

for(i=0; i<SIZE; i++)
cout<<setw(4)<<mas[i];

}

Существуют также двумерные и n-мерные массивы, применение которых требуется реже, чем одномерных массивов. Их мы рассмотрим в разделе "структуры данных".

Читать про массивы в теории - очень скучно. Гораздо приятнее использовать их на практике. Дав вам сейчас этот инструмент, я нераз буду слышать слова вашей благодарности за то, что рассказал про них.

Назад Содержание Вперёд