Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/29: Рейтинг темы: голосов - 29, средняя оценка - 4.69
 Аватар для Вася1q
21 / 21 / 3
Регистрация: 13.09.2011
Сообщений: 314

Задача про бинарный файл..

21.10.2011, 22:02. Показов 5820. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер)
Вот возникла очередная проблемка с задачей по СИ++. Задача звучит таким образом:
Создать бинарный файл f и записать в него действительные числа. Организовать просмотр бинарного файла и его обработку: найти сумму чисел, расположенных перед первым минимальным.
Начало задачи я смогу, как мне кажется выполнить самостоятельно, но я все никак не пойму, как именно искать сумму чисел, расположенных перед первым минимальным. ??? Объясните пожалуйста. Можно на русском))) НО лучше бы на СИ++
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.10.2011, 22:02
Ответы с готовыми решениями:

Задача про провода: бинарный поиск
Дано N отрезков провода длиной L1, L2, ..., LN сантиметров. Требуется с помощью разрезания получить из них K равных отрезков как можно...

Сконвертировать текстовый файл в бинарный, переписать только положительные числа в другой бинарный файл
Бинарные файлы!! Помогите пожалуйста. Дано бинарный файл ( данные сначала в текстовом, конвертирую в бинарный). Без использования другого...

Записать в бинарный файл массив объектов Student (бинарный файловый ввод/вывод)
Здравствуйте. Стоит задача записать в бинарный файл массив объектов student: class student { string firstname,lastname, group; ...

14
365 / 366 / 167
Регистрация: 11.06.2010
Сообщений: 703
21.10.2011, 22:06
Цитата Сообщение от Вася1q Посмотреть сообщение
Начало задачи я смогу, как мне кажется выполнить самостоятельно
Покажите
0
 Аватар для Вася1q
21 / 21 / 3
Регистрация: 13.09.2011
Сообщений: 314
21.10.2011, 22:16  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <iostream>
using namespace std;
 
void create(void); 
void view(void);
void work(void);
 
int main(void)
{  create();
   view(); 
   work();
}
 
// определение функции создания бинарного файла
 
void create(void)
{ FILE * f;  
  int number, n;
  if ((f = fopen("D:\\file.dat","wb"))!= NULL)
   { cout << " Введите количество чисел :  "; 
      cin >> n;
       cout << " \nВведите целые числа : ";
Добавлено через 34 секунды
Так вроде)

Добавлено через 5 минут
Вот например, схожая задача :
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
#include <stdio.h>
#include <iostream>
using namespace std;
 
// прототипы функций создания, просмотра и
// обработки бинарного файла
 
void create(void); 
void view(void);
void work(void);
 
int main(void)
{  create();
   view(); 
   work();
}
 
// определение функции создания бинарного файла
 
void create(void)
{ FILE * f;  
  int number, n;
  if ((f = fopen("D:\\file.dat","wb"))!= NULL)
   { cout << " Введите количество чисел :  "; 
      cin >> n;
       cout << " \nВведите целые числа : ";
       for (int i = 0; i < n; i++)
        { cin >> number;
          fwrite(&number,sizeof(int),1,f); 
       }
     fclose(f); 
    cout << "\nЧисла записаны в бинарный файл!";
    } 
 else 
  printf("\nОшибка создания файла!\n");
}
 
// определение функции просмотра бинарного файла
 
void view(void)
{  int number;
   FILE * f;
   if ((f = fopen("D:\\file.dat","rb"))!= NULL)
   { cout << "\nПросмотр бинарного файла: ";
     while (fread(&number,sizeof(int),1,f))
         cout << number << " ";
      cout << "\n"; 
      fclose(f);
     }
   else printf("\nОшибка открытия файла!\n");
}
 
// определение функции обработки бинарного файла
 
void work(void)
{ int number; 
  FILE * f; 
  int  k = 0;
  if ((f = fopen("D:\\file.dat","rb"))!= NULL)
  { while (fread(&number,sizeof(int),1,f))
       if (number < 0) k++;
    cout << "\nКоличество отрицательных чисел = " << k;
    cout << "\n";  
    fclose(f);
  }
 else  printf("\nОшибка открытия файла!\n");
Добавлено через 1 минуту
Пытаюсь делать по аналогии, все упирается в нахождении суммы чисел, расположенных перед первым минимальным.
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
21.10.2011, 22:16
Создаешь цикл, который считывает и сравнивает числа и в итоге получаешь число допустим min_index, в котором хранится номер минимального числа (если при сравнении не рассматривать >= и <=), то это будет номер первого минимального числа. Далее создаешь еще один цикл, который изменяет свой параметр от 0 до min_index. Внутри цикла суммируется число. В итоге это число и будет искомым.
1
 Аватар для aeshes
448 / 211 / 21
Регистрация: 07.10.2011
Сообщений: 462
21.10.2011, 22:18
Попробуй сделать так: сначала открываешь файл, просматриваешь его до конца и находишь в нем минимум, запоминаешь его или его позицию. Закрываешь файл. Открываешь заново и просматриваешь сначала, добавляя каждое прочитанное число к сумме, пока не дойдешь до минимума. Выводишь сумму на экран.
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
21.10.2011, 22:20
Можно изначально считать числа в массив, а потом работать с ним. Тогда не прийдется считывать числа с файла еще раз во втором цикле, но потребуется выделение памяти под этот массив. Делай как хочешь.
0
 Аватар для Вася1q
21 / 21 / 3
Регистрация: 13.09.2011
Сообщений: 314
21.10.2011, 22:26  [ТС]
MrGluck, не...массивы мы еще не изучали. Но с ним можно было бы упростить решение.

Добавлено через 1 минуту
MrGluck, А вот предложение с двумя циклами ооочень интересное))) Но как мне кажется трудно осуществимое.

Добавлено через 58 секунд
aeshes, честно говоря, я вас не совсем понял...какими это действиями я должен открывать бинарник??
0
 Аватар для aeshes
448 / 211 / 21
Регистрация: 07.10.2011
Сообщений: 462
21.10.2011, 22:26
Вася1q, у тебя всегда будет 2 цикла - один для поиска минимума, другой - для суммирования нужного количества чисел

C++
1
f = fopen("D:\\file.dat","wb")
это открытие файла для записи
с ключом "rb" - открытие для чтения
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
21.10.2011, 22:28
Цитата Сообщение от Вася1q Посмотреть сообщение
MrGluck, не...массивы мы еще не изучали. Но с ним можно было бы упростить решение.
Странно, файлы проходите, а массивы не прошли. Ну да пройдите сами, это не сложная тема.
Цитата Сообщение от Вася1q Посмотреть сообщение
Добавлено через 58 секунд
aeshes, честно говоря, я вас не совсем понял...какими это действиями я должен открывать бинарник??
ну например так:
C++
1
2
fopen(filename, "rb");
ifstream i(filename, ios::binary);
0
 Аватар для Вася1q
21 / 21 / 3
Регистрация: 13.09.2011
Сообщений: 314
21.10.2011, 22:32  [ТС]
aeshes, Так..так уже немного начинаю понимать))) как составить цикл суммирования нужного кол-ва чисел я думаю вечерком и сам разобраться смогу, но как найти минимум??
aeshes, помогите пожалуйста составить это цикл.

Добавлено через 1 минуту
MrGluck, я и так собираюсь начать учить массивы, но срок на эту лабу поджимает...и пока хотя бы без массива сдать желательно.
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
21.10.2011, 22:34
Допустим есть массив чисел mass, содержащий n эл-тов.

C++
1
2
3
4
5
6
7
8
int min = mass[0];
int min_index = 0;
for (int i = 0; i < n; i++)
    if (mass[i] < min)
    {
        min_index = i;
        min = mass[i];
    }
0
 Аватар для Вася1q
21 / 21 / 3
Регистрация: 13.09.2011
Сообщений: 314
21.10.2011, 22:38  [ТС]
MrGluck, эх....я же вам объясняю с массивами никак(( мне его просто не зачтут..
0
 Аватар для aeshes
448 / 211 / 21
Регистрация: 07.10.2011
Сообщений: 462
21.10.2011, 22:39
Вася1q, напишу словами
Заводим переменную min того типа, которого у тебя числа в файле, и int index - номер минимума, int i - счетчик
min=первое_число_прочитанное_из файла
index=1;
i=1;
пока (не достигнут конец файла)
{
читаем следующее число;
i=i+1;
если (min>прочитанного) {min=прочитанное; index=i;}
}
Примерно так
P.S. MrGluck на примере массива тебе показал суть поиска
1
 Аватар для Вася1q
21 / 21 / 3
Регистрация: 13.09.2011
Сообщений: 314
21.10.2011, 22:42  [ТС]
aeshes, спасибо) Теперь попробую всю эту информацию применить в создании программки. Еще раз спасибо всем кто откликнулся!
0
 Аватар для Вася1q
21 / 21 / 3
Регистрация: 13.09.2011
Сообщений: 314
13.11.2011, 20:23  [ТС]
Форумчане, выручайте! Попытался сейчас совместить все элементы программы воедино, но видимо что-то не правильно(( помогите исправить.

Добавлено через 6 минут
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
#include <stdio.h>
#include <iostream>
using namespace std;
 
// ïðîòîòèïû ôóíêöèé ñîçäàíèÿ, ïðîñìîòðà è
// îáðàáîòêè áèíàðíîãî ôàéëà
 
void create(void); 
void view(void);
void work(void);
 
int main(void)
{  create();
   view(); 
   work();
}
 
// îïðåäåëåíèå ôóíêöèè ñîçäàíèÿ áèíàðíîãî ôàéëà
 
void create(void)
{ FILE * f;  
  int number, n;
  if ((f = fopen("D:\\file.dat","wb"))!= NULL)
   { cout << " Ââåäèòå êîëè÷åñòâî ÷èñåë :  "; 
      cin >> n;
           cout << " \nÂâåäèòå öåëûå ÷èñëà : ";
           for (int i = 0; i < n; i++)
            { cin >> number;
                  fwrite(&number,sizeof(int),1,f); 
       }
         fclose(f); 
    cout << "\n×èñëà çàïèñàíû â áèíàðíûé ôàéë!";
        } 
 else 
  printf("\nÎøèáêà ñîçäàíèÿ ôàéëà!\n");
}
 
// îïðåäåëåíèå ôóíêöèè ïðîñìîòðà áèíàðíîãî ôàéëà
 
void view(void)
{  int number;
   FILE * f;
   if ((f = fopen("D:\\file.dat","rb"))!= NULL)
   { cout << "\nÏðîñìîòð áèíàðíîãî ôàéëà: ";
     while (fread(&number,sizeof(int),1,f))
             cout << number << " ";
          cout << "\n"; 
          fclose(f);
         }
   else printf("\nÎøèáêà îòêðûòèÿ ôàéëà!\n");
}
 
// îïðåäåëåíèå ôóíêöèè îáðàáîòêè áèíàðíîãî ôàéëà
 
void work(void)
{ int number; 
  FILE * f; 
  int  i = 0;
  int min = mass[0];
  int min_index = 0;
if ((f = fopen("D:\\file.dat","rb"))!= NULL)
if (mass[i] < min)
    {
        min_index = i;
        min = mass[i];
        cout << "\nÊîëè÷åñòâî îòðèöàòåëüíûõ ÷èñåë = " << min;
        cout << "\n";  
    fclose(f);
    }
 else  printf("\nÎøèáêà îòêðûòèÿ ôàéëà!\n");
 system("pause");
}
Добавлено через 14 часов 57 минут
....... =(

Добавлено через 6 часов 34 минуты
Ну помогите плиз!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.11.2011, 20:23
Помогаю со студенческими работами здесь

Не получается прочесть правильно текстовый файл в структуру а затем в бинарный файл
Нужно просто прочесть файл в структуру данных а потом оттуда записать в бинарный файл Вот как выглядит текстовый файл: 11122 Mary...

Повреждается бинарный файл при попытке его записи в другой файл
Делаю автоматизированную сборку. Для этого нужно соединить три файла в один новый. Но почему-то каждый раз в exe-файле появляется лишний...

Данные записать в файл F1.txt, затем прочитать оттуда, обрабатывались и записывались в бинарный файл F2.bin с проверкой
Никак не получается отладить в BC++ 3.1. Как сделать в классах так, чтобы введённые данные записывались в файл F1.txt, затем читались...

Файл: Перенести в бинарный файл и данные из текстового...
Здравствуйте товарищи программисты. Коротко: нужно считывать информацию из текстового документа, чтобы в дальнейшем создался бинарный файл...

Создать бинарный файл и текстовый файл
Вот, к примеру, я написал программу для введения 5 чисел в текстовый файл, а как будет выглядеть программа бинарного файла? ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru