Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 6

Вывести список работников пенсионного возраста (Ошибка)

20.05.2013, 12:31. Показов 2938. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Когда создан список, нужно вывести список работников пенсионного возраста, но при нажатии клавиши 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
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
#include <iostream>
#include <iomanip>
#include <stdlib.h>
#include <windows.h>
#include <string.h>
#include <conio.h>
#define MAX 512
#define ESC 27
using namespace std;
struct dd_mm
{
   int dd;
   int mm;
   int yy;
};
struct work
{
   char familiya[30], name[30], otchestvo[30];
   struct dd_mm data;
   char post[30], name_state[30];
   struct dd_mm work;
   float price;   
}*note;
void sortABC(work note[], int size, int alfavit[ ]) //Сортировка прямым выбором
{
 int i, j; //Сортировка
 int temp, minI;  
 for(i=0; i<size-1; i++)
    {
            minI=i;
    for (j=i+1; j<size; j++)
        if (strcmp(note[alfavit[j]].familiya, note[alfavit[minI]].familiya)<0) minI=j;
    temp=alfavit[minI]; 
    alfavit[minI]=alfavit[i];
    alfavit[i]=temp;
    }    
}
void show(work note[], int i)
{
 cout<<setw(10)<<note[i].familiya<<" | "<<setw(10)<<note[i].name<<" | "<<setw(10)<<note[i].otchestvo<<" | "<<setw(4)<<note[i].data.dd<<"."<<note[i].data.mm<<"."<<note[i].data.yy<<" |"<<setw(8)<<(2013-note[i].work.yy)<<" |"<<endl;
}
int main()
{
 setlocale(LC_ALL,"Russian");
 int i=0, j, change=0, size=0, kol=0;
 int *alfavit; 
 float summa;
 while(change!=ESC)
      {
        system("cls");
      cout<<"Главное меню:\n1. Вывести список сотрудников\n2. Редактировать список\n3. Поиск\n4. Вывод сотрудников пенсионного возраста\n5. Вывести сотрудников определенного отдела\n. ESC-Выход\n\n";
      change=getch();
      switch(change)
      { 
      case '1': if(size!=0) 
                {
                    for(i=0; i<size; i++)
                        show(note, i);
                }
                else {cout<<"В данный момент БД пуста!"<<endl;
  system("pause"); 
  system("cls");}
                getch();
                break;
      case '2': while(change!='3')
                   {
                   cout<<"Редактировать список\n1. Ввод данных в БД\n2. Очистить БД\n3. Назад\n\n";
                   change=getch(); 
                   switch(change)
                   {
                   case '1': if (size==0) note=new work[MAX];  
                           i=size;
                           while(change!='0')
                                {
                                cout<<"Введите фамилию:"<<endl;
                                cin>>note[i].familiya;
                                cout<<"Введите имя:"<<endl;
                                cin>>note[i].name;
                                cout<<"Введите отчество:"<<endl;
                                cin>>note[i].otchestvo;
                                do{
                                  cout<<"Введите дату рождения (dd mm yy):"<<endl;
                                  cin>>note[i].data.dd>>note[i].data.mm>>note[i].data.yy;
                                  } while(note[i].data.dd<0 || note[i].data.dd>32 || note[i].data.mm<0 || note[i].data.mm>13 || note[i].data.yy<1920 || note[i].data.yy>2000);
                                cout<<"Введите название отдела:"<<endl;
                                cin.ignore();
                                cin.getline(note[i].name_state, 30);
                                cout<<"Введите должность:"<<endl;
                                cin.ignore();
                                cin.getline(note[i].post, 30);
                                
                                do{
                                  cout<<"Введите дату устройства на работу (dd mm yy):"<<endl;
                                  cin>>note[i].work.dd>>note[i].work.mm>>note[i].work.yy;
                                  } while(note[i].work.dd<0 || note[i].work.dd>32 || note[i].work.mm<0 || note[i].work.mm>13 || note[i].work.yy<1920 || note[i].work.yy>2012);
                                cout<<"Введите оклад:"<<endl;
                                cin>>note[i].price;
                                cout<<"Вводить ещё? 1 - ДА, 0 - НЕТ"<<endl;
                                change=getch();
                                i++;
                                }
                           size=i;
                           system("cls");
                           break;
                   case '2': delete[]note; 
                           size=0;
                           cout<<"Список очищен!"<<endl;
                           system("pause"); 
                           system("cls");
                           break;
                   case '3': system("cls");
                           break;
                   default: cout<<"Неверный номер! "; 
system("pause");                 
                   } 
                   }
              break; 
      case '3': if (size!=0) {cout<<"Поиск (Введите данные или введите нуль, если сомневаетесь): "<<endl;
                            cout<<"Введите фамилию:"<<endl;
                            cin>>note[size+1].familiya;
                            cout<<"Введите имя:"<<endl;
                            cin>>note[size+1].name;
                            cout<<"Введите должность:"<<endl;
                            cin>>note[size+1].post;
                            kol=0;
                            for(i=0; i<size; i++)
                               {
                               j=0;
                               if (strcmp(note[size+1].familiya, note[i].familiya)==0) j++;
                               if (strcmp(note[size+1].name, note[i].name)==0) j++;
                               if (strcmp(note[size+1].post, note[i].post)==0) j++;
                               if (j>0) {show(note, i); kol++;}
                               }   
                           if (kol>0) cout<<"Найдено совпадений: "<<kol<<endl;
                              else cout<<"Совпадений нет!"<<endl;
                           }
                  else cout<<"БД пуста!"<<endl;  
              system("pause");
              system("cls");          
              break;
      case '4': if (size!=0) {
                           j=0;
                           alfavit=new int[size];
                           for(i=0; i<size; i++)
                              if ((2013-note[i].data.yy)>55) {alfavit[j]=i; j++;}
                           if (j!=0) {
                                     sortABC(note, size, alfavit);
                                     cout<<setw(12)<<"Фамилия |"<<setw(13)<<"Имя |"<<setw(13)<<"Отчество|"<<setw(14)<<"Д.Р. |"<<setw(12)<<" Стаж |\n\n";
                                     for(i=0; i<j; i++)
                                        show(note, alfavit[i]);
                                     delete(alfavit);
                                     }
                              else cout<<"Совпадений нет!";
                           }
                 else {cout<<"В данный момент БД пуста!"<<endl; 
 system("pause");
 system("cls");}
                getch();
              break;
      case '5': if (size!=0) {
                           summa=0;
                           j=0;
                           cout<<"Введите название отдела:"<<endl;
                           cin.ignore();
                           cin.getline(note[size+1].name_state, 30);
                           for(i=0; i<size; i++)
                              if (strcmp(note[i].name_state, note[size+1].name_state)==0) {summa+=note[i].price; j++;}
                           if (j!=0) {
                                     cout<<"Средний заработок в отделе "<<note[size+1].name_state<<" составляет: "<<summa/j;
                                     }
                              else cout<<"Такого отдела нет!";
                           }
                 else {cout<<"В данный момент БД пуста!"<<endl;
  system("pause");
  system("cls");}
              break;
        case ESC: break;
      default: cout<<"Неверный номер! "; 
system("pause");
      }
      }
 return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.05.2013, 12:31
Ответы с готовыми решениями:

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

Вывести информацию о сотруднике, список сотрудников пенсионного возраста, средний оклад сотрудников отдела
Дан файл, содержащий информацию о сотрудниках отдела учреждения. Структура записи файла: фамилия и инициалы сотрудника; год...

Определить сотрудников, которым в следующем году достигнут пенсионного возраста (выводится только 1 сотрудник)
Определить сотрудников, которым в следующем году достигнут пенсионного возраста.. #include &lt;iostream&gt; #include &lt;conio.h&gt; ...

10
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2223 / 1425 / 420
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
20.05.2013, 12:39
Я конечно еще новичек в Си, но вот это что?
C++
1
delete(alfavit);
По идее должно быть так:
C++
1
 delete []alfavit;
0
0 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 6
20.05.2013, 12:48  [ТС]
Цитата Сообщение от Ilot Посмотреть сообщение
Я конечно еще новичек в Си, но вот это что?
C++
1
delete(alfavit);
По идее должно быть так:
C++
1
 delete []alfavit;
все равно ошибка
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2223 / 1425 / 420
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
20.05.2013, 12:57
C++
1
2
3
4
5
 int *alfavit; 
...
...
...
 alfavit=new int[size];
Это тебя не смущает?
0
 Аватар для henecs
18 / 18 / 11
Регистрация: 19.05.2013
Сообщений: 135
20.05.2013, 13:41
заупстил, работает
проверял с одним сотрудником

Добавлено через 24 минуты
немного переделал сортировку
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void sortABC(work note[], int size) //сортировка бульбашкой
{
 int i, j;
 work temp;
 for(i=0; i<size; i++)
    for (j=i+1; j<size-1; j++)
      {
         if (strcmp(note[j].familiya, note[j+1].familiya)<0) ;
         temp=note[j+1];
         note[j+1]=note[j];
         note[j]=temp;
      }
}
и переделал 4ю клавишу ты создавал массив индексов, я же создаю массив структуры и пишу туда эелементы которых выполняеться условие и потом сортирую его
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 //----------------------------    
                 case '4': if (size!=0) {
                           j=0;
                           alfavit=new work[size];
                           for(i=0; i<size; i++)
                              if ((2013-note[i].data.yy)>55) {alfavit[j]=note[i]; j++;}
                           if (j!=0) {
                                     sortABC(alfavit,j);
                                     cout<<setw(12)<<"last name |"<<setw(13)<<"name |"<<setw(13)<<"foname|"<<setw(14)<<"birtday |"<<setw(12)<<" stz |\n\n";
                                     for(i=0; i<j; i++)
                                        show(alfavit,i);
                                     delete [] alfavit;
                                     }
                              else cout<<"saerch rerutn null!";
                           }
                 else {cout<<"bd null!"<<endl;
0
0 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 6
20.05.2013, 14:30  [ТС]
Цитата Сообщение от henecs Посмотреть сообщение
заупстил, работает
проверял с одним сотрудником

Добавлено через 24 минуты
немного переделал сортировку
...
и переделал 4ю клавишу ты создавал массив индексов, я же создаю массив структуры и пишу туда эелементы которых выполняеться условие и потом сортирую его
...
ну у меня работало до человек 3-4, потом ошибка.

можешь полностью код выложить?
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
20.05.2013, 16:21
Освобождение памяти под alfavit не там сделано. Если j == 0, то память не освободится.
0
0 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 6
20.05.2013, 16:27  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
Освобождение памяти под alfavit не там сделано. Если j == 0, то память не освободится.
как исправить?
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
20.05.2013, 16:38
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
case '4': if (size!=0) {
                           j=0;
                           alfavit=new work[size];
                           for(i=0; i<size; i++)
                              if ((2013-note[i].data.yy)>55) {alfavit[j]=note[i]; j++;}
                           if (j!=0) {
                                     sortABC(alfavit,j);
                                     cout<<setw(12)<<"last name |"<<setw(13)<<"name |"<<setw(13)<<"foname|"<<setw(14)<<"birtday |"<<setw(12)<<" stz |\n\n";
                                     for(i=0; i<j; i++)
                                        show(alfavit,i);
                                     
                                     }
                              else cout<<"saerch rerutn null!";
 
                              delete [] alfavit;
                           }
                 else {cout<<"bd null!"<<endl;
0
 Аватар для henecs
18 / 18 / 11
Регистрация: 19.05.2013
Сообщений: 135
20.05.2013, 16:40
Цитата Сообщение от Hot Посмотреть сообщение
можешь полностью код выложить?
дык я больше ничего не менял
0
0 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 6
20.05.2013, 17:11  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
case '4': if (size!=0) {
                           j=0;
                           alfavit=new work[size];
                           for(i=0; i<size; i++)
                              if ((2013-note[i].data.yy)>55) {alfavit[j]=note[i]; j++;}
                           if (j!=0) {
                                     sortABC(alfavit,j);
                                     cout<<setw(12)<<"last name |"<<setw(13)<<"name |"<<setw(13)<<"foname|"<<setw(14)<<"birtday |"<<setw(12)<<" stz |\n\n";
                                     for(i=0; i<j; i++)
                                        show(alfavit,i);
                                     
                                     }
                              else cout<<"saerch rerutn null!";
 
                              delete [] alfavit;
                           }
                 else {cout<<"bd null!"<<endl;
ошибка http://imgs.su/tmp/2013-05-20/1369054496-513.jpg

Добавлено через 17 минут
Цитата Сообщение от Hot Посмотреть сообщение
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.05.2013, 17:11
Помогаю со студенческими работами здесь

Получить список сотрудников пенсионного возраста на сегодняшний день с указанием стажа работы
Написать программу, которая позволяет получить следующую информацию: список сотрудников пенсионного возраста на сегодняшний день с...

Вывести на экран фамилии тех, кто достиг пенсионного возраста
Помогите решить пожалуйста 1. Даны такие сведения о 10 человек: фамилия, пол и дата рождения (дата типа структура). Определить возраст...

Вычисление пенсионного возраста
Здравствуйте, товарищи, я еще только разбираюсь с mySQL так что вот есть такой вопрос. Дано задание Вывести в алфавитном порядке Ф.И.О....

Создания запроса: сотрудники пенсионного возраста
Всем привет) прошу помочь с запросом. Запрос должен выводить всех сотрудников пенсионного возраста, с учётом , что женщины 55 лет , а...

Подсчитать возраст выхода на пенсию с учётом изменения пенсионного возраста по годам
Помогите, пожалуйста, подсчитать возраст выхода на пенсию с учётом изменения пенсионного возраста по годам. Т Таблица с изменениями на...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru