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

Void main()

{

float *t;

int i,n;

printf(“n=”);

scanf(“%d”,&n);

t=(float*)malloc(n*sizeof(float));

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

{

printf(“x[%d]=”, i);

scanf(“%f”, &t[i]);

}

for (i=n-1; i>=0; i- -)

{

if( i%2= =0) printf(“\n”);

printf(“\t x[%d]=%f”,i,t[i]);

}

free(t);

}

У даному прикладі n – кількість чисел типу, що вводяться, float; t- покажчик на початок області, виділюваної для розміщення n чисел, що вводяться.

Доступ до ділянок виділеної області пам'яті виконується за допомогою операції індексування t[і] і t[і-1].

3. Приклад розв’язання задачі на еом (варіант №30)

3.1. Розробка алгоритму вирішення

На початку виконання, після ініціалізації датчика випадкових чисел, потрібно одержати випадкове число в діапазоні 50 - 200 (назвемо його size) і виділити пам'ять для масиву цілих чисел розміром size. Перед самим виходом із програми потрібно звільнити виділену пам'ять (після блоку 19).

На першому етапі виконання програми необхідно буде сформувати масив випадкових чисел. Перед тим як будемо звертатися до датчика випадкових чисел, необхідно його проініціалізувати (блок 2). Далі організуємо цикл із лічильником (блок 3), у кожній ітерації якого генерується наступне випадкове число й записується в наступний елемент масиву (блок 4). Після закінчення циклу заповнення масиву виводимо масив на екран (блок 5).

Нам необхідно буде обчислювати середнє значення послідовності, отже - підраховувати кількість елементів у ній. Для цього вводимо змінну nn - лічильник елементів, нульове значення цієї змінної буде показувати, що в нас немає послідовності для обробки. На початку обробки встановлюємо nn=0 (блок 6).

Далі організуємо цикл із лічильником (блок 7), у якому перебираємо елементи масиву. Для кожного елемента в першу чергу перевіряється його знак (блок 8). Якщо це негативний елемент, то це може бути перший або не перший елемент послідовності. Це можна визначити, перевіряючи значення змінної nn: якщо вона 0 - це перший елемент (блок 9). Для першого елемента запам'ятовуємо в змінної ib індекс початку послідовності, установлюємо лічильник елементів nn в 1, а в змінну av записуємо значення цього елемента (блок 10). Для не першого елемента ми збільшуємо лічильник на 1, а значення елемента підсумуємо із значенням змінної av (блок 11). Таким чином, змінна av відіграє роль накопичувача суми елементів послідовності.

Якщо ж черговий елемент послідовності позитивний, то виникає питання - чи не є цей елемент першим позитивним елементом після негативної послідовності? Це можна перевірити по лічильнику nn. Якщо елемент перший, то значення nn повинне бути більше 0 (блок 12). Якщо ні, то необхідно обробити ту негативну послідовність, що тільки що закінчилася. Для обробки в першу чергу одержуємо середнє значення (блок 13). Потім організуємо цикл (блок 14) з лічильником j, що змінюється від ib (індекс початку негативної послідовності, що ми зберегли раніше) до i-1 (i - це індекс першого позитивного елемента після негативної - це індекс першого позитивного елемента після негативної послідовності, отже i-1 – індекс останнього елемента негативної послідовності). У кожній ітерації цього циклу ми порівнюємо j-й елемент масиву із середнім значенням av (блок 15).

Рисунок 11.1 - Логічна схема програми обробки вказівників і масивів

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

Після виходу з того циклу, що почався в блоці 7, необхідно перевірити, чи не залишилася неопрацьована послідовність і, якщо так, обробити її. На схемі алгоритму показано це одним блоком 18, дії, які виконуються в цьому блоці тотожні діям, які детально показані в блоках 12 - 17.

По закінченню обробки виводимо масив-результат (блок 19) і закінчуємо програму.