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



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

Навигация по записям


 Указатели С++. Часть 2Ссылки в C++ 

30 thoughts on “Задачи и решения: Указатели C++”

Навигация по комментариям


← Старые комментарии

  1.  Mukha:

11.12.2019 в 08:56

Не понял решения первого задания


Либо я плохо читал и смотрел видос, либо я просто что-то забыл, но как я понял, этот указатель – указатель на указатель, верно?
То есть, одной строчкой кода мы создаем два указателя, один из которых указывает на другой указатель, который в свою очередь указывает на 2.
Послушать так бред
у меня много вопросов,
Как указатель указывает просто на двойку? Или там еще и переменная создается?
почему сначала, там нужно поставить * а потом нет?
*(*(p = new double*) = new double) = 2;
И что вообще происходит в этой строке я так и не разобрался
Кто в этом разбирается помогите пожалуйста, ничего не понимаю

Ответить

    1.  Евгений:

11.12.2019 в 21:01

Указателю p присваивается адрес динамически выделенной памяти в которой хранится указатель на double, далее мы разадресуем p и получаем указатель на тип double и динамически выделяем ему память, разадресацией получаем значение этой ячейки памяти (с double) и присваиваем ему значение 2.Можно записать по другому:


p = new double*;
*p=new double;
**p=2;

Ответить

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


  1. Создать двумерный массив 5х5, заполнить его случайными числами от 10 до 99 и вывести на экран. Поменять местами максимальный элемент каждой строки с первым элементом в соответствующей строке. Задачу решить с помощью указателей.

  2. #include

  3. #include

  4. using namespace std;

  5.  

  6. int main()

  7. {

  8. setlocale(LC_ALL, "rus");

  9. srand(time(NULL));

  10.  

  11. int size = 5;

  12.  

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

  14. int** arrWithDigits = new int* [size];

  15. for (int i = 0; i < size; i++)

  16. {

  17. arrWithDigits[i] = new int[size]; // выделение памяти для каждого элемента строки матрицы

  18. }



  19. for (int i = 0; i < size; i++)

  20. {

  21. for (int j = 0; j < size; j++)

  22. {

  23. arrWithDigits[i][j] = 10 + rand() % 90; // заполняем числами от 10 до 99

  24. cout << arrWithDigits[i][j] << " | ";   // показываем

  25. }

  26. cout << endl;

  27. }

  28. cout << endl << endl;

  29.  

  30. // поиск максимального значение в строке матрицы

  31.  

  32. int max = 0; // для записи максимального значения

  33. int buf = 0; // буфер для перестановки местами значений

  34. int x = 0; // для записи номера строки в котором ищем максимальное значение

  35. int y = 0; // для записи номера столбца с максимальным значением

  36.  

  37. for (int i = 0; i < size; i++)

  38. {

  39. max = arrWithDigits[i][0];

  40. for (int j = 1; j < size; j++)

  41. {

  42. if (arrWithDigits[i][j] > max)

  43. {

  44. max = arrWithDigits[i][j];

  45. x = i;  // запоминаем номер строки

  46. y = j; // запоминаем номер столбца

  47. }

  48. }

  49. // замена максимума с первым элементом в строке

  50. if (arrWithDigits[i][0] < max)

  51. {

  52. buf = arrWithDigits[i][0];

  53. arrWithDigits[i][0] = max;

  54. arrWithDigits[x][y] = buf;

  55. }

  56. }

  57.  

  58. cout << "Матрица после перестановки максимальных значений в строке: "<< endl;

  59. for (int i = 0; i < size; i++)

  60. {

  61. for (int j = 0; j < size; j++)

  62. {

  63. cout << arrWithDigits[i][j] << " | ";

  64. }

  65. cout << endl;

  66. }

  67. cout << endl << endl;

  68.  

  69. // освобождение памяти

  70. for (int i = 0; i < size; i++)

  71. {

  72. delete[] arrWithDigits[i]; //  освобождаем память ячеек

  73. }

  74. delete[] arrWithDigits; // память под указатели на строки матрицы

  75. return 0;

  76. }

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

2) Задача на умножение матриц. Пользователь произвольно задает размерность двух матриц и заполняет значениями вручную. Не забывайте, что необходимо выделить соответствующие участки памяти для матриц, которые будет заполнять пользователь и для третьей итоговой матрицы. Далее отобразите на экране обе заполненные матрицы и итоговую матрицу (их воспроизведение).

#include

#include

 

using namespace std;



 

int main() // матрицы произвольного размера

{

setlocale(LC_ALL, "rus");



 

int a; // размерность матриц

int b;

int c;


int d;

 

do



{

system("cls");

cout << "Введите размерность 1-й матрицы: ";

cin >> a;

cin >> b;

cout << endl;

cout << "Введите размерность 2-й матрицы: ";

cin >> c;

cin >> d;

cout << endl;

if (b != c)

{

system("cls");



cout << " Эти матрицы невозможно умножить!";

cout << "\n Нажмите Enter для повторного ввода!";

_getch();

}

} while (b != c);



 

// выделяем память под матрицы с заданным размером

int **M1 = new int*[a];  // сначала для массива указателей на строки матрицы

for (int i(0); i < a; i++)

M1[i] = new int[b];  // и для каждого элемента

 

int **M2 = new int*[c];



for (int i(0); i < c; i++)

M2[i] = new int[d];

 

int **M3 = new int*[a];



for (int i(0); i < a; i++)

M3[i] = new int[d];

 

system("cls");



cout << "Заполните 1-ю матрицу " << a << "x" << b << endl;

for (int i(0); i < a; i++)

{

for (int j(0); j < b; j++)



{

cin >> M1[i][j];

}

cout << endl;



}

 

cout << "Заполните 2-ю матрицу " << c << "x" << d << endl;



for (int i(0); i < c; i++)

{

for (int j(0); j < d; j++)



{

cin >> M2[i][j];

}

cout << endl;



}

 

for (int i(0); i < a; i++)  // обнуляем 3-ю матрицу



{

for (int j(0); j < d; j++)

{

M3[i][j] = 0;



}

}

 



system("cls");

cout << "Первая матрица: " << endl;

for (int i(0); i < a; i++)

{

cout << "| ";



for (int j(0); j < b; j++)

{

cout << M1[i][j];



if (j < b - 1) cout << " ";

else cout << " |" << endl;

}

}

 



cout << "\nВторая матрица : " << endl;

for (int i(0); i < c; i++)

{

cout << "| ";



for (int j(0); j < d; j++)

{

cout << M2[i][j];



if (j < d - 1) cout << " ";

else cout << " |" << endl;

}

}
// умножение (произведение) матриц



for (int i(0); i < a; i++)

{

for (int j(0); j < d; j++)



{

for (int m(0); m < b; m++)

M3[i][j] += M1[i][m] * M2[m][j];

}

}



 

cout << "\nИтоговая матрица : " << endl;

for (int i(0); i < a; i++)

{

cout << "| ";



for (int j(0); j < d; j++)

{

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



}

cout << "|" << endl;

}

// освободим память



for (int i(0); i < a; i++)  // сначала элементы строк

{

delete[] M1[i];



delete[] M2[i];

delete[] M3[i];

}

 

delete[] M1;  // затем память указателей на строки



delete[] M2;

delete[] M3;

}

Возможно кто-то не знает, как умножать матрицы. Посмотрите это короткое видео (автор: Приходовский М.А.)



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

5.0

06

20.11.2015 | 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