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

Список: Ошибка вывода членов списка при дублировании ключей - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Запись и извлечение данных в несколько запусков программы http://www.cyberforum.ru/cpp-beginners/thread930619.html
Всем добрый вечер! Предоставляю исходник программы EMPL_IO стр.574 с книги Лаффорте ООП в С++. Пытаясь улучшить программу наткнулся на ошибку возникающую при попытке вывести данные на экран после прочтения их из файла. Суть в том что при 1 запуске я записал эти данные, а при 2-м повторном запуске хочу их извлечь и вывести на экран. Компилятор указывает на строку switch(arrap->get_type()) в...
C++ Неточность в понимании условия задачи "Жук" (acmp) Жук (Время: 1 сек. Память: 16 Мб Сложность: 30%) Петя нашел в Интернете по адресу http://buglab.ru игру-головоломку "Жук", в которой от участников требуется построить для жука лабиринт таким образом, чтобы жук как можно дольше искал выход. Жук всегда начинает свое движение с левого верхнего угла, а выход всегда находится в правом нижнем. Жук движется не оптимально, а следующим образом:... http://www.cyberforum.ru/cpp-beginners/thread930617.html
C++ Логика switch
Программа должна расчитывать количество проданного товара, суть проблемы, кода вместо численных значений в вариантах case я использую буквенные значения названий товара, то все идет по логике программы, когда я использую проверку с целыми значениями у меня работает случай default разьясните мне пожалуйста в чем проблема? #include<iostream> using namespace std; int main() { int count =...
Мини-брутфорс C++
Задан паттерн XXyyX, где Х может принимать следующие значения: D,J,K,L,L,X,Z, а Y - f,n,s. Необходимо найти все возможные комбинации, при этом символы не должны повторяться, кроме L, так как он встречается два раза. Одна из этих комбинаций валидна и ссылка вида http://www.steamgifts.com/giveaway/+Валидная_комбинация должна привести на существующую страницу, если комбинация невалидна, то...
C++ Структуры. Объединения. Битовые поля http://www.cyberforum.ru/cpp-beginners/thread930567.html
Помогите с двумя простенькими программами. Требования: - не использовать шаблоны; - интерфейс должен разработан для неопытного пользователя; - размерность массива - неопределенная; - не использовать списки; - для реализации массива произвольного размера использовать функции прямого доступа и кучи (memcpy, memmove, malloc, resize и др.)
C++ Си: Выдать слова текста и их длины, Сформировать новую строку по правилу Задание: Задан некоторый текст, состоящий из слов. Словом считать последовательность символов, не содержащую пробел или другие знаки препинания. Предложения заканчиваются точкой. Длина текста не больше 200 символов, могут быть использованы любые символы. Задание для выполнения: 1) Считать текст из файла; 2) Выдать слова текста и их длины; 3) Сформировать новую строку из слов, состоящих... подробнее

Показать сообщение отдельно
Fintt
 Аватар для Fintt
10 / 10 / 0
Регистрация: 13.02.2012
Сообщений: 94
31.07.2013, 15:35  [ТС]     Список: Ошибка вывода членов списка при дублировании ключей
Цитата Сообщение от alsav22 Посмотреть сообщение
Кликните здесь для просмотра всего текста
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
111
112
#include<iostream>
#include<conio.h>
#include<cstdlib>
#include <ctime>
using namespace std;
 
struct List
{
    int data;
    List *next;
};
 
typedef List *ListPtr;
    ListPtr Head;
void show(ListPtr h);
void insHead(ListPtr &h,int a);
int  Poisk(int g, int &f, ListPtr& h, int &L);
void Del(ListPtr &h);
/////////////////////////////////////////////////////////////////////////////
void main()
    {
     system("cls");
     //randomize();
     srand(time(NULL));
     
     Head = NULL;
     int i, g;
     for (i = 0; i < 15; i++)
    {
     //g = random(10);
     g = rand() % 10;
     insHead(Head, g);
    }
     cout<<"            Spisok"<<'\n'<<endl;
     show(Head);
     cout << endl << "          Bez 0\n" << endl;
     //for (i=0;i<15;i++)
        //Del(Head);
     //show(Head);
        
      int L = 0;
      cout <<"\nVvedite chislo = ";
      cin >> g;
      ListPtr Ptr1 = Head;
      
      int f = 0;
      int n = 0;
      while (Ptr1 != NULL)
      {
        n = Poisk(g, f, Ptr1, L);
        if (n == 0) break;
        else 
            cout << endl << "Poryadkovii nomer = " << L << endl;
     }
     if (f == 0) cout << "No";
    
     Del(Head);
     
     getch();
    }
/////////////////////////////////////////////////////////////////////////////
void show(ListPtr h)
    {
     ListPtr max=Head, min=Head;
     ListPtr tmp=h;
     while(tmp)
      {
       cout<<tmp->data<<' '<<' '<<' ';
       if (max->data<tmp->data) max=tmp;
       if (min->data>tmp->data) min=tmp;
       tmp=tmp->next;
      }
    cout<<endl<<endl<<"Max="<<max->data<<endl<<endl<<"Min="<<min->data<<endl;
 
    }
/////////////////////////////////////////////////////////////////////////////
void Del (ListPtr &h)
    {
     ListPtr r = h;
     while (h != NULL)
      {
        r = r->next;
        delete h;
        h = r;
      }
    }
/////////////////////////////////////////////////////////////////////////////
void insHead(ListPtr &h,int a)
    {
     ListPtr tmp=new List;
     tmp->data=a;
     tmp->next=h;
     h=tmp;
    }
     int p = 0;
     
    int Poisk(int g, int &f, ListPtr& h, int &L ) // Вот функция поиска где ищет искомое число и выводит порядковый номер
    {
         
         while(h)
         { 
             L++;
             if (h ->data == g)
             {
                 h = h ->next;
                 f = 1;
                 return 1;
             }
             h = h ->next; 
         }
         return 0;
     }
А вот точно рабочая
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
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
 
struct List
{
    int data;
    List *next;
};
 
typedef List *ListPtr;
    ListPtr Head;
void show(ListPtr h);
void insHead(ListPtr &h,int a);
int  Poisk(int g, int &f, ListPtr& h, int &L);
void Del(ListPtr &h);
/////////////////////////////////////////////////////////////////////////////
void main()
    {
     clrscr();
     randomize();
     Head = NULL;
     int i,g;
     for (i = 0; i < 15; i++)
    {
     g = random(10);
     insHead(Head, g);
    }
     cout<<"            Spisok"<<'\n'<<endl;
     show(Head);
     cout << endl << "          Bez 0\n" << endl;
     for ( i=0;i<15;i++)
    Del(Head);
     show(Head);
      int L = 0;
      cout <<"\nVvedite chislo = ";
      cin >> g;
      ListPtr Ptr1 = Head;
      int f = 0;
      int n = 0;
      while (Ptr1 != NULL)
      {
        n = Poisk(g, f, Ptr1, L);
        if (n == 0) break;
        else 
            cout << endl << "Poryadkovii nomer = " << L << endl;
     }
     if (f == 0) cout << "No";
     getch();
    }
/////////////////////////////////////////////////////////////////////////////
void show(ListPtr h)
    {
     ListPtr max=Head, min=Head;
     ListPtr tmp=h;
     while(tmp)
      {
       cout<<tmp->data<<' '<<' '<<' ';
       if (max->data<tmp->data) max=tmp;
       if (min->data>tmp->data) min=tmp;
       tmp=tmp->next;
      }
    cout<<endl<<endl<<"Max="<<max->data<<endl<<endl<<"Min="<<min->data<<endl;
    }
/////////////////////////////////////////////////////////////////////////////
void Del (ListPtr &h)
    {
     ListPtr r=h, p=NULL;
     while (r->data!=0)
      {
       p=r; r=r->next;
      }
     p->next=r->next;
     delete r;
    }
/////////////////////////////////////////////////////////////////////////////
void insHead(ListPtr &h,int a)
    {
     ListPtr tmp=new List;
     tmp->data=a;
     tmp->next=h;
     h=tmp;
    }
    int Poisk(int g, int &f, ListPtr& h, int &L )
    {
         while(h)
         { 
             L++;
             if (h ->data == g)
             {
                 h = h ->next;
                 f = 1;
                 return 1;
             }
             h = h ->next; 
         }
         return 0;
     }
 
Текущее время: 11:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru