КАК победить массив?
КАК
применяются массивы?
КАКие свойства у массивов?
КАК объявляются и применяются массивы 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-мерные массивы, применение которых требуется
реже, чем одномерных массивов. Их мы рассмотрим в разделе "структуры
данных".
Читать про массивы в теории - очень скучно. Гораздо приятнее использовать
их на практике. Дав вам сейчас этот инструмент, я нераз буду слышать слова
вашей благодарности за то, что рассказал про них.