Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2013, 06:39   #1
MishkaSh
Пользователь
 
Регистрация: 31.03.2013
Сообщений: 21
По умолчанию Файловый ввод/вывод

Народ очень прощу, помогите. Нужно написать программу до завтра, а то отчислят. А я даже не знаю как ее написать. Вот само задание: Написать программу производящую замену указанного массива информации с позиции к до позиции m в файле на массив информации находящийся в этом же файле c позиции к+i до позиции m+i. Только там есть два нюанса: файл должен быть бинарным и должен быть более 5 гигов, то есть программа должна открывать файлы больше 5 гигов, к примеру около 10 и там выполнять работу с массивом. Помогите народ, буду очень благодарен.
MishkaSh вне форума Ответить с цитированием
Старый 29.09.2013, 07:51   #2
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Что удалось сделать самостоятельно???
Кстати язык какой?
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 29.09.2013, 07:58   #3
MishkaSh
Пользователь
 
Регистрация: 31.03.2013
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Bugrimov Посмотреть сообщение
Что удалось сделать самостоятельно???
Кстати язык какой?
Нет сам не могу, язык С++
MishkaSh вне форума Ответить с цитированием
Старый 29.09.2013, 08:34   #4
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от MishkaSh Посмотреть сообщение
Нет сам не могу, язык С++
Сколько платишь?
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 29.09.2013, 09:08   #5
MishkaSh
Пользователь
 
Регистрация: 31.03.2013
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
Сколько платишь?
А сколько надо?
MishkaSh вне форума Ответить с цитированием
Старый 29.09.2013, 09:41   #6
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от MishkaSh Посмотреть сообщение
А сколько надо?
Я вот думаю. Задачка-то плёвая. Я дам некоторые направления, попытайся сам, для начала.

Шаблон программы:
Код:
#include <iostream.h>
#include <stdlib.h>

int main()
{
// здесь вычисления

system("PAUSE");
return 0;
}
Дальше делаем так:
1. Получаем размер файла и выводим его на консоль.
2. Просим пользователя ввести начальный и конечный адрес перемещаемого массива.
3. Просим пользователя, ввести начальный адрес, куда нужно массив переместить. (конечный запрашивать не нужно, т.к. он уже задан первым вводом)
4. Проверяем, не выходит ли диапазон за пределы файла. Если выходит, к пункту 2.
5. Организуем два потока, входной и выходной.
6. Берём байт из первого потока и записываем во второй.
7. Если конец диапазона, - выход.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 29.09.2013, 09:55   #7
MishkaSh
Пользователь
 
Регистрация: 31.03.2013
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
Я вот думаю. Задачка-то плёвая. Я дам некоторые направления, попытайся сам, для начала.

Шаблон программы:
Код:
#include <iostream.h>
#include <stdlib.h>

int main()
{
// здесь вычисления

system("PAUSE");
return 0;
}
Дальше делаем так:
1. Получаем размер файла и выводим его на консоль.
2. Просим пользователя ввести начальный и конечный адрес перемещаемого массива.
3. Просим пользователя, ввести начальный адрес, куда нужно массив переместить. (конечный запрашивать не нужно, т.к. он уже задан первым вводом)
4. Проверяем, не выходит ли диапазон за пределы файла. Если выходит, к пункту 2.
5. Организуем два потока, входной и выходной.
6. Берём байт из первого потока и записываем во второй.
7. Если конец диапазона, - выход.
Я уже делал сам, препод не принял. Щас посоветовался с ребятами сказали надо через fseek сделать, а через него я не знаю как
MishkaSh вне форума Ответить с цитированием
Старый 29.09.2013, 10:03   #8
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Так выкладывай, чё не получилось. Я конечно телепат, но не до такой-же степени.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 29.09.2013, 13:04   #9
MishkaSh
Пользователь
 
Регистрация: 31.03.2013
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
Так выкладывай, чё не получилось. Я конечно телепат, но не до такой-же степени.
Код:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include<ctime>

using namespace std;
int main()
{
setlocale (LC_ALL, "RUS");
srand(time(NULL));
int m,k,j,y,i,l;
int c[100000];
FILE *f;
long long position;

 if((f=fopen("file", "wb+"))==NULL) 
 {
    printf("Ошибка при открытии файла.\n");
    exit(1);
 }
 int b=100000;
 for (i=0; i<10000; i++)
 {
for (j=0; j<b; j++)
{

	c[j]=rand() % 1000000;
	fwrite(&c[j], sizeof(int), 1, f);
}
 }
if(fclose(f))
	printf("Ошибка при закрытии файла.\n");
metka:
 cout<<"Введите элементы, которые будем заменять:\n"<<"c k=";cin>>k;cout<<"по m=";cin>>m;cout<<" на элементы от k+i до m+i, i=";cin>>i;
 if (m+i>b)
 {
	 cout<<"перебор, возможно слишком большие k, m или i, введите эти значения заново";
	 goto metka;
 }
 if (k>m)
 {
	 cout<<"почему k больше m? Введите эти значения заново!";
	 goto metka;
 }
  if((f=fopen("file", "rb"))==NULL) 
  {
    printf("Ошибка при открытии файла.\n");
    exit(1);
  }
  for (j=0;j<k-1;j++)
  {
	  fread(&c[j], sizeof(int), 1, f);
	
  }
  for (y=0;y<=m-k;y++)
  {
	  l=k+y-1;
	  fread(&c[k+i+y-1], sizeof(int), 1, f);
  }
  for (i=0; i<10000; i++)
  {
	  if (i=0)
	  {
  for (j=m;j<b; j++)
  {
	  fread(&c[j], sizeof(int), 1, f);
  }
	  }
	  else
	  {
		  for (j=0;j<b; j++)
		  {
			  fread(&c[j], sizeof(int), 1, f);
		  }
	  }
  }
  system("pause");
position =_ftelli64( f );
      printf( "Position after trying to read: %ld\n",
              position );
  if(fclose(f))
	printf("Ошибка при закрытии файла.\n");
if((f=fopen("file", "wb+"))==NULL) {
    printf("Ошибка при открытии файла.\n");
    exit(1);
 }
for (i=0; i<10000; i++)
{
for (j=0; j<b; j++)
	{
fwrite(&c[j], sizeof(int), 1, f);
	}
}
if(fclose(f))
	printf("Ошибка при закрытии файла.\n");
return 0;
}
MishkaSh вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Файловый ввод-вывод. three_cats Общие вопросы C/C++ 4 01.10.2012 09:39
Файловый ввод-вывод Кристюня Общие вопросы C/C++ 9 29.11.2010 20:02
Файловый ввод-вывод andrey-v-isaev Общие вопросы C/C++ 1 02.05.2010 19:54
Файловый ввод/вывод -=$V=- Общие вопросы C/C++ 8 13.12.2008 21:11
файловый ввод/вывод kot111 Общие вопросы C/C++ 1 04.02.2008 17:45