Тема: Поняття масиву. Оголошення одновимірного масиву. Індексація елементів масиву. Введення даних у масив та відображення його вмісту. Використання багаторядкових текстових полів для введення даних у масив та їх відображення.

  • doc
  • 26.11.2021
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала 23-24.doc

Урок 23-25

 

Тема: Поняття масиву. Оголошення одновимірного масиву. Індексація елементів масиву. Введення даних у масив та відображення його вмісту. Використання багаторядкових текстових полів для введення даних у масив та їх відображення. Пошук даних у масиві. Обчислення підсумкових показників для числового масиву. Обчислення підсумкових характеристик для елементів, що задовольняють певним властивостям.  Вибирання елементів з масиву за певним критерієм. Сортування масивів. Пошук елементів у відсортованому масиві.

 

Навчальна мета: Засвоїти відомості з основ програмування, познайомитися з мовою С++ та її складовими, а саме масивами та роботою з ними, вибіркою даних з масивів

 

Розвивальна мета: Розвивати координацію рухів, зорову пам’ять, вміння працювати з програмами

 

Виховна мета: Виховувати зосередженість, вміння активно сприймати новий матеріал.

 

Тип уроку:  Урок вивчення нового матеріалу (лекція)

 

Структура уроку

I.                   Організаційний момент

II.                Етап орієнтації

III.             Етап проектування

IV.            Етап навчальної діяльності

V.               Робота за ПК

VI.            Контрольно-оцінювальний етап

VII.         Домашнє завдання                                                                                                                                                                                                                                                                                                

Хід уроку

І. Організаційний момент

Сьогодні ми з вами розглянемо тему: «Поняття масиву. Оголошення одновимірного масиву. Індексація елементів масиву. Введення даних у масив та відображення його вмісту. Використання багаторядкових текстових полів для введення даних у масив та їх відображення. Пошук даних у масиві. Обчислення підсумкових показників для числового масиву. Обчислення підсумкових характеристик для елементів, що задовольняють певним властивостям.  Вибирання елементів з масиву за певним критерієм. Сортування масивів. Пошук елементів у відсортованому масиві.».

 

II. Етап орієнтації

Мета сьогоднішнього уроку якомога найкраще познайомитися з відомостями з основ програмування, навчатися створювати найлегші програми для роботи з масивами за допомогою мови програмування С++

 

III. Етап проектування

План уроку

  1. Поняття масиву.
  2. Оголошення одновимірного масиву.
  3. Індексація елементів масиву.
  4. Введення даних у масив та відображення його вмісту.
  5. Використання багаторядкових текстових полів для введення даних у масив та їх відображення.
  6. Пошук даних у масиві.
  7. Обчислення підсумкових показників для числового масиву.
  8. Обчислення підсумкових характеристик для елементів, що задовольняють певним властивостям.  
  9. Вибирання елементів з масиву за певним критерієм.
  10. Сортування масивів.
  11. Пошук елементів у відсортованому масиві.

ІV. Етап навчальної діяльності

 

Масив (arrаy)– набір однотипних даних. Прикладами масиву можуть бути списки результатів контрольної роботи, змін температури, імен та ін..

Масив можна об’явити наступним чином:

іnt arrаy[5];

 

 

 

 

 

 


Запис іnt score[5] означає, що всі 5 елементів масиву(списку) мають тип іnt. До кожного з елементів масиву можна звернутися окремо score[0], score[1], …, score[4].

Зверніть увагу! Нумерація елементів масиву завжди починається не з 1, а з 0.

Змінні, які утворюють масив називаються індексовані або нумеровані змінні або елементи масиву.

Число в квадратних дужках називається індексом чи номером елемента масиву.

Кількість елементів масиву називається його об’явленим розміром або просто розміром.

ВСІ ЕЛЕМЕНТИ МАСИВУ ПОВИННІ БУТИ ОДНАКОВОГО ТИПУ ДАНИХ.

Тип даних масиву називають базовим типом масиву.

Записувати (зчитувати) дані в(з) масив(у) можна таким же чином, як і записувати дані в змінну.

cin >> score[2];

cout<< “Другий елемент масиву дорівнює ”<<score[2]<<endl;

Не потрібно плутати ситуації, коли ви об’являєте масив та коли ви його використовуєте. При об’яві масиву в дужках ставиться кількість елементів масиву, а при використанні – число в дужках означає який саме елемент масиву ви використовуєте.

 

 

 

 

 

 


Коли ви не знаєте скільки елементів буде містити масив можна використовувати змінну і, яка означає, що кількість елементів масиву і може бути будь-яка.

 

 

Listing

//Програма зчитує 5 значень і визначає наскільки кожне значення менше //максимального.

#include <iostream>

#include <conio.h> // Для функции getch()

using namespace std;

int main()

{

setlocale(LC_ALL, "rus"); // Вивід тексту на російській мові

int i, score[5], max;

cout<<”Введіть п’ять значень:”<<endl;

cin>>score[0];

max=score[0];

for (i=1; i<5; i++)

{

cin>>score[i];

if(score[i] > max)

max = score[i];

 }

cout<<”Максимальне значення дорівнює ”<<max<<endl;

       cout<<”Введені значення і різниця цих значень з максимальним значенням”<<endl;

       for (i=0; i<5; i++)

       {

       cout<<score[i]<<”менше на”<<(max-score[i])<<endl;

       }

       getch(); // Задержка экрана до нажатия любой клавиши.

       //По нажатию любой клавишы, программа закроется

       return 0;

       }

 

Приклад діалогу

Введіть п’ять значень:

5 9 2 10 6

Максимальне значення дорівнює 10

Введені значення і різниця цих значень з максимальним значенням

5 менше на 5

9 менше на 1

2 менше на 8

10 менше на 0

6 менше на 4

В прикладі продемонстровано використання масивів в циклі for. Цей цикл ідеально підходить для використання масивів. Наприклад, ось такий синтаксис використання:

for (i=0; і < розміру масиву; i++)

       {

Дії з елементами масиву;

….

       }

Ініціалізація(надання значення) масиву потрібна бути завжди! Вона може відбуватися двома способами:

І спосіб. Ініціалізація масиву відбувається так:

int child[3] = {2, 12, 1};

IІ спосіб. Ініціалізація масиву відбувається так:

int child[3];

child[0] = 2;

child[1] = 12;

child[2] = 1;

Масив можна використовувати в функціях, але ми з вами лише поверхово знайомимося з програмуванням, тому це ми вивчати не будемо.

 

Часто буває так, що точний розмір масиву невідомий та може змінюватися при кожному запуску програми. Найбільш вигідне рішення такої задачі – це масив з найбільшою кількістю індексів, які можуть знадобитися в програмі. У такому випадку програма можу використати весь масив або лише ту його частину, яка потрібна!

 

В наступній програмі ілюструється приклад часткового заповнення масиву. За кількістю заповнених елементів масиву слідкує змінна number_user, елементи зберігаються в масиві score, з нумерацією від 0 до  (number_user – 1).

Listing 2

//Програма зчитує значення (менше 100) і визначає їх суму.

#include <iostream>

#include <conio.h> // Для функции getch()

using namespace std;

int main()

{

setlocale(LC_ALL, "rus"); // Вивід тексту на російській мові

const int number_score = 100;

int i(0), score [number_score], sum(0), number_user(0), next(0), index(0);

cout<<”Введіть значення не більше”<< number_score

  <<”цілих чисел, кінець списку позначте від’ємним числом:”<<endl;

cin>>next;

while((next>=0) && (index< number_score))

{

score [index]=next;

index++;

cin>>next;

}

number_user = index;

for(i=0;i<number_user; i++)

{

    sum=sum+score[i];

}

cout<<”Сума всіх значень дорівнює ”<<sum<<endl;

       getch(); // затримка екрана до натискання будь-якої клавіши

       return 0;

       }

 

Пошук даних в масиві виконується за допомогою методу послідовного пошуку (програма просто порівнює елемент з елементами масиву і виводить висновок). Для пошуку в масиві використовується порівняння елементів масиву з числом. Якщо елемент  порівняння в масиві відсутній, то  функція виводить значення -1.

Змінна target – це елемент для пошуку в масиві

 

// Програма для пошуку в масиві числа

#include <iostream>

#include <conio.h>

using namespace std;

int main()

{

setlocale(LC_ALL, "rus");

int i(0), score[i], target(0), k(0), elem(-1);

cout<<" Введіть 5 значень "<<endl;

cin>>score[0]>>score[1]>>score[2]>>score[3]>>score[4];

cout<<endl;

cout<<"Введіть число для пошуку в масиві "<<endl;

cin>>target;

cout<<endl;

cout<<"Ви ввели "<<target<< "  число"<<endl;

i=0;

while(i < 5)

{

if(target == score[i])

{

elem=i;

}

i++;

}

if(elem==-1)

{

cout<<target<<"Число не знайдено! ";

}

if(elem>-1)

{

cout<<" Число "<<target<< " знаходиться під елементом масиву " <<elem<<endl;

}

 getch();

       return 0;

       }

 

 

Розглянемо задачу по сортуванню списку значень, наприклад для розташування елементів масиву за зростанням або спаданням (можна за алфавітом, якщо це символи).

 

#include <iostream>

#include <conio.h>

void fill_array(int a[], int size, int& number_user);

void sort(int a[], int number_user);

void values(int& v1,int& v2);

void index_small(const int a[],int start_index, int number_user);

int main()

{

using namespace std;

setlocale(LC_ALL, "rus");

int sample_array[10], number_user;

fill_array(sample_array, 10, number_user);

sort(sample_array,number_user);

cout<<"Sortirovanie Chasla: "<<endl;

for(int index=0; index<number_user; index++)

cout<<sample_array[index]<<" ";

cout<<endl;

 getch();

 return 0;

}

 

void fill_array(int a[], int size, int& number_user)

{

    using namespace std;

    cout<<"Vvedite nt bolee "<<size<<" polojitelnih celih chisel"<<endl;

    cout<<"Konec spiska oboznachte otricatelnim chislom"<<endl;

    int next, index=0;

    cin>>next;

    while((next>=0)&&(index < size))

    {

        a[index]=next;

        index++;

        cin>>next;

    }

    number_user=index;

}

 

void sort(int a[], int number_user)

{

    int index_of_next_small;

    for(int index=0;index<(number_user-1);index++)

    index_of_next_small=index_small(a,index,number_user);

values(a[index],a[index_of_next_small]);

}

}

 

void values(int& v1,int& v2)//

{

 int temp;

 temp=v1;

 v1=v2;

 v2=temp;  

}

     

 void index_small(const int a[],int start_index, int number_user)

{

   int min = a[start_index], index_of_min=start_index;

   for(index=start_index+1;index<number_user;index++)

   if(a[index]<min)

   {

        min=a[index];

        index_of_min=index;

    }

    return index_of_min;

}

 

Приклад діалога

 

Введіть не більше 10 додатніх цілих чисел

Кінець списку помітьте від’ємним числом

80 30 50 70 60 90 20 30 40 -1

Відсортовані числа:

20 30 40 50 60 70 80 90

 

 

Багатомірний масив – це масив, який містить декілька індексів. Багатомірний масив можна використовувати для створення речень та тексту. Бувають строки двох типів – С-строки та просто строки.

Строкова змінна – це той же масив символів. Наприклад, масив char f [10]; може зберігати строку в 9 символів. 10 символів вона зберігати не може, так як останній символ строкової змінної – це нуль-символ. Позначається нуль-символ ‘\0.  Цей символ служить сигнальною міткою, яка означає кінець строки. Наприклад, слово «Привіт!» збережене в масиві виглядатиме так:

 

f[0]

f[1]

f[2]

f[3]

f[4]

f[5]

f[6]

f[7]

f[8]

f[9]

П

р

и

в

і

т

!

\0

 

 

 

Надпись: Синтаксис об’яви строкових змінних

char Назва_масиву [Максимальний_розмір_строки+1];

 

Строкову змінну можна ініціювати (надати їй значення) під час об’яви. Наприклад,

char f [10]= Привіт!”;

 

Запам’ятайте, що char f [10]= Привіт!”; і char f [10]= {П,р,и,в,і,т,!}; це не одне і теж!

У першому випадку створиться масив з строковим значенням, у другому випадку просто символи, які не є текстом.

 

Строкові значення не схожі на числові і звичайні операції присвоєння( = ) та прирівняння ( = = ) з ними не працюють. Тому слід звернути увагу на такі нюанси:

1.      Присвоювати значення можна тільки при об’яві строкової змінної за допомогою оператора присвоєння( = ). В інших місцях програми це буде помилка!

2.      Для того, щоб присвоїти значення строковій змінній в програмі потрібно використовувати функцію strcpy(Назва_масиву, значення”); Наприклад,

strcpy(score,”Hello!”);

3.      Для перевірки рівності двух строк використовується функція strcmp(строка 1, строка2); Наприклад,

if(strcmp(csting1,cstring2))

cout<<”Строчки різні”;

else

cout<<”Строчки однакові”;

4.      Для використання функцій роботи зі строками існує бібліотека #include <cstring>

5.      Деякі функції бібліотеки cstring

 

 

Функція

Опис функції

Застереження

strcpy(Цільова строка, Строка, що копіюється)

Копіює строкове значення Строка, що копіюється в строкову змінну Цільова строка

Не перевіряє, чи досить довжини строкової змінної Цільова строка для того, щоб помістити значення Копіюємої строки

strcat(Цільова строка, Строка, що приєднується)

Приєднує строкове значення Строка, що копіюється в кінець значення строкової змінної Цільова строка

Не перевіряє, чи досить довжини строкової змінної Цільова строка для того, щоб помістити результат об’єднання

strlen(Вимірювальна строка)

Повертає ціле число, яке дорівнює довжині строки без урахування нуль-символу

Немає

strcmp(Строка1, Строка2)

Якщо Строка1 і Строка2 співпадають, повертає 0. Якщо Строка1 менше за Строку2 повертає від’ємне число. Якщо Строка1 більша за Строку2, повертає додатне число.

Якщо строки співпадають, функція повертає 0, який переходить у логічний вираз false. Якщо не співпадають, то видає число, яке сприймається як True.

 

char a[80],b[80];

cout<<”Введіть будь-що: ”<<endl;

cin>>a>>b;

cout<<a<<b<<”—Кінець виводу”<<endl;

 

Приклад діалогу

Введіть будь-що:

Шла Саша по шоссе и сосала сушку

ШлаСаша—Кінець виводу

 

Як ви думаєте чому такий вивід? У С++ кожна із змінних отримує тільки по одному введеному слову, змінній а присвоюється строкове значення «Шла», а змінній b значення «Саша», тому що після нього стоїть пробіл. Для читання всієї вводимої строки і присвоєння її змінній потрібно використовувати функцію getline.  

 

Надпись: Синтаксис функції getline
getline(cin.Строкова змінна, розмір масиву);

 

Наприклад,

char a[80];

cout<<”Введіть будь-що: ”<<endl;

cin.getline(a,80);

cout<<a <<”—Кінець виводу”<<endl;

 

Приклад діалогу

Введіть будь-що:

Шла Саша по шоссе и сосала сушку

Шла Саша по шоссе и сосала сушку—Кінець виводу

Якщо строка коротше того, що ввів користувач, то «зайве» відкидається

Наприклад,

char a[11];

cout<<”Введіть будь-що: ”<<endl;

cin.getline(a,11);

cout<<a <<”—Кінець виводу”<<endl;

 

Приклад діалогу

Введіть будь-що:

Шла Саша по шоссе и сосала сушку

Шла Саша п—Кінець виводу

 

Багатомірні масиви

Іноді зручно працювати з масивом у якого не один індекс, а декілька. Нижче приведений приклад, масив під назвою page, який має два індекса(перший з них вимірюється від 0 до 29., а другий від 0 до 99.

char page [30] [100];

Даний масив складається з наступних елементів:

page [0] [0], page [0] [1], ………….. , page [0] [99]

page [1] [0], page [1] [1], ………….. , page [1] [99]

………………………………………………………

page [29] [0], page [29] [1], ………….. , page [29] [99]

 

Кожен індекс має свою пару квадратних дужок. Даний масив містить 30 строк і 100 стовбців.

Надпись: Синтаксис об’яви багатомірного масиву
char Назва_масиву[Розмір1] [Розмір2] ……[Розмір т];

 

Звичайні строки мають тип string і їм властиві такі функції:

 

Функція

Опис функції

string str;

Створює пустий об’єкт типу string

string str(“oooooobh”);

Створює об’єкт типу string із значенням “oooooobh”

str[i]

Звертання для читання та запису до символу з індексом і

str.substr(position,length)

Повертає підстроку об’єкта, яка почитається з позиції  position, і має довжину length

str.c_str()

Надає доступ для читання С-строки, представленої об’єктом string

str.at(i)

Звертається для читання та запису до строки string і індексу і

str1=str2

Виділяє для строки str1 об’єм пам’яті рівний довжині строки str2 і ініціалізує строку str1 значенням str2

str1+=str2

Символи строки str2 додаються в кінець строки str1, для якої виділяється необхідний об’єм пам’яті

s.empty()

Якщо строка s пуста, повертає значення True, якщо не пуста, то повертає значення false.

str1+str2

Повертає строку, яка є об’єднанням строк str2 і str1. Виділяє необхідний об’єм пам’яті для результуючої строки

str.insert(pos, str2)

Поміщає строку str2 в строку str, починаючи з позиції pos

str.remove(pos, len)

Видаляє із строки str підстроку довжиною len починаючи з позиції pos

str1 = = str2

Перевіряє чи рівні строки та повертає відповідне логічне значення

srt1 ! = str2

str1 < str2

str1 > str2

str1 >= str2

str1 < = str2

Порівнює строки

str.find(str1)

Повертає індекс початку підстроки str1, яка входить в строку str

str.find(str1, pos)

Повертає індекс початку підстроки str1, яка входить в строку str, пошук починається з позиції pos

str.find_first_of(str1, pos)

Визначає в якій позиції в строчці str зустрічається перший символ, який присутній у строчці str1, пошук починається з позиції pos

str.find_first_not_of(str1, pos)

Визначає в якій позиції в строчці str зустрічається перший символ, який відсутній у строчці str1, пошук починається з позиції pos

 

Оператори при рівняння та порівняння дають логічні результати, які зрозумілі кожному. Немає таких проблем, як з використанням С-строк.

 

Масиви строк використовуються таким же чином, як і інші масиви. Наприклад,

string list[20];

cout<<”Введіть 20 імен, кожне в окремій строчці:”<endl;

int i;

for(i=0; i<20; i++)

getline(cin,list[i]);

cout<<”Ось вони, ці 20 імен:”<<endl;

for(i=0; i<20; i++)

cout<<list[i]<<endl;

 

Завдання

  1. Напишіть програму, яка б зчитувала 10 додатніх чисел і виводила б їх на екран.
  2. Напишіть програму, яка зчитувала б дані в масив з 10 букв і виводила їх в порядку від останньої букви до першої.
  3. ***

Напишіть програму, яка зчитує ім’я людини, яке вводиться в форматі: ім’я, по-батькові, прізвище. Потім програма повинна виводити данні в форматі:

Прізвище, Ім’я, по-батькові.

      Наприклад, ввод Василь Іванович Чапаєв повинен привестися до виводу Чапаєв,     

      Василь Іванович. Довжина кожної частини ім’я 20 символів, замість одної змінної

      можливо використовувати 3. Спробуйте не використовувати функцію getline.

 

 

VI. Контрольно-оцінювальний етап

Вчитель оцінює роботу учнів на уроці

 

VII.Домашнє завдання       Вивчити терміни, конспект

Завдання. Напишіть програму, яка  зчитує з клавіатури строчки по 20 елементів кожна масивів а, b типу string і виводить на екран їхню об’днання