#### Тема: Утворення Массиву С, із елементів массиву В, що є більші за мін знач А

Ось завдання "https://pastenow.ru/90006a622a1e1594b64356459f51c943"
Ось мій код:

``````#include<iostream>
#include<math.h>
#include<stdlib.h>
using namespace std;

void main() {
int * a = 0, * b = 0, * c = 0;
int sizeA, sizeB, sizeC;
int b1, b2;
float avg1=0, avg2=0;
cout << "Vvedit kilkist elementiv massuvy A: ";
cin >> sizeA;
a = new int[sizeA];
cout << "Vvedit elementu massuvy A : ";
for (int i = 0; i < sizeA; i++) {
cin >> a[i];
}
cout << "Massuv A[" << sizeA << "]={";
for (int i = 0; i < sizeA; i++) {
printf("%d ", a[i]);
}
cout << "}"<<endl;
int min = a[0];
for (int i = 0; i < sizeA; i++) {
if (a[i] < min) {
min = a[i];
}
}
cout << min << endl;
for (int i = 0; i < sizeA; i++) {
avg1 = avg1 + a[i];
}
avg1 = avg1 / sizeA;
printf("Seredne znachenna massuvy A = %.2f", avg1);
cout << endl;
int ix = 0, d = 0;
for (int i = 0; i < sizeA; i++) {
if (i == 0) {
d = fabs(avg1 - a[i]);
ix = i;
}
else if (fabs(avg1 - a[i]) < d) {
d = fabs(avg1 - a[i]);
ix = i;
}
}
cout << ix <<", e naybluzcum do avg massumy A";
cout << endl;
//***********************************************************************************
cout << endl;
cout << "Vkazit rozmir massuvy B: ";
cin >> sizeB;
b = new int[sizeB];
cout << endl;
cout << "Vkazit diapazon elementiv massuvy B: ";
cin >> b1 >> b2;
for (int i = 0; i < sizeB; i++) {
b[i] = rand() % (b2 - b1 + 1) + b1;
}
cout << "Zhenerovanuy massuv B[" << sizeB << "]={";
for (int i = 0; i < sizeB; i++) {
printf("%d ", b[i]);
}
cout << "}" << endl;
for (int i = 0; i < sizeA; i++) {
avg2 = avg2 + b[i];
}
avg2 = avg2 / sizeB;
printf("Seredne znachenna massuvy B = %.2f", avg2);
cout << endl;
int ix1 = 0, d1 = 0;
for (int i = 0; i < sizeB; i++) {
if (i == 0) {
d = fabs(avg2 - b[i]);
ix1 = i;
}
else if (fabs(avg2 - b[i]) < d1) {
d1 = fabs(avg2 - b[i]);
ix1 = i;
}
}
cout << ix1 << ", e naybluzcum do avg massumy B";
cout << endl;
//***********************************************************************************

}``````

#### Re: Утворення Массиву С, із елементів массиву В, що є більші за мін знач А

Як ставити питання так, щоб на них відповідали
Чи ви просто похвалитися вирішили? Ну тоді вітаю!

#### Re: Утворення Массиву С, із елементів массиву В, що є більші за мін знач А

Я не розумію в якому сенсі похвалитися, хочу просто допомоги в зпвершальному етапі програми, але не знаю як це правильно зробити

koala написав:

Як ставити питання так, щоб на них відповідали
Чи ви просто похвалитися вирішили? Ну тоді вітаю!

#### Re: Утворення Массиву С, із елементів массиву В, що є більші за мін знач А

Ви можете пояснити, чого саме вам не вистачає в цій програмі?
До речі, функції ви вже вивчали?

#### Re: Утворення Массиву С, із елементів массиву В, що є більші за мін знач А

Функцію я вивчав, але тут я не використовую функцію, чи потрібно використовувати?
#Unhandled exception at 0x00007FF6136C7770 in laba18.exe: 0xC0000005: Access violation writing location 0x0000000000000000.#Саме ця проблеви виникає у мене і не розумію як виправити! Ось код з цим фрагментом

``````#include<iostream>
#include<math.h>
#include<stdlib.h>
using namespace std;

void main() {
int * a = 0, * b = 0, * c = 0;
int sizeA, sizeB, sizeC;
int b1, b2;
float avg1=0, avg2=0;
cout << "Vvedit kilkist elementiv massuvy A: ";
cin >> sizeA;
a = new int[sizeA];
cout << "Vvedit elementu massuvy A : ";
for (int i = 0; i < sizeA; i++) {
cin >> a[i];
}
cout << "Massuv A[" << sizeA << "]={";
for (int i = 0; i < sizeA; i++) {
printf("%d ", a[i]);
}
cout << "}"<<endl;
int min = a[0];
for (int i = 0; i < sizeA; i++) {
if (a[i] < min) {
min = a[i];
}
}
cout << min << endl;
for (int i = 0; i < sizeA; i++) {
avg1 = avg1 + a[i];
}
avg1 = avg1 / sizeA;
printf("Seredne znachenna massuvy A = %.2f", avg1);
cout << endl;
int ix = 0, d = 0;
for (int i = 0; i < sizeA; i++) {
if (i == 0) {
d = fabs(avg1 - a[i]);
ix = i;
}
else if (fabs(avg1 - a[i]) < d) {
d = fabs(avg1 - a[i]);
ix = i;
}
}
cout << ix <<", e naybluzcum do avg massumy A";
cout << endl;
//***********************************************************************************
cout << endl;
cout << "Vkazit rozmir massuvy B: ";
cin >> sizeB;
b = new int[sizeB];
cout << endl;
cout << "Vkazit diapazon elementiv massuvy B: ";
cin >> b1 >> b2;
for (int i = 0; i < sizeB; i++) {
b[i] = rand() % (b2 - b1 + 1) + b1;
}
cout << "Zhenerovanuy massuv B[" << sizeB << "]={";
for (int i = 0; i < sizeB; i++) {
printf("%d ", b[i]);
}
cout << "}" << endl;
for (int i = 0; i < sizeA; i++) {
avg2 = avg2 + b[i];
}
avg2 = avg2 / sizeB;
printf("Seredne znachenna massuvy B = %.2f", avg2);
cout << endl;
int ix1 = 0, d1 = 0;
for (int i = 0; i < sizeB; i++) {
if (i == 0) {
d = fabs(avg2 - b[i]);
ix1 = i;
}
else if (fabs(avg2 - b[i]) < d1) {
d1 = fabs(avg2 - b[i]);
ix1 = i;
}
}
cout << ix1 << ", e naybluzcum do avg massumy B";
cout << endl;
//***********************************************************************************
for (int i = 0; i < sizeB; i++) {
if (b[i] > min) {
c[i] = b[i];
}
}
for (int i = 0; i < sizeB; i++) {
printf("%d", c[i]);
}

}``````
koala написав:

Як ставити питання так, щоб на них відповідали
Чи ви просто похвалитися вирішили? Ну тоді вітаю!

#### Re: Утворення Массиву С, із елементів массиву В, що є більші за мін знач А

Ну, загалом, вам досить зрозуміло пише: ви намагаєтеся щось зробити за адресою в пам'яті 0x0000000000000000, а це заборонено. Оскільки єдині вказівники, що ви використовуєте в цьому фрагменті - це b і c, то передусім треба перевірити, щоб вони не були нульовими. Рядок

``b = new int[sizeB];``

я бачу, але c так і лишається nullptr, як і на початку. Спершу порахуйте елементи, далі виділіть пам'ять під c, а потім переносьте. І не на і-е місце, а послідовно заповнюйте. Створіть ще один індекс, скажімо j, і робіть

``````        if (b[i] > min) {
c[j++] = b[i];
}``````

Про функції - не обов'язково, але ви б зекономили трохи рядків коду, якби винесли спільні операції (пошук найближчого до середнього) в окрему функцію.

Подякували: 2

#### Re: Утворення Массиву С, із елементів массиву В, що є більші за мін знач А

Я все ще не зрозумів як це реалізувати в коді, змоглиб ще з цим допомогти?

koala написав:

Ну, загалом, вам досить зрозуміло пише: ви намагаєтеся щось зробити за адресою в пам'яті 0x0000000000000000, а це заборонено. Оскільки єдині вказівники, що ви використовуєте в цьому фрагменті - це b і c, то передусім треба перевірити, щоб вони не були нульовими. Рядок

``b = new int[sizeB];``

я бачу, але c так і лишається nullptr, як і на початку. Спершу порахуйте елементи, далі виділіть пам'ять під c, а потім переносьте. І не на і-е місце, а послідовно заповнюйте. Створіть ще один індекс, скажімо j, і робіть

``````        if (b[i] > min) {
c[j++] = b[i];
}``````

Про функції - не обов'язково, але ви б зекономили трохи рядків коду, якби винесли спільні операції (пошук найближчого до середнього) в окрему функцію.

#### Re: Утворення Массиву С, із елементів массиву В, що є більші за мін знач А

І ще одне перевірте та підкажіть як правильно написати функцію знаходження сер знач

``````float avg(int avg, int x[], int size) {
for (int i = 0; i < size; i++) {
avg = avg + x[i];
avg = avg / size;
}
return avg;
}``````
``avg1 = avg(avg1, a[sizeA], sizeA);``
koala написав:

Ну, загалом, вам досить зрозуміло пише: ви намагаєтеся щось зробити за адресою в пам'яті 0x0000000000000000, а це заборонено. Оскільки єдині вказівники, що ви використовуєте в цьому фрагменті - це b і c, то передусім треба перевірити, щоб вони не були нульовими. Рядок

``b = new int[sizeB];``

я бачу, але c так і лишається nullptr, як і на початку. Спершу порахуйте елементи, далі виділіть пам'ять під c, а потім переносьте. І не на і-е місце, а послідовно заповнюйте. Створіть ще один індекс, скажімо j, і робіть

``````        if (b[i] > min) {
c[j++] = b[i];
}``````

Про функції - не обов'язково, але ви б зекономили трохи рядків коду, якби винесли спільні операції (пошук найближчого до середнього) в окрему функцію.

#### Re: Утворення Массиву С, із елементів массиву В, що є більші за мін знач А

Вибачте, це так не працює. Якщо у вас є питання - формулюйте його повністю. Якщо ви хочете, щоб хтось перевірив код - то одразу кажіть, чому. Якщо не бачите проблем - то, може, вам нормально буде? Ну і або ви не писали цей код, або ви знаєте, як полічити елементи, виділити пам'ять і заповнити її (особливо оскільки останній пункт я навіть кодом вам написав).

#### Re: Утворення Массиву С, із елементів массиву В, що є більші за мін знач А

Типу щось такого, але воно всерівно не працює!!

``````for (int i = 0; i < sizeB; i++) {
b[i] = rand() % (b2 - b1 + 1) + b1;
for (int j = 0; j < sizeB; j++) {
if (b[i] > min) {
c[j++] = b[i];
}
}``````

Після того я виділив память:

``c = new int[sizeC];``

, а тоді як вивести, ато воно не виводить,чи я чогось не розумію?

``````for (int j = 0; j < sizeC; j++) {
cout << c[j];
}``````
koala написав:

Вибачте, це так не працює. Якщо у вас є питання - формулюйте його повністю. Якщо ви хочете, щоб хтось перевірив код - то одразу кажіть, чому. Якщо не бачите проблем - то, може, вам нормально буде? Ну і або ви не писали цей код, або ви знаєте, як полічити елементи, виділити пам'ять і заповнити її (особливо оскільки останній пункт я навіть кодом вам написав).

#### Re: Утворення Массиву С, із елементів массиву В, що є більші за мін знач А

vzaluskiy23 написав:

Типу щось такого, але воно всерівно не працює!!

Доки ви мислите категоріями "не працює", нічого і не працюватиме. Що конкретно відбувається?

vzaluskiy23 написав:

Після того я виділив память:

Вибачте, а ви коли, наприклад, яблука в коробку збираєте, ви що спершу робите: ставите коробку, а потім кладете туди яблука, чи спершу кладете яблука, а потім ставите коробку? Що саме ви намагаєтеся заповнювати, якщо ви не виділили пам'ять, яку хочете заповнювати?

#### Re: Утворення Массиву С, із елементів массиву В, що є більші за мін знач А

Я зрозумів що це

``c = new int[sizeC];``

потрібно поміняти місцем, та перемістити вгору? Тоді після того писати це ?

``````for (int i = 0; i < sizeB; i++) {
b[i] = rand() % (b2 - b1 + 1) + b1;
for (int j = 0; j < sizeB; j++) {
if (b[i] > min) {
c[j++] = b[i];
}
}``````
koala написав:
vzaluskiy23 написав:

Типу щось такого, але воно всерівно не працює!!

Доки ви мислите категоріями "не працює", нічого і не працюватиме. Що конкретно відбувається?

vzaluskiy23 написав:

Після того я виділив память:

Вибачте, а ви коли, наприклад, яблука в коробку збираєте, ви що спершу робите: ставите коробку, а потім кладете туди яблука, чи спершу кладете яблука, а потім ставите коробку? Що саме ви намагаєтеся заповнювати, якщо ви не виділили пам'ять, яку хочете заповнювати?

#### Re: Утворення Массиву С, із елементів массиву В, що є більші за мін знач А

Зрозуміли в певному сенсі правильно, але до кінця не продумали. Звідки ви берете значення sizeC?

#### Re: Утворення Массиву С, із елементів массиву В, що є більші за мін знач А

sizeC на початку я просто оголосив. Це потрібно порахувати елементи массиву б які є більші за мін, потім це число присвоїти sizeC?

koala написав:

Зрозуміли в певному сенсі правильно, але до кінця не продумали. Звідки ви берете значення sizeC?

#### Re: Утворення Массиву С, із елементів массиву В, що є більші за мін знач А

vzaluskiy23 написав:

Це потрібно порахувати елементи массиву б які є більші за мін, потім це число присвоїти sizeC?

Саме так.

Подякували: vzaluskiy231

#### Re: Утворення Массиву С, із елементів массиву В, що є більші за мін знач А

Дивіться ще одне, я зробив функцію по підрахунку елементів массиву В які мені потрібно, а саме більші за мін. Ось фрагмент функції

``````int counter(int mas[], int size, int m) {
int count = 0;
for (int i = 0; i < size; i++) {
if (mas[i] > m)
count++;
}
return count;
}``````

В мене чогось якась проблема в саме виклику функції, ось :

``````counter(b[sizeB], sizeB, min);
cout << "kilkist elementiv massuvy B, scho e bilshi za min massuvy A: " << counter << endl;``````

Тут щось b свариться

koala написав:
vzaluskiy23 написав:

Це потрібно порахувати елементи массиву б які є більші за мін, потім це число присвоїти sizeC?

Саме так.

#### Re: Утворення Массиву С, із елементів массиву В, що є більші за мін знач А

30 років тому, коли компілятори влізали на дискету (і добре, якщо це була 1.2М дискета, а не 720К), компілятори іноді дійсно видавали незрозумілі повідомлення, добре якщо рядок правильно вказували.
Але у 2022 я сильно сумніваюся, що "щось b свариться" адекватно передає те, що вам повідомляє компілятор. Вперед, ви можете це прочитати.

#### Re: Утворення Массиву С, із елементів массиву В, що є більші за мін знач А

Я перше ніби був зрозумів. Отож я зробив наступне:

``````#include<iostream>
#include<math.h>
#include<stdlib.h>
using namespace std;

int main() {
int* a = 0, * b = 0, * c = 0;
int sizeA, sizeB;
int b1, b2;
float avg1 = 0, avg2 = 0;
cout << "Vvedit kilkist elementiv massuvy A: ";
cin >> sizeA;
a = new int[sizeA];
cout << "Vvedit elementu massuvy A : ";
for (int i = 0; i < sizeA; i++) {
cin >> a[i];
}
cout << "Massuv A[" << sizeA << "]={";
for (int i = 0; i < sizeA; i++) {
printf("%d ", a[i]);
}
cout << "}" << endl;
int min = a[0];
for (int i = 0; i < sizeA; i++) {
if (a[i] < min) {
min = a[i];
}
}
cout << min << endl;
for (int i = 0; i < sizeA; i++) {
avg1 = avg1 + a[i];
}
avg1 = avg1 / sizeA;
printf("Seredne znachenna massuvy A = %.2f", avg1);
cout << endl;
int ix = 0, d = 0;
for (int i = 0; i < sizeA; i++) {
if (i == 0) {
d = fabs(avg1 - a[i]);
ix = i;
}
else if (fabs(avg1 - a[i]) < d) {
d = fabs(avg1 - a[i]);
ix = i;
}
}
cout << ix << ", e naybluzcum do avg massumy A";
cout << endl;
//***********************************************************************************
cout << endl;
cout << "Vkazit rozmir massuvy B: ";
cin >> sizeB;
b = new int[sizeB];
int counter = 0;
int sizeC=counter;
cout << endl;
cout << "Vkazit diapazon elementiv massuvy B: ";
cin >> b1 >> b2;
for (int i = 0; i < sizeB; i++) {
b[i] = rand() % (b2 - b1 + 1) + b1;
}
cout << "Zhenerovanuy massuv B[" << sizeB << "]={";
for (int i = 0; i < sizeB; i++) {
printf("%d ", b[i]);
}
cout << "}" << endl;
for (int i = 0; i < sizeB; i++) {
if (b[i] > min) {
counter++;
}
}
cout << "kilkist elementiv massuvy B, scho e bilshi za min massuvy A: " << counter << endl;
c = new int[sizeC];
for (int i = 0; i < sizeB; i++) {
for (int j = 0; j < sizeC; j++) {
c[j] = b[i];
}
}
for (int j = 0; j < sizeC; j++) {
printf("%d ", c[j]);
}
for (int i = 0; i < sizeA; i++) {
avg2 = avg2 + b[i];
}
avg2 = avg2 / sizeB;
printf("Seredne znachenna massuvy B = %.2f", avg2);
cout << endl;
int ix1 = 0, d1 = 0;
for (int i = 0; i < sizeB; i++) {
if (i == 0) {
d = fabs(avg2 - b[i]);
ix1 = i;
}
else if (fabs(avg2 - b[i]) < d1) {
d1 = fabs(avg2 - b[i]);
ix1 = i;
}
}
cout << ix1 << ", e naybluzcum do avg massumy B";
cout << endl;
//***********************************************************************************
return 0;
}``````

Але все ж таки воно не хоче виводити массив С на консоль!

koala написав:

30 років тому, коли компілятори влізали на дискету (і добре, якщо це була 1.2М дискета, а не 720К), компілятори іноді дійсно видавали незрозумілі повідомлення, добре якщо рядок правильно вказували.
Але у 2022 я сильно сумніваюся, що "щось b свариться" адекватно передає те, що вам повідомляє компілятор. Вперед, ви можете це прочитати.

#### Re: Утворення Массиву С, із елементів массиву В, що є більші за мін знач А

Ви вже визначтесь нарешті якою мовою ви пишете С чи С++? Пан Koala дав вам слушну пораду, роздробити ваш код на функції, це зменшило б кількість коду і підвищило його здатність до прочитання. В такому спагеті-коді, як у вас і не дивно, що щось не працює, мені здається ви й самі в ньому губитесь. Раджу вам почати таки писати однією мовою (С або С++), поправити форматування (вам же самому буде легше тоді), пройтись зневаджувачем по коду та\або додати проміжний вивід в консоль.

Прихований текст
vzaluskiy23 написав:

Але все ж таки воно не хоче виводити массив С на консоль!

Що означає не хоче?! Може ви образили якось компілятор, от він і не хоче.