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

Поиск элемента в двусвязном списке

19.05.2013, 09:27. Показов 4862. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Элемент двусвязного списка точка(x,y). Нужно написать функцию для нахождения максимально удаленной точки от центра координат.

iterator - количество элементов в списке
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void List::FarAway(){
     Item *temp2=new Item;
     Item *temp=first, *p=first;
     int i=0;
     if (!first) return russia("Список пуст.\n");
     if(iterator==1){
         temp2->x=first->x; 
         temp2->y=first->y;
     } else{
     float max=sqrt((first->x)*(first->x)+(first->y)*(first->y));
     for(; temp != NULL; temp = temp->next){
         if(sqrt((temp->x)*(temp->x)+(temp->y)*(temp->y)) > max){
             temp2->x=temp->x;
             temp2->y=temp->y;
         }
     }
     while((p->x!=temp2->x) && (p->y!=temp2->y)){
         p=p->next;
         i++; 
     } 
     }
     russia("Максимально удаленная точка от центра координат: ");
     cout<<"Point"<<i+1<<" ("<<temp2->x<<";"<<temp2->y<<")\n";
Вот что у меня получилось. Но мне кажется это не совсем корректно. К тому же программа вылетает, если я добавлю точку в начало списка, расстояние до которой больше предыдущего максимального а затем вызову эту функцию.

Добавлено через 15 минут
Уже нашел ошибку, нужно было поставить >= в условии. Но вопрос по поводу корректности еще стоит
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Блог
19.05.2013, 09:27
Ответы с готовыми решениями:

Поиск элемента в двусвязном списке
Подскажите пожалуйста. Нужно пройти по списку и найти слово по первой букве, запомнить адрес, и...

Реализовать поиск максимального элемента в двусвязном списке
Помогите пожалуйста доделать код. Вместо блока удаление нужен осуществить поиск максимального...

Нахождение элемента в двусвязном списке
Суть в том, что у меня есть двусвязный список, в котором нужно выяснить есть ли в нём тот или иной...

Сдвиг элемента в двусвязном списке
Нужна функция для сдвига элемента на заданной позиции на k позиций назад (влево) в двусвязном...

1
6 / 6 / 3
Регистрация: 06.02.2013
Сообщений: 71
19.05.2013, 13:11 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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
// .........
void    List::FarAway()
{
    // создать "Звено", для хранения "макс. Звена".
    Item*   max_item = new      Item;   // ПОМЕНЯЛ temp2 -> max_item !!!!!
//? // .........
//? Item    *temp = first,  *p = first;
//? // .........
//? int     i=0;
    // если "Список" - ПУСТ ...
    if ( !first )
    {
        russia( "Список пуст.\n" );
        return;
    }
    // индекс "макс. Звена".
    int     maks_ind = 0;
    // если в "Списке" - одно "Звено" ...
    if ( iterator == 1 )
    {
        // сохранить "макс. Звено".
        max_item->x = first->x;
        max_item->y = first->y;
    }
    // если в "Списке" - БОЛЕЕ одного "Звена" ...
    else
    {
        // расстояние от "0-го Звена" "Списка" до начала координат.
        float   max = sqrt( (first->x)*(first->x) + (first->y)*(first->y) );
        // индекс "очередного Звена" "Списка".
        int     i = 1;
        // по всем "Звеньям" "Списка", начиная с "1-го Звена" (исключая "0-е Звено").
        for ( Item* temp=first->next; temp!=NULL; temp=temp->next )
        {
            // если расстояние от "очередного Звена" до начала координат БОЛЬШЕ
            // уже найденного максимума ...
            if ( sqrt( (temp->x)*(temp->x) + (temp->y)*(temp->y) ) > max )
            {
                // пересохранить "макс. Звено".
                max_item->x = temp->x;
                max_item->y = temp->y;
                // индекс "макс. Звена".
                maks_ind = i;   //(int)
            }
            // увеличить индекс "очередого Звена" "Списка".
            i++;
        }
//?     //( ВСЕГО ЭТОГО НЕ НАДО! )
//?     // поиск индекса "макс. Звена".
//?     while ( p->x != max_item->x  && p->y != max_item->y )
//?     {
//?         p=p->next;
//?         i++;
//?     }
    }
 
    russia( "Максимально удаленная точка от центра координат: " );
    cout << "Point" << maks_ind+1 << " (" << max_item->x << ";" << max_item->y << ")\n";
}
- В библиотеках шаблонов STL, и не только в них, Iterator используется совсем в
другом смысле, но не для учета числа Звеньев в Списках или других контейнерах. В
реальной программе может возникнуть путаница! Лучше использовать, например, Items_Num
- число Звеньев, или что-то в этом роде.
1
19.05.2013, 13:11
cpp_developer
Эксперт
20123 / 5690 / 417
Регистрация: 09.04.2010
Сообщений: 12,546
Блог
19.05.2013, 13:11
Помогаю со студенческими работами здесь

Поиск в двусвязном списке
Доброго времени суток. Помогите написать код, который ищет в двусвязном списке елемент по его...

Поиск в двусвязном списке
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;cstring&gt; #include &lt;windows.h&gt; using...

Бинарный поиск в двусвязном списке
Есть класс #ifndef STUDENT_H_INCLUDED #define STUDENT_H_INCLUDED #include &lt;iostream&gt; #include...

Поиск в линейном двусвязном списке
Программа реализует добавление, удаление элементов списка, просмотр списка и поиск элемента в...


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

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