Алгоритм решения задачи

Автор: Пользователь скрыл имя, 23 Декабря 2012 в 18:16, курсовая работа

Краткое описание

Задача 22: Создать и вывести на экран новый массив, состоящий из элементов входного массива, в котором поменять местами предпоследний положительный элемент с элементом, который имеет наибольшее значение, а также их разность вставить перед элементом с ближайшим к нему индексом.

Оглавление

Вступ………………………………...…………………………………………….4
Опис завдання…………………………...………………………………………..6
Постановка завдання………………..…………………………………...……….7
Алгоритм розв’язку задачі…………………….…….………………………….11
Тестування програми…………………………….……………………….…….13
Програма на мові Сі з реалізації розробленого алгоритму розв’язку задачі .......15
Результати дослідження……..………………………………....……………….17
Оцінка результатів виконання програми……………………………………...27
Синтаксичні елементи мови Сi, які використані в програмі ……………………28
Висновок…………………………………………………………………………29

Файлы: 1 файл

Курсова робота.doc

— 639.00 Кб (Скачать)

Зміст

  1. Вступ………………………………...…………………………………………….4
  2. Опис завдання…………………………...………………………………………..6
  3. Постановка завдання………………..…………………………………...……….7
  4. Алгоритм розв’язку задачі…………………….…….………………………….11
  5. Тестування програми…………………………….……………………….…….13
  6. Програма на мові Сі з реалізації розробленого алгоритму розв’язку задачі .......15
  7. Результати дослідження……..………………………………....……………….17
  8. Оцінка результатів виконання програми……………………………………...27
  9. Синтаксичні елементи мови Сi, які використані в програмі ……………………28
  10. Висновок…………………………………………………………………………29

 

Вступ

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

Виконання курсових робіт направлене на досягнення наступних  цілей:

  • грунтовне засвоєння згідно з завданням керівника необхідного теоретичного матеріалу та закріплення навичок формалізації, розробки математичної моделі та алгоритму рішення задачі, створення розрахункової програми в програмуючому середовищі, тестування та аналізу результатів виконання програми;
  • уміння використовувати одержані знання в конкретній ситуації;
  • уміння теоретично обгрунтувати одержані результати;
  • здатність чітко формулювати одержані результати та робити з них висновки: грамотно, без помилок, написати текст роботи відповідно до правил оформлення наукової документації;
  • уміння логічно побудувати доповідь, захистити сформульовані положення та висновки;
  • проявити здібності до самостійного пошуку розв'язання задачі.

Курсова робота оформляться   згідно з ГОСТом 7.32-81 «Отчет о научно-исследовательской работе, общие требования и правила оформления»; ГОСТ 2.105-68 «Общие требования к текстовым документам» і « ГОСТ 2.106-68 «ЕСКД текстовые документи».

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

Розв'язання задачі за допомогою алгоритмічної мови передбачає наступні дії:

  • визначення постановки задачі;
  • розробка алгоритму рішення задачі;
  • створення програми  на алгоритмічній мові;
  • наладка та виконання програми за допомогою програмуючого середовища;
  • тестування та аналіз результатів виконання програми.

 

Опис завдання

  • Створити й вивести одномірний масив y з елементами

                                                yk = fi+10(k), де i - номер варіанту, k =1, 2, ..., 10.

  • Виконати для цього масиву завдання свого варіанту.
  • При відсутності шуканих даних вивести про це повідомлення.

Варіант завдання

для студентів групи КБ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.  В інакшому випадку шукаємо передостаннє позитивне значення так як описано вище. 

         Для знаходження максимального  значення використовуємо операцію  порівняння, починаючи з першого  значення з іншими елементами  масиву. Вводимо нову змінну цілого типу, присвоюємо їй якесь значення і порівнюємо цю змінну з кожним елементом масиву, коли виявиться, що значення елементу масиву більше ніж значення даної змінної, то здійснюємо переприсвоєння: даній змінній присвоюємо значення масиву. Місце елементу масиву задається індексом. Ми фіксуємо кожного разу індекс найбільшого значення. Ім’я змінної нехай буде max, а індекс цього елементу буде imax. 

Оскільки ми порівнюємо всі елементи і операції повторюються, то використаємо оператор циклу. Параметром циклу використаємо індекс 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

Информация о работе Алгоритм решения задачи