Осуществить сортировку и поиск в структуре Worker - C (СИ)
Формулировка задачи:
#include <stdio.h>
#include <stdafx.h>
#include <conio.h>
#include <math.h>
int i,j,result=0;
struct Worker
{
char name[10];
char post[10];
int year;
};
Worker mas[10],x;
void vvod();
void vyvod();
void sort();
void poisk();
void main()
{
for(;result!=1;)
{
int answer;
printf("\n Worker - Enter 1\n Sort - Enter 2\n Poisk - Enter 3\n Exit. - Enter 0\n\n You answer: ");
scanf ("%i",&answer);
{
switch(answer)
{
case 1:{vvod();vyvod();result=0;break;}
case 2:{sort();vyvod();result=0;break;}
case 3:{poisk();result=0;break;}
default:break;
}
}
}}
void vvod()
{
for(i=0;i<10;i++)
{
cprintf(" Worker %i.",i+1);
printf("\n Name: ");
scanf("%s",&mas[i].name);
printf(" Dolgnost: ");
scanf("%s",&mas[i].post);
printf("\n God postupleniya:\n");
scanf("%i",&mas[i].year);
}
getch();
}
void vyvod()
{
printf("\n-------------------------------------\n");
printf("| Ф.И.О | Должность | Год п.р |\n");
for(i=0; i<10; i++)
{
printf("| %10s | %10s | %7d |\n",mas[i].name,mas[i].post,mas[i].year);
}
printf("-------------------------------------\n");
}
void sort()
{
cputs(" Spisok.");
for(i=0;i<10;i++)
{
for(j=i;j<10;j++)
{
if((mas[i].name)>(mas[j].name))
{
x=mas[i];
mas[i]=mas[j];
mas[j]=x;
}
}
//printf("\n %i: Name: %s\n dolgnost: %s\n %d god postupleniya: ",i+1,mas[i].name,mas[i].post,mas[i].year);
}
getch();
}
void poisk()
{
int date=2011,r;
int f=0,k;
printf("vvedite staj:");
scanf("%f",&k);
cputs(" Session.");
for(i=0;i<10;i++)
{
if(date-mas[i].year > k)
{
f=1;
printf("\n %s\n",mas[i].name);
}
}
if(f==0)
printf("\n\n Net rabotnikov so stajem bol`she %d.",k);
getch();
}Решение задачи: «Осуществить сортировку и поиск в структуре Worker»
textual
Листинг программы
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <iostream>
struct Worker
{
char name[10];
char post[10];
int year;
};
int size=10;
Worker *mas,x;
int i,j;
bool result=false;
void vvod();
void vyvod();
void sort();
void poisk();
void exit();
int main(){
setlocale( LC_ALL,"Russian" );
std::cout<<"Введите количество рабочих\n";
std::cin>>size;
mas=new Worker[size];
do{
int answer=0;
std::cout<<"Рабочий - Enter-1\n Сортировка - Enter-2\n Поиск - Enter-3\n Выход. - Enter-0\n\n Ваш выбор: \n";
std::cin>>answer;
if(answer==1){vvod();vyvod();exit();}
if(answer==2){sort();vyvod();exit();}
if(answer==3){poisk();exit();}
if(answer==0){return 0;}
}while(!result);
return 0;
}
void vvod(){
for(i=0;i<size;i++)
{
std::cout<<"Worker "<<i+1<<std::endl;
std::cout<<"Name: \n";
std::cin>>mas[i].name;
std::cout<<"Dolgnost: \n";
std::cin>>mas[i].post;
std::cout<<"God postupleniya: \n";
std::cin>>mas[i].year;
std::cout<<std::endl;
}
}
void vyvod(){
std::cout<<"\n-------------------------------------\n";
std::cout<<"| Ф.И.О | Должность | Год п.р |\n";
for(i=0; i<size; i++)
{
std::cout<<" "<<mas[i].name<<" "<<mas[i].post<<" "<<mas[i].year<<std::endl;
}
std::cout<<"-------------------------------------\n";
}
void sort(){
for(int i=0;i<size;i++){
for(int j=i;j<size;j++){
if(abs((int)mas[i].name[0]))>abs((int)(mas[j].name[0]))){
x=mas[i];
mas[i]=mas[j];
mas[j]=x;
}
}
}
}
void poisk(){
int date=2011;
int f=0,k;
std::cout << "Введите стаж:" <<std::endl;
std::cin>>k;
for(int i=0;i<size;i++){
if(date-mas[i].year > k){
f=1;
std::cout<<"\n"<< mas[i].name<<std::endl;
}
}
if(f==0)
std::cout<<"\n\n Нет работников со стажем больше "<<k<<std::endl;
}
void exit(){
char answer;
std::cout << "Выход да-0, нет-1\r\n";
std::cin >> answer;
result=false;
if(answer=='1'){
result=true;
}
}
Объяснение кода листинга программы
Список функций и переменных:
- void vvod() - ввод данных о работниках
- void vyvod() - вывод данных о работниках
- void sort() - сортировка работников по алфавиту (по имени)
- void poisk() - поиск работников по году поступления на работу
- void exit() - выход из программы
- int size - количество работников
- Worker *mas - массив структур Worker, представляющих работников
- Worker x - временная структура Worker
- int i, j - индексы для обхода массива mas
- bool result - флаг выхода из цикла do-while
- char answer - введенный пользователем ответ на вопрос
- int answer - введенный пользователем ответ на вопрос
- int k - год, отстоящий от текущего года на указанное количество лет
- int date - текущий год
- int f - флаг наличия работников, удовлетворяющих условию поиска Код выполняет следующие действия:
- Ввод количества работников с помощью функции std::cin и переменной size.
- Выделение памяти под массив структур Worker с помощью оператора new.
- Запуск цикла do-while, который продолжается до тех пор, пока пользователь не введет '1' для выхода из программы.
- В начале каждого прохода цикла пользователю предлагается ввести число от 1 до 3 для выбора действия: ввод данных, вывод данных или сортировка.
- Если выбрано введение данных, вызывается функция vvod(), которая запрашивает и сохраняет данные о каждом работнике.
- Если выбрано вывод данных, вызывается функция vyvod(), которая выводит данные о всех работниках в формате таблицы.
- Если выбрана сортировка, вызывается функция sort(), которая сортирует работников по алфавиту (по имени).
- Если выбрано поиск, вызывается функция poisk(), которая ищет работников, у которых год поступления на работу больше указанного пользователем числа.
- После окончания цикла do-while программа завершается.