понедельник, 11 апреля 2016 г.

Урок №8 Підпрограми

Підпрограма - це функція , яка опсується за тілом програми, тобто не у функції main.
Для чого вони потрібні?
Коли потрібно використовувати одну і ту саму функцію багаторазово. І щоб не дублювати її ми можемо описати її в одному місці, і викликати її коли нам це буде потрібно.
Для опису підпрограми використовується ключове слово void.
Синтаксис виглядає наступним чином:
void назва програми(тип (значення яке буде передаватись у підпрограму)){
код програми}
Підпрограми є дуже зручна штука. Використання просто глобальне.
Наведу маленький приклад такої програми.
 Створити програму і визначити підпрограму яка визначає і повертає максимальне число.

#include "stdafx.h"
#include

using namespace std;

int max(int x, int y)//опис підпрограми
{
if (x > y)
return x;
else return y;
if (x == y)
{
int sum = x + y;
return sum;
}
}

int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL,"Ukr" );
int a, b, c;
cout << "Ведiть a = " << endl;
cin >> a;
cout << "Ведiть b = " << endl;
cin >> b;
c = max(a, b);//виклик падпрограми
if(c == (a + b))
cout << "Числа рівні"<< endl;
else cout << "Максимальне число = " << c << endl;
system("pause");
return 0;
}

четверг, 7 апреля 2016 г.

Урок № 7. Розвязування рівнянь.

В цьому уроці я наведу декілька прикладів розвязування рівнянь.
Приклад. 1
За введеними значеннями обчислити та вивести на екран значення виразу. Обчислення виконати у трьох варіантах вхідні дані цілого типу, результат – дійсного.




#include "stdafx.h"
#include
#include

using namespace std;

int main()

{
setlocale(LC_ALL, "Ukr");
double summ;
int x, y;
cout << "Введiть число х = " << endl;
cin >> x;
cout << "Введiть число у =" << endl;
cin >> y;
summ = (x * y + (pow((x + y), 3) / pow(x, 2) + pow(y, 2)) * (x - y));
cout << summ << endl;
system("pause");
return 0;
}
Приклад 2
За введеними значеннями обчислити та вивести на екран значення виразу. Обчислення виконати вхідні дані цілого типу, результат – дійсного.




#include "stdafx.h"
#include
#include

using namespace std;

int main()

{
setlocale(LC_ALL, "Ukr");
double summ;
int x, y;
cout << "Введiть число а = " << endl;
cin >> x;
cout << "Введiть число b =" << endl;
cin >> y;
summ = (a / ( pow(b, 2)- 2 )  + b/(pow(a, 2) +2)+ pow((a*b), 3));
cout << summ << endl;
system("pause");
return 0;
}
Надіюсь приклади зрозумілі, якщо виникнуть якісь питання , запитуйте.

среда, 6 апреля 2016 г.

Урок №6 Робота з тестом.

При написанні програм нам прийдеться працювати з текстом в будь якому випадку.
Текст ми можемо записати у масив типу char. Навіщо це взагалі, це може знадобитись  наприклад при написанні програми для переводу і тому подібне.
Щоб описати змінну типу char потрібно написати так:
char a; , це для одного символа;
char a[100]; це для 100-та файлів;
Для зчитування тексту використовується функція gets(). Ця функція зчитує символьну інформацію в змінну до тих пір поки не "зустріне" символ переведення рядка.
gets(a); - зчитає ряд символів у змінну а.
А далі мажна працювати як із звичайним масивом.
Є ще така цікава річ як коментар. Він в коді не виконується , але біля якоїсь операції можна записати поясненя. приклад використання коментара я навуду в наступному прикладі.
Наведемо приклад роботи з текстом.
Приклад. Ввести текст з клавіатури. Вивести на екрат, видалити всі попередні входження останньої літери і вивести змінений масив.
#include "stdafx.h"
#include
#include

using namespace std;

int main()

{
int k;
int i = 0;
int strt = 0;//змінна яка вказує на початок слова
int end = 0;//змінна на кінець слова
setlocale(LC_ALL, "Ukr");
char a, b;
char text[100];//описуємо масив символів на 100 елементів
cout << "Введiть текст роздiлений пробiлами - " << endl;
gets_s(text);//зчитуємо текст в змінну
cout << text << endl;//виводимо вмістиме змінної на екран
//нам треба у циклі знаходити кінець і початок слова ,
//потім брати останній елемент і порівнювати з всіма попередніми
//якщо будуть збіги, то ми видалятимемо елемент з масиву
int n = strlen(text);//strlen це функція яка повертаєціле число, кількість елементав у масиві символів char
while (i < n)//цикл який буде перевіряти чи ми не вийшли за межі нашого масиву
{
while (text[i] == ' ')//цикл який шукає початок слова
i++;
strt = i;
while (isalpha(text[i]))//цикл який кінець слова. " isalpha" - це функція яка перевіряє
                                                   //чи елемент буква
i++;
end = i;
for (int k = strt; k < end-1; k++)//цикл який проходи по всіх елементах знайденого слова

if (text[k]==text[end-1])//перевірка
{
for (int t = k; t < n; t++)//видалення елемента масиву
text[t] = text[t + 1];
n--;//зменшуємо розмір масиву на одиницю
end--;//зменшуємо розмір слова на одиницю
k--;//зменшуємо індекс k щоб не пропустити символ

}
i = end;//індекс переносимо на пробіл між словами
}
cout << text << endl;//вивід нашого масиву, вже без попередніх входжень останьої літери
system("pause");
return 0;
}
Ніби не важка програма, але мені прийшлось посидіти годинку, бо трохи призабув роботу з символьними рядками.
Чекайте наступні уроки.


вторник, 5 апреля 2016 г.

Урок №5 Основні цикли та їх використання

Цикли - це така річ без якої в програмуванні ніяк не обійтись. Я якось пропустив , просто цю тему треба було раніше розповісти.
Основні цикли мови C++ які ви справді будете часто використовувати:
- цикл if() -це цикл порівняння. Виконується тільки один раз.
if("значення1" "функція порівняня" "значення2")){код true}else{код false}
Отримує два значеня які може порівнювати таким чином:
 1)== -перевіряє елементи на рівність і якщо вони рівні виконує код true, якщо ні то код false.
 2)< або > - менше або більше.
 3)<= або >= - менше рівне або більше рівне.
 4) != -не дорівнює.
Цикл while() отримує два значення але виконується до тих пір поки виконується умова    на відміну від цикла if.
Порівнює таким самим чином як і if, тільки він багаторазовий.
ще є модифікація do{код}while(умова); - це потрібно у тому випадку якщо потрібно щоб операція виконалась хочаб один раз.
Цикл for(). Він є більш складним тому я його поясню на прикладі.
int i,n=2;
for(i=0;icout<<"hello"endl;
Це багаторазовий цикл який лічильник. В нашому випадку лічильником є змінна і. на кожній ітерації циклу і збільшується на одиницю. (++ це дуже корисний оператор мови C++. Він збільшує значення змінної на одиницю, також можна використовувати --, він як ви зрозуміли віднімає одиницю). і цикл виконується поки виконується умова чиклу.
По теорії його можна зобразити таким чином:
for(визначення лічильника;умова;зміна лічильника)
Без зміни цикл вважається нескінченним і це логічно бо лічильник не змінюється і умова виконується завжди , вічно.
Ну це поки головні цикли , якими ми користуватимемось.

Урок №4. Ввід вивід інформації. Запрограмовування рівнянь


Важливим в мові С++ є ввід і вивід інформації.
Адже для програми повинні бути універсальними і працювати з різною інформацією а не тільки з одною фіксованою.
В мові С++ ввід і вивід реалізовується за допомогою стандортної бібліотеки iostream ми з нею вже знайомі.
Для того щоб вивести якесь повідомлення на екран потрібно ввести: cout<<"текст";. Текст буде виведено на екран. Щоб вивести змінну потрібно ввести: cout<<назва змінної;. Щоб автоматисно перевести курсор на наступний рядок можна використати символ переведення рядка '\n' в лапка з текстом або endl таким чином:
cout<<"текст"<Щоб вивести змінну разом з текстом потрібноввести:
cout<<"текст"<<назва змінної;
Думаю це зрозуміло.
Для введення інформації використовують cin. Для того щоб зчитати якусь інформацію, треба ввести :
int n;
cin>>n; // буде зчитуватись ціле число і записуватиметься у змінну n.
Так це є. Переходимо до запрограмовевання рівнянь

В таблиці наведено функції бібліотеки math.h.
acosарккосинус
asinарксинус
atanарктангенс
atan2арктангенс частки від ділення двох аргументів
ceilокруглення до найближчого більшого цілого числа
cosкосинус
coshгіперболічний косинус
expПоказникова функція
fabsабсолютне значення
floorокруглення до найближчого меншого цілого числа
fmodповертає залишок від ділення двох чисел
frexpповертає значення мантиси і експоненти (порядку)
ldexpвираховує значення x*2exp
logнатуральний логарифм
log10десятковий логарифм
modf(x, p)повертає цілу та дробову частину аргументу х зі знаком
pow(x,y)вираховує значення xy
sinсинус
sinhгіперболічний синус
sqrtквадратний корінь
tanтангенс
tanhгіперболічний тангенс
Перейдемо до розгляду прикладів.

Приклад один .
Запрограмувати рівняня  10x2+15y+3. Де x та y вводяться з клавіатури користувачем.
Підключимо нам вже відому бібліотеку iostream та math.h для математичних функції.
Очевидно що нам потрібні дві змінні.в які ми зчитаєм наші введені числа.
Так їх і назвем:
int x,y;
Нам ще потрібно змінну в яку мо запишем результат . Нехай це буде c.
int c;
Для зчитування ми використовуємо cin, а для виводу cout. Щоб можна було виводити кирилицю , ми в функції main введемо наступне команду: setlocale(LC_ALL, "Ukr"); 
Щоб зчитати наші х та у зробим наступне.
Виведемо на екран , що треба ввести х та у і зчиаємо їх.
cout << "Введiть х = " << endl;
cin >> x;
cout << "Введiть y = " << endl;
cin >> y;
Я використовував символ і латинеці, тому що при використанні і з кирилиці буде виводитись на екран замість нього знак питання.
 Після чого записуємо рівняння і прирівнюємо с до нього таким чином. І виводимо результат на екран.
c = 10 * pow(x, 2) + 15 * y + 3;
cout << "Вiдповiдь = " << c << endl;
Ставимо затримку system("pause");.
І все, наша програма готова.


понедельник, 4 апреля 2016 г.

Урок №3 Масиви

Массив - фіксована кількість однотипних елементів, які розміщені впорядковано в "комірках" оперативної памяті, які індексовані і мають імя задане користувачем.
Простими словами впорядкований набір змінних, які мають індекс.

Масив характеризується:
- розмір(кількість елеменів у масиві);
- розмірність(кількість індексів елемента);
- тип(числові та символьні);

Описується масив таким чином:
назва типу назва змінної[кількість елементів];

Масиви можуть бути одновимірні (наприклад int arr[10];) та  двовимірні(int arr[10][10];)
Одновимірний масив з [n] елементів можна зобразити так:
a[0],a[2],a[3],...,a[n], де a[і] -елементи масиву. і=0,1,2,...,n.
Двовимірний розміру [n][m]:
a[0][0],a[0][2],...,a[0][n]
a[2][0],a[2][2],...,a[2][n]
...
a[m][0],a[m][2],...,a[m][n], де a[і][j] -елементи масиву. і=0,1,2,...,n, j = 0,1,2,...,m..
Індексація в масиві починається зазвичай з 0. Хоча це не обовязково.
Приклад опису масиву:
int test[10];
doudle test[20];

А зарая як я й обіцяв. Я рпозповім про тип данних char  детальніше, зараз ви зрозумієте чому.
При записі символів в змінну типу char створюється одновимірний массив, який завершується символом /0. Це добре у тому випадку якщо нам потрібно перерахувати всі символи і тому подібне.
Наведемо приклад:
char text[] = 'hello word';, наш масив символів виглядатиме наступним чином:
text[0] ='h' ,text[1] = 'e' , text[2] = 'l', text[3] = 'l', text[4] = 'o', text[5] = ' ', text[6] = 'w', text[7] ='o', text[8] = 'r', text[9] = 'd', text[10] = '\0';
 В наступних уроках буде більш детально все описано на прикладах, бо теорія без прикладів, як машина без коліс, ніби є але далеко не поїдеш.
 Наступний урок буде присвячений арифметичним операціям в С++. Я наведу декілька прикладів запрограмування рівнянь.


Урок №2 Типи данних. Опис та використання.

Тип данних - це поняття, що означає тип використовуваної інформації і її максимальний розмір у байтах.
Типи данних поділяються на:
- числові(цілочислові та дробові);
- символьні;
-логічні;
Загальний синтаксис виглядає таким чином:
<Назва типупу><назва змінної>
Наприклад:
int n;
Де int це тип данних, а n є змінною типу int.
Змінні створюються для того щоб тимчасово зберігати якісь значення(інформацію) в оперативній памяті. Змінні поділяються на глобальні і локальні за областю видимості , а ще змінні можуть змінюватись під час виконання програми.

Цілі числа

Типом данних цілих чисел являється int.
Вожливо! Імя змінних не повинно починнатись з цифри, хоча цифри можуть бути присутніми у назві, але не на певшому місті, і використовують латинський алфавіт. Ім'я змінної не повинно містити пробілів. Допустимо використовувати знак підкреслення. Ще при описі змінних важливо памятати, що великі і малі букви різні , тобто test і Test -  це різні  змінні.
Рзмір звичайного типу int є 4 байти. Його діапазон від -2147783648 до 2147783647.
Проте у розробника є можливість зменшити розмір до 2 байт і діапазон тоді буде від 32768 до 32767. Для цього потрібно перед int дописати модифікатор типів short, тобто це буде виглядати як short int.Одною із властивостей типу int - це те що якщо в змінну типу int помістити дробове число, то дробова частина відкидається.
приклади опису цілочисельних змінних:
int test;
int Test;
int test_1;
int test = 1; - присвоєння змінній значення в описі.

Дробові числа

Типами данних для дробових чисел є double та float.
найчастіше використовується double бо він точніший але float також використовується.
float у памяті займає 4 байти, а double 8 байт.
Приклади опису змінних double та float:
double test;
double test = 12.12;
float test;
float test = 11.11;

Символьні типи данних

В мові С++ немає типу данних в якому можна було б зберегти цілий рядок символів. Але це не є мінусом мови. Напевне - це великий плюс, Бо програмісту відкривається більший ряд можливостей роботи з символами. Проте є тип для зберігання символів char який займає всього 1 байт. Важливо, цей тип зберігає символи, але діапазон в нього числовий. Це звязано з тим, що символи зберігаються в таблиці ASCII, а в ній всі символи мають номер.
Приклади опису символьних змінних:
char test;
char test = 'a'; // в одинарних лапках записується символ;
char test = 25; // в цьому прикладі в test буде записано символ під номером 25.

Логічні типи даних

Доволі важлива річ. Логічний тип данних bool займає тільки 1 байт і його діапазон true або false. Також можна використовувати числа. Всі числа , навіть від'ємні, крім 0, повертають значення true, а 0 - false.
Приклади опису логічних змінних:
bool test;
bool test = true;
bool test = 12; //test повертатиме значення true.

Арифметичні над типом данних int

З цілими числами можна виконувати наступні дії:
- додавання "+"
{...
int a=1 , b=2 , c;
c = a+b;
...}
- віднімання "-"
{...
int a=2 , b=1 , c;
c = a-b;
...}
- множення "*"
{...
int a=1 , b=2 , c;
c = a*b;
...}
- ділення "/"
{...
int a=4 , b = 2 , c;
c = a/b;
...}
- залишк від ділення "%"
{...
int b=2,  c;
c = a%2;
...}
Ці всі операції дійсні для float та double.

Про роботу з типом данних char я розповім у наступному уроці, після того, як розповім про масиви.