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



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

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


 Задача: заполнение строки словомПерегруженный конструктор класса 

9 thoughts on “Задачи и решения: Указатель на указатель”


  1.  Михаил Белоусов:

30.12.2015 в 00:50

#include "stdafx.h"


#include "stdio.h"
#include
#include "conio.h"
#include "time.h"
#include

using namespace std;

int** give_memory (int** mass, int str, int clmn);
void fill_matrix (int** mass, int str, int clmn);
void print_matrix (int** mass, int str, int clmn);
void multiplication_matrix(int** m1, int** m2, int** m3, int str, int clmn);
void multiplication_matrix(int** m1, int** m2, int** m3, int str, int clmn, int overall);
void clean_memory(int** mass, int str);

int main()


{
setlocale(LC_ALL, "rus");
int** fst_matrix = 0;
int** scnd_matrix = 0;
int** thrd_matrix = 0;

int str_fst_matrix = 0;


int clmn_fst_matrix = 0;
int str_scnd_matrix = 0;
int clmn_scnd_matrix = 0;
int str_thrd_matrix = 0;
int clmn_thrd_matrix = 0;

//Инициализация первой матрицы


cout << str_fst_matrix;
cout << clmn_fst_matrix;

//Инициализация второй матрицы


cout << str_scnd_matrix;
cout <<; clmn_scnd_matrix;

//Инициализация третьей матрицы


str_thrd_matrix = str_fst_matrix;
clmn_thrd_matrix = clmn_scnd_matrix;

if (clmn_fst_matrix != str_scnd_matrix)


{
cout << "Умножение не возможно" << endl << "Кол-во столбцов первой матрицы должно быть равно кол-ву строк второй матрицы" << endl;
}
else
{

fst_matrix = give_memory (fst_matrix, str_fst_matrix, clmn_fst_matrix);


scnd_matrix = give_memory (scnd_matrix, str_scnd_matrix, clmn_scnd_matrix);
thrd_matrix = give_memory (thrd_matrix, str_thrd_matrix, clmn_thrd_matrix);
cout << "ЗАПОЛНЕНИЕ ПЕРВОЙ МАТРИЦЫ !!!" << endl;
fill_matrix (fst_matrix, str_fst_matrix, clmn_fst_matrix);
cout << "ЗАПОЛНЕНИЕ ВТОРОЙ МАТРИЦЫ !!!" << endl;
fill_matrix (scnd_matrix, str_scnd_matrix, clmn_scnd_matrix);
for (int i = 0; i < str_thrd_matrix; i++) // обнуляем 3-ю матрицу
{
for (int j(0); j < clmn_thrd_matrix; j++)
{
thrd_matrix[i][j] = 0;
}
}
system("cls"); //Очистка экрана консоли
cout << "ПЕРВАЯ МАТРИЦА:" << endl;
print_matrix (fst_matrix, str_fst_matrix, clmn_fst_matrix);
cout << "ВТОРАЯ МАТРИЦА:" << endl;
print_matrix (scnd_matrix, str_scnd_matrix, clmn_scnd_matrix);
multiplication_matrix(fst_matrix, scnd_matrix, thrd_matrix, str_thrd_matrix, clmn_thrd_matrix, clmn_fst_matrix);
cout << "Результат:" << endl;
print_matrix(thrd_matrix, str_thrd_matrix, clmn_thrd_matrix);
clean_memory(fst_matrix, str_fst_matrix);
clean_memory(scnd_matrix, str_scnd_matrix);
clean_memory(thrd_matrix, str_thrd_matrix);

}

_getch(); // ожидание ввода какого-либо символа (включена здесь, для того, чтобы окно консоли не пропадало по завершении задачи)



return 0;
}

int** give_memory (int** mass, int str, int clmn)


{
mass = new int* [str];
for (int i = 0; i < str; i++)
{
mass[i] = new int[clmn];
}
return mass;
}

void fill_matrix (int** mass, int str, int clmn)


{
for (int i = 0; i < str; i++)
{
cout << "Введите " << i + 1 << "строку матрицы: " << endl;
for (int j = 0; j > mass[i][j];
}
}
}
void print_matrix (int** mass, int str, int clmn)
{
for (int i = 0; i < str; i++)
{
for (int j = 0; j < clmn; j++)
{

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

}
cout << endl;
}
}

void multiplication_matrix (int** m1, int** m2, int** m3, int str, int clmn, int overall)


{

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


{
for (int j = 0; j < clmn; j++)
{
int f = 0;
while (f != overall)
{
m3[i][j] += m1[i][f] * m2[f][j];
f++;
}
}
}
}

void clean_memory(int** mass, int str)


{
for (int i = 0; i < str; i++)
{
delete [] mass[i];
}
delete [] mass;
}

Ответить


    1.  Михаил Белоусов:

30.12.2015 в 00:51

д/з по 2й задаче))



Ответить

  1.  Nomin:

31.12.2015 в 11:35

Вы неверно освобождаете память во втором задании, ведь a != c. Когда вводишь матрицы 3×2 и 2×3 выдаёт ошибку.


Для второго массива нужно делать отдельный цикл, а первый и третий можно в один.

Ответить


  1.  user:

11.01.2016 в 20:25

Хех, первая задачка решается значительно тривиалнее, чем требуется в задании.. :]]

Ответить


  1.  Vanda:

21.03.2016 в 11:45

Решила Задачу№1 используя указатели в поиске максимального значения. Прокоментируйте пожалуйста можно ли так делать и на сколько это валидно?


P.S.: Сорри, я еще только учусь, поэтому такой вопрос ))

void fillArr (int **doubleArr, int sizeArr);


void showArr (int **doubleArr, int sizeArr);
void updateArr (int **doubleArr, int sizeArr);

int main()


{
const int sizeArr=5;
int **doubleArr= new int *[sizeArr];
for (int i = 0; i < sizeArr; i++)
{
doubleArr[i] = new int [sizeArr];
}

fillArr(doubleArr , sizeArr);


cout<<"Your Array now looks like: "<showArr(doubleArr , sizeArr);
updateArr(doubleArr , sizeArr);
cout<<"Your updated Array now looks like: "<showArr(doubleArr , sizeArr);

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


{
delete [] doubleArr[i];
}
delete [] doubleArr;

return 0;


}

void fillArr (int **doubleArr, int sizeArr)


{
srand(time(0));
for (int i = 0; i < sizeArr; i++)
{
for (int j = 0; j < sizeArr; j++)
{
doubleArr[i][j] = 10 + rand()%90;
}
}
}

void showArr (int **doubleArr, int sizeArr)


{
cout<for (int i = 0; i < sizeArr; i++)
{
cout<<" | ";
for (int j = 0; j < sizeArr; j++)
{
cout<}
cout<<" | "<}
}

void updateArr (int **doubleArr, int sizeArr)


{
for (int i = 0; i < sizeArr; i++)
{
int maxValue = 0;
int temp = doubleArr[i][0];
int *ptrElem = &doubleArr[i][0];
for (int j = 0; j < sizeArr; j++)
{
if (maxValue < doubleArr[i][j])
{
maxValue = doubleArr[i][j];
ptrElem = &doubleArr[i][j];
}
}
doubleArr[i][0]= *ptrElem;
*ptrElem = temp;
}
}

Ответить


  1.  Иван:

19.08.2016 в 20:14

for (i = 0; i < str; i++)


{
cout << endl;
for (j = 0; j < sto; j++) //Алгоритм нахождения максимального элемента в строке и замены оного с первым элементов строки местами. // Обращение к строчке.
{
if ((max) < (mass[i][j])) // Если нуль меньше текущего элемента массива, то
{
max = mass[i][j];// Нулю присваиваем значение текущего элемента массива
x = j; // Переменной x присваиваем текущий шаг цикла for.
vr = mass[i][0]; // Переменной vr присваиваем значение нулевого элемента массива.
}
if (j == sto - 1) // Если строка кончилась(шаг цикла равен концу строки), то
{
mass[i][x] = vr; // элементу массива, который раньше был максимальным, присваиваем значение нулевого элемента массива
mass[i][0] = max; // элементу массива, который раньше был нулевым, присваиваем значение максимального элемента массива
max = 0; // обнуляем значение переменной max, для следующей строчки
}
}
}

Слишком ужасно?

Ответить


  1.  Teddy Bear:

19.08.2016 в 23:40

Я сделяль. :) Решение отличается от вашего, но программа должна работать корректно, несколько раз проверил.

#include

#include


#include

using namespace std;

int **func1(int NumberOfLines, int NumberOfColumns); //Выделение памяти

void func2(int **pointer, int NumberOfLines, int NumberOfColumns); //Заполнение и вывод на экран

void func3(int **pointer, int NumberOfLines, int NumberOfColumns); //меняем местами максимальный и первый элемент в строках

int **func4(int **pointer, int NumberOfLines, int NumberOfColumns); //Освобождение памяти

int main()
{

setlocale(LC_ALL,"rus");

srand(time(NULL));

int n,m;


cout <> n >> m;

int **a = NULL;

a = func1(n,m);

cout << "Исходная матрица: " << endl;

func2(a,n,m);

cout << "Конечная матрица: ";

func3(a,n,m);

func4(a,n,m);

}

int **func1(int NumberOfLines, int NumberOfColumns)


{

int **pointer = new int*[NumberOfLines];

for(int i(0); i < NumberOfLines; i++)
{

pointer[i] = new int[NumberOfColumns];

}

return pointer;



}

void func2(int **pointer, int NumberOfLines, int NumberOfColumns)


{

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


{

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


{

pointer[i][j] = 10 + rand() % 99;

}

}

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


{

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


{

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

}

cout << endl;



}

}

void func3(int **pointer, int NumberOfLines, int NumberOfColumns) //ошибка в этой функции


{

int max = 0;

int *c = NULL;

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


{

for(int j(0); j max)


{

c = &pointer[i][j];

max = pointer[i][j];

}

}



*c = pointer[i][0];

pointer[i][0] = max;

max = 0;

}

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


{

cout << endl;

for(int j(0); j < NumberOfColumns; j++)
{

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

}

}

}



int **func4(int **pointer, int NumberOfLines, int NumberOfColumns)
{

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


{

delete [] pointer[i];

}

delete [] pointer;



}

Ответить


  1.  Виктор:

08.01.2017 в 22:38

Поправьте меня, но в конце решения второй задачи, где освобождается память, неверно учитываются размеры массивов, что ведет к ошибке, т.к. кол-во рядов М2 (i в цикле) должно быть < с.

Ответить


  1.  Сергей:

15.02.2019 в 13:34

Сергей! По первой задачке короче получилось:


int main()
{
setlocale(LC_ALL, “ru”);
srand(time(NULL));
int const row = 3;
int const col = 4;
int **arr = new int*[row];
for (int i = 0; i < row; i++)
{
arr[i] = new int[col];
}
for (int i = 0; i < row; )
{
for (int j = 0; j < col; j++)
{
arr[i][j] = 10 + rand() % 90;
}
i++;
}
for (int i = 0; i < row; )
{
for (int j = 0; j < col; j++)
{
cout << arr[i][j] << " | ";
}
cout << endl;
i++;
}
int max = 0; // для записи максимального значения
int buf = 0; // буфер для перестановки местами значений
for (int i = 0; i < row; )
{
for (int j = 0; j max)
{
max = arr[i][j];
arr[i][j] = buf;
arr[i][0] = max;
}
}
max = 0; // ну мне так показалось, для положительных чисел…
i++;
}
cout << "———————————————————————" << endl;
for (int i = 0; i < row; )
{
for (int j = 0; j < col; j++)
{
cout << arr[i][j] << " | ";
}
cout << endl;
i++;
}
for (int i = 0; i < row; i++) delete[] arr[i];
delete[] arr;
return 0;
}

Ответить


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