C/C++

Помощь с написанием программы

Необходимо помимо остального найти сумму элементов массива, расположенных между первым положительным и вторым положительным элементами массива
но программа выводит все время 0
#include <iostream>
#include <cmath>
#include <iomanip>
#include <clocale>
using namespace std;

void func(int i, int a[], int ch, int j, int max, int sum, int n, int tmp)
{
sum=0;
for(i=0;i<n;i++)
{
if(max<a[i])
{
max=a[i];
}

}
for(i=0;i<n;i++)
{
if(a[i]>0)
{
sum+=a[i];
}
}
for(i=0; i<n; i++)
{
for(j=i;j<n;j++)
{
if (a[i]==0)
{
tmp=a[i];
a[i]=a[j];
a[j]=tmp;
}
}
}
}
void printF (int max, int sum, int a[], int i, int n)
{
cout << fixed;
cout.precision(6);
cout << max << " " << sum << endl;
cout << fixed;
cout.precision(2);
for (i=0;i<n;i++)
{
cout << a[i] << ' ';
}
}
int main()
{
int n, max;
int i;
int sum=0, ch=0;
cin >> n;
int a[n];
for (i=0; i<n; ++i)
{
cin >> a[i];
max=a[0];
}
printF(max, sum, a, i, n);
return 0;
}
У тебя какая-то путаница. Есть функция, которая нигде не вызывается. И аргументы, кроме массива в ней в параметры функции должны быть с амперсандом, чтобы была ссылка.
Кроме того, в функции main() в цикле for почему-то max всё время присваивается одно и то же значение a[0].
А сумма равна нулю, потому что функция не вызывается, которая должна её изменить.
В main() идёт присвоение int sum=0,
потом идёт вызов показа значения printF(max, sum, a, i, n);
Разумеется она нулём и останется.
Опиши всё, что должна делать программа.

Вот, что у меня получилось:
#include <iostream>

using namespace std;

void func(int a[], int & max, int & sum, int n )
{
int i;
int j;
int tmp;

sum=0;
max = a[0];
for(i=1;i<n;i++)
{
if(max<a[i])
{
max=a[i];
}

}
for(i=0;i<n;i++)
{
if(a[i]>0)
{
sum+=a[i];
}
}
for(i=0; i<n; i++)
{
for(j=i;j<n;j++)
{
if (a[i]==0)
{
tmp=a[i];
a[i]=a[j];
a[j]=tmp;
}
}
}
}
void printF (int max, int sum, int a[], int i, int n)
{
cout << fixed;
cout.precision(6);
cout << max << " " << sum << endl;
cout << fixed;
cout.precision(2);
for (i=0;i<n;i++)
{
cout << a[i] << ' ';
}
}
int main()
{
int n, max;
int i;
int sum=0, ch=0;
cin >> n;
int a[n];
for (i=0; i<n; ++i)
{
cin >> a[i];
}
func(a, max, sum, n);
printF(max, sum, a, i, n);
return 0;
}
Александр Морфин
Александр Морфин
76 306
Лучший ответ
Анар Пашаев нужно было ещё найти максимальный по модулю элемент массива и преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после остальных
Не знаю, что у тебя там "помимо", но сумма элементов массива, расположенных между первым положительным и вторым положительным элементами считается, например, так:

#include "iostream"
using namespace std;
int sum(int a[], int n){
int s=0,ka=0,kb=0; for(int i=0;i< n;i++)if(a[i]>0){ka=i; break;}
for(int i=ka+1;i< n;i++)if(a[i]>0){kb=i; break;}
for(int i=ka+1;i< kb;i++)s+=a[i]; return s;}
void printf(int a[], int n){
for(int i=0;i< n;i++)cout<< a[i]<<' '; cout<< endl;}
int main(){
int n; cout<<"n: "; cin>>n; int *a=new int[n];
cout<<"Numbers: "; for(int i=0;i< n;i++)cin>>a[i];
printf(a,n); cout<<"S="<<sum(a,n);}

P.S. всегда приводи полное условие задачи, иначе и что-то на вид ужасное хотя бы по стилю, не поправить.
Сергей Мировой
Сергей Мировой
92 277