Структуры
Условие задачи.
Вариант 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;
}
Главная страница