Задание с одномерным массивом

Мне нужно сделать задание по типу sqrt(a1)+sqrt(a1a2)+..+sqrt(a1a2*..*an), но решается не правильно подскажите как исправить.

#include<iostream>
#include<iomanip>
#include<cmath>
#include<clocale>
#include<fstream>

using namespace std;
int main()
{
    setlocale(LC_ALL, "Russian");
    const int N = 10;
    int a;
    int i;
    float sum, qwe;
    float MAS[N];
    float tmp;


    fstream f;
    f.open("inp.txt", ios::in);

    if (f.bad() != 0) cout << "Ошибка при открытии файла для ввода" << endl;
    else
    {
        f >> a;
        if (a < 0)
        {
            a = 0;
            cout << "Некорректный размер массива скорректирован в 0" << endl;
            cout << "Массив не обработан, т.к. назначенное число элементов в массиве отрицательное" << endl;
            return 0;
        }

        if (a > N) a = N;
        while (1)
        {
            f >> tmp;
            MAS[i] = tmp;
            i++;
            if (i >= N) break;
            if (f.eof()) break;
        }
        a = i;
        f.close();
        sum = 0;
        f.open("out.txt", ios::out);
        if (f.bad() != 0) cout << "Ошибка при открытии файла для вывода" << endl;
        else
        {
            for (i = 1; i < a; i++)
            {
                qwe *= MAS[i];
                sum += sqrt(qwe);
            }
        }

        for (i = 1; i < a; i++)
        {
            f << MAS[i] << " ";
        }

        for (i = 1; i < a; i++)
        {
            cout << MAS[i] << " ";
        }
        f << "S = " << qwe;
    }


    cout << endl << "S = " << qwe;
    f.close();
    return 0;
}

Ответы (2 шт):

Автор решения: Marlowism
#include <iostream>
#include <fstream>
#include <cmath>

using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
const int N=10; // максимальное число элементов в массиве
int  a; // число элементов в массиве
int i;
float MAS[N]; // зарезервированный объем памяти под массив
float tmp; // переменная, используемая для обмена двух элементов массива

fstream f;
f.open("inp.txt",ios::in); // чтение файла
if (f.bad()!=0)
 {
cout<< "Ошибка при открытии файла для ввода\n";
return 0;
}
else
{ f>>a;
   if (a<=0)
    {
    cout<<"Массив не обработан, т.к." << a <<"= <0\n";
    return 0;
    }
   if (a>N)
    a=N;

   while(1)
  {
  f>>tmp;
   MAS[i]=tmp;
  i++;
   if (i>=N) break;
     if(f.eof()) break;
  }
 a=i;
 f.close();

 f.open("out.txt",ios::out);
 if(f.bad()!=0)
    {
    cout<<"Ошибка при открытии файла для вывода/n";
   return 0;
    }
  else
  {

 f<<"Введенный массив:\n";
 cout<<"Введенный массив:\n";

   for (i=0;i<a;i++)
 {
    cout<<MAS[i]<<endl;
    f<<MAS[i]<<endl;
 }

    float pow=1;
    float q=0;

    for (i=0;i<a;i++)
        {
        pow*=MAS[i];
        q+=sqrt(pow);
        }

  cout<<endl<<"Решение="<<q<<endl;
  f.close();
  return 0;
   }
   }
   }
→ Ссылка
Автор решения: Harry

Воистину, зачем просто, если можно сложно...

Исходя из вашего

Я беру из файла inp.txt 5 любых неотрицательных чисел и я должен получить их сумму и вывести в файл out.txt

этого достаточно - берем 5 первых же неотрицательных чисел, отрицательные пропускаем...

int main()
{
    ifstream in("inp.txt");
    ofstream out("out.txt");
    double q = 1, r = 0, a;
    for(int i = 0; in >> a;)
    {
        if (a < 0) continue; // Раз берем только неотрицательные

        q *= a;
        r += sqrt(q);
        // При 0 все остальные члены - только 0
        if (++i == 5 || a == 0)
        {
            out << r << endl;
            return 0;
        }
    }
    out << "Error reading file\n";
}
→ Ссылка