C/C++

Написать программу на С++ с применением одномерных массивов, используя указатели.

Дан массив A[n]. Напишите программу, которая записывает все положительные элементы, следующие за максимальным элементом массива А – в массив B.
И объясните код пожалуйста
DB
Diman Bykov
58
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 15
int main()
{
int *A, *B, n=0, max=-N, imax=-1, count=0;

printf("Enter size of A[n] n: ");
scanf("%d",&n);

A=(int*)malloc(n*sizeof(int));
if(!A) exit(1);

srand(time(NULL));
printf("\nArray A[%d]:\n",n);
for(int i = 0; i < n; i++)
{
if(rand()%2) A[i] = rand()%N;
else A[i] = - (rand()%N);
if(max<A[i])
{max=A[i];imax=i;}
printf(" %d",A[i]);
}

for(int i = imax+1; i < n; i++)
if(A[i] > 0) count++;
B=(int*)malloc(count*sizeof(int));
if(!B) exit(1);
printf("\n\nMaximal element: A[%d] = %d",imax,max);
printf("\n\nResult array B[%d]:\n",count);
for(int i = imax+1; i < n; i++)
if(A[i] > 0)
{
B[i] = A[i];
printf(" %d", B[i]);
}

free(A);
free(B);

system("pause");
return 0;
}
АЗ
Александр Заплетин
37 945
Лучший ответ
Указатели где используются? Только при объявлении динамических массивов A и B или ещё где-то? Массив А откуда берётся? Максимальный элемент массива А, если он не единственный, какой имеется в виду -первый, последний или ещё какой-то? И что делать, если за максимальным элементом нет других элементов так как он последний? Это Вы всё должны нам объяснять! А вообще можно так:
#include <ctime>
#include <cstdlib>
#include <iomanip>
#include <iostream>
using namespace std;
void print(int *x, int size, char s)
{
int i, j = 0;
cout << "Array " << s << ':' << endl;
for (i = 0; i < size; i++)
{
++j;
cout << setw(4) << x[i];
if (j == 30)
{
j = 0;
cout << endl;
}
}
if (j) cout << endl;
cout << endl;
}
int main()
{
int i, j, n, max, indmax;
cout << "n: ";
cin >> n;
int *A = new int [n];
srand(time(nullptr));
for (i = 0; i < n; i++)
A[i] = rand() % 199 - 99;
max = A[0];
indmax = 0;
for (i = 0; i < n; i++)
if (A[i] > max)
{
max = A[i];
indmax = i;
}
print(A, n, 'A');
cout << "Max = " << max << " (№"
<< indmax + 1 << ')' << endl << endl;
j = n - 1 - indmax;
indmax++;
if (j > 0)
{
int *B = new int [j];
for (i = 0; i < j; i++)
B[i] = A[i + indmax];
print(B, j, 'B');
}
}
Navruz D(-_-)B Gani ****
Navruz D(-_-)B Gani ****
66 572
Diman Bykov Можешь пожалуйста объяснить что вот это делает?
for (i = 0; i < size; i++)
{
++j;
cout << setw(4) << x[i];
if (j == 30)
{
j = 0;
cout << endl;
}
}
if (j) cout << endl;
cout << endl;
Diman Bykov И еще нужно ведь чтобы все положительные элементы, следующие за максимальным элементом массива А, а тут код пишет все элементы а не только положительные
Navruz D(-_-)B Gani **** int *B = new int[k]; k = 0;
for (i = indmax; i < n; i++) { if (A[i] > 0)
{ B[k] = A[i]; k++; } } print(B, k, 'B'); } }
Navruz D(-_-)B Gani **** А indmax -это просто переменная для индекса максимального элемента. И вообще, Вам, вроде, с указателями надо, но не так как у меня...