Структуры
Условие задачи.
Вариант 6:
1. Описать структуру с именем WORKER, содержащую следующие поля:
- фамилия и инициалы работника;
- название занимаемой должности;
- год поступления на работу.
2. Написать программу, выполняющую следующие действия:
- ввод с клавиатуры данных в массив, состоящий из десяти структур
типа WORKER; записи должны быть размещены по алфавиту.
- вывод на дисплей фамилий работников, чей стаж работы в организации
превышает значение, введенное с клавиатуры;
- если таких работников нет, вывести на дисплей соответствующее сообщение.
Программа скомпилирована в ОС Ubuntu 9.4 с помощью среды разработки Geany 0.16.
Язык С++. Консольное приложение.
Программа отображает сообщения на русском языке в консоли и
считывает русские слова из консоли правильно при установке одинаковых
кодировок символов в Geany для текста программы и в терминале.
Автор программы устанавливал кодировку в Geany и терминале "Windows-1251".
Ubuntu это позволяет.
Исходный текст программы:
#include <iostream> using namespace std; //Определение структуры для хранения данных работников struct WORKER{ char fio[25]; char dolznost[30]; unsigned int god;} massiv[10]; //Определение функции, находящей какая из двух строк (размещенных в массивах) //в алфавитном порядке первая. Если первая строка - это первый параметр, //то функция возвращает значение 1, если первая строка - это второй параметр, //то функция возвращает значение 0. bool pervoe(char fio1[],char fio2[]) { int nomer1,nomer2; for(int i=0;i<25;i++) { switch(fio1[i]) {case 'а': nomer1=1; break; case 'б': nomer1=2; break; case 'в': nomer1=3; break; case 'г': nomer1=4; break; case 'д': nomer1=5; break; case 'е': nomer1=6; break; case 'ё': nomer1=7; break; case 'ж': nomer1=8; break; case 'з': nomer1=9; break; case 'и': nomer1=10; break; case 'й': nomer1=11; break; case 'к': nomer1=12; break; case 'л': nomer1=13; break; case 'м': nomer1=14; break; case 'н': nomer1=15; break; case 'о': nomer1=16; break; case 'п': nomer1=17; break; case 'р': nomer1=18; break; case 'с': nomer1=19; break; case 'т': nomer1=20; break; case 'у': nomer1=21; break; case 'ф': nomer1=22; break; case 'х': nomer1=23; break; case 'ц': nomer1=24; break; case 'ч': nomer1=25; break; case 'ш': nomer1=26; break; case 'щ': nomer1=27; break; case 'ь': nomer1=28; break; case 'ы': nomer1=29; break; case 'ъ': nomer1=30; break; case 'э': nomer1=31; break; case 'ю': nomer1=32; break; case 'я': nomer1=33; break; default: cout<<"Не определен символ в первом слове"; } switch(fio2[i]){ case 'а': nomer2=1; break; case 'б': nomer2=2; break; case 'в': nomer2=3; break; case 'г': nomer2=4; break; case 'д': nomer2=5; break; case 'е': nomer2=6; break; case 'ё': nomer2=7; break; case 'ж': nomer2=8; break; case 'з': nomer2=9; break; case 'и': nomer2=10; break; case 'й': nomer2=11; break; case 'к': nomer2=12; break; case 'л': nomer2=13; break; case 'м': nomer2=14; break; case 'н': nomer2=15; break; case 'о': nomer2=16; break; case 'п': nomer2=17; break; case 'р': nomer2=18; break; case 'с': nomer2=19; break; case 'т': nomer2=20; break; case 'у': nomer2=21; break; case 'ф': nomer2=22; break; case 'х': nomer2=23; break; case 'ц': nomer2=24; break; case 'ч': nomer2=25; break; case 'ш': nomer2=26; break; case 'щ': nomer2=27; break; case 'ь': nomer2=28; break; case 'ы': nomer2=29; break; case 'ъ': nomer2=30; break; case 'э': nomer2=31; break; case 'ю': nomer2=32; break; case 'я': nomer2=33; break; default: cout<<"Не определен символ во втором слове"; } if(nomer1<nomer2) return true; if(nomer1>nomer2) return false; } } int main(int argc, char** argv) { //Ввод числа элементов массива int chislo; cout<<"Введите число записей"<<"\t"; cin>>chislo; //Ввод элементов массива (структур) for(int i=0;i<chislo;i++) { cin>>massiv[i].fio; cin>>massiv[i].dolznost; cin>>massiv[i].god; } //Перестановка (сортировка)элементов массива (структур) //в алфавитном порядке поля данных fio структур for(int i=0;i<chislo-1;i++) { int imin=i; for(int j=i+1;j<chislo;j++) if(pervoe(massiv[j].fio,massiv[imin].fio))imin=j; struct{char fio1[25];char dolznost1[30]; unsigned int god1;}str2; for(int k=0;k<25;k++){ str2.fio1[k]=massiv[i].fio[k]; massiv[i].fio[k]=massiv[imin].fio[k]; massiv[imin].fio[k]=str2.fio1[k]; } for(int k=0;k<30;k++){ str2.dolznost1[k]=massiv[i].dolznost[k]; massiv[i].dolznost[k]=massiv[imin].dolznost[k]; massiv[imin].dolznost[k]=str2.dolznost1[k]; } str2.god1=massiv[i].god; massiv[i].god=massiv[imin].god; massiv[imin].god=str2.god1; } //Ввод ограничения стажа для вывода cout<<"Введите ограничение стажа"<<"\t"; unsigned int staz1; cin>>staz1; //Вывод полей fio структур, удовлетворяющих ограничению стажа bool estrab=false; for(int i=0;i<chislo;i++) { if((2010-massiv[i].god)>staz1) {cout<<massiv[i].fio<<endl; estrab=true; } } if(estrab==false) cout<<"Нет работников со стажем больше "<<staz1<<" лет"; return 0; }Главная страница