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

Создать структуру с именем Sotrudnik - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
~Sл@\/яH~
0 / 0 / 0
Регистрация: 17.12.2011
Сообщений: 13
18.03.2012, 15:29     Создать структуру с именем Sotrudnik #1
Добрый день. Не знаю как сделать задачу. Помогите кто чем может.

Создать структуру с именем Sotrudnik с полями: фамилия, имя, должность, год поступления на работу. Сформировать двусвязный список. Удалить из списка тех сотрудников, кто работает менее 3-х лет. Вывести измененный список.

Структуру создать, создал, а вот как дальше не знаю
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Centrino
0 / 0 / 0
Регистрация: 15.04.2011
Сообщений: 33
18.03.2012, 18:01     Создать структуру с именем Sotrudnik #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
#include <iostream>
#include <fstream>
 
using namespace std;
 
struct Sotrudnik{
    char name[20] ;
    char surname[20];
    char job[20];
    int year;
 
    Sotrudnik *prevS;
    Sotrudnik *nextS;
};
 
int main(){
    fstream f;
    f.open("in.txt");
    int count;
    f>>count;
    Sotrudnik *top = NULL;
    Sotrudnik *Ab;
    for (int i = 0; i < count; i++){
        Ab = new Sotrudnik;
        f>>Ab->name;
        f>>Ab->surname;
        f>>Ab->job;
        f>>Ab->year;
        if (top) top->nextS = Ab;
        Ab->prevS = top;
        top = Ab;
    }
    top->nextS = NULL;  //следующего не будет
    for (int i = 0; i < count; i++){//пробегаем всех
        if (top->year<2009){
            (top->prevS)->nextS = top->nextS;
        }
        top = top->prevS;
    }
    f.close();
    return 0;
}
как-то вот так
~Sл@\/яH~
0 / 0 / 0
Регистрация: 17.12.2011
Сообщений: 13
18.03.2012, 18:18  [ТС]     Создать структуру с именем Sotrudnik #3
А если вручную набирать не известное количество сотрудников?
Centrino
0 / 0 / 0
Регистрация: 15.04.2011
Сообщений: 33
18.03.2012, 18:42     Создать структуру с именем Sotrudnik #4
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
#include <iostream>
#include <string>
 
using namespace std;
 
struct Sotrudnik{
    string name ;
    string surname;
    string job;
    int year;
 
    Sotrudnik *prevS;
    Sotrudnik *nextS;
};
 
int main(){
    Sotrudnik *top = NULL;
    Sotrudnik *Ab;
    string t;
    while (cout << endl << "enter name" && cin>>t && t != "exit"){
        Ab = new Sotrudnik;
        (Ab -> name) = t;
        cout << "enter surname"<< endl;
        cin >> Ab -> surname;
        cout << "enter job" << endl;
        cin >> Ab -> job;
        cout << "enter year" << endl;
        cin >> Ab -> year;
        if (top) top -> nextS = Ab;
        Ab -> prevS = top;
        top = Ab;
    }
    top->nextS = NULL; 
 
    while(top->prevS){
        //
        cout << top -> year;
        if (top -> year < 2009){
            (top -> prevS)->nextS = top -> nextS;
        } else cout << top ->name;
        top = top -> prevS;
    }
    return 0;
}
вручную как-то так.

p.s. Да, while "прекрасен"
vanomux
3 / 3 / 0
Регистрация: 08.02.2012
Сообщений: 17
20.03.2012, 11:14     Создать структуру с именем Sotrudnik #5
Я понимаю ему самому нужно реализовать двух связный список, а не std использовать???Реализацию списка можешь здесь скачать http://algorithmlib.org/doubly_linked_list там все необходимые функции есть
~Sл@\/яH~
0 / 0 / 0
Регистрация: 17.12.2011
Сообщений: 13
20.03.2012, 20:08  [ТС]     Создать структуру с именем Sotrudnik #6
Цитата Сообщение от vanomux Посмотреть сообщение
Я понимаю ему самому нужно реализовать двух связный список, а не std использовать???Реализацию списка можешь здесь скачать http://algorithmlib.org/doubly_linked_list там все необходимые функции есть
Спасибо. Хорошая статейка. Но я уже без нее сделал.
~Sл@\/яH~
0 / 0 / 0
Регистрация: 17.12.2011
Сообщений: 13
01.04.2012, 12:26  [ТС]     Создать структуру с именем Sotrudnik #7
Помогите пожалуйста. У меня в программе что то не работает "Удалить из списка тех сотрудников, кто работает менее 3-х лет. Вывести измененный список."
Не знаю в чем ошибка.
Вот код
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
#include <iostream>
#include <conio.h>
#include <math.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
using namespace std;
int main ()
{
            SetConsoleCP (1251);
            SetConsoleOutputCP (1251);
int n,s;
cout<<"Введите год: ";
cin>>s;
cout<<"Введите количество сотрудников: ";
cin>>n;
struct Sotrudnik
{
    char fam[30];
    char im[10];
    char dol[30];
    int god;
 
    Sotrudnik*next;
    Sotrudnik*prev;
};
 
int i,p=0;
Sotrudnik*sot, *head=0, *tail=0, *current=0, *del=0;
sot=new Sotrudnik[n];
 
for(i=0;i<n;i++)
{
    if(i==0)
    {
        head=new Sotrudnik;
        tail=head;
        head->prev=0;
    }
    else
    {
        tail->next=new Sotrudnik;
        tail->next->prev=tail;
        tail=tail->next;
    }
    cout<<"Введите Фамилию  "<<'\n';
    cin>>tail->fam;
    cout<<"Введите имя \n";
    cin>>tail->im;
    cout<<"Введите должность \n";
    cin>>tail->dol;
    cout<<"Введите год поступления на работу \n";
    cin>>tail->god;
    tail->next=0;
}
 
cout<<"Введённый список \n";
current=head;
while(current!=0)
{cout<<current->fam<<"\t"<<current->im<<"\t"<<current->dol<<"\t"<<current->god<<'\n';
current=current->next;
}
current=head;
while(tail!=0)
{
if((s-current->god)<3)
{
    del=current;
    current=del->prev;
    current->next=del->next;
    delete del;
    current=current->next;
    p=1;
 
}
else
current=current->next;
}
if(p==0)
{
cout<<"В данном списке нет таких!\n";
current=head;
while(current!=0)
{cout<<current->fam<<"\t"<<current->im<<"\t"<<current->dol<<"\t"<<current->god<<'\n';
current=current->next;
}
}
else
{
cout<<"Список без удаления!\n";
current=head;
while(current!=0)
{cout<<current->fam<<"\t"<<current->im<<"\t"<<current->dol<<"\t"<<current->god<<'\n';
current=current->next;
}
}
delete [] sot;  
 
 
getch();
return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.03.2014, 19:28     Создать структуру с именем Sotrudnik
Еще ссылки по теме:

C++ Описать структуру с именем MARSH
C++ Определите структуру с именем
C++ Создать структуру с именем STUDENT, содержащую следующие поля:

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

Или воспользуйтесь поиском по форуму:
1071
 Аватар для 1071
0 / 0 / 0
Регистрация: 11.03.2014
Сообщений: 8
11.03.2014, 19:28     Создать структуру с именем Sotrudnik #8
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
#include <conio.h>
#include <Windows.h>
#include <iostream>
 
using namespace std;
//Создать структуру с именем Sotrudnik с полями: 
//фамилия, имя, должность, год поступления на работу.
//Сформировать двусвязный список. Удалить из списка тех сотрудников,
//кто работает менее 3-х лет. Вывести измененный список.
int main()
{   //setlocale(LC_ALL,"Russian");
struct Sotrudnik
{
    char Famil[20];
    char Imya[20];
    char Dolznost[20];
    int god;
 
        Sotrudnik * next, * prev;
        
};
Sotrudnik *head=0;//адрес головы списка
Sotrudnik *tail=0;//адрес хвоста списка  
//head->prev=0;
Sotrudnik *current,*tmp, *tyear;// tyear-работающий меньше 3 лет.
    /*setlocale(LC_ALL,"Russian");
    SetConsoleCP(1251);
SetConsoleOutputCP(1251);   */
char c;
int k;
cout<<"vvesti gaHHble? y/n";
 c=getche();     
 //формирование списка с клавиатуры
 while (c=='y' || c=='Y')  
 {                
if (head) //если не первый элемент списка
 { tail->next=new Sotrudnik;  /* создаем новый элемент и объяв-ляем его следующим для последнего элемента */
 
   tail->next->prev=tail; /* для вновь созданного элемента объявляем текущий последний элемент списка предыдущим */
   tail=tail->next;  /* созданный элемент списка объявляем по-следним */
  current=tail;
  }
else  //если создаем первый элемент списка
  { head=new Sotrudnik; /* созданный элемент объявляем головой списка */
    tail=head;   //он же пока и последний
    head->prev=0;  //у первого элемента нет предыдущего эле-мента
   current=head;
  }
               
 cout<<"\nvvedite gaHHble:\n";
  cout<<"famil:";
  cin>>current->Famil;  
  cout<<"imya:";
  cin>>current->Imya;
  cout<<"dolznost:";
  cin>>current->Dolznost;
  cout<<"god noctyplen:";
  cin>>current->god;
  current->next=0;
  cout<<"vvesti eLLLe gahhble? y/n \n";
  tail->next=0; /* у последнего элемента списка адрес не следующего элемента */
  c=getche();
 
 }
 
 
// current = head;
  current=current->next;
    while(current != 0)
    { 
        Sotrudnik *tmp = 0;
 
        if(2014 - (current -> god) < 3)
        {
            if(current == head)
            {
                tmp = head -> next;
                delete head;
                head = tmp;
                tmp -> prev = 0;
            }
            else if(current == tail)
            {
                tmp = tail -> prev;
                delete current;
                tail = tmp;
                tmp -> next = 0;
            }
            else
            {
                tmp = current -> prev;
                tmp -> next = current -> next;
                delete current;
            }
        }
    }        //удаление
 
current=head;
  while(current!=0)
  {
      cout<<"famil: \t";
     cout<<current->Famil<<"\n";
        cout<<"imya:\t";
     cout<<current->Imya<<"\n";
        cout<<"dolzhnostь: \t";
    cout<<current->Dolznost<<"\n";
      cout<<"god noctyplen: \t";
          cout<<current->god<<"\n";
    current=current->next;
    cout<<"\n";
  }
  
  
 
 system("pause");
  return 0;
}
Yandex
Объявления
11.03.2014, 19:28     Создать структуру с именем Sotrudnik
Ответ Создать тему
Опции темы

Текущее время: 20:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru