Секция спортивного
программирования
Тренер: старший преподаватель каф.
«Автоматика и процессы управления»
Поповкин Александр Викторович
vk.com/popovkin
Mail: microsoftintel@yandex.ru
1
Работа с массивами
Kolya Vasya Petya Slavik Michael
athlete Kolya, Vasya, Petya, Slavik, Michael
Jump(Kolya);
Jump(Vasya);
Jump(Petya);
Jump(Slavik);
Jump(Michael);
Обозначим именем Guy группу из 5 гимнастов
Guy[0] Guy[1] Guy[2] Guy[3] Guy[4]
Массив Guy, построенный из гимнастов
Элементу Guy в позиции индекс выполнить упражнение
индекс
//Программа для отдельных гимнастов
void main()
{
athlete Kolya, Vasya, Petya, Slavik, Michael;
Jump(Kolya);
Jump(Vasya);
Jump(Petya);
Jump(Slavik);
Jump(Michael);
}
//Программа для массива гимнастов
void main()
{
// Объявление массива из пяти гимнастов
athlete Guy[5];
for (int which=0; which<=4; which++);
{
// Выполнение упражнения каждым гимнастом
Jump(Guy[which]);
}
}
Пример 1.
Заполните одномерный массив размером 10 элементов числами от 1 до 10 и
выведите содержимое массива на экран в виде:
a[0] = 1
a[1] = 2
#include <iostream>
using namespace std;
int main()
{ // Инициализация переменных
int a[10]; // Массив a типа int,
// размер - 10 элементов
int i;
// Заполнить массив
for (i = 0; i < 10; i++)
a[i] = i + 1;
// Вывести массив на экран
for (i = 0; i < 10; i++)
cout << "a[" << i << "] = " << a[i] << endl;
return 0;
}
3 ЗАДАЧИ
на статические
массивы
Самостоятельно:
Введите одномерный массив из 10 элементов
типа int с клавиатуры и выведите массив на
экран так же, как и в примере 1
ЗАДАЧА 1
Самостоятельно:
Инициализируйте одномерный массив в тексте
программы и выведите его на экран
ЗАДАЧА 2
int a[10] = {10,20,30,40,50, // Массив a типа int,
9 ,8 ,7, 6, 5}; // размер - 10 элементов
Самостоятельно:
Заполните одномерный массив int a[10] случайными
числами, скопируйте его в массив int b[10]. Выведите
оба массива на экран
ЗАДАЧА 3
#include <iostream>
#include <ctime> //для ф-ии time()
#include <cstdlib> //для srand() и rand()
int main()
{ // Инициализация переменных
// Массивы a и b типа int,
// размер - 10 элементов
???????????????
// Сброс генератора случайных чисел
srand(time(NULL));
// Заполнить массив случайными числами
for (i = 0; i < 10; i++)
a[i] = rand();
// Скопировать массив a в массив b
?????????????
// Вывести массивы на экран
?????????????
}
ЗАДАЧА 3
Динамические массивы в
С++
double *arr = new double[count];
// Освобождаем память, отведенную
под динамический массив
delete [] arr;
12
Статический массив
int main()
{
const int amount = 5;
int data[5];
}
13
Динамический массив
int main()
{
int amount = 5;
int *ptr = NULL;
//адрес массива хранится в указателе ptr
ptr = new int[amount];
//освободить память по адресу ptr
delete []ptr;
}
14
15
#include <iostream>
using namespace std;
int main()
{
int amount = 0;
int *ptr = NULL;
cout << "enter amount: ";
cin >> amount;
//адрес массива хранится в указателе ptr
ptr = new int[amount];
for(int i = 0; i < amount; i++)
{
ptr[i] = rand() %100;
cout << ptr[i] << 't';
}
cout << endl;
//освободить память по адресу ptr
delete []ptr;
}
16
//подключаем необходимые библиотеки ?????????????
//подключаем стандартное пространство имен ??????
int main()
{
// Максимальное количество случайных элементов массива
const int NUMBER_RAND_MAX = 100;
// Инициируем генератор случайных чисел
?????
// Случайное количество элементов массива
int count = int((double)rand()/RAND_MAX*NUMBER_RAND_MAX);
// Выделяем память под динамический массив
double *arr = new double[count];
// Инициализируем массив случайными числами
for(int i = 0; i < count; i++)
{
arr[i] = (double)rand()/RAND_MAX;
}
// Производим поиск минимального и максимального значений
double min_value = arr[0];
double max_value = arr[0];
for(int i = 0; i < count; i++)
?????????????
//вывод максимального и минимального значений
???????????
// Освобождаем память, отведенную под динамический массив
delete [] arr;
return 0;
}
17
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
// Максимальное количество случайных элементов массива
const int NUMBER_RAND_MAX = 100;
// Инициируем генератор случайных чисел
????????????????????
// Случайное количество элементов массива
int count = int((double)rand()/RAND_MAX*NUMBER_RAND_MAX);
// Выделяем память под динамический массив
?????????????????????
// Инициириуем массив случайными числами
for(int i = 0; i < count; i++)
{
arr[i] = (double)rand()/RAND_MAX;
// вывод элементов массива ?????????????
}
// Освобождаем память, отведенную под динамический массив
?????????????????
return 0;
}
18
ЗАДАЧИ НА
ДИНАМИЧЕСКИЕ
МАССИВЫ
19
ЗАДАЧА
Создать программу с функцией, которой передаѐтся
динамический массив и его размерность.
Эта функция должна выводить сумму элементов массива.
20
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int sum(int *a, int m)
{
int i, qwe = 0;
for(i = 0; i < m; i++)
qwe = qwe + a[i];
return qwe;
}
int main()
{
int i, m, *a=0, *b;
cout << "Введите размерность -> ";
cin >> m;
// a = (int *) calloc(m, sizeof(*a));
a = new int[m];//выделение динамической памяти
b = a;
srand(time(NULL));
for(i = 0; i < m; i++)
{
*b++ = rand() %100;
cout << a[i] << "t";
}
cout << endl << "Сумма элементов массива: ";
cout << endl << sum(a, m);
delete[]a;
return 0;
}
21
ЗАДАЧА
Задание. сгенерировать дин. массив с
элеменами типа int,
размерность вводим вручную, дин. массив new,
delete
Требуется:
1) вывести исх одномерный массив в
читабельном виде
2) скопировать нечетные элементы данного
массива в целевой массив В
3) вывести полученный массив четных чисел
4) скопировать из массива а -> b все нечетные
числа
5) вывести массив
6) вывести макс. и миним. нечетные числа из
массива В
Алгоритмы сортировки
массивов
в методичке
В своем простейшем варианте она выполняется
очень медленно, поэтому обычно применяют
пузырьковую сортировку с оптимизацией. Однако
все алгоритмы пузырьковой сортировки имеют
общую особенность – обмен элементов массива
производится между двумя соседними
элементами массива.
(*)выбираем в новом массиве наибольшее число
и обменивает его с соседним (правым).
Метод пузырьковой сортировки
(метод обменной сортировки с выбором)
Отсортировать массив 142 23 97 19 2 4
по возрастанию (min -> max)
Отсортировать массив 162 26 88 22 1 2
по возрастанию (min -> max)
Отсортировать массив 4 2 19 97 23 142
по убыванию (max-> min)
Реализация пузырьковой сортировки на С++:
#include <iostream>
using namespace std;
int main()
{
int arr[6]={142, 23, 97, 19, 2, 4};
int i,j,tmp;
cout << "Unsorted massiv: ";
for ( i=0; i<6; i++)
cout << arr[i] << endl;
for ( i=0; i<6; i++)
for ( j=i+1; j<6; j++)
if( arr[i] > arr[j] )
{
tmp=arr[i];
arr[i]=arr[j];
arr[j]=tmp;
}
cout <<" Sorted massiv: ";
for ( i=0; i<6; i++)
cout << arr[i] << endl;
return 0;
}
#include <iostream>
using namespace std;
int main()
{
int arr[6]={4 2 19 97 23 142};
int i,j,tmp;
cout << «Unsorted massiv»";
for ( i=0; i<6; i++)
cout << arr[i] << endl;
for ( i=0; i<6; i++)
for ( j=i+1; j<6; j++)
if( arr[i] > arr[j] )
{
tmp=arr[i];
arr[i]=arr[j];
arr[j]=tmp;
}
cout << " Sorted massiv: ";
for ( i=0; i<6; i++)
cout << arr[i]) << endl;
return 0;
}
ЗАДАЧА 4
Отсортировать массив 4
2 19 97 23 142
по убыванию
(max-> min)
ЗАДАЧА 5
Отсортировать массив
9, 12, 43, 2, 4, 78, 15, 34, 11, 27
по возрастанию (min -> max)
Progr labrab-4-2013-c++

Progr labrab-4-2013-c++

  • 1.
    Секция спортивного программирования Тренер: старшийпреподаватель каф. «Автоматика и процессы управления» Поповкин Александр Викторович vk.com/popovkin Mail: microsoftintel@yandex.ru 1
  • 3.
    Работа с массивами KolyaVasya Petya Slavik Michael athlete Kolya, Vasya, Petya, Slavik, Michael Jump(Kolya); Jump(Vasya); Jump(Petya); Jump(Slavik); Jump(Michael);
  • 4.
    Обозначим именем Guyгруппу из 5 гимнастов Guy[0] Guy[1] Guy[2] Guy[3] Guy[4] Массив Guy, построенный из гимнастов Элементу Guy в позиции индекс выполнить упражнение индекс
  • 5.
    //Программа для отдельныхгимнастов void main() { athlete Kolya, Vasya, Petya, Slavik, Michael; Jump(Kolya); Jump(Vasya); Jump(Petya); Jump(Slavik); Jump(Michael); } //Программа для массива гимнастов void main() { // Объявление массива из пяти гимнастов athlete Guy[5]; for (int which=0; which<=4; which++); { // Выполнение упражнения каждым гимнастом Jump(Guy[which]); } }
  • 6.
    Пример 1. Заполните одномерныймассив размером 10 элементов числами от 1 до 10 и выведите содержимое массива на экран в виде: a[0] = 1 a[1] = 2 #include <iostream> using namespace std; int main() { // Инициализация переменных int a[10]; // Массив a типа int, // размер - 10 элементов int i; // Заполнить массив for (i = 0; i < 10; i++) a[i] = i + 1; // Вывести массив на экран for (i = 0; i < 10; i++) cout << "a[" << i << "] = " << a[i] << endl; return 0; }
  • 7.
  • 8.
    Самостоятельно: Введите одномерный массивиз 10 элементов типа int с клавиатуры и выведите массив на экран так же, как и в примере 1 ЗАДАЧА 1
  • 9.
    Самостоятельно: Инициализируйте одномерный массивв тексте программы и выведите его на экран ЗАДАЧА 2 int a[10] = {10,20,30,40,50, // Массив a типа int, 9 ,8 ,7, 6, 5}; // размер - 10 элементов
  • 10.
    Самостоятельно: Заполните одномерный массивint a[10] случайными числами, скопируйте его в массив int b[10]. Выведите оба массива на экран ЗАДАЧА 3
  • 11.
    #include <iostream> #include <ctime>//для ф-ии time() #include <cstdlib> //для srand() и rand() int main() { // Инициализация переменных // Массивы a и b типа int, // размер - 10 элементов ??????????????? // Сброс генератора случайных чисел srand(time(NULL)); // Заполнить массив случайными числами for (i = 0; i < 10; i++) a[i] = rand(); // Скопировать массив a в массив b ????????????? // Вывести массивы на экран ????????????? } ЗАДАЧА 3
  • 12.
    Динамические массивы в С++ double*arr = new double[count]; // Освобождаем память, отведенную под динамический массив delete [] arr; 12
  • 13.
  • 14.
    Динамический массив int main() { intamount = 5; int *ptr = NULL; //адрес массива хранится в указателе ptr ptr = new int[amount]; //освободить память по адресу ptr delete []ptr; } 14
  • 15.
    15 #include <iostream> using namespacestd; int main() { int amount = 0; int *ptr = NULL; cout << "enter amount: "; cin >> amount; //адрес массива хранится в указателе ptr ptr = new int[amount]; for(int i = 0; i < amount; i++) { ptr[i] = rand() %100; cout << ptr[i] << 't'; } cout << endl; //освободить память по адресу ptr delete []ptr; }
  • 16.
    16 //подключаем необходимые библиотеки????????????? //подключаем стандартное пространство имен ?????? int main() { // Максимальное количество случайных элементов массива const int NUMBER_RAND_MAX = 100; // Инициируем генератор случайных чисел ????? // Случайное количество элементов массива int count = int((double)rand()/RAND_MAX*NUMBER_RAND_MAX); // Выделяем память под динамический массив double *arr = new double[count]; // Инициализируем массив случайными числами for(int i = 0; i < count; i++) { arr[i] = (double)rand()/RAND_MAX; } // Производим поиск минимального и максимального значений double min_value = arr[0]; double max_value = arr[0]; for(int i = 0; i < count; i++) ????????????? //вывод максимального и минимального значений ??????????? // Освобождаем память, отведенную под динамический массив delete [] arr; return 0; }
  • 17.
    17 #include <iostream> #include <cstdlib> #include<ctime> using namespace std; int main() { // Максимальное количество случайных элементов массива const int NUMBER_RAND_MAX = 100; // Инициируем генератор случайных чисел ???????????????????? // Случайное количество элементов массива int count = int((double)rand()/RAND_MAX*NUMBER_RAND_MAX); // Выделяем память под динамический массив ????????????????????? // Инициириуем массив случайными числами for(int i = 0; i < count; i++) { arr[i] = (double)rand()/RAND_MAX; // вывод элементов массива ????????????? } // Освобождаем память, отведенную под динамический массив ????????????????? return 0; }
  • 18.
  • 19.
    19 ЗАДАЧА Создать программу сфункцией, которой передаѐтся динамический массив и его размерность. Эта функция должна выводить сумму элементов массива.
  • 20.
    20 #include <iostream> #include <ctime> #include<cstdlib> using namespace std; int sum(int *a, int m) { int i, qwe = 0; for(i = 0; i < m; i++) qwe = qwe + a[i]; return qwe; } int main() { int i, m, *a=0, *b; cout << "Введите размерность -> "; cin >> m; // a = (int *) calloc(m, sizeof(*a)); a = new int[m];//выделение динамической памяти b = a; srand(time(NULL)); for(i = 0; i < m; i++) { *b++ = rand() %100; cout << a[i] << "t"; } cout << endl << "Сумма элементов массива: "; cout << endl << sum(a, m); delete[]a; return 0; }
  • 21.
    21 ЗАДАЧА Задание. сгенерировать дин.массив с элеменами типа int, размерность вводим вручную, дин. массив new, delete Требуется: 1) вывести исх одномерный массив в читабельном виде 2) скопировать нечетные элементы данного массива в целевой массив В 3) вывести полученный массив четных чисел 4) скопировать из массива а -> b все нечетные числа 5) вывести массив 6) вывести макс. и миним. нечетные числа из массива В
  • 22.
  • 23.
    В своем простейшемварианте она выполняется очень медленно, поэтому обычно применяют пузырьковую сортировку с оптимизацией. Однако все алгоритмы пузырьковой сортировки имеют общую особенность – обмен элементов массива производится между двумя соседними элементами массива. (*)выбираем в новом массиве наибольшее число и обменивает его с соседним (правым). Метод пузырьковой сортировки (метод обменной сортировки с выбором)
  • 24.
    Отсортировать массив 14223 97 19 2 4 по возрастанию (min -> max) Отсортировать массив 162 26 88 22 1 2 по возрастанию (min -> max) Отсортировать массив 4 2 19 97 23 142 по убыванию (max-> min)
  • 25.
    Реализация пузырьковой сортировкина С++: #include <iostream> using namespace std; int main() { int arr[6]={142, 23, 97, 19, 2, 4}; int i,j,tmp; cout << "Unsorted massiv: "; for ( i=0; i<6; i++) cout << arr[i] << endl; for ( i=0; i<6; i++) for ( j=i+1; j<6; j++) if( arr[i] > arr[j] ) { tmp=arr[i]; arr[i]=arr[j]; arr[j]=tmp; } cout <<" Sorted massiv: "; for ( i=0; i<6; i++) cout << arr[i] << endl; return 0; }
  • 27.
    #include <iostream> using namespacestd; int main() { int arr[6]={4 2 19 97 23 142}; int i,j,tmp; cout << «Unsorted massiv»"; for ( i=0; i<6; i++) cout << arr[i] << endl; for ( i=0; i<6; i++) for ( j=i+1; j<6; j++) if( arr[i] > arr[j] ) { tmp=arr[i]; arr[i]=arr[j]; arr[j]=tmp; } cout << " Sorted massiv: "; for ( i=0; i<6; i++) cout << arr[i]) << endl; return 0; } ЗАДАЧА 4 Отсортировать массив 4 2 19 97 23 142 по убыванию (max-> min)
  • 28.
    ЗАДАЧА 5 Отсортировать массив 9,12, 43, 2, 4, 78, 15, 34, 11, 27 по возрастанию (min -> max)