Автор: Пользователь скрыл имя, 23 Декабря 2012 в 18:16, курсовая работа
Задача 22: Создать и вывести на экран новый массив, состоящий из элементов входного массива, в котором поменять местами предпоследний положительный элемент с элементом, который имеет наибольшее значение, а также их разность вставить перед элементом с ближайшим к нему индексом.
Вступ………………………………...…………………………………………….4
Опис завдання…………………………...………………………………………..6
Постановка завдання………………..…………………………………...……….7
Алгоритм розв’язку задачі…………………….…….………………………….11
Тестування програми…………………………….……………………….…….13
Програма на мові Сі з реалізації розробленого алгоритму розв’язку задачі .......15
Результати дослідження……..………………………………....……………….17
Оцінка результатів виконання програми……………………………………...27
Синтаксичні елементи мови Сi, які використані в програмі ……………………28
Висновок…………………………………………………………………………29
Зміст
Вступ
Курсова робота – це самостійне навчально-наукове дослідження студента, яке виконується з певного курсу або з окремих його розділів
Виконання курсових робіт направлене на досягнення наступних цілей:
Курсова робота оформляться згідно з ГОСТом 7.32-81 «Отчет о научно-исследовательской работе, общие требования и правила оформления»; ГОСТ 2.105-68 «Общие требования к текстовым документам» і « ГОСТ 2.106-68 «ЕСКД текстовые документи».
Метою написання курсової роботи є набуття практики роботи над задачами на порядок більш складними, ніж стандартні. Передбачається обов'язкова робота з літературою, вивчення необхідних розділів самостійно, адаптація відомих засобів програмування для розв'язування конкретних задач з особливостями, комбінування різних методів та інструментальних засобів, застосування у комплексних задачах знань з різних розділів курсу тощо.
Розв'язання задачі за допомогою алгоритмічної мови передбачає наступні дії:
Опис завдання
Варіант завдання
для студентів групи КБ11 відповідно до порядкового № в журналі
Порядковий № 22, отже i=22.
Завдання 22: Створити
і вивести на екран новий масив,
що складається з елементів
Номер функції n знаходимо за формулою i+10. Так як функцій всього дано 25, тому номер функції знаходимо таким чином. n=i+10-25=22+10-25=7.
n |
Функція fn (x) |
7 |
13,4 cos|x| sin(x2-2,20) |
I. Постановка задачі
Масив – це скінченне число даних одного типу. Для формування одномірного масиву необхідно вказати тип, ім’я і розмірність. Оскільки функція f7(k) відноситься до тригонометричного класу, то тип функції дійсний, використовуємо дійсний тип float. Ми досліджуємо елементи масиву в інтервалі від 1 до 10, а індекс починається з 0, то розмірність буде 11 (позначимо її int Rk=11).
float M[11]
Елементи масиву:
M[k]=13,4 cos|k| sin(k2-2,20), k =1, 2, ..., 10.
Оскільки дії з визначенням елементу масиву повторюються використовуємо цикл з параметром
for (k=1; k<Rk; k++), де k – параметр циклу, який змінюється від 1 до 10.
Для виведення індексу масиву та його значення використаємо оператор
printf("\n%7d %4.2f \n", k, M[k]);
Так як в умові завдання вказано, що потрібно створити і вивести новий масив, що складається з вихідного масиву, то для початку присвоюємо кожен елемент масиву M[k] відповідному елементу масиву M_nov[n], за допомогою циклу, розмірність якого [12], тому що передбачається дописання різниці передостаннього позитивного елемента з найбільшим значенням , тип нового масиву аналогічний вихідному масиву – дійсні числа. Вже в новому масиві будемо проводити решту операцій.
В умові задачі вказано, що потрібно знайти передостанній позитивний елемент. Для цього знаходимо всі позитивні елементи, зафіксовуватимемо їхні індекси (позначимо індекси позитивних елементів так: ind – цілий тип), а також зафіксовуємо індекс попереднього позитивного значення (позначимо індекси попереднього позитивного значення так: indp – цілий тип). Для знаходження індексів позитивних значень застосовуємо операцію порівняння з «нулем».
Використовуємо оператор циклу
if (M[n]>0)
indp=ind;
ind=n;
Потрібно передбачити ситуацію, що передостаннього позитивного елемента немає. Для цього перед тим як знаходити передостаннє позитивне значення порахуємо кількість позитивних значень за допомогою операції порівняння з «нулем», тобто М_nov[n]>0. Застосовуємо умовний оператор
if (M_nov[n]>0)
c++;
c – кількість позитивних елементів (цілого типу). Присвоїмо перед циклом початкове значення c=0.
Якщо кількість позитивних елементів буде менше ніж 2 це значить, що передостаннього позитивного елементу немає. Повідомлення про це виводимо на екран за допомогою функції printf. В інакшому випадку шукаємо передостаннє позитивне значення так як описано вище.
Для знаходження максимального
значення використовуємо
Оскільки ми порівнюємо всі елементи і операції повторюються, то використаємо оператор циклу. Параметром циклу використаємо індекс n.
for (n=imax=1; n<Rk; n++)
{
if (M[n]>M[imax])
imax=n;
}
Щоб поміняти місцями якісь елементи масиву потрібно ввести додаткову змінну buf (дійсний тип), яка буде виконувати роль посередника.
Формально записуємо
buf=M_nov[imax];
M_nov[imax]=M_nov[indp];
M_nov[indp]=buf;
Різницю передостаннього позитивного та найбільшого значень позначимо через Riz (дійсний тип), і знайдемо так:
Riz=M_nov[indp]-M_nov[imax].
За умовою задачі далі потрібно визначену різницю вставити перед найближчим за індексом до неї елементом.
Для цього спочатку створюємо змінну найближчої відстані(найближчого елемента за індексом) vids (типу дійсні числа). Перед циклом надаємо змінній vids значення відстані від різниці до першого індекса нового масиву: vids=Riz-1. А в циклі for(n=1; n<Rk; n++) знаходиться найближча відстань, тобто елемент, який найближчий за індексом до різниці передостаннього позитивного елемента з найбільшим значенням за допомогою умови if(fabs(Riz-n)<vids) при виконанні якої виконуються такі дії:
nabl=n;
vids=Riz-n;
nabl - найближчий індекс до різниці передостаннього позитивного елемента з найбільшим значенням, типу цілих чисел.
Вставити значення перед деяким елементом означає всі елементи, які знаходяться після місця в яке потрібно вставити, перемістити вправо на одиницю, для того щоб звільнити місце під знайдену різницю:
for (n=11; n>nabl; n--)
M_nov[n]=M_nov[n-1];
Після завершення
циклу в комірку з найближчим
індексом вставляємо різницю індексів: M_nov[nabl]=Riz;
Виводиться новий масив на екран з виконанням всіх завдань:
printf ("%s %13s\n", "Index", "Znachennya elementy zminenoho novoho masuvy");
for (n=1; n<Rk+1; n++)
{
printf ("\n %7d %4.2f \n",n, M_nov[n]);
}
ІІ. Алгоритм
Ні
Так
Ні
Ні
Ні
Так
Ні
Ні
Так
Ні
Так
Ні
Так
Так
Ні
Ні
Так
Ні
Тестування програми
Тестування 1. Для тестування даної програми замінюється вихідний масив масивом, який табулюється за формулою M[k]= 3*cos(k)+k*2.
Результати першого тестуючого масиву:
Index |
Znachennya elementy masuvy |
1 |
3,62 |
2 |
2,75 |
3 |
3,03 |
4 |
6,04 |
5 |
10,85 |
6 |
14,88 |
7 |
16,26 |
8 |
15,56 |
9 |
15,27 |
10 |
17,48 |
Передостанній позитивний елемент: 15,27
Індекс передостаннього позитивного елемента: 9
Найбільше значення: 17,48
Індекс найбільшого значення: 10
Різниця передостаннього позитивного елемента з найбільшим значенням: 2,22
Індекс найближчий до різниці передостаннього позитивного елемента з найбільшим значенням: 2
Новий масив
Index |
Znachennya elementy masuvy |
1 |
3,62 |
2 |
2,22 |
3 |
2,75 |
4 |
3,03 |
5 |
6,04 |
6 |
10,85 |
7 |
14,88 |
8 |
16,26 |
9 |
15,56 |
10 |
17,48 |
11 |
15,27 |
Тестування 2. Також проведемо тестування в якому перевіримо функцію, яка не має позитивних значень M[k]= -23*k+3