ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 22.11.2019
Просмотров: 790
Скачиваний: 1
СОДЕРЖАНИЕ
Розділ 1Технологія створення програм
1.1Кодування і документування програми
1.2Структурний підхід до програмування
Розділ 2Робота в інтегрованому середовищі програмування (IDE) MS Visual Studio C++
2.1Склад і характеристика проектів IDE MS Visual Studio C++
2.2Створення програмного проекту
Розділ 3Формування навичок програмування з використанням алгоритмічної мови С++
3.1Програмна реалізація алгоритмів лінійної структури
3.2Програмна реалізація алгоритмів розгалужених структур
3.3Програмна реалізація алгоритмів циклічних структур
3.4Програмування вкладених циклів
3.5Програмна реалізація функцій користувача
3.6Програмна обробка одновимірних масивів
Розділ 3Формування навичок програмування з використанням алгоритмічної мови С++
3.1Програмна реалізація алгоритмів лінійної структури
Основною елементарною
дією в обчислювальних алгоритмах є
надання значення змінної величини. Якщо
значення константи визначено видом її
запису, то змінна величина отримує
конкретне значення тільки в результаті
присвоювання.
Призначення може
здійснюватися двома способами: за
допомогою команди присвоювання і за
допомогою команди введення. Розглянемо
приклад. У шкільному підручнику математики
правила поділу звичайних дробів описані
так:
1. Чисельник
першого дробу помножити на знаменник
другого
дробу.
2. Знаменник
першого дробу помножити на чисельник
другого
дробу.
3. Записати
дріб, чисельник якого є результат
виконання
пункту 1, а знаменник -
результат виконання пункту 2. У алгебраїчній
формі це виглядає так
:
(b)/(c/d)=(a*d)/(b*c)=m/n
Побудуємо алгоритм
розподілу дробів для ЕОМ. У цьому
алгоритмі збережемо ті ж позначення
для змінних, які використані в записаній
вище формулі. Вихідними даними є
цілочисельні змінні а, b, с, d. Блок-схему
і текст алгоритму на навчальный
алгоритмичній мовы наведені нижче
(надалі для стислості позначатимемо
навчальну алгоритмічну мову літерами
АМ).
рис.1 алгоритм розподілу дробів для ЕОМ
алг Ділення дробів
поч
цілі a,b,c,d,m,n
введення a , b , c ,d
m: = a*d
n:=b*c
виведення m,n
кін
Формат команди
присвоювання наступний: змінна: = вираз.
Знак «: =» потрібно читати як «привласнити».
Команда присвоювання позначає наступні
дії, що виконуються комп'ютером:
1.
Обчислюється вираз.
2. Отримане
значення привласнюється змінный.
У
наведеному вище алгоритмі присутні дві
команди присвоювання. У блок-схемах
команда присвоювання записується в
прямокутнику. Такий блок називається
обчислювальним блоком. В описах алгоритмів
необов'язково дотримуватися строгих
правила в запису виразів. Їх можна писати
в звичайній математичній формі. Це ще
не мова програмування з суворим
синтаксисом. У наведеному алгоритмі
присутня команда введення: введення a,
b, c, d.
У блок-схемі команда введення записується в паралелограмі - блоці введення-виведення. При виконанні цієї команди процесор перериває роботу і чекає дій користувача. Користувач повинен набрати на пристрої введення (клавіатурі) значення змінних і натиснути на клавішу вводу Enter. Значення слід вводити в тому ж порядку, в якому відповідні змінні розташовані в списку введення. Звичайно за допомогою команди введення присвоюються значення вихідних даних, а команда присвоювання використовується для отримання проміжних і кінцевих величин. Отримані комп'ютером результати рішення задачі повинні бути повідомлені користувачеві. Для цих цілей призначена команда виводу: висновок m, n За допомогою цієї команди результати виводяться на екран або на пристрій друку на папір. Розглянемо один дуже корисний алгоритм, який доводиться часто використовувати при програмуванні. Дано дві величини: Х, Y. Потрібно провести між ними обмін значеннями. Наприклад, якщо спочатку було Х = 1, Y = 2, то після обміну має стати: Х = 2, У = 1.
Гарною моделлю для вирішення цього завдання є наступна ситуація: є дві склянки - одна з молоком, інша з водою. Потрібно зробити обмін їх вмістом. Кожному ясно, що в цьому випадку потрібен додатковий третій порожній стакан. Послідовність дій буде наступною: 1) перелити з першої склянки в третю; 2) перелити з другої в першу; 3) перелити з третьої до другу. Мета досягнута! За аналогією для обміну значеннями двох змінних потрібна третя додаткова змінна. Аналогія зі склянками не зовсім точна у тому сенсі, що при переливанні з однієї склянки в іншу перша стає порожньою. У результаті ж присвоювання (Х: = Y) змінна, що стоїть праворуч (У), зберігає своє значення. Алгоритм для поділу дробів має лінійну структуру. У ньому всі команди виконуються в строго однозначної послідовності, кожна по одному разу. Лінійний алгоритм складається з команд присвоювання, вводу, виводу та звернення до допоміжних алгоритмів. При описі алгоритмів в блок-схемах типи, як правило, не вказуються (але маються на увазі). В алгоритмах на АМ для всіх змінних типи вказуються явно. Опис типів змінних виконується відразу після заголовка алгоритму. У них використовуються такі позначення типів: цілий - цілий тип, дійсний - дійсний тип, літерний - символьний (літерний) тип, логічний - логічний тип. В алгоритмі для поділу дробів для всіх змінних вказаний цілий тип.
Задача 3.1.1
Дано тризначне число. Знайти число, отримане при перестановці другої і третьої цифр заданого числа.
Вхідні дані: задане число (n).
Вихідні дані: отримане число(m).
#include<iostream.h>
int main()
{
int n, m;
cout<<”Введіть значення n: “;
cin>>n;
m=(n/100)*100+(n%10)*10+(n%100/10);
cout<<”Отримане число m: “<<m<<endl;
retnrn o;
}
рис.2 блок-схема до задачі 3.1.1
Задача 3.1.2
У тризначному числі х закреслити його останню цифру. Коли в двозначному числі, що залишилось, переставили цифри, а потім приписали до них зліва останню цифру числа х, то вийшло число n. По заданому n знайти число х (значення n вводиться з клавіатури, 1<=n<=999 і при цьому число одиниць в n не дорівнює нулю).
Вхідні дані: тризначне число (n).
Вихідні дані: отримане число (x).
#include<iostream.h>
int main()
{
int n, x, a, b, c;
cout<<”Введіть значення n: “;
cin>>n;
a=n%10;
b=n/10%10;
c=/100;
x=a*100+b*10+c;
cout<<”x= “<<x<<endl;
return 0;
}
рис.3 блок-схема до задачі 3.1.2
Задача 3.1.3
Обчислити вирази при заданих значеннях констант, використовуючи відповідні математичні функції.
Вхідні дані: задані константи(a = 4.4; b = 0.57; c = 6; z = 5.4E-2;).
Вихідні дані: x, y.
#include<iostream.h>
#include<math.h>
int main()
{
const float a = 4.4;
const float b = 0.57;
const float c = 6;
const float z = 5.4E-2;
float x, y;
x = pow(c + pow(fabs(a-b),2) + 3, 1/3.)/(pow(a, 2) + pow(b, 2));
y = exp(fabs(a-b))*(pow(tan(z), 2) + 1);
cout<<”x = “<<x<<endl;
cout<<”y = “<<y<<endl;
return 0;
}
рис.4 блок-схема до задачі 3.1.3
3.2Програмна реалізація алгоритмів розгалужених структур
Умовний оператор if використовується для розгалуження процесу обчислень на два напрямки.



1
0
Блок операторів 1
Блок операторів 2
рис.5 алгоритмічна конструкція розгалуження
Формат оператора:
if (вираз) оператор_1; [else оператор_2;]
Спочатку обчислюється вираз, який може мати арифметичний тип аботип покажчика. Якщо воно не дорівнює нулю (має значення true), виконується перший оператор, інакше - другий. Після цього управління передається на оператор, наступний за умовним. Одна з гілок може бути відсутнім, логічніше опускати Друга гілка разомз ключовим словом еlse. Якщо у якої гілки потрібно виконати кількаоператорів, їх необхідно укласти в блок, інакше компілятор не зможезрозуміти, де закінчується розгалуження. Блок може містити будь-які оператори, в тому числі опису та інші умовні оператори (але не може складатися з одних описів). Необхідно враховувати, що змінна, описана в блоці, поза блоком не існує. Поширена помилка при записі умовних операторів - використання у виразах замість перевірки на рівність ('== ^ простого присвоєння (='), наприклад, 1f (a=l) b=0;
Синтаксичної
помилки немає, так як операція присвоювання
формує результат, який оцінюється на
рівність / нерівність нулю. У даному
прикладі присвоювання змінної
b
буде виконано незалежно від значення
змінної а. Тому
у виразах перевірки змінної на рівність
константі константу рекомендується
записувати зліва від операції порівняння:
if
(1 == а) b
= 0;.
Друга
помилка - невірний запис перевірки на
приналежність діапазону. Наприклад,
щоб перевірити умову 0 <х <1, можна
записати його в умовному операторі
безпосередньо ,так як буде виконано
спочатку порівняння 0 <х, а йогорезультат(true
або false,перетворене
в int)
буде порівнюватися з 1. Правильний спосіб
запису: 1f
(0 <x
&& x
<1) .
Задача 3.2.1
Відомо дві швидкості: одна в кілометрах за годину, інша — в метрах за секунду. Яка зі швидкостей більша?
Вхідні дані: v1, v2.
Вихідні дані: більша зі швидкостей.
#include<iostream.h>
int main()
{
int v1, v2;
cout<<”Введіть швидкості: v1 (км/год), v2(м/с) “;
cin>>v1>>v2;
v1 = v1*1000/3600;
if (v1>v2)
cout<<”v1>v2”<<endl;
else
cout<<”v1<v2”<<endl;
return 0;
}



1
0
рис.6 блок-схема до задачі 3.2.1
Задача 3.2.2
Обчислити y при різних значеннях x.
Вхідні дані: x
Вихідні дані: y
include<iostream.h>
include<math.h>
int main()
{
double x, y;
const float a = 1.8;
const float pi = 3.14;
cout<<” x = “;
cin>>x;
if(x<=0)
y = 0;
else
if(x<=1)
y = x*x – x/a;
else
y = pow(x, 3) – sin(x*x*pi)-1;
cout<<”y = “<<y<<endl;
return 0;
}
1 0

1
0
рис.7 блок-схема до задачі 3.2.2
Задача 3.2.3
Нехай елементами круга є радіус(перший елемент), діаметр(другий елемент) і довжина кола(третій елемент). Скласти програму, яка по номеру елемента запрошувала б його відповідне значення і обчислювала б площу круга.
Вхідні дані: радіус, діаметр, довжина кола.
Вихідні дані: площа круга.
#include<iostream.h>
int main()
{
int s;
float r, d, l;
const float p = 3.14;
cout<<”Введіть номер елемента круга(1, 2, 3)”;
cin>>s;
switch(s)
{
case 1: cout<<”r = “;
cin>>r;
s = p*r*r;
cout<<”Площа круга:»<<s<<endl;break;
case 2: cout<<”d = “;
cin>>d;
s = p*(d/2)*(d/2);
cout<<”Площа круга:»<<s<<endl;break;
case 3: cout<<”l = “;
cin>>l;
r =l/(2*p);
s = p*r*r;
cout<<”Площа круга:»<<s<<endl;break;
default:cout<<”Помилка введення!”<<endl;
}
return 0;
}
0
1
0
1
0
1
0
рис.8 блок-схема до задачі 3.2.3
3.3Програмна реалізація алгоритмів циклічних структур
Оператори циклу
використовуються для організації
багаторазово повторюваних обчислень.
Будь-який цикл складається з тіла циклу,
тобто тих операторів, які виконуються
декілька разів, початкових установок,
модифікації параметра циклу і перевірки
умови продовження виконання циклу.
Один прохід циклу називається
ітерацією. Перевірка умови виконується
на кожній ітерації або до тіла циклу
(тоді говорять про цикл з передумовою),
або
після тіла циклу (цикл з постусловіем).
Різниця між ними полягає в
тому, що
тіло циклу з постусловіем завжди
виконується хоча б один раз, після чого
перевіряється, чи треба його виконувати
ще раз. Перевірка необхідності виконання
циклу
з передумовою
робиться
до
тіла
циклу,
тому можливо, що
він не
виконається жодного разу.Змінні,
що змінюються в тілі циклу і використовувані
при перевірці умови продовження,
називаються параметрами циклу.
Цілочисельні параметри циклу, змінюються
з постійним кроком на кожній ітерації,
називаються лічильниками циклу.
Цикл з передумовою: while(вираз)оператор
Вираз визначає умова повторення тіла циклу, представленого простимілі складовим оператором. Виконання оператора починається з ви числення виразу.
Якщо
воно істинне
(не
дорівнює false)
виконується
оператор циклу.
Якщо
при
першій
перевірці
вираз
дорівнює
false,
цикл
не
виконається
ні
разу. Тип
виразу
повинен
бути
арифметичним
або
процитованими
до
нього.
Вираз
обчислюється
перед
кожною
ітерацією
циклу.
Цикл з післяумовою: do оператор while вираз:
Спочатку виконується простий або складений оператор, що становить тіло циклу, а потім обчислюється вираз. Якщо воно істинне (не дорівнює fаlse), тіло ціклавиполняется ще раз. Цикл завершується, коли вираз стане рівним false або в тілі циклу буде виконаний небудь оператор передачі керування.
Задача 3.3.1
Скласти програму піднесення натурального числа до третьої степені, враховуючи дану закономірність.
Вхідні дані: натуральне число.
Вихідні дані: натуральне число піднесене до третьої степені.
#include<iostream.h>
int main()
{
float n, s, sum = 0;
cin>>n;
s = n*(n-1)+1;
for(int i =1; i<= n; i++)
{
sum+=s;
s+=2;
}
cout<<sum<<endl;
return 0;
}

0





1
рис.9 блок-схема до задачі 3.3.1
Задача 3.3.2
Побудувати таблицю відповідностей між мірами. Початкове значення міри, крок зміни цього значення та кількість рядків у таблиці задати самостійно. 1 морська миля = 1.852 км = 6076 футів.
Вхідні дані: початкове значення міри, крок зміни цього значення та кількість рядків у таблиці.
Вихідні дані: вихідні значення мір.
#include<iostream.h>
int main()
{
int krok, kil;
float milay, km, fut;
const float km1 = 1.852;
const float fut1 = 6076;
cout<<”Введіть значення міри, крок зміни значення міри, кількість рядків таблиці:”;
cin>>milay>>krok>>kil;
for(int i=0;i<=kil;i++)
{
km = milay*km1;
fut = milay*fut1;
cout<<”Кілометри:”<<km<<endl;
cout<<”Фути:”<<fut<<endl;
cout<<”Милі:”<<milay<<endl;
milay+=krok;
}
r
eturn
o;
}
0




1

Рис.10 блок-схема до задачі 3.3.2
Задача 3.3.3
#include<iostream.h>
#include<math.h>
int main()
{
const int a = 4;
float x, y;
float b = -2, c = 2=h/2, h = 0.4;
const float pi = 3.14;
cout<<”x”<<'/t'<<”y”<<endl;
for(x=b;x<=c;x+=h)
{
if(x<1.2)
y = exp((x*x)/2)+log(a);
else
if(x==1.2)
y = a*pow(cos(pi*(x/2.7)),3);
else
y = x*x+a*x+5;
cout<<x<<'/t'<<y<<endl;
}
r
eturn
0;
}
1
1
0
рис.11 блок-схема до задачі 3.3.3
Приклад 1.
#include<iostream.h>
#include<math.h>
int main()
{
const int a = 4;
float x, y;
float b = -2, c = 2=h/2, h = 0.4;
const float pi = 3.14;
cout<<”x”<<'/t'<<”y”<<endl;
for(x=b;x<=c;x+=h)
{
if(x<1.2)
y = exp((x*x)/2)+log(a);
else
if(x==1.2)
y = a*pow(cos(pi*(x/2.7)),3);
else
y = x*x+a*x+5;
cout<<x<<'/t'<<y<<endl;
}
return 0;
}
0
1
1
0
1
0
рис.12 блок-схема до задачі 3.3.4
3.4Програмування вкладених циклів
Цикл — різновид керуючої конструкції у високорівневих мовах програмування, призначена для організації багаторазового виконання набору інструкцій (команд). Також циклом може називатися будь-яка багатократно виконувана послідовність команд, організована будь-яким чином. Цикли можуть бути вкладені один в одний. Приклад: Скласти програму для упорядкування елементів масиву (а 1, а 2,... а 100), розташувавши їх по зростанню в тому ж масиві. Алгоритм рішення: кожен i-й елемент масиву з першого по 99-й необхідно порівнювати з усіма j-ми елементами, що мають більш високий порядковий номер. Наприклад, перший елемент треба порівнювати з другим, третім, четвер-тим і т.д. Другий елемент треба порівнювати з третім, четвертим, п'ятим і т. д. Якщо значення j-го елемента виявиться менше, ніж i-го, ці елементи треба поміняти місцями в масиві. Для цього вводиться проміжна змінна amin. Спочатку змінної amin присвоюється значення j-го елемента, потім j-му еле-менту присвоюється значення i-го елемента, і потім i-му елементу присвоюється-ється значення змінної amin. У внутрішньому циклі відбувається порівнювання та обмін значень елементів, у зовнішньому циклі змінюється номер i-го елемента. При вирішенні ряду задач необхідно повторювати одні й ті ж дії при різних значеннях параметрів у різних частинах програми. Для цього використо- вують підпрограми - процедури та функції.