Задание с одномерным массивом
Мне нужно сделать задание по типу 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";
}