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

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

Войти
Регистрация
Восстановить пароль
 
Romantikkk
0 / 0 / 0
Регистрация: 19.10.2012
Сообщений: 144
#1

Односвязный список. Подсчитать сумму N первых элементов. Удалить эти элементы и вставить в конец списка - C++

16.05.2013, 18:43. Просмотров 812. Ответов 4
Метки нет (Все метки)

Помогите, плиз доработать функцию summ - она должна подсчитать сумму 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
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
#include <iostream>
#include <time.h>
using namespace std;
 
struct list
{
    int value;
    list* next;
};
list* f = NULL;
list* l = NULL;
void print_all()
{
    list* a = f;
    while (a)
    {
        cout << a->value << endl;
        a = a->next;
    }
}
void add_from_head()
{
    list* a = new list;
    a->value = rand() % 10;
    a->next = NULL;
    f = a;
    l = a;
    for (int i = 0; i < 5; i++)
    {
        l->next = new list;
        l = l->next;
        l->value = rand() % 10;
        l->next = NULL;
    }
}
void add_from_tail()
{
    list* a = NULL;
    for (int i = 0; i <= 5; i++)
    {
        list* b = new list;
        b->value = rand() % 10;
        b->next = a;
        a = b;
    }
    f = a;
}
int summ(int N)
{
    list* a = f;
    cout<<"Enter N:"<<endl;
    cin>>N;
    int sum=0;
    for(int i=0;i<N; i++){
        sum=sum+a->value;
        /*a->value=a->next;*/
    }
 
    for(int j=0; j<N;j++){
        a->next==NULL;
    }
 
    return sum;
 
 
    /*while (a)
    {
        if (a->value == in)
            a->value = out;
        a = a->next;
    }*/
}
int main()
{
    srand (time(NULL));
    while (1)
    {
        int nl;
        cout << "1. Add from the head\n2. Add from the tail\n3. Print\n4. Search and replace\n5. Quit\n";
        cin >> nl;
        cout << endl;
        switch (nl)
        {
        case 1:
            add_from_head();
            cout << endl;
            break;
        case 2:
            add_from_tail();
            cout << endl;
            break;
        case 3:
            print_all();
            cout << endl;
            break;
        case 4:
            int N, out;
            out=summ(N);
            cout << "Work done! ";
            
            /*replace(in, out);*/
            cout << endl<<"______________"<<endl<<out<<"______________"<<endl;
            break;
        case 5:
            return 0;
            break;
        }
    }
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2013, 18:43     Односвязный список. Подсчитать сумму N первых элементов. Удалить эти элементы и вставить в конец списка
Посмотрите здесь:

C++ Односвязный список с добавлением нового элемента в конец.
Односвязный список (за первым вхождением элемента с заданным значением z добавить все элементы списка В) C++
C++ Вставить в список L за первым вхождением элемента Е все элементы списка L1
Сформировать список из натуральных чисел. Удалить из списка отрицательные элементы C++
C++ В текстовом массиве подсчитать сумму длин первых семи элементов
Методом вставки упорядочить список по возрастанию и удалить из отсортированного списка положительные элементы C++
Дан кольцевой список. Подсчитать количество элементов списка, у которых есть равный сосед C++
Вставить элементы списка L2 в список L1, не нарушая его упорядоченности C++
C++ Организовать ввод в однонаправленный список; подсчитать сумму чисел списка
Создать список действительных чисел. Удалить четные элементы списка и перемножить все положительные нечётные C++
Односвязный список. Вставка списка C++
C++ Вставить элемент в односвязный список

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Wolkodav
601 / 454 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
16.05.2013, 19:42     Односвязный список. Подсчитать сумму N первых элементов. Удалить эти элементы и вставить в конец списка #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
void summ(int n,list** first)
{
list* lst=(*first);
int summ=0;
int i=0;
while ((i<n)&&(lst))
{
sum+=(*lst).value;
lst=(*lst).next;
i++;
}
i=0;
while ((i<n)&&((*first)))
{
list* deleted=(*first);
(*first)=(**first).next;
delete deleted;
i++;
}
//Как я понял в конец списка вставить сумму
lst=(*first);
while (lst)
{
lst=(*lst).next;
}
list* add=new list();
add.value=sum;
add.next=0;
lst.next=add;
}
Как-то так, мог ошибится с указателями.
papik1234567890
0 / 0 / 0
Регистрация: 13.12.2012
Сообщений: 14
16.05.2013, 19:57     Односвязный список. Подсчитать сумму N первых элементов. Удалить эти элементы и вставить в конец списка #3
только оно не работает. +
C++
1
2
3
add.value=sum;
add.next=0;
lst.next=add;
даже не разпознает.
Wolkodav
601 / 454 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
16.05.2013, 19:59     Односвязный список. Подсчитать сумму N первых элементов. Удалить эти элементы и вставить в конец списка #4
ой надо
C++
1
2
3
(*add).value=sum;
(*add).next=0;
(*lst).next=add;
Сказал же, могут быть ошибки с указателями.
papik1234567890
0 / 0 / 0
Регистрация: 13.12.2012
Сообщений: 14
16.05.2013, 22:20     Односвязный список. Подсчитать сумму N первых элементов. Удалить эти элементы и вставить в конец списка #5
все-равно. она не выполняет ничего
Yandex
Объявления
16.05.2013, 22:20     Односвязный список. Подсчитать сумму N первых элементов. Удалить эти элементы и вставить в конец списка
Ответ Создать тему
Опции темы

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