Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
 Аватар для Бо
5 / 5 / 2
Регистрация: 08.12.2009
Сообщений: 158

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

29.05.2010, 19:32. Показов 3037. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дан файл вещественных чисел. Создать файл целых чисел, содержащий номера всех локальных экстремумов исходного файла в порядке убывания.
помогите плиз кто чем может.вот у меня даж не получаеться перенести в новый файл в порядке возрастаниятуплю
кто чем может хелп)

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
#include <stdio.h>
#include <stdlib.h>
#define a 100
#define FIN_NAME "1.txt"
#define FOUT_NAME "2.txt"
 
int main()
{
        FILE *fin, *fout;
        float num;
        int cnt;
        
        fin = fopen(FIN_NAME, "r");      
        fout = fopen(FOUT_NAME, "w");
        cnt=0;     
        while ( fscanf(fin, "%f", &num) == 1 )
        {
            if ( cnt++)
            {
                if ( (num-1)>num<(num+1)  ||  (num-1)<num>(num+1))
                {
                        if ( fprintf(fout, "%.1f\n", cnt) < 0 )
                        {
                                perror("fprintf");
                                fclose(fin);
                                fclose(fout);
                                exit(1);
                        }
                }
        }
        }
         fclose(fin);
         fclose(fout);
         return 0;
}
Добавлено через 8 часов 54 минуты
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
#include <stdio.h>
#include <stdlib.h>
#define a 100
#define FIN_NAME "1.txt"
#define FOUT_NAME "2.txt"
 
int main(void)
{
        FILE *fin, *fout;
        float num;
        int i,v;
        
        fin = fopen(FIN_NAME, "r");      
        fout = fopen(FOUT_NAME, "w");
             v=fstrlen(fin);
        while ( fscanf(fin, "%f", &num) == 1 )
        {
            for(i=v;;i--)
                if ( (num-1)>num<(num+1)  ||  (num-1)<num>(num+1))
                {
                        if ( fprintf(fout, "%.1f\n", i) < 0 )
                        {
                                perror("fprintf");
                                fclose(fin);
                                fclose(fout);
                                exit(1);
                        }
                }
        }
}
вот типа так???
C
1
 v=fstrlen(fin);
я знаю что тут надо какуето функцию для файла наподобии.какую??
помогите кто чем может
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.05.2010, 19:32
Ответы с готовыми решениями:

Дан файл вещественных чисел. Создать файл целых чисел, содержащий номера всех локальных экстремумов исходного файла в порядке убывания
File22. Дан файл вещественных чисел. Создать файл целых чисел, содержащий номера всех локальных экстремумов исходного файла в порядке...

Создать файл целых чисел, содержащий номера всех локальных максимумов исходного файла в порядке возрастания
1.Создать файл целых чисел содержащий номера всех локальных максимума исходного файла в порядке возрастания . 2.Даны 4 файла целых...

Создать файл целых чисел, содержащий номера всех локальных максимумов исходного файла в порядке возрастания
Добрый вечер! Помогите пожалуйста! Завтра экзамен:cry: Не правильно работает программа, выводит не те числа, программа должна быть с...

19
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,977
01.06.2010, 20:09
Цитата Сообщение от Бо Посмотреть сообщение
v=fstrlen(fin);
Забавно...
C
1
2
3
4
5
6
7
8
...
FILE *f;
long len;
/* открытие файла, проверка, etc... */
fseek(f, 0, SEEK_END);
len = ftell(f);
rewind(f);
/* в len длинна файла в байтах */
но это для двоичных файлов (или открытых, как двоичные: f = fopen(FILE_NAME, "rb")), в текстовых в винде об символ перевода строки спотыкаться будет...
1
 Аватар для Бо
5 / 5 / 2
Регистрация: 08.12.2009
Сообщений: 158
01.06.2010, 20:27  [ТС]
Цитата Сообщение от easybudda Посмотреть сообщение
но это для двоичных файлов (или открытых, как двоичные: f = fopen(FILE_NAME, "rb")), в текстовых в винде об символ перевода строки спотыкаться будет...
а как тада быть??
вот изменил
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
#include <stdio.h>
#include <stdlib.h>
#define a 100
#define FIN_NAME "1.txt"
#define FOUT_NAME "2.txt"
 
int main(void)
{
        FILE *fin, *fout;
        long len;
        float num;
        int i;
        
        fin = fopen(FIN_NAME, "r");
        fseek(fin, 0, SEEK_END);
        len = ftell(fin);
        rewind(fin);
 
        fout = fopen(FOUT_NAME, "w");
        while ( fscanf(fin, "%f", &num) == 1 )
        {
            for(i=len;;i--)
                if ( (num-1)>num<(num+1)  ||  (num-1)<num>(num+1))
                {
                        if ( fprintf(fout, "%.1f\n", i) < 0 )
                        {
                                perror("fprintf");
                                fclose(fin);
                                fclose(fout);
                                exit(1);
                        }
                }
        }
        fclose(fin);
        fclose(fout);
}
,а мне заполняет новый файл 0.0
причем таких нулей очень много
что делать?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,977
01.06.2010, 20:32
Цитата Сообщение от Бо Посмотреть сообщение
номера всех локальных экстремумов
вот с этого места поподробнее...
1
 Аватар для Бо
5 / 5 / 2
Регистрация: 08.12.2009
Сообщений: 158
01.06.2010, 20:38  [ТС]
Цитата Сообщение от easybudda Посмотреть сообщение
вот с этого места поподробнее...
вы имеете ввиду что это значит?
Создать файл целых чисел, содержащий номера всех локальных экстремумов исходного файла в порядке убывания (локальным минимумом называется элемент, который меньше своих соседей, локальным максимумом называется элемент, который больше своих соседей).
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,977
01.06.2010, 20:56
Бо, всё равно не понятно... Пример приведите из нескольких чисел с обозначением - какие там из них экстремумы, или как их там...
1
 Аватар для Бо
5 / 5 / 2
Регистрация: 08.12.2009
Сообщений: 158
01.06.2010, 21:43  [ТС]
Цитата Сообщение от easybudda Посмотреть сообщение
Пример приведите из нескольких чисел с обозначением - какие там из них экстремумы, или как их там...
вот допустим:
1.3
2.3
6.6
3.2
1.8
9.2
5.7
7.5
2.2


локальный максимум:6.6 , 9.2 и 7.5
локальный минимум:1.8 и 5.7
а вместе они локальные экстремумы

Добавлено через 39 минут
ну так как тут быть?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,977
02.06.2010, 01:52
Цитата Сообщение от Бо Посмотреть сообщение
Дан файл вещественных чисел. Создать файл целых чисел, содержащий номера всех локальных экстремумов исходного файла в порядке убывания.
Если я правильно понял, их номера ещё и в обратном порядке от последнего к первому записать надо? Если так, то учитывая, что первый - это первый, а не нулевой, вот:
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 <stdio.h>
#include <stdlib.h>
 
typedef struct NODE {
    double val;
    struct NODE * prev;
    struct NODE * next;
    size_t pos;
} node_t;
 
node_t * new_node(const double val) {
    node_t * node;
    if ( ( node = (node_t*)malloc(sizeof(node_t)) ) == NULL )
        return NULL;
    node->val = val;
    node->next = NULL;
    node->prev = NULL;
    node->pos = 0;
    return node;
}
 
int is_it(const node_t * node) {
    if ( ! node->prev || ! node->next )
        return 0;
    return ( ( node->val > node->prev->val && node->val > node->next->val) ||
             ( node->val < node->prev->val && node->val < node->next->val ) );
}
 
void delete_nodes(node_t * node) {
    node_t * tmp;
    while ( node ) {
        tmp = node->next;
        free(node);
        node = tmp;
    }
}
 
#define MIN_NODES 3
#define FIN_NAME "in.txt"
#define FOUT_NAME "out.txt"
 
int main(void){
    node_t * first, * last, * current;
    FILE * fin, * fout;
    double val;
 
    first = last = NULL;
    if ( ( fin = fopen(FIN_NAME, "r") ) == NULL ) {
        perror("fopen");
        exit(EXIT_FAILURE);
    }
 
    while ( fscanf(fin, "%lf", &val) == 1 ) {
        if ( ! first ) {
            if ( ( first = new_node(val) ) == NULL ) {
                fprintf(stderr, "Can't create a new node!\n");
                exit(EXIT_FAILURE);
            }
            first->pos = 1;
            last = first;
        }
        else {
            if ( ( current = new_node(val) ) == NULL ) {
                fprintf(stderr, "Can't create a new node!\n");
                delete_nodes(first);
                exit(EXIT_FAILURE);
            }
            current->prev = last;
            last->next = current;
            current->pos = last->pos + 1;
            last = current;
        }
    }
    if ( ferror(fin) ){
        perror("ferror");
        delete_nodes(first);
        exit(EXIT_FAILURE);
    }
    if ( fclose(fin) )
        perror("fclose"); /* если файл уже прочитан, не критичная, но всё-таки ошибка */
 
    /* параноидальные проверки */
    if ( ! first ){
        fprintf(stderr, "No values assigned!\n");
        exit(EXIT_FAILURE);
    }
    if ( last->pos < MIN_NODES ){
        fprintf(stderr, "Not enough values in file!\n");
        delete_nodes(first);
        exit(EXIT_FAILURE);
    }
 
    if ( ( fout = fopen(FOUT_NAME, "w") ) == NULL ){
        perror("fopen");
        delete_nodes(first);
        exit(EXIT_FAILURE);
    }
 
    for ( current = last->prev; current != first; current = current->prev ){
        if ( is_it(current) ){
            if ( fprintf(fout, "%d\n", current->pos) < 0 ){
                perror("fprintf");
                delete_nodes(first);
                exit(EXIT_FAILURE);
            }
        }
    }
 
    delete_nodes(first);
 
    if ( fclose(fout) ){
        perror("fclose");
        exit(EXIT_FAILURE);
    }
 
    printf("Done.\n");
    exit(EXIT_SUCCESS);
}

Можно было и попроще как-нибудь, но я тут умных книжек про двусвязные списки начитался, решил попробовать - действительно по-своему удобно. Короче, разбирайтесь...
1
 Аватар для Бо
5 / 5 / 2
Регистрация: 08.12.2009
Сообщений: 158
02.06.2010, 15:38  [ТС]
ухх ёёё!!!!

а что это??
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
typedef struct NODE {
        double val;
        struct NODE * prev;
        struct NODE * next;
        size_t pos;
} node_t;
 
node_t * new_node(const double val) {
        node_t * node;
        if ( ( node = (node_t*)malloc(sizeof(node_t)) ) == NULL )
                return NULL;
        node->val = val;
        node->next = NULL;
        node->prev = NULL;
        node->pos = 0;
        return node;
}
 
int is_it(const node_t * node) {
        if ( ! node->prev || ! node->next )
                return 0;
        return ( ( node->val > node->prev->val && node->val > node->next->val) ||
                         ( node->val < node->prev->val && node->val < node->next->val ) );
}
 
void delete_nodes(node_t * node) {
        node_t * tmp;
        while ( node ) {
                tmp = node->next;
                free(node);
                node = tmp;
        }
}
а это??
C
1
#define MIN_NODES 3

и это что значит??
C
1
->


стока указателей.
а по проше можна??а то я не знаю как вот это буду объяснять
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
typedef struct NODE {
        double val;
        struct NODE * prev;
        struct NODE * next;
        size_t pos;
} node_t;
 
node_t * new_node(const double val) {
        node_t * node;
        if ( ( node = (node_t*)malloc(sizeof(node_t)) ) == NULL )
                return NULL;
        node->val = val;
        node->next = NULL;
        node->prev = NULL;
        node->pos = 0;
        return node;
}
 
int is_it(const node_t * node) {
        if ( ! node->prev || ! node->next )
                return 0;
        return ( ( node->val > node->prev->val && node->val > node->next->val) ||
                         ( node->val < node->prev->val && node->val < node->next->val ) );
}
 
void delete_nodes(node_t * node) {
        node_t * tmp;
        while ( node ) {
                tmp = node->next;
                free(node);
                node = tmp;
        }
}
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,977
02.06.2010, 16:10
Цитата Сообщение от Бо Посмотреть сообщение
а что это??
Именно то, на что похоже Структура узла двусвязного списка, содержащая данные (число типа double), указатели на предыдущий и следующий объекты структуры и позицию данных в файле.
Функция is_it() возвращает 1, если val больше или меньше, чем у обоих соседей. Ну а что делают new_node() и delete_nodes() не сложно по названию догадаться...

Цитата Сообщение от Бо Посмотреть сообщение
а это??
C
1
#define MIN_NODES 3
А чего по-вашему должно быть не меньше трёх, чтобы программа работала?

Цитата Сообщение от Бо Посмотреть сообщение
и это что значит??
C
1
->
А вот про это в учебниках пишут
Чтобы с помощью указателя на структуру получить доступ к ее членам, необходимо использовать оператор стрелка ->. Вот, например, как можно сослаться на поле balance:

p->balance

Оператор ->, который обычно называют оператором стрелки, состоит из знака "минус", за которым следует знак "больше". Стрелка применяется вместо оператора точки тогда, когда для доступа к члену структуры используется указатель на структуру.
Г. Шилдт "Полный справочник по С"

Добавлено через 1 минуту
Цитата Сообщение от Бо Посмотреть сообщение
а по проше можна?
Ага... Создать динамически увеличивающийся массив и писать в него числа. А потом по нему в цикле от хвоста к началу искать нужные числа, но это не интересно...
1
 Аватар для Бо
5 / 5 / 2
Регистрация: 08.12.2009
Сообщений: 158
02.06.2010, 17:23  [ТС]
ага,ща буду пробовать.

Цитата Сообщение от easybudda Посмотреть сообщение
но это не интересно...
просто пока уровень не тот,чтоб такое творить

Добавлено через 1 час 2 минуты
толи я так туплю,но шо то не в какую не хочет делаться
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
#include <stdio.h>
#include <stdlib.h>
#define a 20
#define FIN_NAME "1.txt"
#define FOUT_NAME "2.txt"
 
int main()
{
        FILE *fin, *fout;
        long len=0;
        float num,d[a];
        int i;
        
        fin = fopen(FIN_NAME, "r");
 
        fout = fopen(FOUT_NAME, "w");
 
        while ( fscanf(fin, "%f", &num) == 1 )
        {
            d[i]=num;
            len++;
        }
        
        for(i=len;;i--)
        {
            if(d[i-1]>d[i]<d[i+1]  ||  d[i-1]<d[i]>d[i+1])
            {
                fprintf(fout, "%d\n",i);
                fclose(fin);
                fclose(fout);
                exit(1);
            }
        }
 
        fclose(fin);
        fclose(fout);
}
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,977
02.06.2010, 17:46
1.
Цитата Сообщение от Бо Посмотреть сообщение
for(i=len;;i--)
Сразу выход за границу массива! Если len - количество элементов массива, то индекс последнего len - 1. Мало того, и проверять Вам их нужно с предпоследнего (у которого индекс аж len - 2) и до второго (индекс 1) - у двух крайних соседей маловато... При этом не плохо бы убедиться, что будет, что проверять. То есть должно быть как минимум три элемента, чтобы средний из них мог или быть экстренумом (или как там его), или не быть...То самое #define MIN_NODES 3...
2. Тут же... А цикл вообще когда прерваться должен?
3.
Цитата Сообщение от Бо Посмотреть сообщение
C
1
2
fprintf(fout, "%d\n",i); 
fclose(fin);
Нормальный подход... Записали первое подходящее число в файл и тут же его закрыли... На всякий случай, чтобы не вывалилось... А остальные-то куда девать? В уже закрытый файл не получится...
4.
Цитата Сообщение от Бо Посмотреть сообщение
#define a 100
Если уж задали максимальное количество элементов в массиве, при чтении значений из файла и добавлении их в массив не плохо бы количество добавленных отслеживать...
1
 Аватар для Бо
5 / 5 / 2
Регистрация: 08.12.2009
Сообщений: 158
02.06.2010, 18:25  [ТС]
1.,2.
C
1
for(i=len-2;i>1;i--)
??
3.
Цитата Сообщение от easybudda Посмотреть сообщение
Нормальный подход... Записали первое подходящее число в файл и тут же его закрыли... На всякий случай, чтобы не вывалилось...

ой и вправду,завтыкал
4.
Цитата Сообщение от Бо Посмотреть сообщение
len++;
вот же вроде я считал или я не так понял?

Добавлено через 23 минуты
вот вроде раьотает
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
#include <stdio.h>
#include <stdlib.h>
#define a 20
#define FIN_NAME "1.txt"
#define FOUT_NAME "2.txt"
 
int main()
{
        FILE *fin, *fout;
        long len=0;
        float num,d[a];
        int i=0;
        
        fin = fopen(FIN_NAME, "r");
 
        fout = fopen(FOUT_NAME, "w");
 
        while ( fscanf(fin, "%f", &num) == 1 )
        {
 
            d[i]=num;
            len++;
        }
        for(i=len-2;i>1;i--)
        {
            if(d[i-1]>d[i]<d[i+1]  ||  d[i-1]<d[i]>d[i+1])
            {
                fprintf(fout, "%d\n",i+1);
 
            }
        }
 
        fclose(fin);
        fclose(fout);
        exit(1);
}
тока записывает пару лишних номеров.почему не пойму?
заданныне числа:
1.3
2.3
6.6
3.2
1.8
9.2
5.7
7.5
2.2
ответ:
8
7
6
5
4
3

Добавлено через 2 минуты
4 лишняя
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,977
02.06.2010, 18:31
Цитата Сообщение от Бо Посмотреть сообщение
C
1
2
3
4
while ( fscanf(fin, "%f", &num) == 1 ) 
{
 d[i]=num; len++; 
}
теперь все числа из файла в первый элемент массива по очереди записываются. Что там потом с чем сравнивается - загадка... И кстати, мало просто len увеличивать, нужно ещё проверять, сколько ей до а осталось...
1
 Аватар для Бо
5 / 5 / 2
Регистрация: 08.12.2009
Сообщений: 158
02.06.2010, 18:34  [ТС]
ну я тама просто переписал все числа из файла в массив и подсчитывал сколько их всего будет,а потом уже сравнивал.
я ща ухожу не много,поже дорешаю.
если есть еще де ошибки укажите плиз
зараннее спс))
0
 Аватар для Бо
5 / 5 / 2
Регистрация: 08.12.2009
Сообщений: 158
04.06.2010, 16:57  [ТС]
мне тут подсказали что можно как то через динамический массив сделать.
а как тока??подскажите плиз
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
#include <stdio.h>
#include <stdlib.h>
 
#define FIN_NAME "1.txt"
#define FOUT_NAME "2.txt"
 
int main()
{
   int num, buf, i, j;
   int *number;
   FILE * in, * out;
 
   in = fopen(FIN_NAME, "r");
   out = fopen(FOUT_NAME, "w");
 
            //Зчитування данних з файлу до динамічного масиву:
   fscanf(in, "%i", &num);
   number = (int*)calloc(num, sizeof(int));
   for (i = 0; i < num; i++)
   {
      fscanf(in, "%i", &number[i]);
 
   }            //Пошук всех локальных экстремумов:
   for (i = 0; i < num; i++)
   {
          ????????????????
}
printf("%d",number[i]);
   fclose(in);
   fclose(out);
   return 0;
}
0
 Аватар для Бо
5 / 5 / 2
Регистрация: 08.12.2009
Сообщений: 158
06.06.2010, 15:07  [ТС]
нужна еще помощь!
хелп плиз)

Добавлено через 3 часа 1 минуту
ау!

Добавлено через 17 часов 50 минут
невыходит что то эта задача,капец какойто
исправте что не так,плиз.
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
#include <stdio.h>
#include <stdlib.h>
 
#define FIN_NAME "1.txt"
#define FOUT_NAME "2.txt"
 
main()
{
   int num, i, j;
   int *number;
   float a=0,b=0,c=0, buf;
   FILE * in, * out;
 
   in = fopen(FIN_NAME, "r");
   out = fopen(FOUT_NAME, "w");
 
            //Зчитування данних з файлу до динамічного масиву:
   fscanf(in, "%f", &num);
   number = (int*)calloc(num, sizeof(int));
   for (i = 0; i < num; i++)
   {
      fscanf(in, "%f", &number[i]);
 
   }            //Пошук всех локальных экстремумов:
   for (i = 0; i < num; i++)
   {
      for (j = 0; j <number[i]; j++)
      {
         fscanf(in, "%f", &buf);
         a=buf-1;
         b=buf;
         c=buf+1;
      } 
      if(a>b<c || a<b>c)
      {
          fprintf(out,"%d\n",number[i]);
         
      }
          a=0;
          b=0;
          c=0;
   }
   fclose(in);
   fclose(out);
   return 0;
}
0
 Аватар для Бо
5 / 5 / 2
Регистрация: 08.12.2009
Сообщений: 158
07.06.2010, 16:26  [ТС]
ну помогите,будте человеками!!
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,977
07.06.2010, 17:28
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
#include <stdio.h>
#include <stdlib.h>
 
#define FIN_NAME "in.txt"
#define FOUT_NAME "out.txt"
 
int main(void){
    double *arr = NULL, val;
    long size = 0, i;
    FILE *fin, *fout;
 
    if ( ( fin = fopen(FIN_NAME, "r") ) == NULL ){
        perror("fopen");
        exit(EXIT_FAILURE);
    }
    while ( fscanf(fin, "%lf", &val) == 1 ){
        if ( ( arr = realloc(arr, sizeof(double) * (size + 1)) ) == NULL ){
            perror("realloc");
            exit(EXIT_FAILURE);
        }
        arr[size++] = val;
    }
    if ( ferror(fin) ){
        perror("ferror");
        free(arr);
        exit(EXIT_FAILURE);
    }
    fclose(fin);
 
    if ( size < 3 ){
        fprintf(stderr, "Not enough data in file!\n");
        free(arr);
        exit(EXIT_FAILURE);
    }
 
    if ( ( fout = fopen(FOUT_NAME, "w") ) == NULL ){
        perror("fopen");
        free(arr);
        exit(EXIT_FAILURE);
    }
 
    for ( i = size - 2; i > 1; --i ){
        if ( ( arr[i] > arr[i - 1] && arr[i] > arr[i + 1] ) || ( arr[i] < arr[i - 1] && arr[i] < arr[i + 1] ) ){
            if ( fprintf(fout, "%d\n", i + 1) < 0 ){
                perror("fprintf");
                free(arr);
                exit(EXIT_FAILURE);
            }
        }
    }
 
    free(arr);
 
    exit( ( fclose(fout) ) ? EXIT_FAILURE : EXIT_SUCCESS );
}
1
 Аватар для Бо
5 / 5 / 2
Регистрация: 08.12.2009
Сообщений: 158
07.06.2010, 17:39  [ТС]
easybudda, спасибо огромное!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.06.2010, 17:39
Помогаю со студенческими работами здесь

Дан файл вещественных чисел Создать файл целых чисел, содержащий номера локальных максимумов исходного файла
2-File. Дан файл вещественных чисел. Создать файл целых чисел, содержащий номера всех локальных максимумов исходного файла в порядке...

Дан файл состоящий из целых чисел. Создать новый файл целых чисел, содержащий длины всех серий исходного файла
Дан файл целых чисел. Создать новый файл целых чисел, содержащий длины всех серий исходного файла (серией называется набор последовательно...

Дан файл целых чисел. Создать новый файл целых чисел, содержащий длины всех серий исходного файла
Дан файл целых чисел. Создать новый файл целых чисел, содержащий длины всех серий исходного файла (серией называется набор последова- ...

Дан файл целых чисел. Создать новый файл целых чисел, содержащий длины всех серий исходного файла.
Задачу нужно решить в Borland C++ 3.11 Дан файл целых чисел. Создать новый файл целых чисел, содержащий длины всех серий исходного файла...

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru