ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 22.11.2019

Просмотров: 1093

Скачиваний: 8

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

Зміст

Розділ 1Технологія створення програм

1.1Кодування і документування програми

1.2Структурний підхід до програмування

1.3Етапи створення програм

Розділ 2Робота в інтегрованому середовищі програмування (IDE) MS Visual Studio C++

2.1Склад і характеристика проектів IDE MS Visual Studio C++

2.2Створення програмного проекту

2.3Методика відладки програми

Розділ 3Формування навичок програмування з використанням алгоритмічної мови С++

3.1Програмна реалізація алгоритмів лінійної структури

3.2Програмна реалізація алгоритмів розгалужених структур

Рис.8 Результат тестування задачі 3.2.1

Рис. 10 Результат тестування задачі 3.2.2

Рис. 12 Результат тестування задачі 3.2.3

Рис.14 Результат тестування задачі 3.2.4

3.3Програмна реалізація алгоритмів циклічних структур

Рис. 16 Результат тестування задачі 3.3.1

Рис. 17 Схема алгоритму задачі 3.3.2

Рис.18 Результат тестування задачі 3.3.2

Рис. 19 Схема алгоритму задачі 3.3.3

Рис.20 Результат тестування задачі 3.3.3

Рис.22 Результат тестування задачі 3.3.4

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

  1. Постановка задачі.

Дано тризначне число. В ньому закреслили першу зліва цифру і приписали її в кінці. Знайти отримане число.

Вхідні дані :

тризначне число - змінна цілого типу - int n;

Вихідні дані :

кінцевий результат у вигляді зміненої змінної цілого типу - int n;

  1. Схема алгоритму рішення задачі.

Рис. 2 Схема алгоритму задачі 3.1.1.

  1. Лістинг програми.

#include <iostream>

#include <iomanip>

#include<windows.h>

using namespace std;

void main ()

{

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

int n;

cout<<"Введите трехзначное число : ";

cin>>n;

cout<<"Изменённое число : "<<(n-n/100*100)*10+n/100<<endl;

system("pause");

}

  1. Тестування програми.

Рис. 3 Результат тестування задачі 3.1.1.

Задача 3.1.2

  1. Постановка задачі.

У тризначному числі х закреслили його другу цифру. Коли до утвореного при цьому двозначного числа справа приписали другу цифру числа х, то вийшло число n. По заданому n знайти число х( значення n вводиться з клавіатури,( 100<=n<=999).

Вхідні дані :

тризначне число - змінна цілого типу - int n;

Вихідні дані :

кінцевий результат у вигляді зміненої змінної цілого типу - int х;

  1. Схема алгоритму рішення задачи.

Рис. 4 Схема алгоритму задачі 3.1.2.

  1. Лістинг програми.

#include <iostream>

#include <iomanip>

#include<windows.h>

using namespace std;

void main ()

{

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

int n,x;


cout<<"Введите трехзначное число : ";

cin>>n;

cout<<"Вывести найденное число x : "<<n/100*100+n%10*10+n/10%10<<endl;

system("pause");

}

  1. Тестування програми.

Рис. 5 Результат тестування задачі 3.1.2.

3.2Програмна реалізація алгоритмів розгалужених структур

Умовний оператор if використовується для розгалуження процесу обчислень на два напрямки.

1 0

Блок операторів 1

Блок операторів 2


Рис.6 алгоритмічна конструкція розгалуження

Формат оператора:

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

  1. Постановка задачі.

Відомо дві швидкості: одна в кілометрах в годину, інша – в метрах в секунду. Яка зі швидкостей більше?

Вхідні дані :

дві швидкості: перша в кілометрах в годину, друга – в метрах в секунду - змінні типу з плаваючою точкою - double v1, double v2;

Вихідні дані :

кінцевий результат швидкостей - змінних типу з плаваючою точкою - double v1, double v2;

  1. Схема алгоритму рішення задачі.

Овал 39Прямая соединительная линия 41Параллелограмм 40

v2 = (v2*3600)/1000




Ромб 48Прямая соединительная линия 52Прямая со стрелкой 541 0

Рис. 7 Схема алгоритму задачі 3.2.1

  1. Лістинг програми.

#include <iostream>

#include <iomanip>

#include<windows.h>

using namespace std;

void main ()

{

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

double v1,v2;

cout<<"Введите первую скорость в км/ч: ";

cin>>v1;

cout<<"Введите вторую скорость м/с: ";

cin>>v2;

v2=(v2*3600)/1000;

if(v1>v2) cout<<"Первая скорость больше второй"<<endl;

else cout<<"Вторая скорость больше первой"<<endl;

system("pause");


}

  1. Тестування програми.

Рис.8 Результат тестування задачі 3.2.1

Задача 3.2.2

  1. Постановка задачі.

Дано чотиризначне число. Визначити :

А) чи дорівнює сума двох перших його цифр сумі двох його останніх цифр ;

Б) чи входять в нього цифри 2, 6 або 7.

Вхідні дані :

чотиризначне число цілого типу - int n;

Вихідні дані :

кінцевий результат у вигляді зміненої змінної цілого типу - int n.

  1. Схема алгоритму рішення задачі.

Рис. 9 Схема алгоритму задачі 3.2.2

  1. Лістинг програми.

#include <iostream>

#include<iomanip>

#include<windows.h>

using namespace std;

void main ()

{

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

int n;

cout<<"ВВести четырехзначное число:";

cin>>n;

if(n/1000+n/100%10==n/10%10+n%10)

cout<<"сумма двух первых цыфр = сумме двух последних цыфр "<<endl;

else cout<<"сумма двух первых цыфр не = сумме двух последних цыфр"<<endl;

if(n/1000==2||n/1000==6||n/1000==7||n/100%10==2||n/100%10==6||n/100%10==7||n/10%10==2||n/10%10==6||n/10%10==7||n%10==2||n%10==6||n%10==7)

cout<<"Входят цыфры 2 или 6 или 7"<<endl;

else cout<<"Не входит цыфры 2 или 6 или 7 "<<endl;

system("pause");

}

  1. Тестування програми.

Рис. 10 Результат тестування задачі 3.2.2

Задача 3.2.3

  1. Постановка задачі.

Обчислити у при різних значеннях х :

y = a = 1.5,

Вхідні дані :

задане значення а - змінна типу з плаваючою точкою - double a, значення х, яке вводиться з клавіатури - змінна типу з плаваючою точкою - double x;

Вихідні дані :

значення у при значенні х - зміннa типу з плаваючою точкою – double y;

  1. Схема алгоритму рішення задачі.

Прямая соединительная линия 41Параллелограмм 40

a = 1.5


Ромб 48 1 0

Прямая соединительная линия 52Прямая со стрелкой 54

Прямая соединительная линия 60Прямая соединительная линия 42

y= a*x-log10(a*x)

0

y= 1

1

Овал 63

y=a*x+log10(a*x)



Рис. 11 Схема алгоритму задачі 3.2.3

  1. Лістинг програми.

#include<math.h>

#include <iostream>

#include <iomanip>

#include<windows.h>

using namespace std;

void main ()

{

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

double a, x, y;

a=1.5;

cout<<"Введите х : ";

cin>>x;

if(a*x<1) y= a*x-log10(a*x);

else if ( a*x==1) y= 1;

else y=a*x+log10(a*x);

cout<<"Результат равен "<<y<<endl;

system("pause");

}

  1. Тестування програми.

Рис. 12 Результат тестування задачі 3.2.3

Задача 3.2.4

  1. Постановка задачі.

Дано два дійсні додатні числа х та у . Арифметичні дії над числами пронумеровані ( 1 – складання, 2 – віднімання, 3 – множення, 4 – ділення ). Скласти програму, яка по введеному номеру виконує ту або іншу дію над числами.

Вхідні дані :

два дійсні додатні числа типу з плаваючою точкою: float х, у; номер дії над числами - змінна цілого типу - int res.

Вихідні дані :

результат введеної дії над заданими числами – змінна типу з плаваючою точкою float s.

  1. Схема алгоритму рішення задачі.

Рис. 13 Схема алгоритму задачі 3.2.4

  1. Лістинг програми.

#include <iostream>

#include<iomanip>

#include<windows.h>

using namespace std;

void main ()

{

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

float x, y, s ; int res;

cout<<"Введите х : ";

cin>>x;

cout<<"Введите у : ";

cin>>y;

cout<<"Введите номер действия над числами : ";

cin>>res;

switch (res)

{

case 1 :

s=x+y;

break;

case 2 :

s=x-y;

break;

case 3 :

s=x*y;

break;

case 4 :

s=x/y;

break;

default : cout<<"Неправильный номер действия";

}

cout<<s<<endl;

system("pause");

}

  1. Тестування програми.



Рис.14 Результат тестування задачі 3.2.4

3.3Програмна реалізація алгоритмів циклічних структур

Оператори циклу використовуються для організації багаторазово повторюваних обчислень. Будь-який цикл складається з тіла циклу, тобто тих операторів, які виконуються декілька разів, початкових установок, модифікації параметра циклу і перевірки умови продовження виконання циклу.
Один прохід циклу називається ітерацією. Перевірка умови виконується на кожній ітерації або до тіла циклу (тоді говорять про цикл з передумовою),
або після тіла циклу (цикл з постусловіем). Різниця між ними полягає в
тому, що тіло циклу з постусловіем завжди виконується хоча б один раз, після чого перевіряється, чи треба його виконувати ще раз. Перевірка необхідності виконання
циклу з передумовою робиться до тіла циклу, тому можливо, що він не виконається жодного разу.Змінні, що змінюються в тілі циклу і використовувані при перевірці умови продовження, називаються параметрами циклу. Цілочисельні параметри циклу, змінюються з постійним кроком на кожній ітерації, називаються лічильниками циклу.


Цикл з передумовою: while(вираз)оператор

Вираз визначає умова повторення тіла циклу, представленого простимілі складовим оператором. Виконання оператора починається з ви числення виразу.

Якщо воно істинне (не дорівнює false) виконується оператор циклу. Якщо при першій перевірці вираз дорівнює false, цикл не виконається ні разу. Тип виразу повинен бути арифметичним або процитованими до нього.
Вираз обчислюється перед кожною ітерацією циклу.

Цикл з післяумовою: do оператор while вираз:

Спочатку виконується простий або складений оператор, що становить тіло циклу, а потім обчислюється вираз. Якщо воно істинне (не дорівнює fаlse), тіло ціклавиполняется ще раз. Цикл завершується, коли вираз стане рівним false або в тілі циклу буде виконаний небудь оператор передачі керування.

Задача 3.3.1

  1. Постановка задачі.

Побудувати таблицю відповідностей між мірами. Початкове значення міри ( galon), крок зміни цього значення (krok) та кількість рядків у таблиці (kil) задати самостійно.

1 галон (брит.)=1.2 галон (США)=4.546 л.

Вхідні дані :

початкове значення міри - змінна типу з плаваючою точкою - double galon , змінене значення міри - змінна типу з плаваючою точкою - double galons; крок зміни заданого значення міри - змінна цілого типу - int krok, кількість рядків у таблиці - змінна цілого типу int kil;

Вихідні дані :

кінцеві результати значень міри - змінні типу з плаваючою точкою - double galon,double galons,double litr;

  1. Схема алгоритму рішення задачі.

Рис. 15 Схема алгоритму задачі 3.3.1

  1. Лістинг програми.

#include <iostream>

#include <iomanip>

#include<windows.h>

using namespace std;

const int N = 20;

void main ()

{

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

double galon , galons, litr;

int krok, kil;

cout<<"Ввести количество галонов : ";

cin>>galon;

cout<<"Ввести шаг изменения : ";

cin>>krok;

cout<<"Ввести количество строк таблицы : ";

cin>>kil;

for(int i=1 ; i<=kil; i++)

{

galons=galon*1.2;

litr=galon*4.546;

cout<<setw(N)<<"Количество галонов "<<setw(N)<<"Количесвто галонов ( США ) "<<setw(N)<<"Количество литров"<<endl;

cout<<setw(N-5)<<galon<<setw(N)<<galons<<setw(N)<<litr<<endl;

galon+=krok;

}

system("pause");

}

  1. Тестування програми.

Рис. 16 Результат тестування задачі 3.3.1

Задача 3.3.2

  1. Постановка задачі.

Розрахувати суму перших 10 членів ряду :

S = 1

Вхідні дані :

значення х, яке вводиться з клавіатури - змінна типу з плаваючою точкою - double x;

Вихідні дані :

кінцевий результат суми перших 10 членів ряду - зміннa типу з плаваючою точкою - double s;

  1. Схема алгоритму рішення задачі.

d=-1,s=1,c=1,a=3,b=2,xs=x


Рис. 17 Схема алгоритму задачі 3.3.2

  1. Лістинг програми.

#include<math.h>

#include <iostream>

#include <iomanip>

#include<windows.h>

using namespace std;

void main ()

{

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

int d=-1;

double s=1,c=1,x,a=3,b=2,xs;

cout<<"Введите значение х : ";

cin>>x;

xs=x;

for(int i=1;i<=10;i++)

{

s+=d+a/b*xs*c;

c*=a/b;

a+=2;

b+=2;

d*=-1;

xs*=x;

}

cout<<"Результат равен "<<s<<endl;

system("pause");

}

  1. Тестування програми.

Рис.18 Результат тестування задачі 3.3.2

Задача 3.3.3

  1. Постановка задачі.

Скласти алгоритм і програму обчислення значення функції при зміні аргументу х у вказаному діапазоні і з заданим кроком ∆х.