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

Линейный список (создать, удалить элемент, добавить элемент, вывести всё эементы) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Найдите сумму элементов сбалансированного дерева, находящихся на уровне k http://www.cyberforum.ru/cpp-beginners/thread841076.html
В динамических структурах не могу разобраться, сколько бы ни пытался.... Надеюсь на вашу помощь в выполнении заданий... 2. Найдите сумму элементов сбалансированного дерева, находящихся на уровне k.
C++ Посмотреть элементы массива Подскажите, как посмотреть элементы динамического массива при дебаге (VS 2010)? http://www.cyberforum.ru/cpp-beginners/thread841062.html
C++ Подскажите с конструкторами классов
Напишите пожалуйста кратенькие примеры конструкторов класса. Примеры конструкторов к этому классу пожалуйста (конструктор: копирования, присваивания и по-умолч.) Вот класс: #include <stdio.h> #include <conio.h> #include <string.h> class rast { char name;
Алгоритм Штрассена C++
при n=2 она работает правильно, но когда n=4 она считает неправильно. там последний столбец вычисляет правильно, а остальное нет короче получается с рекурсией чет не то, когда рекурсия проходит только по одному разу все ок ,а когда уже размер равен 4 вот где-то считает неправильно помогите ! #include <stdio.h> #include <iostream> #include <iomanip> using namespace std; #define n 2
C++ Использование классов http://www.cyberforum.ru/cpp-beginners/thread841039.html
Расскажите пожалуйста на кокретных примерах как и где модно использовать классы?
C++ Просто интересно #include <iostream> using namespace std; int main() { double z=0; double x=-2; cout<< x*z; system ("pause"); подробнее

Показать сообщение отдельно
KatrinSH
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 6
17.04.2013, 22:52     Линейный список (создать, удалить элемент, добавить элемент, вывести всё эементы)
в общем, передо мной стоит задача создать линейный список(в этом линейном списке у меня хранится фамилия человека, год, в котором он родился и его знак зодиака). в этом линейном списке нужно удалить элемент, добавить элемент, вывести всё эементы из исходного файла на экран. всё практически вышло, вот только когда вывожу все лементы моего списка на экран, то каждый раз после "имя дата знак зодиака" выводятся ещё какие-то цифры, не знаю как эти цифры убрать. если поможете, буду очень признательна


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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
 
using namespace std;
 
const int d_name = 30;
            struct znak {
            char name [d_name];
            int birth_day;
            char zodiak[19];
            znak *next;
            };
 
            void get_name (char* name) // ------------------------------------------------------------------ запрос фамилии и знака зодиака
        {
            puts ("vveditee F.I.O\n"); gets(name);
        }
 
        void get_name2 (char* zodiak)
        {
            puts ("vvedite znak zodiaka\n");gets(zodiak);
        }
znak* add(znak *beg, const znak &Znak);
int edit (znak *beg);
znak* find (znak* beg, char *name, znak *& prev);
void find1 (znak* beg, int birth_day);
void find2 (znak * beg, char zodiak);
void find_Znak(znak *beg);
void get_name (char *name);
 int menu ();
 void print_dbase(znak *beg);
 znak* read_dbase(char* filename);
 znak read_znak();
 znak* remove(znak *beg);
 int write_dbase (char *filename, znak *beg );
 
 
    znak* find (znak* pv, char* name, znak *& prev) //----------------------------------------------------поиск человека по имени и фамилии
    {
        prev=0;
        while (pv)
        {
            if (strstr(pv->name,name))
            if (pv->name [strlen(name)]==' ')
            {
                printf ("%s%i%s\n",pv->name, pv->birth_day,pv->zodiak);
                return pv;
            }
                prev=pv;
                pv=pv->next;
        }
            puts ("takoo cheloveka net\n");
            return 0;
        }
znak* add( znak *beg, const znak &Znak )//------------------------------------------------------------------добавление сотрудника
{
    znak* pv = new znak;
    *pv=Znak;
    pv->next=0;
    if (beg)
    {
        znak* temp=beg;
        while( temp->next)
        temp=temp->next;
        temp->next=pv;
    }
    else beg=pv;
    return beg;
    }
void find_Znak(znak* beg)//---------------------------------------------------------------------------------------------поиск
{
    char* buf=new char[d_name];
    int option;
    znak *prev=0, *pv=0;
    do  {
        puts("1 - poisk proisvoditsya po familii \n 2 - otmena");
        gets(buf);
        }
        while (!(option=atoi(buf)));
        switch(option)
        {
         case 1: get_name(buf);
         pv=find(beg,buf,prev);break;
         case 2: return ;
         default: puts("nevernyi rezhim \n");
         }
        }
     int menu () // ------------------------------------------------------------------------------ вывод меню
        {
            char buf[10];
            int option;
            do
            {
                puts("=========================");
                puts(" 1 - dobavlenie cheloveka;\n 2 - udalenie cheloveka;");
                puts(" 3 - poisk cheloveka;\n 4 - vyvod na ekran;");
                puts(" 5 - vivod basy v fail;\n 6 - vyhod\n");
                gets(buf);
                option=atoi(buf);
            } while (!option);
            return option;
        }
         void print_dbase(znak* beg)//-------------------------------------------------------------------вывод базы на экран
         {
             znak* pv=beg;
             while(pv)
             {
                 printf ("%s%i%s\n",pv->name,pv->birth_day,pv->zodiak);
                 pv=pv->next;
             }
         }
       znak* read_dbase(char* filename) //---------------------------------------------------------------чтение базы из файла
        {
            FILE* fin;
            znak Znak,*beg=0;
            if((fin=fopen(filename,"r"))==0)
            {
                printf("net fayla %s \n",filename );
                return NULL;
            }
 
            while(!feof(fin))
            {
                fgets(Znak.name,d_name,fin);
                fscanf(fin,"%i%s\n",&Znak.birth_day,&Znak.zodiak);
                beg=add(beg,Znak);
            }
 
            fclose(fin);
            return beg;
 
        }
 
        znak read_Znak() //-----------------------------------------------------------------------------ввод информации о новом человеке
        {
            znak Znak; char buf [80];
            get_name(Znak.name);
            for (int i=strlen(Znak.name);i<d_name;i++)
            Znak.name[i]=' ';
            Znak.name[d_name-1]='\0';
 
            do
            {
                puts ("vvedi god");
                gets(buf);
            }
           while (!(Znak.birth_day=atoi(buf)));
 
           get_name2(Znak.zodiak);
          for (int i=strlen(Znak.zodiak);i<19;i++)
            Znak.zodiak[i]=' ';
            Znak.zodiak[18]='\0';
            return Znak;
        }
                znak* remove (znak* beg) //----------------------------------------------------------------------------удаление сотрудника
                {
                    char name[d_name];
                    get_name(name);
                    znak* prev;
                    znak* pv =find(beg,name,prev);
                    if (pv)
                    {
                        if(pv==beg) beg=beg->next;
                        else prev->next=pv->next;
                        delete pv;
                    }
                    return beg;
                    }
 
                    int write_dbase(char *filename,znak *pv)// -------------------------------------------------------- вывод базы в файл
                    {
                            FILE *fout;
                            if((fout=fopen(filename,"w"))==NULL)
                            {
                                puts("oshibka otkrytia faila \n"); return 1;
                            }
 
                            while(pv)
                            {
                                fprintf(fout,"%s%5i%19s\n",pv->name,pv->birth_day,pv->zodiak);
                                pv=pv->next;
                            }
                            fclose (fout);
   return 0; }
int main()
{
    znak *beg=read_dbase("f.txt");
    if (!beg) return 1;
    while (true)
    {
        switch (menu())
        {
            case 1: add(beg, read_Znak()); break;
            case 2: beg = remove (beg); break;
            case 3: find_Znak(beg); break;
            case 4:  print_dbase(beg); break;
            case 5:write_dbase("f.txt",beg); break;
            case 6: return 0;
            default: puts("Nado vstavit' chislo ot 1 do 6"); break;
                    }
    }}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 23:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru