Тема: Масиви. Динамічна пам'ять

1. Задані два масиви  A(N) і B(N) . Підрахувати в них кількість елементів, великих значення T і першим на друк вивести масив, що має найменшу їх кількість.

2

Re: Масиви. Динамічна пам'ять

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
    int *a, *b, na, nb, i, T = 6, fa = 1, fb = 1;
    cout << "Size of array a: ";
    cin >> na; 
    a = (int*)calloc(na, sizeof(int)); 
    cout << "Size of array b: ";
    cin >> nb; 
    b = (int*)calloc(nb, sizeof(int)); 
    if (!a || !b) 
    {   
        
        puts("ERROR");
        return 1; 
    }
    cout << "Enter elements of array a:\n";
    for (i = 0; i < na; i++) 
    {
        cin >> *(a+i);
        if (!(*(a+i)))
            fa > T;
        
    }
    cout << "Enter elements of array b:\n";
    for (i = 0; i < nb; i++) 
    {
        cin >> *(b+i);
        if (!(*(b+i)))
            fb > T;
    }
    if (!fa)
    {
        cout << "Elements of array a:\n";
        for (i = 0; i < na; i++)
            cout << *(a +i) << " ";         
    }
    if (!fb)
    {
        cout << "Elements of array b:\n";
        for (i = 0; i < nb; i++)
            cout << *(b +i) << " ";     
    }
    free(a);  
    free(b);  
    cout << endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}

3

Re: Масиви. Динамічна пам'ять

Як ставити питання, щоб отримати відповідь

4

Re: Масиви. Динамічна пам'ять

код не працює, має видати масив у якому є елементи більші за Т
Компілятор:
Size of array a: 5
Size of array b: 5
Enter elements of array a:
1 2 3 7 8
Enter elements of array b:
1 2 3 4 5

Press any key to continue . . .

5

Re: Масиви. Динамічна пам'ять

Окрім жахливої мішанини С та С++ у вашому коді, як ви гадаєте,

if (!(*(a+i)))
    fa > T;

що ось ця конструкція мала б робити?

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

6

Re: Масиви. Динамічна пам'ять

wander написав:

що ось ця конструкція мала б робити?

Думаю, те, що в умові написано. Прочитайте уважно. Принаймні, це має не менше сенсу, ніж умова.

ruslana03112015 написав:

має видати масив у якому є елементи більші за Т

Ну от і з'ясувалося. У вас проблема з розумінням умови. В умові сказано "першим на друк вивести масив, що має найменшу їх кількість". Тобто якщо масиви a=[1,10,20] і b=[2,3,4], а T=6, то в a 2 елементи, більших за 6, а в b таких елементів 0, тобто треба спершу вивести b, а потім a, а не "масив у якому є елементи більші за Т".

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

7

Re: Масиви. Динамічна пам'ять

ось що зробила GPT))

#include <iostream>
using namespace std;

int main() {
    int N, T;
    cin >> N >> T;
    int A[N], B[N];
    int countA = 0, countB = 0;
    for (int i = 0; i < N; i++) {
        cin >> A[i];
        if (A[i] > T) countA++;
    }
    for (int i = 0; i < N; i++) {
        cin >> B[i];
        if (B[i] > T) countB++;
    }
    if (countA < countB) {
        cout << "Array A has the smallest number of elements greater than T." << endl;
        cout << "Number of elements in A greater than T: " << countA << endl;
    } else {
        cout << "Array B has the smallest number of elements greater than T." << endl;
        cout << "Number of elements in B greater than T: " << countB << endl;
    }
    return 0;
}

ніби все правильно)))

8

Re: Масиви. Динамічна пам'ять

ruslana03112015 написав:

першим на друк вивести масив

Firefox is dead, де у ChatGPT виводиться хоч якийсь масив?

9

Re: Масиви. Динамічна пам'ять

Firefox is dead написав:

ось що зробила GPT))

А можете повністю алгоритм викласти, як ви це робите?

10

Re: Масиви. Динамічна пам'ять

Firefox is dead написав:

ніби все правильно)))

Не компілюється, чомусь )

Прихований текст
<source>:7:11: error: variable length arrays are a C99 feature [-Werror,-Wvla-extension]
    int A[N], B[N];
          ^
<source>:7:11: note: read of non-const variable 'N' is not allowed in a constant expression
<source>:5:9: note: declared here
    int N, T;
        ^
<source>:7:17: error: variable length arrays are a C99 feature [-Werror,-Wvla-extension]
    int A[N], B[N];
                ^
<source>:7:17: note: read of non-const variable 'N' is not allowed in a constant expression
<source>:5:9: note: declared here
    int N, T;
        ^
2 errors generated.
Compiler returned: 1

11

Re: Масиви. Динамічна пам'ять

koala написав:
Firefox is dead написав:

ось що зробила GPT))

А можете повністю алгоритм викласти, як ви це робите?

можу
я написав:

Задані два масиви  A(N) і B(N) . Підрахувати в них кількість елементів, великих значення T і першим на друк вивести масив, що має найменшу їх кількість

написати код на C++

GPT написав:
#include <iostream>
using namespace std;

int main() {
    int N, T;
    cin >> N >> T;

    int A[N], B[N];
    int countA = 0, countB = 0;

    for (int i = 0; i < N; i++) {
        cin >> A[i];
        if (A[i] > T) {
            countA++;
        }
    }

    for (int i = 0; i < N; i++) {
        cin >> B[i];
        if (B[i] > T) {
            countB++;
        }
    }

    if (countA < countB) {
        cout << "Array A has the smallest number of elements greater than T." << endl;
    } else if (countB < countA) {
        cout << "Array B has the smallest number of elements greater than T." << endl;
    } else {
        cout << "Both arrays have the same number of elements greater than T." << endl;
    }

    return 0;
}

This code takes in the size of the arrays and the value of T as input, then initializes two arrays A and B. It then uses two variables, countA and countB, to keep track of the number of elements in each array that are greater than T. It then compares the two counts and prints out which array has the smallest count (or if they are equal).

я написав:

а чому не вивівся масив?

GPT написав:

The code I provided only compares the number of elements in each array that are greater than T and prints out which array has the smallest count (or if they are equal). It does not print out the entire array. If you also want to print out the entire array, you can add additional lines of code to do so, for example:

cout << "Array A: ";
for (int i = 0; i < N; i++) {
    cout << A[i] << " ";
}
cout << endl;

cout << "Array B: ";
for (int i = 0; i < N; i++) {
    cout << B[i] << " ";
}
cout << endl;

You can also add conditional statements to print out only the elements in the array that are greater than T.

я написав:

вбудуй даний участок коду в попередній зразок

GPT написав:
#include <iostream>
using namespace std;

int main() {
    int N, T;
    cin >> N >> T;

    int A[N], B[N];
    int countA = 0, countB = 0;

    for (int i = 0; i < N; i++) {
        cin >> A[i];
        if (A[i] > T) {
            countA++;
        }
    }

    for (int i = 0; i < N; i++) {
        cin >> B[i];
        if (B[i] > T) {
            countB++;
        }
    }

    if (countA < countB) {
        cout << "Array A has the smallest number of elements greater than T." << endl;
        cout << "Array A: ";
        for (int i = 0; i < N; i++) {
            cout << A[i] << " ";
        }
        cout << endl;
    } else if (countB < countA) {
        cout << "Array B has the smallest number of elements greater than T." << endl;
        cout << "Array B: ";
        for (int i = 0; i < N; i++) {
            cout << B[i] << " ";
        }
        cout << endl;
    } else {
        cout << "Both arrays have the same number of elements greater than T." << endl;
        cout << "Array A: ";
        for (int i = 0; i < N; i++) {
            cout << A[i] << " ";
        }
        cout << endl;
        cout << "Array B: ";
        for (int i = 0; i < N; i++) {
            cout << B[i] << " ";
        }
        cout << endl;
    }

    return 0;
}
Подякували: leofun011

12

Re: Масиви. Динамічна пам'ять

ChatGPT українську розуміє?

13

Re: Масиви. Динамічна пам'ять

koala написав:

ChatGPT українську розуміє?

так, розуміє

також, може давати відповідь і на українській, якщо я її це попрошу
правда інколи може суржик проскокувати, і певні діалекти

ps.

затримка на 10 хвилин це щось =(

14

Re: Масиви. Динамічна пам'ять

wander написав:
Firefox is dead написав:

ніби все правильно)))

Не компілюється, чомусь )

Прихований текст
<source>:7:11: error: variable length arrays are a C99 feature [-Werror,-Wvla-extension]
    int A[N], B[N];
          ^
<source>:7:11: note: read of non-const variable 'N' is not allowed in a constant expression
<source>:5:9: note: declared here
    int N, T;
        ^
<source>:7:17: error: variable length arrays are a C99 feature [-Werror,-Wvla-extension]
    int A[N], B[N];
                ^
<source>:7:17: note: read of non-const variable 'N' is not allowed in a constant expression
<source>:5:9: note: declared here
    int N, T;
        ^
2 errors generated.
Compiler returned: 1

спробуйте в онлайн компіляторі
https://www.onlinegdb.com/online_c++_compiler

все працює ^_^

15 Востаннє редагувалося wander (26.01.2023 17:52:30)

Re: Масиви. Динамічна пам'ять

Цікаво :)
Мені вдалось добитись від chatGPT валідний С++ код.

Прихований текст
#include <iostream>
using namespace std;

void printArray(int* arr, int size, int threshold) {
    int count = 0;
    for (int i = 0; i < size; i++) {
        if (arr[i] > threshold) {
            count++;
        }
    }
    cout << "Number of elements greater than " << threshold << ": " << count << endl;
    cout << "Elements of the array are: ";
    for (int i = 0; i < size; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;
}

int main() {
    int N, T;
    cin >> N >> T; // input the size of the arrays and the threshold value

    int* A = new int[N];
    for (int i = 0; i < N; i++) {
        cin >> A[i]; // input elements of array A
    }

    int* B = new int[N];
    for (int i = 0; i < N; i++) {
        cin >> B[i]; // input elements of array B
    }

    int countA = 0, countB = 0;
    for (int i = 0; i < N; i++) {
        if (A[i] > T) {
            countA++;
        }
        if (B[i] > T) {
            countB++;
        }
    }
    if (countA < countB) {
        cout << "Array A has the smallest number of elements greater than " << T << endl;
        printArray(A, N, T);
        cout << "Array B has the number of elements greater than " << T << endl;
        printArray(B, N, T);
    }
    else if (countB < countA) {
        cout << "Array B has the smallest number of elements greater than " << T << endl;
        printArray(B, N, T);
        cout << "Array A has the number of elements greater than " << T << endl;
        printArray(A, N, T);
    }
    else {
        cout << "Both arrays have the same number of elements greater than " << T << endl;
        cout << "Array A has the smallest number of elements greater than " << T << endl;
        printArray(A, N, T);
        cout << "Array B has the number of elements greater than " << T << endl;
        printArray(B, N, T);
    }
    delete[] A;
    delete[] B;
    return 0;
}
Firefox is dead написав:

все працює ^_^

Ні, не працює )
Те, що ваш компілятор неявно використовує не стандартні розширення - не робить ваш код "працюючим". :)
Навіть chatGPT це визнав:

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

You are correct, variable-length arrays (VLAs) are a feature of C99 and not C++. C++ does not support VLAs. Instead, in C++, you can use standard container classes such as std::vector to dynamically allocate memory for an array.

Подякували: Firefox is dead1

16

Re: Масиви. Динамічна пам'ять

wander написав:

Цікаво :)
Мені вдалось добитись від chatGPT валідний С++ код.

Прихований текст
#include <iostream>
using namespace std;

void printArray(int* arr, int size, int threshold) {
    int count = 0;
    for (int i = 0; i < size; i++) {
        if (arr[i] > threshold) {
            count++;
        }
    }
    cout << "Number of elements greater than " << threshold << ": " << count << endl;
    cout << "Elements of the array are: ";
    for (int i = 0; i < size; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;
}

int main() {
    int N, T;
    cin >> N >> T; // input the size of the arrays and the threshold value

    int* A = new int[N];
    for (int i = 0; i < N; i++) {
        cin >> A[i]; // input elements of array A
    }

    int* B = new int[N];
    for (int i = 0; i < N; i++) {
        cin >> B[i]; // input elements of array B
    }

    int countA = 0, countB = 0;
    for (int i = 0; i < N; i++) {
        if (A[i] > T) {
            countA++;
        }
        if (B[i] > T) {
            countB++;
        }
    }
    if (countA < countB) {
        cout << "Array A has the smallest number of elements greater than " << T << endl;
        printArray(A, N, T);
        cout << "Array B has the number of elements greater than " << T << endl;
        printArray(B, N, T);
    }
    else if (countB < countA) {
        cout << "Array B has the smallest number of elements greater than " << T << endl;
        printArray(B, N, T);
        cout << "Array A has the number of elements greater than " << T << endl;
        printArray(A, N, T);
    }
    else {
        cout << "Both arrays have the same number of elements greater than " << T << endl;
        cout << "Array A has the smallest number of elements greater than " << T << endl;
        printArray(A, N, T);
        cout << "Array B has the number of elements greater than " << T << endl;
        printArray(B, N, T);
    }
    delete[] A;
    delete[] B;
    return 0;
}
Firefox is dead написав:

все працює ^_^

Ні, не працює )
Те, що ваш компілятор неявно використовує не стандартні розширення - не робить ваш код "працюючим". :)
Навіть chatGPT це визнав:

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

You are correct, variable-length arrays (VLAs) are a feature of C99 and not C++. C++ does not support VLAs. Instead, in C++, you can use standard container classes such as std::vector to dynamically allocate memory for an array.

якщо ви уважно подивитесь на мій запит, я не вказав там "динамічна пам'ять"
тому, це мій промах)))
ось, я її попросив переробити

GPT написав:

Прошу вибачення за плутанину. У своїй попередній відповіді я помилково використовував масиви, виділені стеком, замість динамічно розподіленої пам'яті. Ось виправлений варіант коду з використанням динамічно виділеної пам'яті для масивів:

code
#include <iostream>
using namespace std;

int main() {
    int N, T;
    cin >> N >> T;

    int* A = new int[N];
    int* B = new int[N];
    int countA = 0, countB = 0;

    for (int i = 0; i < N; i++) {
        cin >> A[i];
        if (A[i] > T) {
            countA++;
        }
    }

    for (int i = 0; i < N; i++) {
        cin >> B[i];
        if (B[i] > T) {
            countB++;
        }
    }

    if (countA < countB) {
        cout << "Array A has the smallest number of elements greater than T." << endl;
        cout << "Array A: ";
        for (int i = 0; i < N; i++) {
            cout << A[i] << " ";
        }
        cout << endl;
    } else if (countB < countA) {
        cout << "Array B has the smallest number of elements greater than T." << endl;
        cout << "Array B: ";
        for (int i = 0; i < N; i++) {
            cout << B[i] << " ";
        }
        cout << endl;
    } else {
        cout << "Both arrays have the same number of elements greater than T." << endl;
        cout << "Array A: ";
        for (int i = 0; i < N; i++) {
            cout << A[i] << " ";
        }
        cout << endl;
        cout << "Array B: ";
        for (int i = 0; i < N; i++) {
            cout << B[i] << " ";
        }
        cout << endl;
    }

    delete[] A;
    delete[] B;
    return 0;
}