Операції * і &, їх використання, призначення і взаємозв’язок
Призначення операцій * та &, які використовуються при роботі з вказівниками. Отримання адреси елемента в пам'яті та значення змінної за відомою адресою. Передавання масивів за допомогою вказівників та операндів. Програми з регулярною зміною аргументу.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | украинский |
Дата добавления | 23.03.2014 |
Размер файла | 859,7 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru
Размещено на http://www.allbest.ru
Курсова робота
з дисципліни програмування
на тему «Операції * і &, їх використання, призначення і взаємозв'язок»
2012
Вступ
Дуже потужним засобом розробки програм мови С++ є вказівники. У даній курсовій роботі описано використання та призначення операцій * та &, які використовуються при роботі з вказівниками. & дозволяє отримати адресу елемента в пам'яті, а * - отримати значення змінної за відомою адресою.
Також в курсовій роботі частково розглядаються вказівники, а саме використання вище згаданих операцій. Наведені приклади програм з використанням вказівників.
1. Теоретична частина
1.1 Вказівники
Вказівники - це змінні, значеннями яких є адреси пам'яті. Якщо змінна безпосередньо посилається на своє значення, то вказівник посилається на значення змінної не безпосередньо або непрямо. Він тільки володіє значенням пам'яті імені відповідної йому змінної. Посилання на значення змінної через вказівник називається непрямою адресацією.
Вказівники, перед тим як будуть використовуватися в ході програми, повинні бути визначені. Наприклад:
int *countPtr, count;
Вище визначається змінна countPtr типу int * (вказівник на цілочисельне значення). Крім того також визначається змінна count типу int, проте символ «*» відноситься тільки до змінної countPtr. Спочатку вказівник ініціалізується нульом, або макросом NULL, який знаходиться в директиві процесора стандартної бібліотеки С - <stddef.h>, яка включається в інші директиви, наприклад: в директиву <stdio.h>. Коли значення 0 присвоюється змінній-вказівнику то здійснюється його перетворення до вказівника відповідного типу і значення 0 - це єдине значення яке може бути присвоєне вказівнику безпосередньо.
1.2 Операції & і *
Операція взяття адреси «&» являється унарою, яка повертає адресу свого операнда. Наприклад, якщо об'явити змінні:
int y=5; i int *yPtr;
то оператор yPtr=&y; присвоїть змінній-вказівнику yPtr адресу змінної у. Така операція називається розіменуванням і повертає значення об'єкту на який посилається вказівник (операнд). В даному прикладі оператор
printf ("%d", *yPtr);
виведе значення змінної у рівне 5. При вказівниках операції «*» і «&» доповнюють одна одну. В такому разі установку адреси змінної можна здійснювати так:
yPtr = &y; і лінійка програми
printf ("вивід змінної yPtr\n", *&yPtr)
виведе те саме значення вказівникової змінної. Нижче наведено фрагмент програми, який демонструє застосування операцій над вказівниками.
/*Застосування операцій * і & для вказівників*/
#include <stdio.h>
int main()
{
int a; //a - ціле число
int *aPtr; // aPtr - вказівник на ціле
а=7;
aPtr = &a; // aPtr встановлений на адресу а
printf ("The address of a is %p\n"
"The value of aPtr is %d", a, aPtr);
printf ("\n\nThe value of a is %d\n"
"The value of *aPtr is %d", a, aPtr);
printf ("\n\nShowing that * and & are complements of each other.\n"
"&*aPtr = %p\n*&aPtr = %p\n", &*aPtr, *&aPtr);
return 0;
} // кінець main.
Виконання програми представить нам наступні результати:
The address of a is 0012FF88
The value of aPtr is 0012FF88
The value of a is 7
The value of *aPtr is 7
Showing that * and & are complements of each other.
&*aPtr =0012FF88
*&aPtr =0012FF88
Існують випадки, коли операція взяття адреси змінної «&» може бути незастосовна. Це трапляється, коли програміст намагається передавати не одне значення змінної, а намагається передати масив або змінювати значення змінної при обчисленні і виводити її уже із обчисленим значенням а не з первинним. Для того в С здійснюється операція «імітації виклику по посиланню». Нехай задається прототип функції обчислення куба:
void cubeVolum (int *nVol);
в функції main відповідно ініціалізується змінна сторони куба b і передається її значення у функцію cubeVolum на обчислення об'єму куба, а при поверненні значення змінної повинно відповідати значенню об'єму куба. Для цієї мети в головній функції здійснюється:
int b = 5;
cubeVolum (&b); /*звернення до функції обчислення об'єму*/
printf ("значення об'єму куба%d\n", b); /*b-виводить значення об'єму*/
В функції обчислення об'єму, відповідно, здійснюється так:
Void cubeVolum (int *nVol){
*nVol=*nVol**nVol**nVol; /*обчислення об'єму куба*/}
Нижче наведено приклад обчислення об'єму куба через піднесення числа до кубу.
/*Програма обчислення кубу через піднесення до третього степеня числа, застосовуючи передавання числа аргументом-вказівником*/
#include <stdio.h>
void cubeByReference (int nPtr); // прототип
int main()
{
int number = 5; // ініціалізувати число
printf ("The original value of number is %d", number);
//Передати cubeByReference адресу числа
cubeByReference (number);
printf ("\nThe new value of number is %d", number);
return 0;//Успішне завершення функції main
}//кінець програми.
/*Обчислити куб *nPtr; модифікує змінну number в main*/
void cubeByReference (int nPtr)
{
*nPtr = *nPtr* *nPtr* *nPtr; // піднести до кубу *nPtr
}//кінець функції
Результат виконання програми представиться у вигляді.
The original value of number is 5
The new value of number is 125.
1.3 Вказівники і масиви
За допомогою вказівників можна також передавати масиви. В цьому випадку розробники програм часто використовують функцію sizeof. Вказівник може бути інкрементований (++), декрементований (--), до вказівника може бути додане ціле число (+ або +=) і з вказівника може бути відняте ціле число (- або -=). Припустимо, що є казівник типу int, під який резервується 4 байти. Нехай вказівник yPtr приймає значення адреси пам'яті 3000. Тоді оператор yPtr +=2 дасть результат: 3000+2*4=3008. Дії ++yPtr або yPtr++ та -- yPtr або yPtr -- при застосуванні в масивах будуть давати можливість вказівнику отримувати значення пам'яті на наступний і попередній елементи масиву. Якщо існує масив b[10] теж типу int, наприклад, то вказівник bPtr[1] буде вказувати на 1-ий елемент масиву b. Аналогічно можна виявити дії інших згаданих арифметичних операцій.
Масиви також можуть складатися із вказівників, які часто можуть утворювати масив символьних лінійок. При ініціалізації масиву:
char *suit[4] = {"Hearts","Diamonds","Clubs","Spades"};
вираз suit[4] визначає масив з 4-х елементів. Специфікацією char * цей масив об'являється як масив вказівників на тип char. В масиві розміщені 4 значення: "Hearts", "Diamonds", "Clubs" і "Spades" як символьні лінійки, які зберігаються в пам'яті і в кінці яких значення «нуль» фіксує кінець кожної символьної лінійки. Тобто кожна лінійка вміщає на 1 символ більше. Відповідно, ці символьні лінійки займають в пам'яті 7, 9, 6, і 7 байт. І хоча здається, що в указаний масив заносяться лінійки символів, проте елементами масиву являються вказівники. Для прикладу наведено програму перетворення нижнього регістру символів у верхній.
/*Програму перетворення нижнього регістру символів у верхній*/
#include <stdio.h>
#include <ctype.h>
void convertToUppercase (char *sPtr); //прототип функції
int main()
{
char string[] = "characters and $32.98"; //масив симолів
printf ("The string before convertion is:%s", string);
convertToUppercase (string);
printf ("\nThe string after convertion is:%s\n", string);
return 0;//завершення програми
}//кінець main
/*Перетворити лінійку в символи верхнього регістра*/
void convertToUppercase (char *sPtr);
{
while (*sPtr!='\0') { //текучий символ не '\0'
if (islower(sPtr)) {//якщо символ нижнього регістра,
*sPtr = toupper(*sPtr); //перетворити в верхній
}//кінець if
++sPtr //перемістити sPtr на наступний символ
}//кінець while
}//кінець функції convertToUppercase.
Результат виконання програми буде поданий у вигляді:
The string before convertion is: characters and $32.98
The string after convertion is: CHARACTERS AND $32.98
Нижче наведена програма бульбашкового сортування, яка демонструє використання операцій * і &, а також передання аргументів неявно.
/*Програма бульбашкового сортування*/
//програма заносить значення в масив, сортує їх у висхідному порядку
//і друкує масив, що отримався
#include <stdio.h>
#define SIZE 10
void bubbleSort(int* const array, const int size); // прототип
int main()
{
//ініціалізувати масив
int a[size] = {2,6,4,8,10,12,89,68,45,37};
int i; //лічильник
printf ("Data items on original order\n");
for (i=0; i<SIZE; i++) {//цикл по масиву а
printf ("%4d", a[i]);
}//кінець for
bubbleSort(a, SIZE);//сортувати масив
printf ("\nData items in ascending order\n");
for (i=0; i<SIZE; i++) {//цикл по масиву а
printf ("%4d", a[i]);
}//кінець for
printf ("\n");
return 0;//завершення програми
}//кінець функції main
/*Cортувати масив цілих даних шляхом бульбашкового сортування*/
void bubbleSort(int* const array, const int size)
{
void swap (int *element1Ptr, int * element2Ptr);//прототип
int pass; //лічильник проходів
int j; // лічильник порівнянь
for (pass=0; pass<size-1; pass++) {//цикл для контролю проходів
for (j=0; j<size-1; j++) {//цикл для контролю порівнянь
//поміняти сусідні значення, якщо їх порядок порушений
if (array[j]>array[j+1]) {
swap (&array[j], &array[j+1]);
}//end if
}//кінець внутрішнього for
}//кінець внутрішнього for
}//кінець функції bubbleSort
/*Обміняти значення в комірках, на які вказують *element1Ptr, і *element2Ptr */
void swap (int *element1Ptr, int * element2Ptr)
{
int hold = *element1Ptr;
*element1Ptr=*element2Ptr;
*element2Ptr=hold;
}//кінець функції
Результат виконання програми поданий нижче.
Data items on original order
2,6,4,8,10,12,89,68,45,37
Data items in ascending order
2,4,6,8,10,12,37,45,68,89
2. Практична частина
Задача №1
ЛІНІЙНІ ПРОГРАМИ
Скласти програму для обчислення значення функції
#include <stdio.h>
#include <math.h>
#include <conio.h>
main()
{
const float U1=12.3,T2=3.856,n0=840,n1=610;
float x=1.485,T1,U;
T1=T2*sqrt(n0/n1);
U=(U1*x)/(T1/T2+1);
printf("T1=%f\nU=%f",T1,U);
getch();
return 0;
}
Задача №2
ПРОГРАМИ З РОЗГАЛУЖЕННЯМ
Скласти програму для обчислення значення функції
a=0.854; b=3.625;
s=1.326; s=3.906
#include <stdio.h>
#include <math.h>
#include <conio.h>
main()
{
const float a=0.854, b=3.625, pi=3.14;
float s,i;
scanf("%f",&s);
if(s>1.5&&s<=b-a)
{
i=(sqrt(b)+pow(cos(a*a*s),2))/log(fabs(s-5));
printf("\ns=%f i=%f",s,i);
}
else if(s>b)
{ i=a*b+tan(s/3+pi/12);
printf("\ns=%f i=%f",s,i);
}
getch();
return 0;
}
Задача №3
вказівник операнд аргумент програма
ЦИКЛІЧНІ ПРОГРАМИ З РЕГУЛЯ РНОЮ ЗМІНОЮ АРГУМЕНТУ
Скласти програму для обчислення таблиці значень функції
Аргумент y змінюється від початкового значення y=-4.8 до кінцевого y=0.1, кількість значень функції n=8.
Крок зміни параметра циклу визначається за формулою:
?y=(|yk-yn|)/n-1=(-4.8-0.1)/7=0.7
#include <stdio.h>
#include <math.h>
#include <conio.h>
void main()
{
const float a=3.2,pi=3.14;
float y=-4.8, z;
for(;y<=0.1;y+=0.7)
{
z=atan(a+y*y)/pow(log(a),2)+pi/6*a;
printf("z=%f y=%f\n",z,y);
}
getch();
return;
}
Задача №4
ЦИКЛІЧНІ ПРОГРАМИ З РЕГУЛЯРНОЮ ЗМІНОЮ АРГУМЕНТУ, ЯКІ МІСТЯТЬ РОЗГАЛУЖЕННЯ
Вивести на друк значення функції, які лежать в межах a>b>c, підрахувати їх кількість.
Аргумент х змінюється від початкового значення 3.4 з кроком 0.11 до кінцевого 6.6.
#include <stdio.h>
#include <math.h>
#include <conio.h>
void main()
{
const float y=28.3,z=4.21,a=5.5,c=2.8;
float b,x;
for(x=3.4;x<=6.7;x+=0.11)
{
b=5*(y-x)*sqrt(y-z*x)/(1+(y+x*x)*log(z));
if (b<a&&b>c)
{
printf("b=%-12f x=%.2f\n",b,x);
}
}
getch();
return;
}
Задача №5
ОДНОВИМІРНІ МАСИВИ
Дано одновимірний масив В, який складається з 15 елементів. Сформувати вектор А, першим елементом якого є найменше число, а наступні елементи вектора А - числа, які знаходяться за найменшим елементом масиву В.
#include <stdio.h>
#include <conio.h>
main()
{
int i,n=0,k,b[15],min,a[15];
for(i=0;i<15;i++)
scanf("\n%d",&b[i]);
min=b[0];
for(i=0;i<15;i++)
if(b[i]<min)
{
min=b[i];
n=i;
}
k=15-n;
a[0]=min;
n++;
for(i=1;n<15;i++,n++)
a[i]=b[n];
for(i=0;i<k;i++)
printf(" %d",a[i]);
getch();
return 0;
}
Задача №6
ЦИКЛІЧНІ ПРОГРАМИ З НАКОПИЧЕННЯМ СУМИ АБО ДОБУТКУ
Дано два одновимірні вектори Х і Т, кожний з яких складається з 10 елементів. Обчислити їх скалярний добуток.
#include <stdio.h>
#include <conio.h>
main()
{
int x[10],t[10],i,s=0;
printf("X: \n");
for(i=0;i<10;i++)
scanf("%d",&x[i]);
printf("T: \n");
for(i=0;i<10;i++)
scanf("%d",&t[i]);
clrscr();
printf("X: ");
for(i=0;i<10;i++)
printf("%d ",x[i]);
printf("\nT: ");
for(i=0;i<10;i++)
printf("%d ",t[i]);
for(i=0;i<10;i++)
{
s+=x[i]*t[i];
}
printf("\nSkalarnyi dobutok = %d",s);
getch();
return 0;
}
Задача №7
ВКЛАДЕНІ ЦИКЛИ
х змінюється від 12,4 до 19,4 з кроком 3,5
Значення індексної змінної:
b1=-3.46 b2=1.852
b3=3.03 b4=-2.57
#include <stdio.h>
#include <math.h>
#include <conio.h>
main()
{
float b[4]={-3.46,1.852,3.03,-2.57},x,a;
int i;
for(x=12.4;x<=19.4;x+=3.5)
{
printf("x=%.1f\n",x);
for(i=0;i<4;i++)
{
a=1+pow(sin(b[i]*b[i]+x/(i+1)),2);
printf("a=%.3f\n",a);
}
}
getch();
return 0;
}
Задача №8
ДВОВИМІРНІ МАСИВИ, СОРТУВАННЯ МАСИВІВ
Для кожного рядка заданої матриці А розміром 8х5 знайти та надрукувати номери стовбців, які містять нульові елементи, і їх кількість.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void main()
{
int a[8][5],i,j,k;
randomize();
for(i=0;i<8;i++)
for(j=0;j<5;j++)
a[i][j]=random(9);
for(i=0;i<8;i++)
{
k=0;
printf("line %d: ",i);
for(j=0;j<5;j++)
if(a[i][j]==0)
{
printf("%d ",j);
k++;
}
printf("\tkilkist 0: %d\n",k);
}
getch();
}
Задача №9
ПРОЦЕДУРИ-ФУНКЦІЇ
Обчислити значення перших n (n<30) елементів геометричної прогресії з допомогою підпрограми, якщо відомий перший елемент прогресії а та знаменник прогресії q. Кожний наступний елемент геометричної прогресії утворюється множенням попереднього на знаменник прогресії. Для розміщення в пам'яті обчислених елементів їх слід оголосити як одновимірний масив.
#include <math.h>
#include <conio.h>
void funkt(float, float, float x[20]);
void main()
{
float a,q,x[20];
int i;
cout<<"a= ";
cin>>a;
cout<<"\nq= ";
cin>>q;
funkt(a,q,x);
for(i=0;i<20;i++)
cout<<endl<<x[i];
getch();
}
void funkt(float a, float q, float x[20])
{
int i;
x[0]=a;
for(i=1;i<20;i++)
{
x[i]=x[i-1]*q;
}
}
Задача №10
ПІДПРОГРАМИ-ФУНКЦІЇ
Скласти програму для визначення величини
де a=1, b=32.
Обчислення інтегралу оформити у вигляді процедури-функції, використовуючи метод Сімпсона:
Де h=(b-a)/n=0.5
#include <iostream.h>
#include <conio.h>
#include <math.h>
float integ();
void main()
{
const int a=1,b=32;
float q;
q=integ();
q+=pow((a+b),0.3333333);
cout<<"\nQ="<<q;
getch();
}
float integ()
{
const float h=0.5, n=62;
float q,x=0;
int i;
q=x*x*x*exp(x+sin(x));
x=n;
q+=x*x*x*exp(x+sin(x));
for(i=1;i<62;i++)
{
if(i%2!=0)
q+=4*i*i*i*exp(i+sin(i));
else
q+=2*i*i*i*exp(i+sin(i));
}
q*=h/3;
return q;
}
Задача №11
ОБРОБКА ТЕКСТІВ
Дано текст, який містить букви і пропуски. Знайти слова, які закінчуються буквосполученням «ати», і замінити буквосполучення на «али». Словом вважати послідовність букв розділених пропусками.
#include <conio.h>
#include <stdio.h>
main()
{
char text[64]="atu iatu atuf atu";
char *t=text, *temp;
while(*t)
{
if(*t=='a')
{
t++;
if(*t=='t')
{
temp=t;
t++;
if(*t=='u')
{
t++;
if(*t==' '||*t=='\0')
*temp='l';
}
}
}
t++;
}
printf("%s",text);
getch();
return 0;
}
Задача №12
ФАЙЛИ
Сформувати файл ”В”, що містить інформацію про книги з програмування в бібліотеці: прізвище автора, назва видавництва, рік видання, алгоритмічна мова. Записати у файл ”ВІ” список книг, виданих видавництвом ”Просвіта” після 1990 року, а також кількість книг з мови БЕЙСІК. Ці дані також вивести на друк.
#include <conio.h>
#include <stdio.h>
#include <string.h>
struct biblioteka
{
char avtor[15];
char vyd[15];
int year;
char mova[10];
};
void main()
{
int i;
biblioteka book;
FILE *bPtr, *biPtr;
char s[10]={"prosvita"},s1[10]={"beisik"};
if((bPtr=fopen("B.txt","w+")) == NULL)
printf("Error");
else
{
printf("vvedit' avtor, vydavnyctvo, rik i algor. movy\n");
for(i=0;i<5;i++)
{
printf("? ");
scanf("%s %s %d %s", &book.avtor,&book.vyd,
&book.year,&book.mova);
fwrite(&book,sizeof(struct biblioteka),1,bPtr);
}
}
rewind(bPtr);
if((biPtr=fopen("BI.txt","w")) == NULL)
printf("Error");
else
{
while(!feof(bPtr))
{
fread(&book,sizeof(struct biblioteka),1,bPtr);
if((strcmp(s,book.vyd)==0&&book.year>1990)||strcmp(s1,book.mova)==0)
{
printf("%-15s%-15s%-10d%-10s\n",book.avtor,book.vyd,book.year,book.mova);
fwrite(&book,sizeof(struct biblioteka),1,biPtr);
}
}
}
fclose(bPtr);
fclose(biPtr);
getch();
}
Задача №13
РОЗВ'ЯЗАННЯ СИСТЕМИ ЛІНІЙНИХ АЛГЕБРАЇЧНИХ РІВНЯНЬ МЕТОДОМ ГАУССА
Розв'язання системи лінійних алгебраїчних рівнянь методом Гаусса.
Числові значення коефіцієнтів системи
аі1 |
аі2 |
аі3 |
bі |
|
0.71 0.1 0.12 |
0.1 0.34 -0.04 |
0.12 -0.04 0.1 |
0.29 0.32 -0.1 |
#include <iostream.h>
#include <conio.h>
void main()
{
float a[3][4];
int i,j;
float det,x1,x2,x3,k;
cout<<"Vvedit' systemu rivnan' po radkah:\n";
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
cout<<"Vvedit' a["<<(i+1)<<"]["<<(j+1)<<"]: ";
cin>>a[i][j];
}
cout<<"Vvedit' b["<<(i+1)<<"]: ";
cin>>a[i][3];
}
for(i=0;i<3;i++)
{
cout<<endl;
for(j=0;j<4;j++)
cout<<a[i][j]<<"\t";
}
cout<<endl;
det=a[0][0]*a[1][1]*a[2][2]+a[1][0]*a[2][1]*a[0][2]+a[0][1]*a[1][2]*a[2][0]-
a[2][0]*a[1][1]*a[0][2]-a[1][0]*a[0][1]*a[2][2]-a[2][1]*a[1][2]*a[0][0];
if(det==0) cout<<"systema ne sumisna!!!/n";
else
{
k=a[1][0]/a[0][0];
for(j=0;j<4;j++)
a[1][j]-=a[0][j]*k;
k=a[2][0]/a[0][0];
for(j=0;j<4;j++)
a[2][j]-=a[0][j]*k;
k=a[2][1]/a[1][1];
for(j=1;j<4;j++)
a[2][j]-=a[1][j]*k;
x3=a[2][3]/a[2][2];
x2=(a[1][3]-a[1][2]*x3)/a[1][1];
x1=(a[0][3]-a[0][1]*x2-a[0][2]*x3)/a[0][0];
for(i=0;i<3;i++)
{
cout<<endl;
for(j=0;j<4;j++)
cout<<a[i][j]<<"\t";
}
cout<<"\n\nX1="<<x1<<"\nX2="<<x2<<"\nX3="<<x3;
}
getch();
}
Задача №14
ІТЕРАЦІЙНІ ЦИКЛІЧНІ ПРОЦЕСИ
Розв'язати рівняння методом ітерацій
Інтервал ізоляції кореня: [2;3]
Похибка обчислення: 0.001
#include <iostream.h>
#include <conio.h>
#include <math.h>
#define E 0.001
void main()
{
double x=2,y,t;
int k=0;
do
{
y=2/log(fabs(x));
t=fabs(x-y);
x=y;
k++;
}
while(t>E);
cout<<"X="<<x<<"\nKilkist' iteracyi = "<<k;
getch();
}
Задача №15
РОЗВ'ЯЗАННЯ СИСТЕМИ ЛІНІЙНИХ АЛГЕБРАЇЧНИХ РІВНЯНЬ МЕТОДОМ ПРОСТОЇ ІТЕРАЦІЇ АБО МЕТОДОМ ЗЕЙДЕЛЯ
Розв'язати системи лінійних алгебраїчних рівнянь методом простої ітерації або методом Зейделя.
аі1 |
аі2 |
аі3 |
bі |
|
0.71 0.1 0.12 |
0.1 0.34 -0.04 |
0.12 -0.04 0.1 |
0.29 0.32 -0.1 |
#include <conio.h>
#include <iostream.h>
#include <math.h>
#define E 0.001
void main()
{
int i,j;
double a[3][3],x[3]={0,0,0},y[3],b[3],var,temp;
cout<<"Vvedit' systemu rivnan' po radkah:\n";
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
cout<<"Vvedit' a["<<(i+1)<<"]["<<(j+1)<<"]: ";
cin>>a[i][j];
}
cout<<"Vvedit' b["<<(i+1)<<"]: ";
cin>>b[i];
}
for(i=0;i<3;i++)
{
cout<<endl;
for(j=0;j<3;j++)
cout<<a[i][j]<<"\t";
cout<<b[i];
}
cout<<endl;
do
{
temp=0;
for (int i=0; i<3; i++)
{
y[i]=x[i];
var=0;
for (int j=0; j<3; j++)
if(j!=i) var+=(a[i][j]*x[j]);
x[i]=(b[i]-var)/a[i][i];
temp+=fabs(y[i]-x[i]);
}
}
while (temp>E);
for(int i=0; i<3; i++)
cout<<"\nX["<<(i+1)<<"]="<<x[i]<<"\t";
getch();
}
Задача №16
ОСНОВИ ООП. ПРИНЦИПИ ПОБУДОВИ КЛАСІВ
Створити клас з полями та методами. Оголосити кілька об'єктів цього класу, використовуючи різні конструктори.
КОРАБЕЛЬ
поля:
ім'я - char*
водотоннажність - int
прізвище власника - char*
методи:
введення назви корабля
введення водотоннажності
зміна власника
виведення інформації про об'єкт
#include <iostream.h>
#include <conio.h>
#include <string.h>
class sudno
{
char name[20];
int tonag;
char vlasnuk[20];
public:
sudno();
sudno(char*,int,char*);
void SetName(char*);
void SetTonag(int);
void SetVlasnuk(char*);
void Show();
};
void main()
{
clrscr();
sudno S;
sudno S1("Pobeda",3000,"Klimyuk");
cout<<"#1:"<<endl;
S.Show();
cout<<"#2:"<<endl;
S1.Show();
S.SetName("Beda");
cout<<"#1:"<<endl;
S.Show();
S.SetTonag(20000);
S.SetVlasnuk("Darmovis");
cout<<"#1:"<<endl;
S.Show();
getch();
}
sudno::sudno()
{
strcpy(name,"NO");
tonag=0;
strcpy(vlasnuk,"NO");
}
sudno::sudno(char *a,int b,char *c)
{
strcpy(name,a);
tonag=b;
strcpy(vlasnuk,c);
}
void sudno::SetName(char *a)
{
strcpy(name,a);
}
void sudno::SetTonag(int a)
{
tonag=a;
}
void sudno::SetVlasnuk(char *a)
{
strcpy(vlasnuk,a);
}
void sudno::Show()
{
cout<<name<<"\t"<<tonag<<"\t"<<vlasnuk<<endl;
}
Список використаної літератури
1. Основи програмування і алгоритмічні мови. Методичні вказівки до лабораторних занять для студентів спеціальності “Професійна освіта. Комп'ютерні технології в управлінні та навчанні” для денної та заочної форм навчання / В.М. Мельник Луцьк: ЛНТУ, 2011.- 62 с.
2. Харви Дейтел, Пол Дейтел. - Как програмировать на С
3. Архангельский А.Я. Приемы программирования в Borland C++. М.: ООО “БИНОМ-ПРЕСС”, 2003. 784 с.
4. Б. Страуструп. Язык программирования C++ = The C++ Programming Language / Пер. с англ. -- 3-е изд. -- СПб.;
5. Страуструп Б. Язык программирования C++. Специальное издание = The C++ programming language. Special edition. -- М.: Бином-Пресс, 2007. -- 1104 с. -- ISBN 5-7989-0223-4
6. Страуструп Б. Программирование: принципы и практика использования C++, исправленное издание = Programming: Principles and Practice Using C++. -- М.: Вильямс, 2011. -- С. 1248. -- ISBN 978-5-8459-1705-8
7. Герберт Шилдт. Полный справочник по C++ = C++: The Complete Reference. -- 4-е изд. -- М.: Вильямс, 2011. -- С. 800. -- ISBN 978-5-8459-0489-8
Размещено на Allbest.ru
Подобные документы
Користування стандартним та форматованим вводом-виводом. Використання вводу та виводу аргументу. Розробка лінійних програм. Програми з розгалуженням, циклічні програми з регулярною змінною аргументу. Використання вказівників для роботи з масивами даних.
курсовая работа [4,6 M], добавлен 27.02.2014Позначення та назва програми, технічне забезпечення, необхідне для функціонування. Призначення програми, функціональні обмеження на застосування. Опис логічної структури, алгоритм. Типи комп'ютерів та пристроїв, що використовуються при роботі програми.
курсовая работа [284,0 K], добавлен 01.04.2016Розробка автоматизованої системи навчання. Операції над простими типами в середовищі Delphі. Прості типи даних. Арифметичні операції і операції відношення. Виконання логічних операцій. Черговість виконання операцій. Строкові операції отримання адреси.
курсовая работа [2,4 M], добавлен 04.05.2013Поняття маршрутизаторів, їх принцип роботи та призначення, необхідність використання в комп’ютерній мережі. Типи адрес стеку ТСР/ІР: локальні (апаратні), ІР-адреси та символьні доменні імена. Класи ІР-адрес, їх класифікація, призначення та інтерпретація.
контрольная работа [25,4 K], добавлен 12.09.2009Вивчення структури програми на Паскалі. Значення функції для будь-якого введеного значення аргументу. Введення-виведення за допомогою операторів Readln і Writeln, визначення їх відмінності від операторів Read і Write. Лістинг і результати роботи програми.
лабораторная работа [217,4 K], добавлен 04.11.2014Міжрівневі взаємодії - передача даних по мережі з одного місця в інше. Характеристика та призначення протоколу ARP. Визначення фізичної адреси локального та віддаленного вузла. Взаємодія мережних пристроїв через фізичні адреси. Способи визначення адрес.
контрольная работа [18,2 K], добавлен 20.09.2009Поняття мови програмування С++, її сутність та особливості, призначення та використання. Структура програми, її основні елементи та загальні правила роботи. Охорона праці при роботі з обчислювальною технікою. Апаратні вимоги для виконання програми.
курсовая работа [126,2 K], добавлен 29.03.2009Програма автотестування (POST). Призначення діагностичного програмного забезпечення, категорії програм діагностики. Використання утилітів пошуку несправностей, неполадок і оптимізації. Проведення тестування комп’ютера за допомогою програми CHECKІT.
лабораторная работа [13,6 K], добавлен 03.10.2010Поняття комп'ютеру як універсальної технічної системи, спроможної виконувати визначену послідовність операцій певної програми. Програмні засоби, за допомогою яких визначають основні характеристики ПК. Утіліта EVEREST Home Edition 1.51, її призначення.
контрольная работа [403,0 K], добавлен 01.12.2009Методи та елементи, що використовуються для реалізації алгоритму програми. Структура додатку з описом функцій складових частин і зв'язків між ними. Типи комп'ютерів та пристроїв, що використовуються при роботі програми. Організація вхідних даних.
курсовая работа [363,2 K], добавлен 01.04.2016