Указатель на указатель C++ Классы в С++ Дополнительный сборник задач с решениями



Download 193,71 Kb.
bet8/12
Sana12.03.2020
Hajmi193,71 Kb.
#42219
TuriУказатель
1   ...   4   5   6   7   8   9   10   11   12
Bog'liq
Задачи и решение-Bustanov

Задачи и решения: Указатели C++


Тему Указатели в C++ мы рассмотрели в двух статьях:

–  Часть 1: Указатели С++

– Часть 2: Указатели С++

Теперь вам придется много практиковаться, чтобы закрепить знания и до конца разобраться. Решим несколько задач для начала.



1.  Задачка элементарная, но требует хорошего понимания что такое указатели. Дан указатель: double **p = 0; Выполните следующие задания (решения можно оформлять внутри функции main):
* создайте конструкцию, изображенную на рисунке;
* выведите число, указанное в квадратике, на экран;
* после этого удалите все динамические объекты.



Опять же – ищем самое короткое решение. Автор: Olej 

#include

using namespace std;

 

int main( void ) {



double **p = 0;

*( *( p = new double* ) = new double ) = 2;

cout << **p << endl;

delete *p;

delete p;

}

Посмотреть код



2. Объявите указатель на массив типа double и предложите пользователю выбрать его размер. Далее напишите четыре функции: первая должна выделить память для массива, вторая  – заполнить ячейки данными, третья – показать данные на экран, четвертая – освободить занимаемую память.  Программа должна предлагать пользователю продолжать работу (создавать новые динамические массивы ) или выйти из программы. 

#include

using namespace std;

 

double* giveMemoryToArr(double* startPtr, int sizeOfArr);



void fillArr(double* ptrArr, int sizeOfArr);

void showArr(double* ptrArr, int sizeOfArr);

double* freeMemory(double* ptrArr);

 

int main()



{

setlocale(LC_ALL, "rus");

 

double* pArrForFill = 0;



char userAnswer = 0;

 

do



{

int sizeOfArray = 0;

cout << "Размер массива: ";

cin >> sizeOfArray;

 

pArrForFill = giveMemoryToArr(pArrForFill, sizeOfArray);



fillArr(pArrForFill, sizeOfArray);

showArr(pArrForFill, sizeOfArray);

pArrForFill = freeMemory(pArrForFill);

 

cout << "\nПродолжить (1). Выйти (0): ";



cin >> userAnswer;

} while (userAnswer != '0');

 

return 0;



}

 

double* giveMemoryToArr(double* ptrArr, int sizeOfArr)



{

ptrArr = new double[sizeOfArr];

return ptrArr;

}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



void fillArr(double* ptrArr, int sizeOfArr)

{

for (int i = 0; i < sizeOfArr; i++)



{

ptrArr[i] = (i + 1) * 0.2;

}

}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



void showArr(double* ptrArr, int sizeOfArr)

{

for (int i = 0; i < sizeOfArr; i++)



{

cout << ptrArr[i] << "  ";

}

cout << endl;



}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

double*  freeMemory(double* ptrArr)

{

delete[] ptrArr;



ptrArr = 0;

 

return ptrArr;



}

Посмотреть код

3. Объявите указатель на массив типа int и выделите память память для 12-ти элементов. Необходимо написать функцию, которая поменяет значения четных и нечетных ячеек массива. Например есть массив из 4-х элементов:



#include

using namespace std;

 

void fillArr(int* ptrArr, int sizeOfArr);



void showArr(int* ptrArr, int sizeOfArr);

void swapDataInCells(int* ptrArr, int sizeOfArr);

 

int main()



{

int sizeOfArray = 12;

int* pArrForSwap = new int[sizeOfArray];

 

fillArr(pArrForSwap, sizeOfArray);



showArr(pArrForSwap, sizeOfArray);

swapDataInCells(pArrForSwap, sizeOfArray);

showArr(pArrForSwap, sizeOfArray);

 

delete[] pArrForSwap;



 

return 0;

}

 

void fillArr(int* ptrArr, int sizeOfArr)



{

for (int i = 0; i < sizeOfArr; i++)

{

ptrArr[i] = i * 10;



}

}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



void showArr(int* ptrArr, int sizeOfArr)

{

for (int i = 0; i < sizeOfArr; i++)



{

cout << ptrArr[i] << "  ";

}

cout << endl << endl;



}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

void swapDataInCells(int* ptrArr, int sizeOfArr)

{

int bufferVar = 0; // переменная буфер



for (int i = 0; i < sizeOfArr; i++)

{

if (i % 2 == 0)



{

bufferVar = ptrArr[i];

ptrArr[i] = ptrArr[i + 1];

ptrArr[i + 1] = bufferVar;

}

}

}



Посмотреть код

4.  Объявить и заполнить двумерный динамический массив случайными числами от 10 до 50. Показать его на экран. Для заполнения и показа на экран написать отдельные функции. (подсказка: функции должны принимать три параметра – указатель на динамический массив, количество строк, количество столбцов).  Количество строк и столбцов выбирает пользователь.

#include

#include

using namespace std;

 

void show2Arr(int** ArrForChange, int strAmount, int colAmount);



void fill2Array(int** ArrForChange, int strAmount, int colAmount);

 

int main()



{

setlocale(LC_ALL, "rus");

 

int stringAmount = 0;



int columnAmount = 0;

 

cout << "Введите размерность двумерного массива!\n";



cout << "Строк: ";

cin >> stringAmount;

cout << "Столбцов: ";

cin >> columnAmount;

 

//создавая двумерный динамический массив используем указатель на указатель



int** ArrayForChange = new int*[stringAmount];

for (int i = 0; i < stringAmount; i++)

{

ArrayForChange[i] = new int[columnAmount];



}

 

fill2Array(ArrayForChange, stringAmount, columnAmount); // заполнение массива



show2Arr(ArrayForChange, stringAmount, columnAmount);  // показ на экран

 

//Очистка памяти динамического двумерного массива



for (int i = 0; i < stringAmount; i++)

{

delete[] ArrayForChange[i];



}

delete[] ArrayForChange;

 

return 0;



}

 

void show2Arr(int** ArrForChange, int strAmount, int colAmount)



{

cout << endl << endl;

for (int i = 0; i < strAmount; i++)

{

cout << " |  ";



for (int j = 0; j < colAmount; j++)

{

cout << ArrForChange[i][j] << "  ";



}

cout << "|" << endl;

}

}

//заполнение элементов двумерного массива случайными значениями



void fill2Array(int** ArrForChange, int strAmount, int colAmount)

{

srand(time(0));



for (int i = 0; i < strAmount; i++)

{

for (int j = 0; j < colAmount; j++)



{

ArrForChange[i][j] = 10 + rand() % 41;

}

}

}



Посмотреть код

4.7

24

01.09.2014 | Posted in Задачи по программированию на C++. Практика программирования.



Download 193,71 Kb.

Do'stlaringiz bilan baham:
1   ...   4   5   6   7   8   9   10   11   12




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish