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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Какую наибольшую стоимость может иметь путь из клетки (1, 1) в клетку (n, m), если передвигаться за 1 шаг можно только на правую или нижнюю клетку. http://www.cyberforum.ru/cpp-beginners/thread377422.html
кому не трудно помогите сделать. если не трудно вам написать код. Дана прямоугольная таблица nxn клеток. В каждой клетке содержится либо цифра (от 0 до 9), либо символ "x" (препятствие). Стоимостью пути называется сумма цифр на посещенных клетках. Какую наибольшую стоимость может иметь путь из клетки (1, 1) в клетку (n, m), если передвигаться за 1 шаг можно только на соседнюю правую или нижнюю...
C++ Проблема при вызове функции Написал для себя простенькую напоминалку, выводящую указанное сообщение через определённый промежуток времени(ну там, "отойди от компа, глаза разомни"))) и тп). И всё бы работает нормально, но вот как только происходит вызов функции change(), для изменения начальных параметров, происходит что-то странное - ничего не считывается с клавиатуры и консоль будто подвисает... В общем прошу совета, что... http://www.cyberforum.ru/cpp-beginners/thread377420.html
Символьные строки и функции C++
Помогите написать функцию Right(s,l) для выравнивание строки s по правому краю до длины l.
C++ Определить имеет ли система решения,если имеет то их найти
Помогите решить задачи с контр по программированию 1-3 с++ 1. Определить имеет ли система решения,если имеет то их найти a*x+b*y=c d*x*x+e*y*y=f 2. Поступает последовательность,0-конец последовательности.Найти порядковый номер самого маленького по модулю элемента последовательности. 3.Сложить 15 простое,4 совершенное и 1 нечетное избыточное число(составить 3 функции которые будут...
C++ Сортировка ассоциативного контейнера! http://www.cyberforum.ru/cpp-beginners/thread377386.html
В классе есть поля: название, цена и количество. Нужно записать данные в ассоциативный контейнер, и нужно один раз отсортировать и вывести по убыванию цены, а затем отсортировать и вывести по возрастанию количества. (Можно использовать vector и sort () с предикатом). Я могу только написать два функторы которые будут его сортировать, но тогда надо два map или multimap.Как это сделать одним мепом?
C++ Сдвинуть циклически элементы одномерного массива на k позиций влево Тема и есть условие задачи... Сам же я застопорился на написании алгоритма сдвига :- #include <iostream.h> #include <math.h> int main() { int a; int i, n; cout << "Vvedite kol-vo elementov: "; cin >> n; подробнее

Показать сообщение отдельно
soadpol
0 / 0 / 0
Регистрация: 19.09.2009
Сообщений: 16
03.11.2011, 21:46     обращение к члену связного списка
Прошу помощи в решении

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

 Комментарий модератора 
Используйте теги форматирования кода!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 21:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru