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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Вася1q
 Аватар для Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
21.10.2011, 22:02     Задача про бинарный файл.. #1
Добрый вечер)
Вот возникла очередная проблемка с задачей по СИ++. Задача звучит таким образом:
Создать бинарный файл f и записать в него действительные числа. Организовать просмотр бинарного файла и его обработку: найти сумму чисел, расположенных перед первым минимальным.
Начало задачи я смогу, как мне кажется выполнить самостоятельно, но я все никак не пойму, как именно искать сумму чисел, расположенных перед первым минимальным. ??? Объясните пожалуйста. Можно на русском))) НО лучше бы на СИ++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-comrade-
355 / 356 / 42
Регистрация: 11.06.2010
Сообщений: 703
21.10.2011, 22:06     Задача про бинарный файл.. #2
Цитата Сообщение от Вася1q Посмотреть сообщение
Начало задачи я смогу, как мне кажется выполнить самостоятельно
Покажите
Вася1q
 Аватар для Вася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 минуту
Пытаюсь делать по аналогии, все упирается в нахождении суммы чисел, расположенных перед первым минимальным.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,405
21.10.2011, 22:16     Задача про бинарный файл.. #4
Создаешь цикл, который считывает и сравнивает числа и в итоге получаешь число допустим min_index, в котором хранится номер минимального числа (если при сравнении не рассматривать >= и <=), то это будет номер первого минимального числа. Далее создаешь еще один цикл, который изменяет свой параметр от 0 до min_index. Внутри цикла суммируется число. В итоге это число и будет искомым.
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
21.10.2011, 22:18     Задача про бинарный файл.. #5
Попробуй сделать так: сначала открываешь файл, просматриваешь его до конца и находишь в нем минимум, запоминаешь его или его позицию. Закрываешь файл. Открываешь заново и просматриваешь сначала, добавляя каждое прочитанное число к сумме, пока не дойдешь до минимума. Выводишь сумму на экран.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,405
21.10.2011, 22:20     Задача про бинарный файл.. #6
Можно изначально считать числа в массив, а потом работать с ним. Тогда не прийдется считывать числа с файла еще раз во втором цикле, но потребуется выделение памяти под этот массив. Делай как хочешь.
Вася1q
 Аватар для Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
21.10.2011, 22:26  [ТС]     Задача про бинарный файл.. #7
MrGluck, не...массивы мы еще не изучали. Но с ним можно было бы упростить решение.

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

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

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

Добавлено через 1 минуту
MrGluck, я и так собираюсь начать учить массивы, но срок на эту лабу поджимает...и пока хотя бы без массива сдать желательно.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,405
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];
    }
Вася1q
 Аватар для Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
21.10.2011, 22:38  [ТС]     Задача про бинарный файл.. #12
MrGluck, эх....я же вам объясняю с массивами никак(( мне его просто не зачтут..
aeshes
 Аватар для aeshes
437 / 200 / 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 на примере массива тебе показал суть поиска
Вася1q
 Аватар для Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
21.10.2011, 22:42  [ТС]     Задача про бинарный файл.. #14
aeshes, спасибо) Теперь попробую всю эту информацию применить в создании программки. Еще раз спасибо всем кто откликнулся!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.11.2011, 20:23     Задача про бинарный файл..
Еще ссылки по теме:

Бинарный файл C++
Бинарный файл C++
C++ Бинарный файл

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

Или воспользуйтесь поиском по форуму:
Вася1q
 Аватар для Вася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 минуты
Ну помогите плиз!!
Yandex
Объявления
13.11.2011, 20:23     Задача про бинарный файл..
Ответ Создать тему
Опции темы

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