Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Модуль 2 / Задание на L1

.doc
Скачиваний:
89
Добавлен:
22.04.2016
Размер:
75.78 Кб
Скачать

Модуль2

Лабораторна робота № 1.

Тема: Вказівники. Динамічна пам'ять. Двовимірні масиви.

Рядки символів і дії з ними. Функції для опрацювання рядків.

Завдання:

Для наведених нижче задач

  1. зробити математичну постановку;

  2. скласти алгоритм програми;

  3. скласти програму мовою С++ для обчислення;

  4. проаналізувати результати роботи програми;

  5. оформити протокол.

Деякі теоретичні повідомлення.

Адреси даних. Вказівники. Динамічна пам’ять.

Іноді для розв’язування задач необхідно знати не тільки значення змінної, але й її адресу в оперативній пам’яті.

Для визначення адреси даного у пам’яті використовують операцію:

&<назва даного>

Адреси зображаються шіснадцятковими числами і під час кожного виконання програми бувають різними.

У мові С++ є ще один засіб визначення адреси даного – це вказівники.

Вказівник – це змінна, значенням якої є адреса. Вона вказує на початок області оперативної пам’яті, де зберігається дане. Вказівники утворюються так:

<тип даного>*<назва вказівника>;

Можна створювати вказівники на сталі,змінні, функції, рядки та масиви.

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

Принцип динамічної організації пам’яті полягає у тому, що для змінних надається пам’ять за необхідністю. Далі ці змінні опрацьовуються і в потрібний момент пам’ять вивільняється (за вказівкою програміста). Такі змінні називають динамічними.

Для виділення динамічної пам’яті застосовують команду new:

<тип вказівника>*<назва>=new<тип змінної>;

Звільняють пам’ять за допомогою команди:

delete < назва вказівника >;

Щоб вказівник не вказував на жодну ділянку пам’яті, його необхідно занулити командою:

< назва вказівника >=NULL; або < назва вказівника >=0;

Двовимірний масив (матриця) задається так:

<тип><ім’я масиву > [<p1>][<p2>] ;

Звернення до елемента масиву :

<ім’я масиву > [<індекс рядка >] [<індекс стовпця >].

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

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

Приклад оголошення та ініціалізації двовимірного масиву цілих чисел:

int chisl [2][3]={2,3,4,5,6,7};

int chisl [2][3]={{2,3,4},{5,6,7}};

int chisl [2][3]={

2,3,4,

5,6,7

};

До елементів двовимірного масиву можна звертатися через вказівники:

*(*(<назва вказівника>+<зміщення по рядках> )

+<зміщення по стовпцях>)

Тому при обробці двовимірного масиву необхідно використовувати два цикли. Такі цикли називаються вкладеними.

Рядки символів

Рядок – це послідовність довільних символів. На відміну від інших мов програмування в С++ не визначено спеціального типу для опрацювання рядків. Рядок символів розглядається як одновимірний масив елементів типу char, який закінчується символом `\0` (нуль – символ) що є ознакою кінця.

Оголошення рядків:

char <назва рядка>[довжина рядка];

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

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

Увести масив символів можна за допомогою команди:

cin >> <назва масиву>;

Якщо рядок містить символ пропуску, то команда зчитає дані лише до першого пропуску. Щоб зчитати весь рядок до символу вводу, необхідно застосувати команду:

cin.get (<назва рядка>,<максимальна довжина рядка>);

Вивести значення рядка на екран можна за допомогою команди:

cout << <назва рядка>;

Деякі функції для опрацювання рядків (модуль string.h)

strlen(<рядок>)визначає фактичну кількість символів у рядку, застосовується у виразах;

strcat(r1, r2)команда з'єднання рядків r1, r2 в один рядок, результат присвоює змінній r1;

strncat(r1, r2,n) – до змінної r1додається перших n символів рядка r2, команда;

strcpy(r1, r2)копіює символи з рядка r2 в рядок r1, команда;

strncpy(r1, r2,n)копіює перших n символи з рядка r2 в рядок r1, команда;

strchr(r1,<символ>)визначає перше входження деякого символу у рядок r1 так: повертає рядок, який починається від першого входження заданого символу до кінця рядка r1, застосовується у виразах;

strrchr (r1,<символ>) визначає останнє входження заданого символу у рядок, застосовується у виразах;

strspn (r1, r2)визначає номер першого символу, який входить у рядок r1, але не входить у рядок r2, застосовується у виразах;

strstr (r1, r2) – визначає в рядку r1 підрядок, що починається з першого входження рядка r2 у рядок r1, застосовується у виразах;

strtok (r1, r2) – визначає частину рядка r1, яка закінчується перед першим однаковим символом рядків r1 та r2;

strnset(r1,<символ>, n) – вставляє n разів заданий символ перед рядком r1, застосовується у виразах;

strupr(r1) – перетворює усі малі літери рядка у великі;

strlwr(r1) – перетворює усі великі малі літери рядка у малі;

strrev (r1) записує рядок у зворотному порядку.

Задача 1. Двовимірні масиви. Задача про вибори.

Нехай шість населених пунктів позначені номерами від 1 до 6 (величина k), а п’ять кандидатів – номерами від 1 до 5 (величина п). Кількість голосів, набраних кандидатами у кожному пункті визначається формулою akn=random(10і+50), де і - номер варіанта. (Функція random(п) описана у модулі stdlib.h. Перед використанням функції random(п) треба записати на початку програми функцію randomize() щоб під час виконання програми кожного разу отримувати різні випадкові числа.) Вивести на екран таблицю результатів голосування, де у рядках є дані з населених пунктів, а у стовпцях - дані щодо конкретних кандидатів. Визначити і вивести значення величин з додаткового завдання. Створити одновимірний масив з шуканими даними.

  1. Які підсумкові результати кожного кандидата? (Підказка: утво­рити одновимірний масив з сум значень усіх стовпців таблиці).

  2. Які номери населених пунктів, де кількість поданих голосів перевищила 100 (утворити одновимірний масив з цих номерів)?

  3. Хто з кандидатів набрав максимальну, а хто - мінімальну кіль­кість голосів у четвертому населеному пункті?

  4. Яка кількість голосів була подана за першого і третього канди­датів у всіх населених пунктах?

  5. В яких населених пунктах другий і четвертий кандидати на­брали максимальну кількість голосів?

  6. Скільки виборців взяли участь у голосуванні у кожному насе­леному пункті?

  7. Хто з кандидатів має максимальний рейтинг?

  8. Хто з кандидатів набрав максимальну кількість голосів у друго­му населеному пункті?

  9. В якому з населених пунктах кількість опитаних більша деякого заданого числа п?

  10. За кого з кандидатів подано кількість голосів менше деякого за­даного числа n?

  11. В якому населеному пункті третій кандидат набрав макси­мальну кількість голосів?

  12. В якому населеному пункті проголосувало найбільше людей?

  13. Хто з кандидатів набрав найбільше голосів у другому і третьому населених пунктах?

  14. В якому населеному пункті перший кандидат набрав мінімальну кількість голосів, а в якому максимальну?

  15. У кого з-поміж другого, четвертого і п’ятого кандидатів найви­щий рейтинг?

  16. Хто набрав максимальну, а хто - мінімальну кількість голосів у першому населеному пункті?

  17. У яких населених пунктах перший і п’ятий кандидат набрали більше, ніж 100 голосів?

  18. Які номери населених пунктів, де кількість учасників виборів не перевищила 450?

  19. У кого з кандидатів рейтинг більший деякого заданого числа р?

  20. В яких містах кількість виборців менша деякого заданого числа?

  21. Які кандидати набрали мінімальну кількість голосів в кожному із населених пунктів?

  22. Які кандидати набрали максимальну і мінімальну кількість голосів в другому і п’ятому населених пунктах?

  23. У кого з кандидатів найменший рейтинг?

  24. У скількох кандидатів рейтинг перевищує деяке задане число п?

  25. В якому населеному пункті другий кандидат набрав мінімальну кількість голосів?

  26. Хто набрав максимальну, а хто - мінімальну кількість голосів у третьому населеному пункті?

Задача 2. Дані типу рядки.

Ввести прізвище, ім’я та по батькові як одне дане типу рядок. Визначити довжину рядка і кількість букв «а» у ньому. Виконати додатково завдання свого варіанта двома способами: а) розглядаючи рядок як масив символів;

б) застосовуючи до рядка стандартні функції.

  1. Вивести ім’я та кількість букв у третьому слові.

  2. Визначити скільки букв «а» є у прізвищі.

  3. Вивести три букви – свої ініціали с крапками.

  4. Вивести довжину прізвища та імені.

  5. Вивести прізвище та ініціали.

  6. Вивести ім’я та кількість букв у прізвищі.

  7. Визначити скільки букв в імені, усі літери прізвища записати великими.

  8. Вивести найдовше слово.

  9. Вилучити усі букви «а» та «о» з прізвища.

  10. Вивести ім’я у стовпчик.

  11. Чи починається хоч би одне слово с букви «М»?

  12. Усі букви «і» в імені продублювати.

  13. Вивести прізвище у зворотному порядку та кількість букв у імені.

  14. Вивести ім’я у зворотному порядкую.

  15. Вивести ім’я у стовпчик.

  16. Вивести ім’я по батькові та кількість букв у імені.

  17. Вивести найкоротше слово.

  18. Вивести даний рядок без пропусків. Скільки букв є в імені?

  19. Вивести довжини трьох слів.

  20. Вивести ім’я великими літерами та кількість букв у прізвищі.

  21. Вивести спочатку ім’я, потім прізвище все великими літерами.

  22. Кожну букву імені продублювати.

  23. Вивести прізвище у зворотному порядку.

  24. Визначити скільки букв «а» та «б» є у прізвище, якщо відсутні вивести повідомлення.

  25. Вивести третє слово(по батькові) та кількість букв у прізвищі.

  26. Вивести ім’я великими літерами та кількість букв в імені по батькові .

5

Соседние файлы в папке Модуль 2