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

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

Войти
Регистрация
Восстановить пароль
 
Altorevil
Сообщений: n/a
#1

Сортировка чисел с использованием файлов - C++

08.04.2013, 18:12. Просмотров 247. Ответов 0
Метки нет (Все метки)

Доброго времени суток. Не первый день уже пытаюсь завершить задание, да вот работа с файлами меня подводит. Суть задания такова:
Ввести числа (я для этого использовал генератор) и записать их в файл. Реализовать две функции сортировки: пирамидальную и слиянием. Числа в функцию считать из файла, отсортировать, записать в файл (я сделал отдельный файл).

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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#include <fstream>
#include <stdlib.h>
#include <iostream>
#include <time.h>
#include <iomanip>
#include <conio.h>
#include <stdio.h>
#define maxn 100
 
struct data {
       int vek;}
       arr[10];
 
void printMatrix (int *x, const int S);
 
int load (struct data *t, char *filename);
void write (struct data *t, char *filename, int k);
 
void pyramidal (struct data *t, const int k);
void build (const int k, int r, int *x);
void sort_pyr (const int k, int *x);
void shifting (int left, int right, int *x);
void exchange (int i, int j, int *x); 
 
//void merge(int *y, int l, int r);
 
using namespace std;
 
int main() {
    const int N=10;
    int x[N], i, a, b;
    srand (time(NULL)); //Для генерації псевдовипадкових чисел використовується системний час
    
    cout << "Enter a: "; //Вибір нижньої межі генерованих чисел
    cin >> a;
    cout << "Enter b: "; //Вибір верхньої межі
    cin >> b;
    
    for (i=0; i<N; i++) {
    x[i]=a+rand()%(b-a+1); //Заповнення масиву псевдовипадковими числами згідно вказаних меж
    }    
    char y[maxn]="algorithm.txt";
    write(x, y, N);
    cout << "Entered array X: ";
    printMatrix(x, N);
    cout << "Piramidal sorted array: ";
    printMatrix(x, N);
    //cout << "Merge sorted array: ";
    /*merge (y, 0, N-1);
    printMatrix (y, N);*/    
   system ("pause");
    return 0; }
 
 
void printMatrix(int *x, const int S) { //Функція виведення масиву на екран
     cout << endl;
     for (int i=0; i<S; i++) {
             cout << setw (5) << x[i]; }
             cout << endl << endl; }
             
int load (struct data *t, char *filename) {
     int i=0;
     FILE *f=fopen (filename, "r");
     if (f==NULL) {
                  puts ("Error");
                  return 0; }
                  while (!feof(f)) {
                        fscanf (f, "%i", t[i].vek);
                        i++; }
                        fclose(f);
                      return i;}
             
void write (truct data *t, char *filename, const int k) {
    FILE *f=fopen (filename, "w");
    if (f) {
           for (int i=0; i<k; i++) {
               bool result = fwrite(&x[i], sizeof(int), 1, f);             
                          if (!result) {
                          cout << "Writing complete" << endl;}}}
                          fclose (f);
                          }
                          
void pyramidal (struct data *t, const int k) { //Опис функції пірамідального сортування
     int i;
     char filename[maxn]=("algorithm.txt");
     int x[k];
     for (i=0; i<k; i++) {
     x[i]=t[i].vek;}
     build (k/2+1, k-1, x);
     sort_pyr (k-1, x);
          }
     
void build (const int k, int r, int *x) { //Побудова піраміди
     shifting (k, r, x);
     if (k>0) {
              build (k-1, r, x);}}
              
void sort_pyr (const int k, int *x) { //Сортування піраміди
     exchange (0, k, x);
     shifting (0, k-1, x);
     if (k>1) {
              sort_pyr (k-1,x); }}
              
void shifting (int left, int right, int *x) { //Просіювання елементів
     int q, p, h;
     q=2*left+1;
     p=q+1;
     if (q <=right) {
           if (p<=right && x[p] >x[q]) {
                        q=p;}
                        if (x[left]<x[q]){
                                          exchange (left, q, x);
                                          shifting (q, right, x);}}}
                                          
void exchange (int i, int j, int *x) { //Процедура обміну двох елементів
     int tmp;
     tmp=x[i];
     x[i]=x[j];
     x[j]=tmp; }
     
 
   /*void merge(int *y, int l, int r) { //Сортування злиттям
    if (r == l)
        return;
    if (r - l == 1) { 
        if (y[r] < y[l])
            swap(y[r], y[l]);
        return;
    }
    int m = (r + l) / 2;
    merge(y, l, m);
    merge(y, m + 1, r);
    int buf[maxn];
    int xl = l;
    int xr = m + 1;
    int cur = 0;
    while (r - l + 1 != cur) {
        if (xl > m)
            buf[cur++] = y[xr++];
        else if (xr > r)
            buf[cur++] = y[xl++];
        else if (y[xl] > y[xr])
            buf[cur++] = y[xr++];
        else buf[cur++] = y[xl++];
 
    }
    for (int i = 0; i < cur; i++)
        y[i + l] = buf[i];
        }
                        
*/
Уже раз 5 переписывал программу, и это - не самый лучший вариант, ибо теперь в файл записываются символы.
Заранее благодарен.
P.S. Слияние специально закомментировал, дабы реализовать чтение/запись хотя бы с одной функцией
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2013, 18:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка чисел с использованием файлов (C++):

Как с использованием итераторов в массиве чисел найти количество чисел, меньших за введенное? - C++
Как при помощи итераторов в массиве чисел найти количество чисел, меньших за введенное?

Сортировка с использованием рекурсии - C++
Здравствуйте. Задание : Написать рекурсивную функцию сортировки массива. Помогите пожалуйста найти алгоритмическую ошибку, так как...

Сортировка с использованием OpenMP - C++
Ребят, помогите пожалуйста распараллелить с помощью OpenMP сортировку подсчетом (Counting Sort). Код последовательной версии: ...

Программирование с использованием файлов - C++
Помогите начинающему программисту: Распечатать анкетные данные студентов-отличников из интересующей вас группы ...

Программирование с использованием файлов - C++
#include &lt;iostream.h&gt; #include &lt;sstream&gt; #include &lt;conio.h&gt; FILE *fl; typedef struct { char Number; int Time; ...

Задача с использованием файлов - C++
Суть задачи в том, что во входном файле задается последовательность из n положительных и n отрицательных чисел, то есть общее количество их...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.04.2013, 18:12
Привет! Вот еще темы с ответами:

С использованием текстовых файлов - C++
помогите первокурснице..... Файл содержит целые числа. Вычислить сумму значений из файла, в двоичном представлении которых K...

Сортировка по убыванию с использованием указателя - C++
Все перепробовала, у меня никак не получается сделать сортировку по убыванию с указателем. Можете дописать часть кода? #include&lt;iostream&gt;...

Программирование с использованием внешних файлов - C++
Необходимо переделать данную программу, что бы &quot;Путь и имя файла вводились с клавиатуры&quot;. #include &quot;stdafx.h&quot; #include &lt;cstdio&gt; ...

Сортировка списка пар с использованием heap - C++
Для списка пар pair&lt;string,int&gt;, где первое число – имя пользователя, второе – сумма набранных балов, с использованием heap реализовать...


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

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

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