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

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

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

Обращение к члену связного списка - C++

03.11.2011, 21:46. Просмотров 534. Ответов 1
Метки нет (Все метки)

Прошу помощи в решении

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

Для начала приведу две независимые функции

№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
//выводит список файлов на panel с указателя Ptr
//в направлении Directly (0-вниз, 1-вверх)
//если выводится на экран новая директория, передается флаг FlagFirst
void DrawList(int panel, ListNode far *Ptr, int Directly, int FlagFirst)
{
    int kol=0, x, y, flag=1, can;
    char s[37];
 
    if (panel==LEFT) x=12;
     else x=331;
    if (Directly==DOWN) y=30; else y=282;
    setcolor(LIGHTGREEN);
 
    NewPtr=Ptr;
    while (NewPtr != NULL && kol<19)
    {
        if (NewPtr->attrib != 0x0F) //здесь ставлю ==
        {
            if (CAN(NewPtr))
            {
                if (FlagFirst && flag)
                    if (panel==LEFT) {CurPtrL=NewPtr; flag=0;}
                     else {CurPtrR=NewPtr; flag=0;}
                movedata(FP_SEG(NewPtr->Data), FP_OFF(NewPtr->Data), FP_SEG(s), FP_OFF(s), 37);
                outtextxy(x,y,s);
                if (Directly) y-=14; else y+=14;
                kol++;
            }
        }
        if (Directly) NewPtr = NewPtr->PrevPtr;
         else NewPtr = NewPtr->NextPtr;
    }
}
после замены в строке 14 != на == ф.DrawList выводит на панель
чтото вроде

Мои документы
Program Files
sistema_siste
ma_sistema_
sistema_siste
ma

короче фигачит длинные имена по 13 симв построчно(там задано при обработке длинных имен)

вот функция №2

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void ShowLongName()
{
    char s[37]="", rez[100]="";
 
    NewPtr=CurPtr->PrevPtr;
    while (NewPtr->attrib==0x0F)
    {
        movedata(FP_SEG(NewPtr->Data), FP_OFF(NewPtr->Data),
                 FP_SEG(s), FP_OFF(s), 37);
        strcat(rez,s);
        NewPtr=NewPtr->PrevPtr;
    }
    setfillstyle(SOLID_FILL, FON);
    bar(110,319,632,329);
    setcolor(LIGHTCYAN);
    if (strlen(rez)>65) rez[68]=0x0;
    outtextxy(112,321,rez);
}
эта функция при наведении строчного курсора в определенном месте показывает длинное имя целиком
sistema_sistema_sistema_sistema_sistema

я такую создал функцию

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
void DrawList2(int panel, ListNode far *Ptr, int Directly, int FlagFirst)
{
      int kol=0, x, y, flag=1, can;
          char s[37]="", rez[255]="";
      if (panel==LEFT) x=12;
      else x=331;
      if (Directly==DOWN) y=30; else y=282;
      setcolor(LIGHTGREEN);
 
 
      NewPtr=Ptr;
      while (NewPtr != NULL && kol<19)
      {
    if (CAN(NewPtr))
       {
         if (NewPtr->attrib == 0x0F)
          {
 
            if (FlagFirst && flag)
            if (panel==LEFT) {CurPtrL=NewPtr; flag=0;}
            else {CurPtrR=NewPtr; flag=0;}
           
                    
                   NewPtr=CurPtr->PrevPtr;
                while (NewPtr->attrib==0x0F)
              {      
            movedata(FP_SEG(NewPtr->Data), FP_OFF(NewPtr->Data),
                    FP_SEG(s), FP_OFF(s), 37);
               strcat(rez,s);
               NewPtr=NewPtr->PrevPtr;
          }
 
                if (strlen(rez)==250)
                 outtextxy(x,y,rez);
 
              if (Directly) y-=14; else y+=14;
        kol++;
            }
        }
        if (Directly) NewPtr = NewPtr->PrevPtr;
         else NewPtr = NewPtr->NextPtr;
    }
}
так вот она при вызове работает но не так как требуется-она не делает поиск
по членам списка отдельно в цикле,а только лишь принаведении строчного курсора
на длиное имя и вызове функции (предусмотрена кнопка) она для этой строки(имени файла папки)
соединяет куски длинного имени в строку и считает ==250(?)
а требуется открыть диск С,D либо папку- нажатие кнопки-и функция выводит найденное
длинное имя=250
надеюсь все подробно объяснил
прошу помочь если что весь код проги есть для Borland C++3.1

 Комментарий модератора 
Используйте теги форматирования кода!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2011, 21:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Обращение к члену связного списка (C++):

Обращение (реверсия) связного списка от элемента n и заканчивая m - C++
Помогите разработать метод класса, в котором будет выполняться обращение связного списка начиная от n-ого элемента и заканчивая элементом m...

Обращение к члену protected - C++
Добрый день, помогите разобраться Обращение к члену protected, сообщается ошибкой Код класса: #include &lt;iostream&gt; #include &lt;string&gt;...

Обращение к члену структуры - C++
В чем разница между: a-&gt;b и a.b

Обращение потока к функции-члену класса - C++
Есть Класс MainWindow, функцией-членом которой выступает Reader(), при попытке обратиться поток к данной функции-члену из main'a через...

Обращение к приватному члену класса внутри пространства имён - C++
Здравствуйте. Вот у меня есть код: #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;vector&gt; #include &lt;string&gt; using namespace...

Сортировка связного списка - C++
Привет всем! как правильно написать сортировку для связного циклического списка ? помогите пожалуйста... #include &lt;iostream&gt; using...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
04.11.2011, 06:12 #2
Цитата Сообщение от soadpol
Стоит задача обращения к члену связного списка(того списка что выводится на экран файлового менеджера),затем с этим членом св.списка(это имя файла,папки-длинное имя-) производится
такая операция-он указывается как член другого связного списка(по строке) чтобы вывести целиком длинное имя
и посчитать символы если=250 то вывести имено эти имена(максимальной длинны)
пиши ясно

Цитата Сообщение от soadpol
C++
1
2
3
4
5
6
          int kol=0, x, y, flag=1, can;
          char s[37]="", rez[255]="";
          if (panel==LEFT) x=12;
          else x=331;
          if (Directly==DOWN) y=30; else y=282;
          setcolor(LIGHTGREEN);
не пиши в одну строчку

так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    int kol, x, y, flag, can;
    char s[37] = "", rez[255] = "";
 
    kol = 0;
    flag = 1;
    
    if (panel == LEFT)
        x = 12;
    else
        x = 331;
    
    if (Directly == DOWN)
        y = 30;
    else
        y = 282;
    
    setcolor(LIGHTGREEN);
или так:
C++
1
2
3
4
5
6
7
8
9
10
    int kol, x, y, flag, can;
    char s[37] = "", rez[255] = "";
 
    kol = 0;
    flag = 1;
    
    x = (panel == LEFT) ? 12 : 331;
    y = (Directly == DOWN) ? 30 : 282;
    
    setcolor(LIGHTGREEN);
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.11.2011, 06:12
Привет! Вот еще темы с ответами:

Создание связного списка - C++
нужно создать связной список, что собственно уже сделал. что нужно: -функции: -root (выводит список) -push (+1 елемент в...

Реализация связного списка - C++
Помогите решить задачу Нужно написать программу без использования библиотеки list я вот начал, только функция добавления не...

Реализация связного списка - C++
надо решить задачу: Сведения о владельце автомобиля: фамилия, марка автомобиля (строки), номер автомобиля (целое число). По сведениям в...

сортировка связного списка - C++
Привет всем! пришлите пожалуйста код реализации сортировки односвязного списка (желательно с комментарием)! а то у меня совсем ничего...


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

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

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