0 / 0 / 0
Регистрация: 02.04.2015
Сообщений: 2
1

Сделать функции заполнения исходного файла и обработки массива с записью в другой файл

02.04.2015, 12:31. Показов 766. Ответов 2
Метки нет (Все метки)

Здравствуйте! Требуется: Считать все числа из файла (количество чисел - произвольное) в динамический массив. Выполнить сортировку массива по возрастанию, используя алгоритм сортировки выбором. Полученный результат записать в другой файл. Предусмотреть в программе функции заполнения исходных файлов и обработки массивов с записью в другой файл Определить время работы алгоритма сортировки.
Я тут написал программу без функций но никак не могу разделить её на функции помогите пожалуйста.
C++ (Qt)
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
#include<stdio.h>
#include<stdlib.h>
 
int main()
{
    int k,i,j;
FILE *ptrfile;
k=0;
int s;
ptrfile=fopen("mass.txt","r+"); //считываемый файл
 
while ((fscanf(ptrfile, "%d",&s)!=EOF))
{    if(!ptrfile) break;    //чтобы не делал лишнего
        k+=1;
}
int *c = (int*) malloc(k*sizeof(int));  //создание динамического массива
 
rewind(ptrfile);    //перематываем файл для повторного чтения
for(i=0;i<k;i++)
{
    fscanf(ptrfile, "%d",&c[i]);
    printf("c[%d]=%d  ",i,c[i]);
}
 
for(i=0;i<k;i++)  // сортировка массива по возрастанию (алгоритм сортировки выбором)
    for(j=i+1;j<k;j++)
{
    int a=c[i];
    int b=c[j];
    if (b<a)
    {
        c[i]=b;
        c[j]=a;
    }
}
fclose(ptrfile);// Закрытие считываемого файла
ptrfile=fopen("outmass.txt","w");
for(i=0;i<k;i++)
{
    fprintf(ptrfile, " %d", c[i]);
}
fclose(ptrfile);
free(c); //убираем мусор
 
getchar();  //задержка консоли
}
Добавлено через 8 часов 59 минут
Наконец то разобрался после многочасавого копания в инете. Конечно мог написать как то криво и неэффективно. Если будут какие нибудь предложения по улучшению кода, то смело нажимайте "Ответить" я с удовольствием приму ваши советы. Всем спасибо. Вот собственно и код:
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
#include<stdio.h>
#include<stdlib.h>
#include <time.h>      
void ishod() // Функция записи в исходный файл
     {            
         int i,x;
         FILE *outfile;
 
 
         srand (time(NULL));
         outfile=fopen("mass.txt","w");
         x= rand() % 15 + 5;
         int *c = (int*) malloc(x*sizeof(int));
         for (i=0; i<x; i++)
            {
             c[i]=rand() % 100 ;
            fprintf(outfile, " %d", c[i]);
            }
            printf("Sozdan ishodnik s massivom:\n");
            for(i=0;i<x;i++)
        {
            printf("c[%d]=%d  ",i,c[i]);
        }
            printf("\n");
         fclose(outfile);
 
         return;
     }
void sosave() //функция сортировки и сохранения в файл
    {
    int k,i,j;
    FILE *ptrfile;
    clock_t time;
    k=0;
    int s;
    ptrfile=fopen("mass.txt","r+"); //открытие файла с исходными данными
 
    while ((fscanf(ptrfile, "%d",&s)!=EOF))
        {    
             if(!ptrfile) break;    //чтобы не делал лишнего
             k+=1;
        }
    int *c = (int*) malloc(k*sizeof(int));  //должен быть динамическим
 
    rewind(ptrfile);    //перематываем файл для повторного чтения
    for(i=0;i<k;i++)
        {
            fscanf(ptrfile, "%d",&c[i]);
        }
    time = clock();
    for(i=0;i<k;i++)
    for(j=i+1;j<k;j++)
    {
        int a=c[i];
        int b=c[j];
        if (b<a)
    {
        c[i]=b;
        c[j]=a;
    }
    }
    time = clock() - time;
    printf("Zatrachennoe vremya na sortirovku=%f",(double)time/CLOCKS_PER_SEC);
    fclose(ptrfile);// Закрытие считываемого файла
    printf("\n");
    printf("--------------------------Otsortirovannyi massiv--------------------------- \n");
    ptrfile=fopen("outmass.txt","w");
    for(i=0;i<k;i++)
    {
    fprintf(ptrfile, " %d", c[i]);
    printf("c[%d]=%d  ",i,c[i]);
    }
    fclose(ptrfile);
    free(c); //убираем мусор, когда уже не нужен (но не раньше =))
 
    }
 
int main()
{
    clock_t time2;
    time2 = clock();
printf("Kursovaya rabota Shaumukhametov A.F.\n");
printf("Startuet funkciya sozdaniyz ishodnika\n");
    ishod();
printf("Dlya prodoljenina najmite lubuyu knopku\n");
    getchar();
printf("Startuet funkciya sortirovki i sohraneniya \n");
    sosave();
    time2 = clock() - time2;
    printf("Zatrachennoe vremya na vsu progu=%f",(double)time2/CLOCKS_PER_SEC);
getchar();  //задержка консоли
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.04.2015, 12:31
Ответы с готовыми решениями:

Из исходного текстового файла все повторяющиеся слова переписать в другой файл удалив их из исходного
из исходного текстового файла все повторяющиеся слова переписать в другой файл удалив их из...

Произвести выборку из файла с записью в другой файл
Суть в следующем: Имеется лог файл содержащий информацию в следующем виде дан - какие-то данные ...

Сортировка элементов файла с записью в другой файл.
Есть файл с целыми числами. Нужно отсортировать значения (не используя массив) в порядке убывания и...

Считать из файла с последующей записью в другой файл
не хочется слишком активно злоупотреблять вниманием и добротой обитателей форума, но никак не...

2
7368 / 6289 / 2857
Регистрация: 14.04.2014
Сообщений: 27,251
02.04.2015, 12:51 2
Память почему не освобождаешь? В 13-й строке выделил, в конце нужно освободить.
Ну и в целом это в стиле C, который без ++, у тебя сделано.
1
0 / 0 / 0
Регистрация: 02.04.2015
Сообщений: 2
02.04.2015, 13:25  [ТС] 3
О спасибо большое))) Совсем проморгал)))
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.04.2015, 13:25
Помогаю со студенческими работами здесь

Нужно, чтобы в функции Main файла исходного кода происходил запуск обработки формы
Здравствуйте. Я только начала изучение windows forms и столкнулась со следующей проблемой. Мне...

Дан файл целых чисел. Записать в другой файл те элементы исходного файла, у которых ровно три четных делителя
Помогите найти ошибку, пожалуйста. Если ввести числа 2,4 и 8, выводит 4. А если ввести 8 и 18, то...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru