СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ

Благодаря готовым учебным материалам для работы в классе и дистанционно

Скидки до 50 % на комплекты
только до

Готовые ключевые этапы урока всегда будут у вас под рукой

Организационный момент

Проверка знаний

Объяснение материала

Закрепление изученного

Итоги урока

Открытое занятие «Одномерные массивы»

Категория: Прочее

Нажмите, чтобы узнать подробности

Открытое занятие «Одномерные массивы» по учебной дисциплине ОП.03 Основы алгоритмизации и программирования .

Просмотр содержимого документа
«Открытое занятие «Одномерные массивы»»

М ИНОБРНАУКИ РОССИИ

Федеральное государственное бюджетное образовательное учреждение


высшего образования


«МИРЭА Российский технологический университет»

РТУ МИРЭА

Колледж приборостроения и информационных технологий









Одномерные массивы












22 ноября 2021

Массив – именованная последовательность областей памяти, хранящих однотипные элементы

Синтаксис определения массива без дополнительных спецификаторов и модификаторов



[ Типа Константы];

или

[];


Тип – тип элементов объявляемого массива. Элементами массива не могут быть функции, файлы и элементы типа void.







  • при объявлении массив инициализируется;

  • массив объявлен как формальный параметр функции;

  • массив объявлен как ссылка на массив, явно определенный в другом файле.


Например:

int a[100]; //массив из 100 элементов целого типа double d[14]; // массив из 14 элементов типа double char s[]="Программирование"; //символьный массив

const int t=5, k=8;float wer[2*t+k]; //массив из 2*t+k элементов вещественного типаint sample[853]; /*массив из элементов sample[0], sample[1], sample[2],...,sample[852] типа int*/ равносильно объявлению

const int N_max=853;int sample[N_max]; //равносильно объявлению

#define N_max 853...int sample[N_max];



Инициализация одномерных массивов
  • Например:

float t[5]={1.0, 4.3, 8.1, 3.0, 6.74};

char b[7]={'П','р','и','в','е','т'};/*в данных примерах длину массива компилятор вычисляет по количеству начальных значений, перечисленных в фигурных скобках*/

int d[10]={1, 2, 3};

char a[10]="Привет";/*в данных примерах определяется значение только заданных переменных d[0],d[1],d[2] и a[0],a[1],...,d[9], остальные элементы не инициализируются*/

Пусть необходимо проинициализировать массивы для создания таблицы сообщений об ошибках:

char e1[12] = "read error\n"; char e2[13] = "write error\n";

char e3[18] = "cannot open file\n";

  • Компилятор С++ сам сформирует нужное значение по количеству инициализирующих данных. В нашем случае под массив e2 будет отведено 13 байтов, включая последний байт с нулевым кодом, завершающий каждую строку. Оператор

  • printf("%s имеет длину, равную %d\n",e2,sizeof (e2)); выведет на экран write error имеет длину, равную 13

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


  • Адресация элементов массива осуществляется с помощью индексированного имени. Синтаксис обращения к элементу массива:

ИмяМассива[ВыражениеТипаКонстанты];

или

ИмяМассива[ЗначениеИндекса];

  • Таким образом, чтобы обратиться к элементу массива, надо указать имя массива и номер элемента в массиве (индекс).

  • Например:

  • a[0] – индекс задается как константа,

  • d[55] – индекс задается как константа,

  • s[i] – индекс задается как переменная,

  • w[4*p] – индекс задается как выражение.

  • Следует помнить, что компилятор в процессе генерации кода задет начальный адрес массива, который в дальнейшем не может быть переопределен. Начальный адрес массива – это адрес первого элемента массива. Вообще в программе начальным адресом массива считается ИмяМассива либо &ИмяМассива[0]. Имя массива считается константой-указателем, ссылающимся на адрес начала массива.

Определение размера памяти для одномерных массивов
  • Массив занимает непрерывную область памяти. Для одномерного массива полный объем занимаемой памяти в байтах вычисляется по формуле:

Байты = sizeof (тип) * размер массива

  • Например, пусть одномерный массив A состоит из элементов, расположенных в памяти подряд по возрастанию индексов, и каждый элемент занимает по k байт. Тогда адрес i -того элемента вычисляется по формуле:

адрес(A[i]) = адрес(A[0]) + i*k

Пример 1. Определение размера памяти одномерного массива.
  1. #include "stdafx.h“

  2. #include

  3. using namespace std;

  4. #define v 4

  5. #define p 3

  6. int _tmain(int argc, _TCHAR* argv[]){

  7. const int q=4, r=1;

  8. int i_mas[10];

  9. int k=sizeof(i_mas);

  10. cout "i_mas[10] занимает " k " байт\n";

11. float f_mas[7]={2.0,4.5,8.3,7.0,1.0};

12. int t=sizeof(f_mas);

13. cout "f_mas[7]={2.0,4.5,8.3,7.0,1.0} занимает " t

  1. double d_mas[2*q-r];

  2. int w=sizeof(d_mas);

  3. cout "d_mas[2*q-r] занимает " w " байт\n";

  4. double d1_mas[2*v/p];

  5. int w1=sizeof(d1_mas);

  6. cout "d1_mas[2*v/p] занимает " w1 " байт\n";

  7. char c_mas[]="Программирование";

  8. int s=sizeof(c_mas);

  9. cout "c_mas[]=\"Программирование\"занимает" s

  1. system("pause");

  2. return 0;

25. }

Результат выполнения программы:


  • i_mas[10] занимает 40 байт – 4 байта (тип int ) * 10 (количество элементов массива)

  • f_mas[7] = {2.0,4.5,8.3,7.0,1.0} занимает 28 байт – 4 байта (тип

float ) * 7 (объявленное количество элементов массива)

  • d_mas[2*q-r] занимает 56 байт – 8 байт (тип double ) * 7

(вычисленное через формулу количество элементов массива)

  • d1_mas[2*v/p] занимает 16 байт – 8 байт (тип double ) * 2

(вычисленное через формулу количество элементов массива)

  • c_mas[]="Программирование" занимает 17 байт – 1 байт (тип

char ) * 17 (16 знаков + нулевой байт '\0' )

Генерация одномерных массивов


Генерацию массива (массивов) в программе оформляют в виде отдельной функции. Стандартными способами генерация массивов являются:

  • ввод данных с клавиатуры,

  • формирование значений через генератор случайных чисел,

  • вычисление значений по формуле,

  • ввод данных из файла.

При этом при формировании значений элементов используют цикл по индексам элементов или арифметические операции с указателем на массив. В данной работе рассмотрим первые три способа генерации массивов ( Примеры 3, 4, 6 ).

Вывод одномерных массивов
  • Одномерные массивы удобно выводить в строку или в столбец в зависимости от задачи ( Пример 3 и 4 ).

  • Пример 3.

  1. /*Генерация целочисленного массива числами с клавиатуры и вывод массива в строку*/

  2. #include "stdafx.h "

  3. #include

  4. using namespace std;

  5. #define max 20

  6. void gen (int k,int *pp);//прототип функции генерации массива

  7. void out (int k,int x[max]);//прототип функции вывода массива

  8. int _tmain(int argc, _TCHAR* argv[]){

  9. int a[max],n,*p;

  10. do {

1. printf("\nВведите количество элементов массива n (n

2. scanf ("%d",&n); }

  1. while (nmax); //проверка выхода за границы массива

  2. p=a;

  3. gen(n,p);

  4. out(n,a);

  5. system("pause");

  6. return 0;}

  7. //Описание функции генерации массива с клавиатуры

  8. void gen(int k,int *pp){

  9. /*передача указателя как параметра позволяет вернуть сформированный массив в основную программу*/

  10. int i; printf("\nВведите значения %d элементов массива: \n",k); for (i=0;ik;i++){

14. scanf("%d",pp++);

13. printf("x[%d]= ",i);

15. }}

  1. //Описание функции вывода массива в строку

  2. void out (int k,int x[max]){

  3. int i;

  4. printf("\nВывод значений %d элементов массива в строку: \n",k);

20. for (i=0;i

21. printf("%d\t",x[i]);

22. }

Пример 4.

Описание функции генерации массива значениями элементов арифметической прогрессии


  1. void gen(int k,int x[max]) {

  2. int i,d;

  3. printf ("\nВведите нулевой элемент прогрессии: ");

4. scanf("%d",&x[0]);

5. printf ("\nВведите разность прогрессии: ");

6. scanf("%d",&d);

7. for (i=1;i

Пример 5.

Описание функции вывода массива в столбец
  1. void out (int k,int x[max]){

  2. int i;

  3. printf("\nВывод значений %d элементов массива в столбец:

\n",k);

4. for (i=0;i

5. printf("x[%i]= %d\n",i,x[i]);

6. }

Для использования функции генерации случайных чисел необходимо подключить библиотеку time.h.

Для написания кода генерации массива

случайными целыми числами используется:


  • Функция srand(). Синтаксис:

  • void srand(unsigned seed); – функция устанавливает свой аргумент как основу ( seed ) для новой последовательности псевдослучайных целых чисел, возвращаемых функцией rand(). Сформированную последовательность можно воспроизвести. Для этого необходимо вызвать srand() с соответствующей величиной seed.

  • Для использования данной функции необходимо подключить библиотечный файл stdlib.h.

  • Функция rand(). Синтаксис:

  • int rand(void); – функция возвращает псевдослучайное число в диапазоне от нуля до RAND_MAX. Для использования данной функции необходимо подключить библиотечный файл stdlib.h.

  • Константа RAND_MAX определяет максимальное значение случайного числа, которое может быть возвращено функцией rand(). Значение RAND_MAX – это максимальное положительное целое число.

  • //генерация случайных целых чисел на [a,b) x[i]=rand()%(b- a)+a;//генерация случайных вещественных чисел на [a,b) y[i]= rand()*1.0/(RAND_MAX)*(b-a)+a;

Пример 6.

Описание функции генерации массива случайными вещественными числами на[a,b)


  1. void gen(int k,int a, int b, float x[max]){

  2. int i; srand(time(NULL)*1000); //устанавливает начальную точку генерации случайных чисел

3. for (i=0;i

//функция генерации случайных чисел на [a,b)

4. }

5. }

Ключевые термины:

  • Генерация массива – это автоматическое формирование значений его элементов.

  • Значение элемента массива – это значение, хранящееся по адресу, который соответствует данному элементу.

  • Измерение массива – это количество индексов в определении массива.

  • Имя массива идентификатор, именующий выделенную под массив область памяти.

  • Индекс элемента массива – это порядковый номер элемента в последовательности.

  • Инициализация массива – это формирование значений его элементов.

  • Массив – это именованная последовательность областей памяти, хранящих однотипные элементы.

  • Одномерный массив – это массив, измерение которого равно единице.

  • Размер массива – это количество элементов в массиве.

  • Тип массива – это тип элементов массива.

  • Элемент массива – это каждая область памяти из последовательности областей, выделенных под массив.

Вопросы для самоконтроля

  1. Почему в программе на С++ необходимо, чтобы был известен размер массива?

  2. Можно ли выполнить прямое присваивание массивов объявленных так: int x[10], y[10];?

  3. Когда, с какой целью и почему возможно объявление безразмерных массивов?

  4. Может ли значение элемента массива использоваться в качестве индекса другого элемента массива?

  5. Какие ограничения распространяются на тип массива?

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

  7. Каким образом можно составить выражение для генерации массива случайными целыми числами на заданном промежутке?


Открытое занятие

Учебная дисциплина: ОП.04 Основы алгоритмизации и программирования

Тема: Одномерные массивы Дата: 22 ноября 2021 Группа: АКС-22


Сортировка одномерного массива



Скачать

Рекомендуем курсы ПК и ППК для учителей

Вебинар для учителей

Свидетельство об участии БЕСПЛАТНО!