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

Естественное слияние из n файлов - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ При запуске .exe-файла окно очень быстро пропадает http://www.cyberforum.ru/cpp-beginners/thread303661.html
создал программу в Turbo C 2.0 она работает, но при запуске .exe-файла окно очень быстро пропадает...подскажите почему??
C++ Комплексные чилса Вот само задание лабы: Составить описание класса для представления комплексных чисел с возможностью задания вещественной и мнимой частей как числами типов double, так и целыми числами. Обеспечить выполнение операций сложения, вычитания и умножения комплексных чисел. Можете объяснить где в ней находиться: 1)вещественная, мнимая часть 2)тип double и целые числа Файл Main.cpp #include... http://www.cyberforum.ru/cpp-beginners/thread303657.html
C++ Описать класс с именем TRAIN
.Описать класс с именем TRAIN, содержащий следующие поля: -название пункта назначения; -номер поезда; -время отправления. 2.Написать программу, выполняющую следующие действия: -d. ввод с клавиатуры данных в массив, состоящий из восьми элементов типа TRAIN; записи должны быть размещены в алфавитном порядке по названиям пунктов назначения; -e. вывод на экран информации о поездах,...
C++ текстовый файл
имеется текстовый файл. переписать в другой файл те строки , в которых имеется более 30 символов
C++ Переписать строки файла в обратном порядке в новый файл http://www.cyberforum.ru/cpp-beginners/thread303608.html
имеется текстовый файл. переписать его строки в обратном порядке(справа налево) в другой файл . порядок строк во втором файле должен быть обратным по отношению к порядку строк в заданном файле.
C++ Создать класс с двумя полями и конструктором Напишите пожалуйста класс содержащий два поля: фирма машины(строка), цена(число); конструктор и методы ввода/вывода. Мой зачет в ваших руках, откликнетесь пожалуйста!!! Благодарю заранее. подробнее

Показать сообщение отдельно
BUMER
 Аватар для BUMER
157 / 12 / 0
Регистрация: 01.04.2009
Сообщений: 103
24.05.2011, 14:40     Естественное слияние из n файлов
Программа должна отсортировать текстовый файл, используя при этом дополнительные 2n файлов, путем естественного слияния.

Всегда сам все задачи делал, но сейчас уже в полном ступоре. Буду рад любой помощи. Если у кого есть уже готовый код - вообще расцелую В общих чертах я в алгоритме вроде разобрался, сейчас уперся в одну проблему. Создал 2 массива указателей f1 и f2, в которых должны храниться указатели на файлы. При пошаговом просмотре видно, что эти указатели присваиваются как-то не так. И дальше, при передаче их в функцию sliv записывать в эти файлы что бы то ни было программа вообще не хочет. Кто знает, в чем тут дело?

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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include <conio.h>
#include <stdio.h>
#include <string>
 
int min(int *m, int n)
{
    int i=0, a;
    while(m[i]==-1) i++;
    a=i;
    while(i<n-1)
    {
        i++;
        while(m[i]==-1)
        {
            if(i=n-1) return a;;
            i++;
        }
        if(m[i]<m[a]) a=i;
    }
    return a;
}
 
void sliv(FILE **from, FILE **to, int n)
{
    int m1[5], m2[5], i=0, q=0, j=0, minim;
    for(j=0;j<n;j++)
    {
        fscanf(from[j],"%d", &m1[j]);
        if(feof(from[j])) {m1[j]=-1; m2[j]=-1; q++;}
        else 
        {
            fscanf(from[j],"%d", &m2[j]);
            if(feof(from[j])) m2[j]=-1;
        }
    }
    while(q<n)
    {
        while(q<n)
        {
            minim=min(m1,n);
            if(m1[minim]<=m2[minim])
            {
                fprintf(to[i],"%d ",m1[minim]);
                m1[minim]=m2[minim];
                fscanf(from[minim],"%d",&m2[minim]);
                if(feof(from[minim])) m2[minim]=-1;
            }
            else
            {
                fprintf(to[i],"%d ",m1[minim]);
                m1[minim]=-1;
                q++;
            }
        }
        for(j=0;j<n;j++) m1[j]=m2[j];
        for(j=0;j<n;j++)
        {
            fscanf(from[j],"%d", &m2[j]);
            if(feof(from[j])) m2[j]=-1;
            else q--;
        }
        i++;
    }
    fcloseall();
}
 
void main()
{
    char name[10][3], fk[2]; 
    FILE *f1[5], *f2[5], *mf; bool k=false;
    int n, i, x, y, j=0, m1[5], m2[5], q=2; 
    printf("Vvedite n: "); scanf("%d", &n);
    //m1=new int[n];
    //m2=new int[n];
    for(i=0;i<2*n;i++)
    {
        name[i][0]='f';
        name[i][1]='0'+i;
        name[i][2]='\0';
    }
    mf=fopen("f.txt", "r");
    for(i=0;i<n;i++) f1[i]=fopen(name[i],"w");
    fscanf(mf,"%d",&x);
    i=0;
    while(!feof(mf))
    {
        fscanf(mf,"%d",&y);
        fprintf(f1[i],"%d ",x);
        if(x>y)i++; i%=n;
        x=y;
    }
    fprintf(f1[i],"%d ",y);
    fcloseall();
    
    while(q>1)
    {
        for(i=0;i<n;i++)
        {
            if(k)
            {
                f1[i]=fopen(name[i],"r");
                f2[i]=fopen(name[i+n],"w");
            }
            else
            {
                f2[i]=fopen(name[i],"r");
                f1[i]=fopen(name[i+n],"w");
            }
        }
        if(k) sliv(f1,f2,n);
        else sliv(f2,f1,n);
        k=!k;
        for(i=0,q=0;i<n;i++) 
            if(k) {if(!feof(f1[i])) q++;}
            else if(!feof(f2[i])) q++;
    }
    getch();
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 15:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru