Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторн_робот_Ч2.doc
Скачиваний:
19
Добавлен:
03.11.2018
Размер:
2.12 Mб
Скачать

3.2. Визначення змінних програми

Пам'ять для масиву цілих чисел не виділяється на етапі компіляції, так що нам досить оголосити в програмі тільки змінну - покажчик на початок масиву:

int *Ar;

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

int s

Замість змінних будемо застосовувати покажчики: 

int *Cr - це покажчик на поточний елемент масиву при його повному створенні.

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

int av;

int nn;

3.3. Розробка тексту програми Крім файлів:

#include <stdio.h>

#include <time.h>

#include <stdlib.h>

включаємо також файл alloc.h, у якому втримуються описи функцій динамічного виділення/звільнення пам'яті:

#include <alloc.h>

Кодова частина програми починається з ініціалізації датчика випадкових чисел і одержання випадкового числа для розміру масиву:

randomize();

size=random(151)+50;

Функція rand повертає число в діапазоні 0 - 150, додаванням до нього 50 переводимо його в діапазон 50 - 200. Отриманий розмір масиву відразу виводимо на екран:

printf("size=%d\n",size);

 Звертаємося до функції виділення пам'яті:

Ar=(int far *)malloc(size*sizeof(int));

Функція malloc() вимагає параметр - розмір запрошеної пам'яті в байтах. Змінна size - це кількість елементів у масиві; для завдання розміру пам'яті в байтах множимо її на розмір одного елемента. Функція malloc() повертає нетипізований покажчик, перетворюємо його в покажчик на int і записуємо в змінну Ar.

Далі організуємо цикл створення масиву. Тут в одному циклі й одержуємо випадкові числа, і виводимо початковий масив на екран.

for (Cr=Ar; Cr<Ar+size; Cr++) {

У початкових установках циклу записуємо в змінну Cr адреса початку масиву, тобто Cr показує на елемент із індексом 0. Наприкінці кожної ітерації Cr збільшується на 1, тобто показує на наступний елемент масиву. Остання ітерація відбувається при значенні Cr=Ar+size-1, тобто Cr буде показувати на останній елемент. У кожній ітерації звертаємося до поточного елемента масиву як *Cr, тобто звертаємося до того, на що показує покажчик Cr.

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

В тілі циклу до поточного елемента масиву звертаємося через покажчик на нього: *Cr. Там, де потрібно запам'ятати початок негативної послідовності, просто зберігаємо поточне значення покажчика Cr у змінній-покажчику Ir.

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

for (av/=nn; Ir<Cr; Ir++)

if (*Ir<av) *Ir=av;

Початкові установки цього циклу - тільки усереднення значення в av, змінна Ir уже містить у собі покажчик на перший елемент негативної послідовності. Наприкінці кожної ітерації Ir збільшується на 1, тобто показує на наступний елемент послідовності (звертання до цього елемента - *Ir). Остання ітерація відбувається при значенні Ir=Cr-1, оскільки Cr показує на перший позитивний елемент за негативною послідовністю.

Кінець програми повторює попередні фрагменти.

Передостанній оператор - звертання до функції free() для звільнення пам'яті, що була виділена функцією malloc(): free(Ar);

Повний текст програми наведений нижче.

#include <stdio.h>

#include <time.h>

#include <stdlib.h>

#include <alloc.h>