Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 04.07.2016
Сообщений: 5
1

Двоичный файл, подсчитать число отрицательных элементов

04.07.2016, 01:10. Просмотров 808. Ответов 2
Метки нет (Все метки)

Здравствуйте! Нужна помощь в задачке. Никак не могу понять как работать с двоичными файлами. Был бы очень признателен за помощь в написании кода.
Задание
Поиск отрицательных чисел в файле. В двоичном файле, содержащем данные типа int, подсчитать число отрицательных элементов, результат записать вместо последнего элемента.
Примечание: Результат работы с данными вывести на экран и в новый файл. Файл с входными данными имеет название INPUT.TXT для текстовых файлов и INPUT.DAT для двоичных. Файл, в который записывается результат, называется OUTPUT.TXT для текстовых файлов или OUTPUT.DAT для двоичных. Для создания файлов с исходными данными можно использовать различные утилиты (например, Binary Viewer). Число элементов при считывании файла определяется его длиной, либо, если этого не определяет алгоритм, двумя сотнями (200). Лучшими решениями считаются те, где нет привязки к количеству элементов в файле. При необходимости можно использовать временный файл для хранения промежуточных результатов.

Код:
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
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
 
using namespace std;
 
void main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int arrnum(1), a(0);
    int *arr = new int[arrnum];
    cout << "Введите кол-во чисел: ";
    cin >> arrnum;
    cout << "Введите массив:\n";
    for (int i(0); i < arrnum; i++)
    {
        cout << "Введите " << i << " элемент: ";
        cin >> arr[i];
    }
    for (int i(0); i < arrnum; i++)
    {
        if (arr[i] < 0)
            a++;
    }
    for (int i(0); i < arrnum - 1; i++)
        cout << arr[i];
    cout << a << endl;
    system("pause");
}
К сожалению, всё, что я сделал это: подсчёт кол-ва отрицательных элементов и вывод их на экран.
Я знаю, что считывать данные необходимо из файла, но из-за неумением я сделал ввод с клавиатуры.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.07.2016, 01:10
Ответы с готовыми решениями:

Подсчитать число и сумму положительных, число и произведение отрицательных элементов заданного массива
1. Подсчитать число и сумму положительных, число и произведение отрицательных элементов заданного...

Подсчитать число отрицательных элементов массива
надо составить массив А с помощью генератора случайных чисел между элементами -10 и 10 и вывести...

Подсчитать число отрицательных элементов массива
Надо составить массив А с помощью генератора случайных чисел между элементами -10 и 10 и вывести...

Подсчитать число отрицательных элементов матрицы
Даны натуральное число m, целые числа a1, ..am и целочисленная квадратная матрица порядка m. Строку...

2
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10898 / 6815 / 1623
Регистрация: 25.07.2009
Сообщений: 12,520
04.07.2016, 03:37 2
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
#include <iostream>
#include <fstream>
#include <random>
 
const int LOW_BOUND = -100;
const int HIGH_BOUND = 100;
const int NUMBERS_TO_SAVE = 20;
const char * FILE_NAME = "numbers.dat";
 
int main() {
    std::random_device rd;
    
    std::ofstream ofs(FILE_NAME, std::ofstream::binary);
    if ( ! ofs ) {
        std::cerr << "Can't open file " << FILE_NAME << " for write!" << std::endl;
        return 1;
    }
    
    for ( int i = 0; i < NUMBERS_TO_SAVE; ++i ) {
        int n = rd() % (HIGH_BOUND - LOW_BOUND + 1) + LOW_BOUND;
        if ( ! ofs.write((char*)&n, sizeof(n)) ) {
            std::cerr << "Can't write to file " << FILE_NAME << std::endl;
            return 1;
        }
    }
    
    ofs.close();
    
    int n, count = 0;
    std::ifstream ifs(FILE_NAME, std::ifstream::binary);
    if ( ! ifs ) {
        std::cerr << "Can't open file " << FILE_NAME << " for read." << std::endl;
        return 1;
    }
    
    std::cout << "Numbers readen from file:" << std::endl;
    while ( ifs.read((char*)&n, sizeof(n)) ) {
        std::cout << n << ' ';
        count += ( n < 0 );
    }
    ifs.close();
    std::cout << "\n" << count << " negative numbers" << std::endl;
    
    return 0;
}
Код
andrew@debppc:~/workspace/cpp/numbers$ g++ -std=c++11 -Wall count_negative_randoms.cpp 
andrew@debppc:~/workspace/cpp/numbers$ ./a.out 
Numbers readen from file:
-17 41 -10 32 21 -31 -46 18 48 28 57 47 66 83 -51 -46 -81 -13 11 -40 
9 negative numbers
andrew@debppc:~/workspace/cpp/numbers$ ./a.out 
Numbers readen from file:
61 -86 -67 -20 76 77 6 -33 2 63 -46 48 -65 51 -25 61 96 21 -96 82 
8 negative numbers
andrew@debppc:~/workspace/cpp/numbers$ ./a.out 
Numbers readen from file:
-21 -88 66 42 -80 -28 -19 38 47 -17 -8 42 -61 -71 -78 19 41 -20 52 -55 
12 negative numbers
andrew@debppc:~/workspace/cpp/numbers$
1
0 / 0 / 0
Регистрация: 04.07.2016
Сообщений: 5
04.07.2016, 14:39  [ТС] 3
Спасибо большое
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.07.2016, 14:39

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Подсчитать число повторяющихся отрицательных элементов массива A[n]
1.Подсчитать число повторяющихся отрицательных элементов массива A. 2.Вычислить разность...

Подсчитать число отрицательных элементов матрицы в отмеченых строках
Всем привет, в очередной раз обращаюсь к вам, как сделать не знаю,может кто толковый подскажет что...

Одномерный массив, подсчитать число положительных, отрицательных и нулевых элементов
В одномерном массиве z1,z2,...,zn подсчитать число положительных, отрицательных и нулевых элементом...

Подсчитать число элементов, входящих в непрерывные последовательности отрицательных чисел
ЗАДАЧА Задан одномерный массив Х вещественных чисел. Подсчитать число элементов, входящих в...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.