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

Надо переделать программу из С на С++

30.05.2019, 13:02. Показов 329. Ответов 1
Метки нет (Все метки)

Я не особо шарю в это, помогите пожалуйста, код рабочий все хорошо, надо его просто переделать под С++
Суть программы заключается в том, что дан файл в котором записано 10 положительных чисел, 10 отрицательных чисел, 10 положительных чисел, 10 отрицательных чисел и т.д. Надо переписать компоненты файла таким образом что бы они шли 5 отрицательных чисел, 5 положительных чисел, 5 отрицательных и т.д

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
#include <stdio.h>
#include <locale.h>
#include <conio.h>
struct list {
    int n;
    struct list *next;
};
 
struct list *rfile(struct list *);
void change_file(struct list *);
 
int main() {
    setlocale(LC_ALL, "");
    struct list *lst = NULL;
    lst = rfile(lst);
    change_file(lst);
    _getch();
}
// Считывает в список элементы файла
 
struct list * rfile(struct list *lst) {
    FILE *f = fopen("Text.txt", "r");
    int n;
    struct list *p;
    if (f) {
        fscanf(f, "%d", &n);
        if (feof(f) == 0) {
            lst = (struct list *)malloc(sizeof(struct list)); // выделяет память для новой структуры, хранит head
            p = lst;
            p->n = n;
            fscanf(f, "%d", &n);
            while (feof(f) == 0) {
                p->next = (struct list *)malloc(sizeof(struct list));
                p = p->next;
                p->n = n;
                fscanf(f, "%d", &n);
            }
            p->next = (struct list *)malloc(sizeof(struct list));// если после
            p = p->next; // последнего элемента ничего нет,
            p->n = n; // то foef выадаёт конец файла
            p->next = NULL;
            return lst; // вернуть указатель на head списка
        }
        else {
            printf("Файл пустой\n");
            return NULL;
        }
    }
    else {
        printf("Файл отсутствует\n");
        return NULL;
    }
    fclose(f);
}
// Переписывает файл по 5 отрицательных, 5 положительных эелементов
 
void change_file(struct list *lst) {
    FILE *f = fopen("Text.txt", "w");
    int flag = 0, flst = 0; // flag - отвечает за пол. отриц. числа | flst - отвечает за то, что необходимо ли lst поменять адрес
    struct list *p = NULL, *prev, *prev2;
    while (lst) {
        p = lst;
        prev = lst;
        prev2 = lst;
        if (flag) { // для отрицательных чисел
            while (p->n < 0) {
                prev2 = p;
                p = p->next;
            }
            flst = p == lst ? 1 : 0;
            for (int i = 0; i < 5; i++) {
                // Записать 5 элементов списка в файл и удалить их
                fprintf(f, "%d ", p->n);
                prev = p;
                p = p->next;
                free(prev);
            }
            lst = flst == 1 ? p : lst; // Если элементы считывались с начала списка, то указатель head списка сместить на p
            if (flst != 1) // Если записывались элементы с головы списка, то нет необходимости перезаписывать lst->next
                prev2->next = p;
            flag = 0;
        }
        else {
            while (p->n > 0) {
                prev2 = p;
                p = p->next;
            }
            flst = p == lst ? 1 : 0;
            for (int i = 0; i < 5; i++) {
                fprintf(f, "%d ", p->n);
                prev = p;
                p = p->next;
                free(prev);
            }
            lst = flst == 1 ? p : lst;
            if (flst != 1)
                prev2->next = p;
            flag = 1;
        }
        flst = 0;
    }
    fclose(f);
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.05.2019, 13:02
Ответы с готовыми решениями:

надо переделать программу
помогите переделать программу нужно было из это программы: #include &quot;stdafx.h&quot; #include...

надо переделать программу
помогите переделать на Си или с++ Program posled; uses crt; var...

Надо переделать немного программу
Смотрите есть программа на решение методом хорд нелинейных уравнений. Но проблема в том что я не...

Надо переделать программу из матлаб в С++
Вот моя программа в матлаб(рабочая).Писал сам, но с++ плохо понимаю, поэтому надеюсь на вашу...

1
Life Builder
532 / 496 / 374
Регистрация: 12.01.2011
Сообщений: 1,752
30.05.2019, 17:04 2
Это нечто, лучше использовать STL. Если ничего не упустил, то вот и
велосипед
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
#include <iostream>
#include <fstream>
#include <clocale>
 
struct list {
    int n;
    struct list *next;
};
 
list *rfile(list *);
void change_file(list *);
 
int main() {
    setlocale(LC_ALL, "");
    list *lst = NULL;
    lst = rfile(lst);
    change_file(lst);
    system("pause");
}
// Считывает в список элементы файла
 
list * rfile(list *lst) {
    
    ofstream f("Text.txt");
    
    int n;
    list *p;
    
    if (f.isopen()) {
        f>>n;
        
        if (!f.eof()) {
            lst = new list; // выделяет память для новой структуры, хранит head
            p = lst;
            p->n = n;
            cin>>n;
            while (!f.eof()) {
                p->next = new list;
                p = p->next;
                p->n = n;
                cin>>n;
            }
            p->next = new list;// если после
            p = p->next; // последнего элемента ничего нет,
            p->n = n; // то foef выадаёт конец файла
            p->next = NULL;
            return lst; // вернуть указатель на head списка
        }
        else {
            cout<<"Файл пустой\n";
            return NULL;
        }
    }
    else {
        cout<<"Файл отсутствует\n";
        return NULL;
    }
    f.close();
}
// Переписывает файл по 5 отрицательных, 5 положительных эелементов
 
void change_file(list *lst) {
    ifstream f("Text.txt");
    int flag = 0, flst = 0; // flag - отвечает за пол. отриц. числа | flst - отвечает за то, что необходимо ли lst поменять адрес
    list *p = NULL, *prev, *prev2;
    while (lst) {
        p = lst;
        prev = lst;
        prev2 = lst;
        if (flag) { // для отрицательных чисел
            while (p->n < 0) {
                prev2 = p;
                p = p->next;
            }
            flst = p == lst ? 1 : 0;
            for (int i = 0; i < 5; i++) {
                // Записать 5 элементов списка в файл и удалить их
                f<<p->n<<" ";
                prev = p;
                p = p->next;
                delete prev;
            }
            lst = flst == 1 ? p : lst; // Если элементы считывались с начала списка, то указатель head списка сместить на p
            if (flst != 1) // Если записывались элементы с головы списка, то нет необходимости перезаписывать lst->next
                prev2->next = p;
            flag = 0;
        }
        else {
            while (p->n > 0) {
                prev2 = p;
                p = p->next;
            }
            flst = p == lst ? 1 : 0;
            for (int i = 0; i < 5; i++) {
                f<<p->n<<" ";
                prev = p;
                p = p->next;
                delete prev;
            }
            lst = flst == 1 ? p : lst;
            if (flst != 1)
                prev2->next = p;
            flag = 1;
        }
        flst = 0;
    }
    f.close();
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.05.2019, 17:04
Помогаю со студенческими работами здесь

Программу на С++ надо переделать под С
Вот есть программа,которая подсчитывает количество слов. ее нужно переделать используя обычный С,а...

Написал программу на С++, надо переделать на С (пару строк!)
Здравствуйте, пользователи форума! Я начал изучать программирование с языка С++, минуя С. Мне нужно...

очень надо!!доделать/переделать программу с текстовыми файлами(повторы слов)
нужно упорядочить слова находящиеся в тексте по убыванию частоты.При этом различия в регистре не...

надо переделать
#include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; using namespace std; class...


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

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

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