Операції * і &, їх використання, призначення і взаємозв’язок

 













Курсова робота

з дисципліни програмування

на тему «Операції * і &, їх використання, призначення і взаємозвязок»
















Вступ


Дуже потужним засобом розробки програм мови С++ є вказівники. У даній курсовій роботі описано використання та призначення операцій * та &, які використовуються при роботі з вказівниками. & дозволяє отримати адресу елемента в пам'яті, а * - отримати значення змінної за відомою адресою.

Також в курсовій роботі частково розглядаються вказівники, а саме використання вище згаданих операцій. Наведені приклади програм з використанням вказівників.



1. Теоретична частина


.1 Вказівники


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

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

*countPtr, count;


Вище визначається змінна countPtr типу int * (вказівник на цілочисельне значення). Крім того також визначається змінна count типу int, проте символ «*» відноситься тільки до змінної countPtr. Спочатку вказівник ініціалізується нульом, або макросом NULL, який знаходиться в директиві процесора стандартної бібліотеки С - <stddef.h>, яка включається в інші директиви, наприклад: в директиву <stdio.h>. Коли значення 0 присвоюється змінній-вказівнику то здійснюється його перетворення до вказівника відповідного типу і значення 0 - це єдине значення яке може бути присвоєне вказівнику безпосередньо.


.2 Операції & і *


Операція взяття адреси «&» являється унарою, яка повертає адресу свого операнда. Наприклад, якщо обявити змінні:


int y=5; i int *yPtr;


то оператор yPtr=&y; присвоїть змінній-вказівнику yPtr адресу змінної у. Така операція називається розіменуванням і повертає значення обєкту на який посилається вказівник (операнд). В даному прикладі оператор

("%d", *yPtr);


виведе значення змінної у рівне 5. При вказівниках операції «*» і «&» доповнюють одна одну. В такому разі установку адреси змінної можна здійснювати так:

= &y; і лінійка програми("вивід змінної yPtr\n", *&yPtr)


виведе те саме значення вказівникової змінної. Нижче наведено фрагмент програми, який демонструє застосування операцій над вказівниками.


/*Застосування операцій * і & для вказівників*/

#include <stdio.h>main()

{a; //a - ціле число*aPtr; // aPtr - вказівник на ціле

а=7;= &a; // aPtr встановлений на адресу а("The address of a is %p\n"

"The value of aPtr is %d", a, aPtr);("\n\nThe value of a is %d\n"

"The value of *aPtr is %d", a, aPtr);("\n\nShowing that * and & are complements of each other.\n"

"&*aPtr = %p\n*&aPtr = %p\n", &*aPtr, *&aPtr);0;

} // кінець main.


Виконання програми представить нам наступні результати:

address of a is 0012FF88value of aPtr is 0012FF88value of a is 7value of *aPtr is 7that * and & are complements of each other.

&*aPtr =0012FF88

*&aPtr =0012FF88


Існують випадки, коли операція взяття адреси змінної «&» може бути незастосовна. Це трапляється, коли програміст намагається передавати не одне значення змінної, а намагається передати масив або змінювати значення змінної при обчисленні і виводити її уже із обчисленим значенням а не з первинним. Для того в С здійснюється операція «імітації виклику по посиланню». Нехай задається прототип функції обчислення куба:

cubeVolum (int *nVol);


в функції main відповідно ініціалізується змінна сторони куба b і передається її значення у функцію cubeVolum на обчислення обєму куба, а при поверненні значення змінної повинно відповідати значенню обєму куба. Для цієї мети в головній функції здійснюється:


int b = 5;(&b); /*звернення до функції обчислення обєму*/("значення обєму куба%d\n", b); /*b-виводить значення обєму*/


В функції обчислення обєму, відповідно, здійснюється так:

cubeVolum (int *nVol){

*nVol=*nVol**nVol**nVol; /*обчислення обєму куба*/}


Нижче наведено приклад обчислення обєму куба через піднесення числа до кубу.


/*Програма обчислення кубу через піднесення до третього степеня числа, застосовуючи передавання числа аргументом-вказівником*/

#include <stdio.h>cubeByReference (int nPtr); // прототипmain()

{number = 5; // ініціалізувати число("The original value of number is %d", number);

//Передати cubeByReference адресу числа(number);("\nThe new value of number is %d", number);0;//Успішне завершення функції main

}//кінець програми.

/*Обчислити куб *nPtr; модифікує змінну number в main*/cubeByReference (int nPtr)

{

*nPtr = *nPtr* *nPtr* *nPtr; // піднести до кубу *nPtr

}//кінець функції

Результат виконання програми представиться у вигляді.original value of number is 5new value of number is 125.


.3 Вказівники і масиви


За допомогою вказівників можна також передавати масиви. В цьому випадку розробники програм часто використовують функцію sizeof. Вказівник може бути інкрементований (++), декрементований (--), до вказівника може бути додане ціле число (+ або +=) і з вказівника може бути відняте ціле число (- або -=). Припустимо, що є казівник типу int, під який резервується 4 байти. Нехай вказівник yPtr приймає значення адреси памяті 3000. Тоді оператор yPtr +=2 дасть результат: 3000+2*4=3008. Дії ++yPtr або yPtr++ та -- yPtr або yPtr -- при застосуванні в масивах будуть давати можливість вказівнику отримувати значення памяті на наступний і попередній елементи масиву. Якщо існує масив b[10] теж типу int, наприклад, то вказівник bPtr[1] буде вказувати на 1-ий елемент масиву b. Аналогічно можна виявити дії інших згаданих арифметичних операцій.

Масиви також можуть складатися із вказівників, які часто можуть утворювати масив символьних лінійок. При ініціалізації масиву:

*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>convertToUppercase (char *sPtr); //прототип функціїmain()

{string[] = "characters and $32.98"; //масив симолів("The string before convertion is:%s", string); (string);("\nThe string after convertion is:%s\n", string);0;//завершення програми

}//кінець main

/*Перетворити лінійку в символи верхнього регістра*/convertToUppercase (char *sPtr);

{(*sPtr!='\0') { //текучий символ не '\0'(islower(sPtr)) {//якщо символ нижнього регістра,

*sPtr = toupper(*sPtr); //перетворити в верхній

}//кінець if

++sPtr //перемістити sPtr на наступний символ

}//кінець while

}//кінець функції convertToUppercase.


Результат виконання програми буде поданий у вигляді:

string before convertion is: characters and $32.98string after convertion is: CHARACTERS AND $32.98

Нижче наведена програма бульбашкового сортування, яка демонструє використання операцій * і &, а також передання аргументів неявно.


/*Програма бульбашкового сортування*/

//програма заносить значення в масив, сортує їх у висхідному порядку

//і друкує масив, що отримався

#include <stdio.h>

#define SIZE 10bubbleSort(int* const array, const int size); // прототипmain()

{

//ініціалізувати масивa[size] = {2,6,4,8,10,12,89,68,45,37};i; //лічильник("Data items on original order\n");(i=0; i<SIZE; i++) {//цикл по масиву а("%4d", a[i]);

}//кінець for(a, SIZE);//сортувати масив("\nData items in ascending order\n");(i=0; i<SIZE; i++) {//цикл по масиву а("%4d", a[i]);

}//кінець for("\n");0;//завершення програми

}//кінець функції main

/*Cортувати масив цілих даних шляхом бульбашкового сортування*/bubbleSort(int* const array, const int size)

{swap (int *element1Ptr, int * element2Ptr);//прототипpass; //лічильник проходівj; // лічильник порівнянь(pass=0; pass<size-1; pass++) {//цикл для контролю проходів(j=0; j<size-1; j++) {//цикл для контролю порівнянь

//поміняти сусідні значення, якщо їх порядок порушений(array[j]>array[j+1]) {(&array[j], &array[j+1]);

}//end if

}//кінець внутрішнього for

}//кінець внутрішнього for

}//кінець функції bubbleSort

/*Обміняти значення в комірках, на які вказують *element1Ptr, і *element2Ptr */swap (int *element1Ptr, int * element2Ptr)

{hold = *element1Ptr;

*element1Ptr=*element2Ptr;

*element2Ptr=hold;

}//кінець функції


Результат виконання програми поданий нижче.

items on original order

,6,4,8,10,12,89,68,45,37items in ascending order

,4,6,8,10,12,37,45,68,89



2. Практична частина


Задача №1


ЛІНІЙНІ ПРОГРАМИ

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


#include <stdio.h>

#include <math.h>

#include <conio.h>()

{float U1=12.3,T2=3.856,n0=840,n1=610;x=1.485,T1,U;=T2*sqrt(n0/n1);=(U1*x)/(T1/T2+1);("T1=%f\nU=%f",T1,U);();0;

}




Задача №2


ПРОГРАМИ З РОЗГАЛУЖЕННЯМ

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


=0.854; b=3.625; =1.326; s=3.906

#include <stdio.h>

#include <math.h>

#include <conio.h>()

{float a=0.854, b=3.625, pi=3.14;s,i;("%f",&s);(s>1.5&&s<=b-a)

{=(sqrt(b)+pow(cos(a*a*s),2))/log(fabs(s-5));("\ns=%f i=%f",s,i);

}if(s>b)

{i=a*b+tan(s/3+pi/12);("\ns=%f i=%f",s,i);

}();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>main()

{float a=3.2,pi=3.14;y=-4.8, z;(;y<=0.1;y+=0.7)

{=atan(a+y*y)/pow(log(a),2)+pi/6*a;("z=%f y=%f\n",z,y);

}();;

}



Задача №4


ЦИКЛІЧНІ ПРОГРАМИ З РЕГУЛЯРНОЮ ЗМІНОЮ АРГУМЕНТУ, ЯКІ МІСТЯТЬ РОЗГАЛУЖЕННЯ

Вивести на друк значення функції, які лежать в межах a>b>c, підрахувати їх кількість.



Аргумент х змінюється від початкового значення 3.4 з кроком 0.11 до кінцевого 6.6.


#include <stdio.h>

#include <math.h>

#include <conio.h>main()

{float y=28.3,z=4.21,a=5.5,c=2.8;b,x;(x=3.4;x<=6.7;x+=0.11)

{=5*(y-x)*sqrt(y-z*x)/(1+(y+x*x)*log(z));(b<a&&b>c)

{("b=%-12f x=%.2f\n",b,x);

}

}();;

}



Задача №5


ОДНОВИМІРНІ МАСИВИ

Дано одновимірний масив В, який складається з 15 елементів. Сформувати вектор А, першим елементом якого є найменше число, а наступні елементи вектора А - числа, які знаходяться за найменшим елементом масиву В.


#include <stdio.h>

#include <conio.h>()

{i,n=0,k,b[15],min,a[15];(i=0;i<15;i++)("\n%d",&b[i]);=b[0];(i=0;i<15;i++)(b[i]<min)

{=b[i];=i;

}=15-n;[0]=min;++;(i=1;n<15;i++,n++)[i]=b[n];(i=0;i<k;i++)(" %d",a[i]);();0;

}




Задача №6


ЦИКЛІЧНІ ПРОГРАМИ З НАКОПИЧЕННЯМ СУМИ АБО ДОБУТКУ

Дано два одновимірні вектори Х і Т, кожний з яких складається з 10 елементів. Обчислити їх скалярний добуток.


#include <stdio.h>

#include <conio.h>()

{x[10],t[10],i,s=0;("X: \n");(i=0;i<10;i++)("%d",&x[i]);("T: \n");(i=0;i<10;i++)("%d",&t[i]);();("X: ");(i=0;i<10;i++)("%d ",x[i]);("\nT: ");(i=0;i<10;i++)("%d ",t[i]);(i=0;i<10;i++)

{+=x[i]*t[i];

}("\nSkalarnyi dobutok = %d",s);();0;

}



Задача №7


ВКЛАДЕНІ ЦИКЛИ



х змінюється від 12,4 до 19,4 з кроком 3,5

Значення індексної змінної:

1=-3.46b2=1.8523=3.03b4=-2.57

#include <stdio.h>

#include <math.h>

#include <conio.h>()

{b[4]={-3.46,1.852,3.03,-2.57},x,a;i;(x=12.4;x<=19.4;x+=3.5)

{("x=%.1f\n",x);(i=0;i<4;i++)

{=1+pow(sin(b[i]*b[i]+x/(i+1)),2);("a=%.3f\n",a);

}

}();0;

}



Задача №8


ДВОВИМІРНІ МАСИВИ, СОРТУВАННЯ МАСИВІВ

Для кожного рядка заданої матриці А розміром 8х5 знайти та надрукувати номери стовбців, які містять нульові елементи, і їх кількість.


#include <stdio.h>

#include <conio.h>

#include <stdlib.h>main()

{a[8][5],i,j,k;();(i=0;i<8;i++)(j=0;j<5;j++)[i][j]=random(9);(i=0;i<8;i++)

{=0;("line %d: ",i);(j=0;j<5;j++)(a[i][j]==0)

{("%d ",j);++;

}("\tkilkist 0: %d\n",k);

}();

}



Задача №9


ПРОЦЕДУРИ-ФУНКЦІЇ

Обчислити значення перших n (n<30) елементів геометричної прогресії з допомогою підпрограми, якщо відомий перший елемент прогресії а та знаменник прогресії q. Кожний наступний елемент геометричної прогресії утворюється множенням попереднього на знаменник прогресії. Для розміщення в памяті обчислених елементів їх слід оголосити як одновимірний масив.


#include <math.h>

#include <conio.h>funkt(float, float, float x[20]);main()

{a,q,x[20];i;<<"a= ";>>a;<<"\nq= ";>>q;(a,q,x);(i=0;i<20;i++)<<endl<<x[i];();

}funkt(float a, float q, float x[20])

{i;[0]=a;(i=1;i<20;i++)

{[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>integ();main()

{int a=1,b=32;q;=integ();+=pow((a+b),0.3333333);<<"\nQ="<<q;();

}integ()

{float h=0.5, n=62;q,x=0;i;=x*x*x*exp(x+sin(x));=n;+=x*x*x*exp(x+sin(x));(i=1;i<62;i++)

{(i%2!=0)+=4*i*i*i*exp(i+sin(i));+=2*i*i*i*exp(i+sin(i));

}*=h/3;q;

}


Задача №11


ОБРОБКА ТЕКСТІВ

Дано текст, який містить букви і пропуски. Знайти слова, які закінчуються буквосполученням «ати», і замінити буквосполучення на «али». Словом вважати послідовність букв розділених пропусками.


#include <conio.h>

#include <stdio.h>()

{text[64]="atu iatu atuf atu";*t=text, *temp;(*t)

{(*t=='a')

{++;(*t=='t')

{=t;++;(*t=='u')

{++;(*t==' '||*t=='\0')

*temp='l';

}

}

}++;

}("%s",text);();0;

}



Задача №12


ФАЙЛИ

Сформувати файл В, що містить інформацію про книги з програмування в бібліотеці: прізвище автора, назва видавництва, рік видання, алгоритмічна мова. Записати у файл ВІ список книг, виданих видавництвом Просвіта після 1990 року, а також кількість книг з мови БЕЙСІК. Ці дані також вивести на друк.


#include <conio.h>

#include <stdio.h>

#include <string.h>biblioteka

{avtor[15];vyd[15];year;mova[10];

};main()

{i;book;*bPtr, *biPtr;s[10]={"prosvita"},s1[10]={"beisik"};((bPtr=fopen("B.txt","w+")) == NULL)("Error");

{("vvedit' avtor, vydavnyctvo, rik i algor. movy\n");(i=0;i<5;i++)

{("? ");("%s %s %d %s", &book.avtor,&book.vyd,

&book.year,&book.mova);(&book,sizeof(struct biblioteka),1,bPtr);

}

}(bPtr);((biPtr=fopen("BI.txt","w")) == NULL)("Error");

{(!feof(bPtr))

{(&book,sizeof(struct biblioteka),1,bPtr);((strcmp(s,book.vyd)==0&&book.year>1990)||strcmp(s1,book.mova)==0)

{("%-15s%-15s%-10d%-10s\n",book.avtor,book.vyd,book.year,book.mova);(&book,sizeof(struct biblioteka),1,biPtr);

}

}

}(bPtr);(biPtr);();

}



Задача №13


РОЗВЯЗАННЯ СИСТЕМИ ЛІНІЙНИХ АЛГЕБРАЇЧНИХ РІВНЯНЬ МЕТОДОМ ГАУССА

Розвязання системи лінійних алгебраїчних рівнянь методом Гаусса.



Числові значення коефіцієнтів системи

аі1аі2аі3bі0.71 0.1 0.120.1 0.34 -0.040.12 -0.04 0.10.29 0.32 -0.1

#include <iostream.h>

#include <conio.h>main()

{a[3][4];i,j;det,x1,x2,x3,k;<<"Vvedit' systemu rivnan' po radkah:\n";(i=0;i<3;i++)

{(j=0;j<3;j++)

{<<"Vvedit' a["<<(i+1)<<"]["<<(j+1)<<"]: ";>>a[i][j];

}<<"Vvedit' b["<<(i+1)<<"]: ";>>a[i][3];

}(i=0;i<3;i++)

{<<endl;(j=0;j<4;j++)<<a[i][j]<<"\t";

}<<endl;=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]-[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];(det==0) cout<<"systema ne sumisna!!!/n";

{=a[1][0]/a[0][0];(j=0;j<4;j++)[1][j]-=a[0][j]*k;=a[2][0]/a[0][0];(j=0;j<4;j++)[2][j]-=a[0][j]*k;=a[2][1]/a[1][1];(j=1;j<4;j++)[2][j]-=a[1][j]*k;=a[2][3]/a[2][2];=(a[1][3]-a[1][2]*x3)/a[1][1];=(a[0][3]-a[0][1]*x2-a[0][2]*x3)/a[0][0];(i=0;i<3;i++)

{<<endl;(j=0;j<4;j++)<<a[i][j]<<"\t";

}<<"\n\nX1="<<x1<<"\nX2="<<x2<<"\nX3="<<x3;

}();

}




Задача №14


ІТЕРАЦІЙНІ ЦИКЛІЧНІ ПРОЦЕСИ

Розвязати рівняння методом ітерацій

Інтервал ізоляції кореня: [2;3]

Похибка обчислення: 0.001


#include <iostream.h>

#include <conio.h>

#include <math.h>

#define E 0.001main()

{x=2,y,t;k=0;

{=2/log(fabs(x));=fabs(x-y);=y;++;

}(t>E);<<"X="<<x<<"\nKilkist' iteracyi = "<<k;();

}



Задача №15


РОЗВЯЗАННЯ СИСТЕМИ ЛІНІЙНИХ АЛГЕБРАЇЧНИХ РІВНЯНЬ МЕТОДОМ ПРОСТОЇ ІТЕРАЦІЇ АБО МЕТОДОМ ЗЕЙДЕЛЯ

Розвязати системи лінійних алгебраїчних рівнянь методом простої ітерації або методом Зейделя.


аі1аі2аі3bі0.71 0.1 0.120.1 0.34 -0.040.12 -0.04 0.10.29 0.32 -0.1

#include <conio.h>

#include <iostream.h>

#include <math.h>

#define E 0.001main()

{i,j;a[3][3],x[3]={0,0,0},y[3],b[3],var,temp;<<"Vvedit' systemu rivnan' po radkah:\n";(i=0;i<3;i++)

{(j=0;j<3;j++)

{<<"Vvedit' a["<<(i+1)<<"]["<<(j+1)<<"]: ";>>a[i][j];

}<<"Vvedit' b["<<(i+1)<<"]: ";>>b[i];

}(i=0;i<3;i++)

{<<endl;(j=0;j<3;j++)<<a[i][j]<<"\t";<<b[i];

}<<endl;

{=0;(int i=0; i<3; i++)

{[i]=x[i];=0;(int j=0; j<3; j++)(j!=i) var+=(a[i][j]*x[j]);[i]=(b[i]-var)/a[i][i];+=fabs(y[i]-x[i]);

}

}(temp>E);(int i=0; i<3; i++)<<"\nX["<<(i+1)<<"]="<<x[i]<<"\t";();

}



Задача №16


ОСНОВИ ООП. ПРИНЦИПИ ПОБУДОВИ КЛАСІВ

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


КОРАБЕЛЬ

поля:

ім'я - char*

водотоннажність - int

прізвище власника - char*

методи:

введення назви корабля

введення водотоннажності

зміна власника

виведення інформації про обєкт

#include <iostream.h>

#include <conio.h>

#include <string.h>sudno

{name[20];tonag;vlasnuk[20];:();(char*,int,char*);SetName(char*);SetTonag(int);SetVlasnuk(char*);Show();

};main()

{();S;S1("Pobeda",3000,"Klimyuk");<<"#1:"<<endl;.Show();<<"#2:"<<endl;.Show();.SetName("Beda");<<"#1:"<<endl;.Show();.SetTonag(20000);.SetVlasnuk("Darmovis");<<"#1:"<<endl;.Show();();

}::sudno()

{(name,"NO");=0;(vlasnuk,"NO");

}::sudno(char *a,int b,char *c)

{(name,a);=b;(vlasnuk,c);

}sudno::SetName(char *a)

{(name,a);

}sudno::SetTonag(int a)

{=a;

}sudno::SetVlasnuk(char *a)

{(vlasnuk,a);

}sudno::Show()

{<<name<<"\t"<<tonag<<"\t"<<vlasnuk<<endl;

}




Список використаної літератури


1.Основи програмування і алгоритмічні мови. Методичні вказівки до лабораторних занять для студентів спеціальності Професійна освіта. Компютерні технології в управлінні та навчанні для денної та заочної форм навчання / В.М. Мельник - Луцьк: ЛНТУ, 2011.- 62 с.

.Харви Дейтел, Пол Дейтел. - Как програмировать на С

.Архангельский А.Я. Приемы программирования в Borland C++.- М.: ООО БИНОМ-ПРЕСС, 2003.- 784 с.

.Б. Страуструп. Язык программирования C++ = The C++ Programming Language / Пер. с англ. - 3-е изд. - СПб.;

.Страуструп Б. Язык программирования C++. Специальное издание = The C++ programming language. Special edition. - М.: Бином-Пресс, 2007. - 1104 с. - ISBN 5-7989-0223-4

.Страуструп Б. Программирование: принципы и практика использования C++, исправленное издание = Programming: Principles and Practice Using C++. - М.: Вильямс, 2011. - С. 1248. - ISBN 978-5-8459-1705-8

.Герберт Шилдт. Полный справочник по C++ = C++: The Complete Reference. - 4-е изд. - М.: Вильямс, 2011. - С. 800. - ISBN 978-5-8459-0489-8



Курсова робота з дисципліни програмування на тему «Операції * і &, їх використання, призначення і

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ