Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
lera8
630 / 213 / 26
Регистрация: 03.11.2009
Сообщений: 488
#1

Файлы - C++

19.12.2009, 17:10. Просмотров 480. Ответов 5
Метки нет (Все метки)

Спасите меня от мучений с этими файлами Буду очень вам благодарна
В данном задании необходимо осуществить обработку бинарного файла (или файлов)
согласно условию варианта. Имя файла передается в параметрах командной строки, а если оно
не указано, то вводится с клавиатуры.
Дан файл, содержащий вещественные числа (тип double). Определить сумму чисел,
меньших среднего значения всех чисел в файле.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2009, 17:10     Файлы
Посмотрите здесь:

файлы C++
Файлы C++
C++ Файлы
Файлы C++
файлы C++
C++ Файлы....
файлы C++
Файлы C++
C++ файлы в С++
C++ Файлы
Файлы C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
odip
Эксперт С++
7153 / 3293 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
19.12.2009, 20:15     Файлы #2
А от чего именно спасать ?
lera8
630 / 213 / 26
Регистрация: 03.11.2009
Сообщений: 488
19.12.2009, 20:32  [ТС]     Файлы #3
От смерти в обнимку с языком Си и не возможностью решить эту задачу
odip
Эксперт С++
7153 / 3293 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
19.12.2009, 20:35     Файлы #4
Спасать вижу смысл только тех, кто сам прилагает усилия.
easybudda
Эксперт С++
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
19.12.2009, 22:17     Файлы #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от lera8 Посмотреть сообщение
Дан файл, содержащий вещественные числа (тип double). Определить сумму чисел,
меньших среднего значения всех чисел в файле.
А сам "файл, содержащий вещественные числа" дадут, или тоже сделать надо?
на всякий случай вот Вам
файлосоздавалка
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
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
 
/*
*   создавалка двоичного файла, содержащие числа типа double 
*/
 
int main(int argc, char **argv){
    double d;
    FILE *f;
    char buf[BUFSIZ], *p, *file_name;
    
    if ( argc > 1 )
        file_name = argv[1];
    else {
        printf("Name for output file: ");
        if ( !fgets(buf, BUFSIZ, stdin) ){
            perror("Can't get name for file!\n");
            exit(1);
        }
        if ( p = strrchr(buf, '\n') )
            *p = '\0';
        if ( !*buf ){
            perror("Can't get name for file!\n");
            exit(1);
        }
        file_name = buf;
    }
    
    if ( ( f = fopen(file_name, "wb") ) == NULL ){
        perror("Can't open output file!\n");
        exit(1);
    }
    
    while ( 1 ){
        printf("Double value or q for quit: ");
        if ( !fgets(buf, BUFSIZ, stdin) ){
            perror("Can't get value!\n");
            exit(1);
        }
        if ( *buf == 'q' )
            break;
        
        d = strtod(buf, NULL);
        if ( errno == ERANGE ){
            printf("Bad value!\n");
            continue;
        }
        
        if ( fwrite(&d, sizeof(double), 1, f) != 1 ){
            perror("Can't write data to file!\n");
            exit(1);
        }
        printf("Saved to file.\n");
    }
    fclose(f);
    exit(0);
}
а вот
читалка и считалка
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
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
75
76
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
/*
*   читалка двоичного файла и считалка суммы значений, меньших среднего арифметического 
*/
 
int main(int argc, char **argv){
    double *arr, average, sum;
    FILE *f;
    char buf[BUFSIZ], *p, *file_name;
    size_t count, i;
    long pos;
    
    if ( argc > 1 )
        file_name = argv[1];
    else {
        printf("Name for input file: ");
        if ( !fgets(buf, BUFSIZ, stdin) ){
            perror("Can't get name for file!\n");
            exit(1);
        }
        if ( p = strrchr(buf, '\n') )
            *p = '\0';
        if ( !*buf ){
            perror("Can't get name for file!\n");
            exit(1);
        }
        file_name = buf;
    }
    
    if ( ( f = fopen(file_name, "rb") ) == NULL ){
        perror("Can't open input file!\n");
        exit(1);
    }
    
    fseek(f, 0, SEEK_END);
    pos = ftell(f);
    rewind(f);
    if ( pos % sizeof(double) ){
        fprintf(stderr, "File corrupt!\n");
        exit(1);
    }
    count = pos / sizeof(double);
    if ( !count ){
        fprintf(stderr, "No data in file!\n");
        exit(1);
    }
    
    if ( ( arr = (double*)calloc(count, sizeof(double)) ) == NULL ){
        perror("Bad memory!\n");
        exit(1);
    }
    if ( fread(arr, sizeof(double), count, f) != count ){
        perror("Can't read file!\n");
        exit(1);
    }
    fclose(f);
    
    for ( sum = 0.0, i = 0; i < count; ++i )
        sum += arr[i];
    average = sum / (double)count;
    for ( sum = 0.0, i = 0; i < count; ++i )
        if ( arr[i] < average )
            sum += arr[i];
    
    printf("All %d values:\n", count);
    for ( i = 0; i < count; ++i )
        printf( ( i < count - 1 ) ? "%.2f " : "%.2f\n", arr[i]);
    printf("Average value: %.2f\n", average);
    printf("Sum of elements less than average is: %.2f\n", sum);
    
    free(arr);
    exit(0);
}


Не по теме:

Цитата Сообщение от odip Посмотреть сообщение
Спасать вижу смысл только тех, кто сам прилагает усилия.
Ну ладно Вам, барышня всё-таки...

lera8
630 / 213 / 26
Регистрация: 03.11.2009
Сообщений: 488
19.12.2009, 23:01  [ТС]     Файлы #6
easybudda, спасибо вам большое! Обязательно буду стараться разобраться с файлами=) Ещё раз вам спасибо
Yandex
Объявления
19.12.2009, 23:01     Файлы
Ответ Создать тему
Опции темы

Текущее время: 05:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru