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

Замена чисел 0 или 1

01.06.2018, 14:40. Показов 2561. Ответов 3
Метки нет (Все метки)

Дана задача:
Ввести количество чисел, заполнить двоичный файл случайными целочисленными числами (как отрицательными, так и положительными), считать их, заменить каждое третье число единицей, если оно > 0, и нулем - если оно < 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
#include <iostream>
#include <time.h>
#include <fstream>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    srand(int(time(NULL)));
    
    int n = 0; // счетчик 
    int count = 1; // счетчик элементов
    int temp[500]; // массив под хранения считанных данных
 
     cout << "Введите количество желаемых строк - ";
     cin >> n;
 
      ofstream in("C://Users/ABC/Desktop/rand.dat", ios::binary); // открываем файл для записи в двоичном режиме
      if (!in) cout << "Не удалось открыть файл" << endl; // проверяем, открылся ли файл
 
      for (int i = 0; i < n; i++)
      {
          in << rand() % 100 - 50 << endl;
      }
 
      in.close(); // закрываем файл
 
       ifstream tmp("C://Users/ABC/Desktop/rand.dat", ios::binary); // открываем файл для чтения в двоичном режиме
       if (!tmp) cout << "Не удалось открыть файл" << endl;
 
       while (!tmp.eof())
       {
           for (int i = 0; i < n; i++)
           {
               tmp >> temp[i]; // записываем элемент в массив
 
               if (count % 3 == 0) // проверяем, делится ли на 3 без остатка?
               {
                   if (temp[i] > 0) temp[i] = 1; 
                   if (temp[i] < 0) temp[i] = 0;
               }
 
               count++;
           }
       }
 
       tmp.close(); // закрываем файл
 
        ofstream out("C://Users/ABC/Desktop/output.dat", ios::binary); // открываем файл для записи в двоичном режиме
        if (!out) cout << "Не удалось открыть файл" << endl;
 
        for (int i = 0; i < n; i++)
        {
            out << temp[i] << endl;
        }
 
        out.close(); // закрываем файл
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.06.2018, 14:40
Ответы с готовыми решениями:

Ноутбук Asus A54HY: Замена или апгрейд ? Или ПК(игровой)+нетбук ?
Всем доброе время суток, у меня на данный момент ноутбук A54HY. Хочу его продать и купить новый...

Как сгенерировать 100 чисел, разница чисел должна быть или -1 или +1
Как сгенерировать 100 чисел, разница чисел должна быть или -1 или +1 (например: 0 -1 0 1 2 ...

Из диапазона целых чисел выделить множество чисел, делящихся без остатка или на k или l, множество чисел, делящихся на k*l
Из диапазона целых чисел m…n выделить: 1) множество чисел, делящихся без остатка или на k или l (k,...

Апгрейд или замена ПК
Имеется ПК собранный на материнской плате P55-UD3L с процессором i3 550, на нём стояла видеокарта...

3
472 / 424 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
01.06.2018, 14:52 2
Лучший ответ Сообщение было отмечено Wishpering как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
           for (int i = 0; i < n; i++)
           {
               tmp >> temp[i]; // записываем элемент в массив
 
               if (count % 3 == 0) // проверяем, делится ли на 3 без остатка?
               {
                   if (temp[i] > 0) temp[i] = 1; 
                   if (temp[i] < 0) temp[i] = 0;
               }
 
               count++;
           }
Зачем здесь вообще этот цикл, если есть внешний while? (правда тогда надо следить за количеством чисел в файле, чтобы за n не перевалить)
C++
1
2
3
4
5
6
7
8
9
10
11
12
       int count  = 0, i = 0;
       while (!tmp.eof())
       {
            tmp >> temp[i];
            count++;
            if (count % 3 == 0)
            {
                if (temp[i] > 0) temp[i] = 1; 
                else temp[i] = 0;
            }
            i++;
       }
0
0 / 0 / 0
Регистрация: 22.11.2017
Сообщений: 29
01.06.2018, 15:05  [ТС] 3
Цитата Сообщение от SuperKir Посмотреть сообщение
правда тогда надо следить за количеством чисел в файле, чтобы за n не перевалить
За этим он там и был, но я глянул, тут каждое число - отдельная строка, так что пойдет. Спасибо за помощь
0
472 / 424 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
01.06.2018, 15:06 4
Цитата Сообщение от Wishpering Посмотреть сообщение
За этим он там и был
Судя по этому, не особо и важно его существование
C++
1
2
int temp[500]
cin >> n;
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.06.2018, 15:06
Помогаю со студенческими работами здесь

Замена Видеокарты, или?
Здравствуйте ребята! К сожалению моих познаний в компьютерном железе совсем не достаточно, чтобы...

Массивы или их замена
Здравствуйте Вот такой вопрос, читаю из архивного файла значения: время и значение Для хранения...

Апгрейд или замена
Доброго времени суток. Пришла в негодность видеокарта. Нужно ее заменить,желательно не на год а и...

Реболлинг или честная замена?
Здравствуйте. Интересует есть ли техническая возможность (например программная) отличить реболлинг...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru