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

Функция: заменить в списке все вхождения элемента E1 на элемент E2

08.09.2011, 09:34. Показов 4730. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В составе программы описать функцию, которая заменяет в списке все вхождения элемента E1, значение которого введено с клавиатуры, на эле-мент E2, значение которого также введено с клавиатуры.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.09.2011, 09:34
Ответы с готовыми решениями:

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

Заменить в списке все вхождения X на Y.
Нужно преобразовать список целых чисел таким образом, чтобы все вхождения элементов равным Х...

Заменить в списке все вхождения obj1 на obj2
И вот эта задача с применением локальных определений LAMDA и LET : Есть список lst и два...

Удалить все вхождения элемента в односвязном списке
Нужна функция для удаления всех вхождений элемента в односвязном списке

9
22 / 22 / 2
Регистрация: 11.04.2011
Сообщений: 67
08.09.2011, 09:59 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
int main()
{
   someType* array = new someType[%SIZE];
    ... //заполнение массива
   someType e1, e2;
   cout<<"e1: ";
   cin>>e1;
   cout<<endl<<"e2: ";
   cin>>e2;
   for(int i = 0; i < %SIZE; i++)
   {
       if(array[i] == e1)
          array[i] = e2;
   }
}
1
0 / 0 / 0
Регистрация: 09.03.2011
Сообщений: 30
08.09.2011, 10:02  [ТС] 3
а полную версию не сможешь написать? а то как то не сростаетсья с этим заданием у меня....
зарание спасибо.
0
22 / 22 / 2
Регистрация: 11.04.2011
Сообщений: 67
08.09.2011, 10:08 4
Если в виде метода, то как-то так:
C++
1
2
3
4
5
6
7
8
void SwapElements(someType* array, int arraySize, someType e1, someType e2)
{
   for(int i = 0; i < arraySize; i++)
   {
       if(array[i] == e1)
          array[i] = e2;
   }
}
Соответственно, контекст применения такой:
C++
1
2
3
4
5
6
7
8
   someType* array = new someType[%SIZE];
    ... //заполнение массива
   someType e1, e2;
   cout<<"e1: ";
   cin>>e1;
   cout<<endl<<"e2: ";
   cin>>e2;
   SwapElements(array, %SIZE, e1, e2);
Или что-то другое нужно?
1
0 / 0 / 0
Регистрация: 09.03.2011
Сообщений: 30
08.09.2011, 10:12  [ТС] 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
#include <iostream>
using namespace std;
#include <stdlib.h>
 
void main()
{   int N;          // количество элементов в списке
    int target;         // искомое значение
    int count;              // местоположение искомого элемента
    struct node {   int dat;        // информационное поле
    struct node *link;  // поле-указатель
    };
    typedef node *NodePtr;      //указатель на тип Node
    NodePtr head = NULL;
    NodePtr here;       // указатель на текущий элемент
    randomize();
    cout << "Введите количество элементов в списке  ";
    cin >> N;
    for (int i = 0; i<N; i++)   // формируем стек
    {   if (head == NULL)
    {   head = new node;
    if (head == NULL)
    { cout << "Недостаточно памяти !" << endl;
              exit(1);   }
    head->dat = random(100) - 50;
    cout << head->dat << ' ';
    head->link = NULL;
    }
    else    {   here = new node;
    if (here == NULL)
            {   cout << "Недостаточно памяти !" << endl;
                 exit(2);
             }
    here->dat = random(100) - 50;
    cout << here->dat << ' ';
    here->link = head;
    head = here;
    }
    }
    cout <<endl;
    cout << "Чему равно искомое значение? ";
    cin >> target;
    here = head;  count = 1;        // встали в начало списка
    if (here == NULL)
    cout << "Список пуст!" << endl;
    else { while (here->dat != target && here->link != NULL)
    { here = here->link;
    count++;
    }
    if (here->dat == target)
    cout << "Искомый элемент имеет № " << count << endl;
    else   cout << "Элемент не найден!" << endl;
    }
}
Добавлено через 1 минуту
наверно...нужно отталкиваться от этого примера...
0
22 / 22 / 2
Регистрация: 11.04.2011
Сообщений: 67
08.09.2011, 10:29 6
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
int N; // количество элементов в списке
int e1; // E1
int e2; // E2
struct node 
{ 
    int dat; // информационное поле
    struct node* link; // поле-указатель
};
typedef node *NodePtr; //указатель на тип Node
NodePtr head = NULL;
NodePtr here; // указатель на текущий элемент
randomize();
cout << "Введите количество элементов в списке ";
cin >> N;
for (int i = 0; i<N; i++) // формируем стек
{ 
    if (head == NULL)
    { 
        head = new node;
        if (head == NULL)
        { 
             cout << "Недостаточно памяти !" << endl;
             exit(1); 
        }
        head->dat = random(100) - 50;
        cout << head->dat << ' ';
        head->link = NULL;
    }
    else 
    { 
        here = new node;
        if (here == NULL)
        { 
            cout << "Недостаточно памяти !" << endl;
            exit(2);
         }
         here->dat = random(100) - 50;
         cout << here->dat << ' ';
         here->link = head;
         head = here;
     }
}
cout <<endl;
cout << "Чему равно E1? ";
cin >> e1;
cout<<endl<<"Чему равно E2? ";
cin >> e2;
here = head; //по-моему, в этой строке нет необходимости. После цикла for(...) head и так равен here и указывает на последний элемент. 
if (here == NULL)
    cout << "Список пуст!" << endl;
else 
{ 
   while (here->link != NULL)
   {  
       if(here->dat == e1)
          here->dat == e2;
       here = here->link;
    }
}
1
0 / 0 / 0
Регистрация: 09.03.2011
Сообщений: 30
08.09.2011, 10:42  [ТС] 7
ну вот примерно нароботка...тогоже задание:

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
#include <iostream>
 
using namespace std;
 
void main()
{   
    double i,x,e1,e2,count;
    struct node
    { 
        int info;
        struct node* next;
    };
    typedef node *NodePtr;
    NodePtr head=NULL;
    NodePtr p;
    int N=10;
    int cnt=1;
 
    if(head==NULL)
    {
        head=new node;
        head->info=rand()%5-2;
        head->next=NULL;
    }
    for (i=2;i<=N;i++)
    {
        p=new node;
        p->info=rand()%5-2;
        p->next=head;
        head=p;
    }
    p=head;
    count=1;
    for(i=1;i<=N;i++)
    {
        cout<<p->info<<' ';
        p=p->next;
    }
    cout<<endl;
    cout<<"E1?"<<endl;
    cin>>e1;
    cout<<"E2?"<<endl;
    cin>>e2;
    p=head;
    while (p->next!=NULL) 
    //for (i=1;i<=N;i++)
    {
        if(p->info != e1)
        {
            p=p->next;
        }
        else
        {
            p->info=e2;
            p=p->next;
        }   
    }//
    p=head;
    for(i=1;i<=N;i++)
    {
        cout<<p->info<<' ';
        p=p->next;
    }
    cout<<endl<<"x-?";
    cin>>x;
}
0
22 / 22 / 2
Регистрация: 11.04.2011
Сообщений: 67
08.09.2011, 10:50 8
Лучше возьмите за основу мой пример --- в вашем много лишних действий, хоть он и рабочий. Если есть желание, могу объяснить, какие действия (строчки) лишние.
1
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
08.09.2011, 14:15 9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>
 
int main()
{
    int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 2, 4, 5, 4 };
    
    std::list<int> list( arr, arr + sizeof(arr) / sizeof(*arr) );
    
    std::cout << "Before: ";
    std::copy( list.begin(), list.end(), std::ostream_iterator<int> (std::cout, " ") ); 
    
    std::cout << "\n\nEnter 2 numbers: ";
    
    int e1, e2;
    std::cin >> e1 >> e2;
    
    std::cout << "\nAfter: ";
    std::replace( list.begin(), list.end(), e1, e2);
    std::copy( list.begin(), list.end(), std::ostream_iterator<int> (std::cout, " ") ); 
}
0
0 / 0 / 0
Регистрация: 09.03.2011
Сообщений: 30
18.09.2011, 17:52  [ТС] 10
Enfernuz
Если не сложно....то я внимательно слушаю)
0
18.09.2011, 17:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.09.2011, 17:52
Помогаю со студенческими работами здесь

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

Заменить в массиве все вхождения отрицательных элементов на два идущих подряд элемента со значением 0
Задание: заменить в массиве все вхождения отрицательных элементов на два идущих подряд элемента со...

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

Заменить все первые левые вхождения символа “a” на 00, а все правые вхождения символа “a” на 11
Заменить все первые левые вхождения символа “a” на 00, а все правые вхождения символа “a” на 11,...


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

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