Найти сумму положительных элементов действительного файла - C (СИ)

  1. Нужно выполнить обработку файла: найти сумму положительных элементов действительного файла. Заранее спасибо.


textual

Код к задаче: «Найти сумму положительных элементов действительного файла - C (СИ)»

#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif
 
#include <stdio.h>
#include <stdlib.h>
 
int is_positive(double d)
{
    return d >= 0.0;
}
 
double file_sum_if(FILE *file, int (*func) (double))
{
    double d = 0.0;
    double sum = 0.0;
    while (!feof(file) && !ferror(file) && fscanf(file, "%lf", &d) == 1)
        if (func(d))
            sum += d;
    return sum;
}
 
int main(void)
{
    FILE *f = fopen("numbers.txt", "r");
    printf("Sum: %.3lf\n", file_sum_if(f, is_positive));
    fclose(f);
#ifdef _MSC_VER
    system("pause");
#endif
    return 0;
}

СДЕЛАЙТЕ РЕПОСТ

15   голосов, оценка 4.200 из 5



Похожие ответы
  1. Задана последовательность из N вещественных чисел. Определить сколько чисел меньше K, равно K и больше K. (массив random )

  1. Добрый вечер! Дан массив M*N. Необходимо отсортировать ее по строкам так, чтобы вначале шли все положительные элементы, отсортированные по убыванию, а затем все остальные, отсортированные по возрастанию (если в строке имеются нули - переставить их в конец строки). Вывести получившуюся матрицу. У меня проблема с перестановкой нулей. C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 #include     int main()     {   int N, M,t, i,j,k, mas[10][10]={0}, q;         printf("VVEDITE N,M \n");     scanf("%d%d", &N,&M);     printf("VVEDITE MASSIV \n");       for (i=0; i < N; i++)        for (j=0; j < M; j++)            scanf ("%d", &mas[i][j]);       for(k = 0; k < N; k++){     for(i = 0 ; i < M; i++){         for(j = i + 1; j < M; j++){               if((mas[k][i] < mas[k][j]) && (mas[k][i]!=0)){                       t = mas[k][i];                     mas[k][i] = mas[k][j];                     mas[k][j] = t;               }         }     } }   if (mas[i][j]<0) {     } {   for(k = 0; k < N; k++){         for(i = 0 ; i < M; i++){             for(j = i + 1; j < M; j++){                   if(mas[k][i] < mas[k][j]) {                       t = mas[k][i];                     mas[k][i] = mas[k][j];                     mas[k][j] = t;               }         }     } } } for(i = 0 ; i < M; i++)     {         for(j = 0; j < M; j++)             if (mas[i][j]==0)         {                 for ( q = j; q < N-1 ; q++)                 {                     mas[i][q] = mas[i][q + 1];                 }                 mas[N-1][M-1] = 0;           }     }   for (i=0; i < N; i++)        {for (j=0; j < M; j++)               printf ("%d\t", mas[i][j]);        printf (" \n");}   getch();}

  1. Сформировать массив из элементов исходных массивов, больших второго элемента первого массива и положительных элементов второго массива. Требуется сформировать новый массив по заданию. В программе реализовать: 1) генерацию случайным образом элементов исходных массивов; 2) выполнение действия в соответствии с условием задачи; 3) порядок вывода: • исходные массивы, • сформированный массив, если он был сформирован. В противном случае – соответствующее сообщение. Помогите, а то не могу сделать

  1. Найти максимальный элемент и поменять его местами с последним элементом массива. В программе предусмотреть и реализовать: 1) генерацию элементов исходного массива с помощью датчика случайных чисел; 2) выполнение в соответствии с условием задачи; 3) порядок вывода: • исходный массив, • максимальный или минимальный элемент массива и его номер, • массив, полученный в результате выполнения задания.

  1. Заполнить одномерный массив вводом с клавиатуры. Выяснить верно ли что сумма элементов массива есть чётное число.

  1. Написала программу, она компилируется, но не даёт результат (текстовые файлы я создала). Помогите, пожалуйста C++1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #include #include #include FILE *f, *f1; int main() {int x, q=0,  sum=0; double l; f=fopen("D:\\TextFile", "rt"); f1=fopen("D:\\rez", "wt"); if(f == NULL)         {           printf("Problems");           system("pause");           return 1;         } if (fscanf(f,"%d",&x)>0)   {sum+=x; q+=1; l=sum/q; }     fprintf(f1," %3lf",l); fclose(f); fclose(f1);   return 0; }

  1. Я написала программу с двумя элементами ввода массивов, но результат выводит не неверный и после выбора ручного ввода программа вылетает. Помогите пожалуйстаC1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 #include #include #include #include #include #include #define N 500 #define MIN 80 int main(void) { setlocale (0, "rus"); int a[N],n,i, min=a[0], nummin=0, sum=0, nol=0, k; srand((unsigned)time(NULL)); printf ( " Определите характер заполнения: 1- автоматическое, 2- вручную"); printf("\n"); scanf("%d",&k);   switch(k) { case 1: { printf("vvedite n - "); scanf("%d",&n); for (i=0; ia[i])           {               printf("\n");               min=a[i];              nummin=i;}         for (i=nummin+1; i

  1. Добрый вечер! Не подскажите где ошибка? При запуске программы вылезает окно с ошибкой. Вроде часть где массив заполняется верна. Само задание: В заданном массиве A[N][N] найдите суммы элементов в каждой строке. Сформируйте одномерный массив S[N], содержащий полученные суммы, расположенные в порядке возрастания.C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 #define _CRT_SECURE_NO_WARNINGS #include #include #include int main() {   int **a;  // указатель на массив   int n,sum ;   printf("Enter n: ");     scanf("%i", &n);    int i=0, j=0;     a = (int**)malloc(n * sizeof(int));   // Ввод элементов массива   for (i = 0; i

  1. Вроде всё работает, программа считает сумму элементов матрицы. Но она выводит все результаты, и промежуточные. Вот они мне и не нужны, а нужна только итоговая сумма, что изменить для этого? Ну и второе, каким образом можно изменить эту же программу, чтобы она осуществляла поиск индекса элемента, вводимого с клавиатура. В случае, если такого элемента нет - вывод фразы, что его нет. Заранее благодарю.C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 #include   main() {       int A[10][10],i,j,n,m,S=0;     printf("Razmer stroki:");     scanf("%d",&n);     printf("Razmer stolba:");     scanf("%d",&m);     for(i=0;i

  1. Написать программу вывода элементов одномерного массива при наличии чисел заглушек и с правильным порядком индексации C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include #include     int main(){     int a[10] = {-1, 7, 1, 3, 1, -1, 4, -1, 6, 5 };   int  i = 0;               for(i = 0; i < sizeof(a)/ sizeof(*a); ++i)            if (a[i] != -1 )    printf ("a[%d]= %d\n", i, a[i]);    return 0; }Помогите вывести правильную индексацию массива