Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
#1

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

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

Добрый вечер)
Вот возникла очередная проблемка с задачей по СИ++. Задача звучит таким образом:
Создать бинарный файл f и записать в него действительные числа. Организовать просмотр бинарного файла и его обработку: найти сумму чисел, расположенных перед первым минимальным.
Начало задачи я смогу, как мне кажется выполнить самостоятельно, но я все никак не пойму, как именно искать сумму чисел, расположенных перед первым минимальным. ??? Объясните пожалуйста. Можно на русском))) НО лучше бы на СИ++
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.10.2011, 22:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Задача про бинарный файл.. (C++):

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

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

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

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

бинарный файл - C++
Привет..я чайник и проблема у меня следующая) делала перевод статьи, сохранила данные в ноутпед..видимо задала некорректное имя файла, на...

Бинарный файл - C++
Удалить из бинарного файла, в котором записаны целые числа все четные элементы.

14
-comrade-
355 / 356 / 42
Регистрация: 11.06.2010
Сообщений: 703
21.10.2011, 22:06 #2
Цитата Сообщение от Вася1q Посмотреть сообщение
Начало задачи я смогу, как мне кажется выполнить самостоятельно
Покажите
0
Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
21.10.2011, 22:16  [ТС] #3
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
MrGluck
Модератор
Эксперт CЭксперт С++
7497 / 4613 / 694
Регистрация: 29.11.2010
Сообщений: 12,631
21.10.2011, 22:16 #4
Создаешь цикл, который считывает и сравнивает числа и в итоге получаешь число допустим min_index, в котором хранится номер минимального числа (если при сравнении не рассматривать >= и <=), то это будет номер первого минимального числа. Далее создаешь еще один цикл, который изменяет свой параметр от 0 до min_index. Внутри цикла суммируется число. В итоге это число и будет искомым.
1
aeshes
441 / 204 / 13
Регистрация: 07.10.2011
Сообщений: 462
21.10.2011, 22:18 #5
Попробуй сделать так: сначала открываешь файл, просматриваешь его до конца и находишь в нем минимум, запоминаешь его или его позицию. Закрываешь файл. Открываешь заново и просматриваешь сначала, добавляя каждое прочитанное число к сумме, пока не дойдешь до минимума. Выводишь сумму на экран.
0
MrGluck
Модератор
Эксперт CЭксперт С++
7497 / 4613 / 694
Регистрация: 29.11.2010
Сообщений: 12,631
21.10.2011, 22:20 #6
Можно изначально считать числа в массив, а потом работать с ним. Тогда не прийдется считывать числа с файла еще раз во втором цикле, но потребуется выделение памяти под этот массив. Делай как хочешь.
0
Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
21.10.2011, 22:26  [ТС] #7
MrGluck, не...массивы мы еще не изучали. Но с ним можно было бы упростить решение.

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

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

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

Добавлено через 1 минуту
MrGluck, я и так собираюсь начать учить массивы, но срок на эту лабу поджимает...и пока хотя бы без массива сдать желательно.
0
MrGluck
Модератор
Эксперт CЭксперт С++
7497 / 4613 / 694
Регистрация: 29.11.2010
Сообщений: 12,631
21.10.2011, 22:34 #11
Допустим есть массив чисел 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 / 0
Регистрация: 13.09.2011
Сообщений: 311
21.10.2011, 22:38  [ТС] #12
MrGluck, эх....я же вам объясняю с массивами никак(( мне его просто не зачтут..
0
aeshes
441 / 204 / 13
Регистрация: 07.10.2011
Сообщений: 462
21.10.2011, 22:39 #13
Вася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 / 0
Регистрация: 13.09.2011
Сообщений: 311
21.10.2011, 22:42  [ТС] #14
aeshes, спасибо) Теперь попробую всю эту информацию применить в создании программки. Еще раз спасибо всем кто откликнулся!
0
Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
13.11.2011, 20:23  [ТС] #15
Форумчане, выручайте! Попытался сейчас совместить все элементы программы воедино, но видимо что-то не правильно(( помогите исправить.

Добавлено через 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
13.11.2011, 20:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.11.2011, 20:23
Привет! Вот еще темы с ответами:

Бинарный файл - C++
Есть бинарный файл, заполненный числами в 16-ричной форме а также разного рода символами. Необходимо проверить есть ли сочетание FFFF, если...

Бинарный файл - C++
Ошибка strcpy(rb.dr, DateTimePicker1-&gt;Date.c_str()); Не могу понять, что за ошибка)

С++ Бинарный файл - C++
Нужно написать программу на visual studio 10 c++ которая записивала числа в файл, введеные числа. по несколько цифр в строчку. всего должно...

Бинарный файл - C++
Привет всем:) Помогите пожалуйста разобраться! Задача: Дан символьный файл. Определить входит ли в него сочетание abcdefgh. Найти число...


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

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

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