Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
1 / 1 / 0
Регистрация: 10.01.2016
Сообщений: 9
1

Отсортировать по возрастанию массив, заданный в виде файла

11.01.2016, 20:56. Показов 2320. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть задание: отсортировать по возрастанию массив, заданный в виде файла. Задание необходимо выполнить двумя способами: с использованием классических массивов и с помощью указателей. Помогите, пожалуйста.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.01.2016, 20:56
Ответы с готовыми решениями:

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

Отсортировать все значения массива по возрастанию и поместить в таком виде в другой массив
Всем приятного времени суток господа :) Мне нужно реализовать в программный код такую задачку: Дан...

прочитать массив из файла и отсортировать его по возрастанию
Доброго времени суток! у меня такая задача... прочитать массив из файла и отсортировать его по...

Прочитать массив из файла, отсортировать по возрастанию чётные элементы
Записать в один файл массив, содержащий 20 случайных чисел от -10 до 10. Прочитать массив из файла,...

4
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
11.01.2016, 23:56 2
Цитата Сообщение от July_N Посмотреть сообщение
массив, заданный в виде файла
Это, простите, как? На входе файл, содержащий массив чисел? Двоичный, текстовый? Просто набор чисел, или первым записано количество чисел в массиве? Числа целые, вещественные?

Не по теме:

Нравится мне выражение: вероятность положительного результата прямо пропорциональна ясности поставленной задачи.



Добавлено через 2 минуты
Цитата Сообщение от July_N Посмотреть сообщение
с использованием классических массивов
И, если можно, в двух словах - что это за "классические массивы", с которыми указатели нельзя использовать?
0
1 / 1 / 0
Регистрация: 10.01.2016
Сообщений: 9
12.01.2016, 00:24  [ТС] 3
текст задания контрольной работы изложен слово в слово. По части файла, предполагаю, есть смысл использовать текстовый файл с набором чисел, но конкретных требований здесь нет. А вот по части "классических массивов", к сожалению, ничего не могу пояснить.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
12.01.2016, 01:29 4
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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
#include <stdio.h>
#include <stdlib.h>
 
#define ARRAY_BLOCK_SIZE (32)
 
typedef struct ARRAY {
    int * data;
    size_t elements;
    size_t volume;
} array_t;
 
array_t * array_new(void) {
    array_t * arr = malloc(sizeof(array_t));
    
    if ( ! arr )
        return NULL;
        
    arr->elements = 0;
    arr->volume = ARRAY_BLOCK_SIZE;
    arr->data = malloc(sizeof(int) * ARRAY_BLOCK_SIZE);
    
    if ( ! arr->data ) {
        free(arr);
        return NULL;
    }
    
    return arr;
}
 
void array_free(array_t * array) {
    free(array->data);
    free(array);
}
 
int array_add(array_t * array, const int value) {
    if ( array->elements == array->volume ) {
        array->volume += ARRAY_BLOCK_SIZE;
        int * tmp = realloc(array->data, sizeof(int) * array->volume);
        if ( ! tmp ) {
            array->volume -= ARRAY_BLOCK_SIZE;
            return -1;
        }
        else
            array->data = tmp;
    }
    
    array->data[array->elements++] = value;
    
    return 0;
}
 
array_t * array_from_file(const char * filename) {
    array_t * arr;
    FILE * f;
    int n;
    
    if ( ! ( f = fopen(filename, "r") ) )
        return NULL;
        
    if ( ! ( arr = array_new() ) ) {
        fclose(f);
        return NULL;
    }
    
    while ( fscanf(f, "%d", &n) == 1 ) {
        if ( array_add(arr, n) ) {
            array_free(arr);
            fclose(f);
            return NULL;
        }
    }
    
    fclose(f);
    return arr;
}
 
int array_to_file(array_t * array, const char * filename) {
    size_t i = 0;
    FILE * f = fopen(filename, "w");
    
    if ( ! f )
        return -1;
    
    while ( i < array->elements ) {
        if ( fprintf(f, "%d ", array->data[i++]) == EOF ) {
            fclose(f);
            return -1;
        }
    }
    fprintf(f, "\n");
    
    return ( ferror(f) | fclose(f) );
}
 
void array_sort(array_t * array, int (*cmpfunc)(const void *, const void *)) {
    qsort(array->data, array->elements, sizeof(int), cmpfunc);
}
 
int asccmp(const void * a, const void * b) {
    return *(int*)a - *(int*)b;
}
 
#define FILE_NAME "numbers.txt"
 
int main(void) {
    array_t * array = array_from_file(FILE_NAME);
    
    if ( ! array ) {
        fprintf(stderr, "Can't create array from file!\n");
        return 1;
    }
    array_sort(array, asccmp);
    if ( array_to_file(array, FILE_NAME) ) {
        fprintf(stderr, "Can't save array to file!\n");
        return 1;
    }
    array_free(array);
    
    return 0;
}
Код
~/cpp/numbers $ gcc dyn_array.c 
~/cpp/numbers $ cat > numbers.txt
9 7 8 1 4 2 6 5 3 3 1 7 8
~/cpp/numbers $ ./a.out 
~/cpp/numbers $ cat numbers.txt
1 1 2 3 3 4 5 6 7 7 8 8 9 
~/cpp/numbers $
0
737 / 542 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
13.01.2016, 20:28 5
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

July_N, тебе осталось только создать текстовый файл с массивом в каталоге программы,и обзови его input.Не забудь,размер массива должен соответствовать значению константы N в программе
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
#include <stdio.h>
#include <stdlib.h>
const int N = 10;
int main()
{
    int i, j, c, A[N];
    FILE *fp;
    fp = fopen("input.txt", "r");
    if(fp == NULL){
        printf("Net faila dannyh\n");
        return 1;
    }
    for(i = 0; i < N; ++i)
        if(1 != fscanf(fp, "%d", &A[i])){
        printf("Ne hvataet dannyh v faile\n");
        return 1;
        }
    fclose(fp);
    for(i = 0; i < N - 1; ++i){
        for(j = N - 2; j >= i; --j)
            if(A[j] > A[j + 1]){
                c = A[j];
                A[j] = A[j + 1];
                A[j + 1] = c;
            }
    }
    printf("otsortirovanniy massiv\n");
    for(i = 0; i < N; ++i)
        printf("%d ", A[i]);
    return 0;
}
0
13.01.2016, 20:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.01.2016, 20:28
Помогаю со студенческими работами здесь

Массив считать из файла, отсортировать по возрастанию и записать в новый файл
Создаем текстовый файл из num строК, каждая строка содержит трехразрядное число сгенерированное,...

Отсортировать массив по убыванию, затем добавить недостающий элемент и отсортировать массив по возрастанию
2) В массиве a ...a встречаются по одному разу все целые числа от 0 до n, кроме одного. За n...

Прочитать из файла « File 1. dat » данные в массив символов, отсортировать данный массив по возрастанию и записать результат в « File 2. dat »
Напишите программы на Паскале! 1. Используя ввод с клавиатуры создать файл « File 1. dat » ,...

Отсортировать заданный массив по столбцам
Доброго времени суток! Суть задачи: создать массив, ввести построчно элементы массива и...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru