Етапи та способи розв'язання задач на комп'ютері
Завантажити презентаціюПрезентація по слайдам:
Етапи розв'язання задач на комп'ютері Постановка задачі мовою чітко визначених математичних понять. Суть поставленої задачі, необхідні початкові дані та інформацію, що вважається результатами розв'язання. Побудова математичної моделі. Створюється інформаційна математична модель об'єкта, і чим достовірніше вона відображає реальні сторони об'єкта, тим точніші одержані результати. Розробка алгоритму, тобто послідовності вказівок для розв'язання задачі, відбувається на основі побудованої математичної моделі. При створенні складних алгоритмів застосовується метод покрокової розробки, сутність якого полягає в тому, що алгоритм розробляється «зверху донизу»: необхідно розбити алгоритм на окремі частини, кожна з яких розв‘язує свою самостійну підзадачу, і об'єднати ці підзадачі в єдине ціле.
Складання програми. Алгоритм має бути записаний мовою програмування. Може здійснюватися теж за принципом «зверху донизу», що дозволяє одержати добре структуровану програму, читання і розуміння якої значно полегшене. Компіляція програми. Компонування програми. Налагодження програми. Полягає в підготовці системи тестів, які містять набір вихідних даних, що мають відомий результат. Експлуатація програми. Програма, що має відповідну документацію, може бути тиражована і запропонована іншим користувачам.
Оператори Оператори - це основні елементи, з яких "будуються" програми, призначені для виконання встановлених дій. За конструкцією оператори поділяють на групи: прості, складені. За характером дій: оператори-вирази, умовні оператори, переходу, циклу. Окремий вид складеного оператора – блок. Це група довільних операторів, об’єднаних фігурними дужками {….}. Всередені блоку можна оголошувати локальні змінні. { double tm; tm=u; u=v; v=tm; }
Оператори-вирази Кожен допустимий вираз, що закінчується ; clrscr(); z=3.5*x; Виділяють: оператори присвоєння та оператори звертання до функцій. Умовні оператори Реалізують розгалуження процесу виконання програми. Використовують два види : if , switch
Оператор розгалуження if Оператор розгалуження призначений для виконання тих або інших дій в залежності від істинності або хибності деякої умови. Синтаксис оператора : if () ; [else ] Умова хибна, якщо вона дорівнює нулю, в інших випадках вона істинна Скорочений запис if (вираз) оператор; Вкладення умовних операторів. За правилами – кожна else-частина умовного оператора пов’язується з найближчим if (інакше використовуємо фігурні дужки).
Приклад 1 /* програма виводить результат ділення двох дійсних чисел */ #include void main() { float a,b,c; printf ("Введiть число a :\n"); scanf ("%f",&a); printf ("Введiть число b :\n"); scanf ("%f",&b); if (b==0) printf ("Дiлення да нуль !\n"); else { c=a/b; printf ("a : b == %g",c); } }
Приклад 2 Обчислити значення функції: #include double x,y; void main(void) { scanf ("%f",&x); if (x < 0) y = x + 1; else if (x < 10) y = x*x; else y = x - 4; printf ("%f\n",y); }
Призначений для переривання роботи оператора вибору і операторів циклу. Перериває виконання внутрішніх операторів switch і передає керування оператору, наступному за оператором вибору. Якщо оператор break викликається в тілі циклу, то виконання циклу відразу припиняється і керування переходить до оператора, наступного за оператором циклу Оператор break
Оператор switch Синтаксис : switch() { case : ; break; case : ; break; .............................................................. case : ; break; [default: ;] }
Приклад : switch(i) { case -1: n++; break; case 0: z++; break; case 1: p++; break; } За відсутності операторів break відбувається послідовне виконання всіх внутрішніх операторів, починаючи з вибраної гілки розгалуження.
Оператор циклу з передумовою while Оператор while використовується для організації циклічного виконання дій, поки виконується певна умова. while () { } Приклад 1: Обчислити суму чисел от 1 до 100. #include int s,i; void main(void) { s = 0; i = 100; while(i > 0) { s = s + i; i--; } printf("%d\n",s); }
Тіло циклу – довільний оператор (зокрема блок). Оператором while виконуються наступні дії: 1) обчислюється значення виразу; 2) якщо значення виразу дорівнює нулю (умова хибна), то виконання циклу завершується і керування передається оператору, наступному за while; 3) якщо значення виразу ненульове (умова істинна), то виконується оператор тіла циклу; 4) відбувається повернення до п.1 для наступної перевірки умови виконання циклу.
Приклад 2: Обчислити y=sin(x)+k, де х змінюється від xmin до хmax з кроком х. #include #include void main( ) { double x, y, xmin, dx, xmax, k=0.25; puts (“Введіть xmin, dx, xmax”); scanf (“%lf%lf%lf”, &xmin, &dx, &xmax); x=xmin; while (x
Оператор циклу з постумовою do … while Оператор do…while використовується для організації циклічного виконання оператора або серії операторів, які називаються тілом циклу, до тих пір, поки умова не стане хибною. Синтаксис : do { ; } while (); Цикл обов’язково виконується ( хоч один раз). Використання оператора do … while зручне у випадках, коли значення виразу-умови залежить від результатів виконання тіла циклу.
Приклад 1: Обчислити суму чисел от 1 до 100. #include int s,i; void main(void) { s = 0; i = 100; do { s = s + i; i--; } while (i > 0); printf ("%d\n", s); } Цикл do ... while припиняє виконання, коли умовний вираз обертається в нуль (стає невірним).
Приклад 2. #include void main() { int n,i; float fact; printf ("Програма обчислення n!.\n"); printf ("Введiть число n :\n"); scanf ("%d", &n); i = 1; fact = 1; do { fact *= i; i++; } while (i
Оператор циклу for Оператор for забезпечує циклічне повторення деякого оператора певне число разів. Оператор, який повторюється називається тілом циклу. Повторення циклу звичайно здійснюється з використанням деякої змінної (лічильника), яка змінюється при кожному виконанні тіла циклу. Повторення завершується, коли лічильник досягає заданого значення. Синтаксис оператора: for ([ініціалізація]; [перевірка_умови];[ нове_значення]) { оператор ; }
Формально роботу циклу можна описати такими кроками 1)якщо перший вираз (ініціалізація) присутній, то він обчислюється; 2) обчислюється вираз умови (якщо він присутній). Якщо умова дорівнює 0, тобто вона невірна, цикл припиняється, у протилежному випадку він буде продовжений; 3) виконується тіло циклу; 4) якщо присутній вираз зміни лічильника, то він обчислюється; 5) надалі перехід до пункту під номером 2. Поява у будь-якому місці циклу оператора continue призведе до негайного переходу до пункту 4. Приклад : обчислити суму чисел от 1 до 100 for (s=0, i=1; i
Приклад: друк парних чисел у проміжку від 500 до 0 #include void main(void) { long i; for (i=500; i>=0; i-=2) printf ("\n%ld", i); printf ("\n"); } Для того, щоб продемонструвати гнучкість даного різновиду циклу, представимо весь перелік обчислень лише в одному операторі for, за яким слідує порожній оператор: #include void main(void) { long i; for (i=500; i>=0; printf ("\n%ld", i), i-=2) ; }
#include #include void main ( ) { float x, xmin, dx, xmax,y; puts (“Введіть xmin, dx, xmax”); scanf (“%f%f%f”, &xmin, &dx, &xmax); for (x=xmin ; x
Вкладення циклів Якщо у тілі циклу організовано внутрішні циклічні дії, то такі цикли називають вкладеними. Приклад – виведення на екран піраміди літер. #include #define rmax 8 /*висота піраміди*/ int main() { int r, left, right, pos; /*номери рядка,початку і кінця рядка*/ for (r=1, left=right=rmax; r
Результат виконання програми А ВВВ ССССС DDDDDDD EEEEEEEEE FFFFFFFFFFF GGGGGGGGGGGGG HHHHHHHHHHHHHHH
Оператор продовження continue Оператор continue передає управління на наступну ітерацію в операторах циклу do, for, while. Він може розміщуватися тільки в тілі цих операторів. В операторах do і while наступна ітерація починається з обчислення виразу умови. Для оператора for наступна ітерація починається з обчислення виразу зміни значення лічильника. Приклад : while (i-- > 0) { x=f (i); if (x == 1) continue; else y=x*x; }
Оператор return Завершує роботу функції, в якій він виконується. Керування програмою повертається до оператора, з якого була викликана ця функція. return - без повернення значення для функцій, що мають тип void ; return вираз - повертає значення вказаного виразу (після перетворення до типу функції) в точку виклику фунуції. Виконання оператора return всередені main() завершує роботу програми.
Використання псевдовипадкових чисел Генерування послідовностей рівномірно розподілених випадкових чисел. Потрібно підключити бібліотеку #include Функція int rand (void) повертає псевдовипадкове число з проміжку 0 ..INT_MAX ( 0,,32767) Функція void srand ( unsigned seed) змінює стартове значення функції rand , щоб у разі повторного запуску програми генерувалась інша послідовність чисел. Параметр функції – число, що слугуватиме затравкою для наступного виклику rand .
У бібліотеці Borland C є додаткові функції: int random ( int hval ) - повертає псевдовипадкове число з діапазону 0 .. hval-1 ; void randomize ( void ) - для затравки генератора поточним значенням системного таймера. Приклад – формування цілого випадкового числа з проміжку RMIN .. RMAX ………… int numb; randomize (); numb = RMIN + random (RMAX – RMIN +1) ; …………
Масиви Масиви належать до складених типів даних. Масив являє собою кінцеву іменовану послідовність величин одного типу (елементів масиву). Опис масивів у програмі відрізняється від опису простої змінної наявністю після імені квадратних дужок «[ ]», в яких задається кількість елементів масиву (розмірність). Нумерація елементів масиву починається з 0. Одновимірні масиви - це лінійна послідовність однотипних елементів (вектор). Кожен елемент має свій порядковий номер (індекс). Масиви повинні бути оголошені явно, щоб компілятор міг виділити неперервну ділянку пам’яті обсягом n * sizeof ( тип елементів)
За замовчуванням, якщо в оголошеному масиві ініціюється тільки декілька перших елементів, то його інші елементи ініціюються нулями. Так, у випадку, коли float mas [10] = {2.2, 34.56}, останні вісім елементів масиву одержать значення 0. Доступ до елементів реалізується через індекси або через вказівники (адреси). У разі доступу через індекси застосовують конструкцію ім’я масиву [індекс елементу] Індекс може бути довільним виразом цілого типу: arr [ 2*k-5 ]
Приклад: Обчислити середнє арифметичне від’ємних елементів масиву х[10] та їх кількість. #include < stdio.h > void main(); { int mas [10], i, k, s; float sa; k=0; s=0; puts (“ Введіть елементи масиву\n”); for ( i=0; i
Приклад: Знайти найбільший серед додатних елемент масиву x[10], його номер та сформувати новий масив y з від’ємних елементів заданого масиву. #include < stdio.h > void main() { int x[10], max, k, y[10], i, n; puts (“Введіть елементи масиву х\n”); for ( i=0; imax) { max=x[i]; n=i; }; else if (x[i]
Багатовимірні масиви. Масив, елементи якого є масиви меншої вимірності. Матриці являють собою порядковий запис декількох одновимірних масивів. Місце розташування кожного елемента визначається за допомогою двох індексів — номера рядка і номера стовпця, тобто порядкового номера в рядку. Індекси двовимірних масивів записуються в квадратних дужках і нумерація індексів починається з нуля (0). Двовимірні (і багатовимірні) масиви оголошуються так: int mas [2] [5] ={ 1, 5, 3, 7, 4, 10, 11, 13, 14, 25 }; int mas [ ][5] ={ 1, 5, 3, 7, 4, 10, 11, 13, 14, 25 }; int mas [ ][5] ={ { 1, 5, 3, 7, 4 }, {10, 11, 13, 14, 25} }
Приклад: Читаючи матрицю по стовпчиках, побудувати вектор з від’ємних елементів матриці а[3][4] і підрахувати їх кількість. #include< stdio.h > void main() { int a[3][4], b[12], i, j, k; for (i=0; i
Приклад: Елементи головної та побічної діагоналей матриці С(4,4) поміняти місцями. Визначити максимальний елемент перетвореної матриці, а також номери рядка та стовпця, на перетині яких він знаходиться. #include void main() { const int n=4; int i, j, imax, jmax; float max, C[][n]={{3.6, 8.9, 1.9, 5.8}, {8.8, 4.1, 1.2, 6.3}, {2.5, 6.4, 0.1, 5.5}, {8.8, 4.1, 1.2, 6.3}}; puts ("massiv C[n][n]"); for (i=0; i
Схожі презентації
Категорії