Главная страница

Структуры

Условие задачи.

Вариант 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;
}
Главная страница
Хостинг от uCoz