Другие языки программирования и технологии

Помогите найти в чем дело перепишите программу.

Вот задание:

Написать программу, которая вычисляет сумму первых N четных положительных чисел. Исходные данные (N – количество чисел) вводятся из файла Input.txt. Результаты работы программы записываются в файл Out.txt.

Вопрос в том что я написал программу: и вывел чтоб он считал сумму четных чисел а сумму считает не правильно

вот программа:

//---------------------------------------------------------------------------
#include <stdio.h>
#include <conio.h>
#include <math.h>
//---------------------------------------------------------------------------
int main ()
{
FILE *f1, *f2;
int n, i;
float s;
f1 = fopen("input.txt", "r");
f2 = fopen("out.txt", "w");
fscanf (f1, "%d", &n);
for (i=1; i<=n; i++)
{
if ((n>0) && (i%2==0))
fprintf(f2, "=", i);
}
s=0;
{
s=(float)s+i;
fprintf(f2,"\n Summa=%f", s);
}
fclose(f1);
fclose(f2);
getch();
return 0;
}
//---------------------------------------------------------------------------
#include <stdio.h>
int main()
{
FILE *f1, *f2;
int n, i;
long s;
f1 = fopen("input.txt", "r");
f2 = fopen("out.txt", "w");
fscanf(f1, "%d", &n);
s = 0;
for (i = 2; i <= n * 2; i += 2)
{
fprintf(f2, "= %d", i);
s += i;
}
fprintf(f2, "\n Summa=%d", s);
fclose(f1);
fclose(f2);
return 0;
}

Но мне кажется, что вы и тот, кто писал программу на Паскале, не поняли само условие задачи.
"сумму первых N четных положительных чисел" - зачем это уточнение в задании? Значит в файле кроме чётных положительных находятся также чётные отрицательные и нечётные числа. Из них требуется выбрать первые N чётных положительных и сложить.

#include <stdio.h>
int main()
{
FILE *f1, *f2;
int n, i, x;
long s;
f1 = fopen("input.txt", "r");
f2 = fopen("out.txt", "w");
fscanf(f1, "%d", &n);
s = 0;
i = 0;
while (i < n)
{
fscanf(f1, "%d", &x);
printf("%5d", x);
if (x > 0 && !(x % 2))
{
printf("+");
s += x;
i++;
}
printf("\n");
}
fclose(f1);
printf("\n Summa=%d", s);
fprintf(f2, "%d", s);
fclose(f2);
getchar();
return 0;
}

Пример работы программы для файла input.txt с содержимым
6
72 22 49 -106 117 93 -92 114 -84 72 116 -24 -19 -74 -88 97 65 -125 10 13 -21 -12 -95 78

6 первых чётных положительных чисел - это 72, 22, 114, 72, 116 и 10.



Вывод на экран (функция printf) вставлен для наглядности при отладке.
Числа, которые удовлетворяют условию, справа помечаются плюсиком.
Программа не контролирует конец файла, поэтому в файле гарантированно должно быть заданное количество чётных положительных чисел.
ДЩ
Денис Щербаков
51 590
Лучший ответ
Господи, ну а хотя бы чуть подумать? ! Первые N четных чисел - это не четные числа в интервале от 1 до N!!! Это 1*2, 2*2, 3*2 ...N*2. То есть

Цикл от 1 до N
s = s + 2*i

И все.
for (i=1; i<=n; i++)
{
if ((n>0) && (i%2==0))//может, не стоит 100 раз проверять, меньше ли n 0, а проверить это перед циклом?
fprintf(f2, "=", i);//нас никто не просил выводить все четные в файл, убери это
}//зачем заканчивать цикл? мы же сумму еще не посчитали!
s=0;//поставь это перед циклом
{//и это тоже не нужно
s=(float)s+i;//это работает, но s и так типа float
fprintf(f2,"\n Summa=%f", s);//вынеси это из цикла, сумму только один раз нужно выводить. И вроде слово "Summa" тоже не просили писать, только само число
}
Бахтияр Чокаев
Бахтияр Чокаев
93 402
//---------------------------------------------------------------------------
#include <stdio.h>
#include <conio.h>
#include <math.h>
//---------------------------------------------------------------------------
int main ()
{
FILE *f1, *f2;
int n, i;
float s;
f1 = fopen("input.txt", "r");
f2 = fopen("out.txt", "w");
fscanf (f1, "%d", &n);
for (i=1; i<=n; i++)
{
if ((n>0) && (i%2==0))
fprintf(f2, "=", i);
}
s=0; // а это перед циклом обнулить
{ // ну, видимо в цикл поместить нужно ))
s=(float)s+i; //s+=i; так-то красивее, и складывать при условии, что i - четное
fprintf(f2,"\n Summa=%f", s);
}
fclose(f1);
fclose(f2);
getch();
return 0;
}
//---------------------------------------------------------------------------
Георгий Полит
Георгий Полит
4 820