IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> Файлы (вместо типизированных), с++
мисс_граффити
сообщение 26.10.2006 21:07
Сообщение #1


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


есть алгоритм многофазной сортировки, которая работает с файлами. в делфи это был file of integer.
поскольку в с++ абсолютного аналога нет, возник вопрос - что выбрать из имеющихся средств?
Запуталась sad.gif
В чем разница между парами:
fread-fwrite; (для всего подряд?)
fscanf-fprintf; (форматированный ввод/вывод? то есть %d - и будет мне десятичное целое число, как и хочется?)
fgets-fputs; (это вроде для строк.... то есть потом можно сделать IntToStr...)

подскажете?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
мисс_граффити
сообщение 31.10.2006 16:40
Сообщение #2


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


void MergeSort(void)
{
const T=3,p=2;
int suma=0,sumd=0;
int A[T],D[T],TAPE[T];
MakeFile();
Start(T,p,A,D,TAPE,&suma,&sumd);
FILE *Lenta[3];
Lenta[TAPE[T-1]]=fopen("L2.dat","wb+");
for (int j=0;j<T-1;j++)
Lenta[TAPE[j]]=fopen(("L"+IntToStr(j)+".dat").c_str(),"rb");
int Dmax=0, Dost[3];
int sort[3];
while (Dmax<suma)
{
while ( ((fread(&sort[0],sizeof(sort[0]),1,Lenta[TAPE[0]]))!=0)&&((fread(&sort[1],sizeof(sort[1]),1,Lenta[TAPE[1]]))!=0) )
//вот здесь считывается лишнее - одна лента кончилась, а вторая еще нет
{
for (int j=0;j<T;j++)
Dost[j]=D[j];
int zerro=0;
while (zerro<T-1)
{
int min=MaxInt;
int mini;
for (int i=0;i<T-1;i++)
if ((sort[TAPE[i]]<=min)&&(Dost[TAPE[i]]>0))
{
min=sort[TAPE[i]];
mini=i;
}
fwrite(&min,sizeof(min),1,Lenta[TAPE[T-1]]);
Dost[TAPE[mini]]--;
if (Dost[TAPE[mini]]>0)
fread(&sort[TAPE[mini]],sizeof(sort[mini]),1,Lenta[TAPE[mini]]);
else
{
sort[TAPE[mini]]=MaxInt;
zerro++;
}
}
}
for (int i=0;i<T-1;i++)
if (feof(Lenta[TAPE[i]])) //если кончилась лента....
{
D[TAPE[T-1]]=0;
for (int j=0;j<T-1;j++)
D[TAPE[T-1]]+=D[TAPE[j]];
Dmax=D[TAPE[T-1]];
int zap;
fclose(Lenta[TAPE[T-1]]);
Lenta[TAPE[T-1]]=fopen(("L"+IntToStr(TAPE[T-1])+".dat").c_str(),"rb");
int j=TAPE[i];
TAPE[i]=TAPE[T-1];
TAPE[T-1]=j;
fclose(Lenta[TAPE[T-1]]);
Lenta[TAPE[T-1]]=fopen(("L"+IntToStr(TAPE[T-1])+".dat").c_str(),"wb+");
}
else
fseek(Lenta[TAPE[i]],-1*sizeof(i),SEEK_CUR); //а если не кончилась, надо вернуться к предыдущему эл-ту...
}

fcloseall;
}


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
мисс_граффити   Файлы (вместо типизированных)   26.10.2006 21:07
volvo   Ты забыла еще одну пару: fgetc/fputc - посимвольно...   26.10.2006 21:25
мисс_граффити   спасибо!   26.10.2006 22:03
мисс_граффити   Пишу: void MakeFile (void) { FILE *f = fopen(...   29.10.2006 18:36
volvo   Потому, что нужно анализировать результат, возвращ...   29.10.2006 19:12
мисс_граффити   tnx. ...и еще вопрос возник: как можно узнать разм...   29.10.2006 22:50
volvo   Из хелпа Turbo C++ 3.0: long filesize(FILE *stre...   29.10.2006 22:56
мисс_граффити   понимаю, что уже замучала.... но опять с вопросами...   30.10.2006 18:17
мисс_граффити   ...нашла ошибку. а вот как ее избежать... как можн...   30.10.2006 22:03
volvo   Юля, а при чем здесь sizeof(int)? Надо делать size...   31.10.2006 14:16
мисс_граффити   а что есть struct?... у меня ситуация какая: при н...   31.10.2006 16:00
volvo   Тогда приведи описания Lenta и TAPE ... Так вот п...   31.10.2006 16:15
мисс_граффити   void MergeSort(void) { const T=3,p=2; int suma=0,s...   31.10.2006 16:40
volvo   Единственное, что приходит в голову - попробуй вот...   31.10.2006 18:38
мисс_граффити   уверена... 0 возвращает. типа промоталась. а считы...   31.10.2006 19:49
volvo   Юля, присоединить весь проект с данными вместе (в ...   31.10.2006 21:03
мисс_граффити   вот... лр4.rar дубль 1.rar - то же самое на делфи....   31.10.2006 21:40
volvo   Так... Значит, я добил эту программу (в смысле, он...   1.11.2006 18:39
мисс_граффити   Супер! Спасибо огромное.... Буду разбираться.....   1.11.2006 22:08


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 22.07.2025 13:31
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"