Осуществить сортировку и поиск в структуре 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 программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д