Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
yulia137
1 / 1 / 0
Регистрация: 12.05.2011
Сообщений: 31
1

Осуществить сортировку и поиск в структуре Worker

14.05.2011, 20:49. Просмотров 1223. Ответов 17
Метки нет (Все метки)

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#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();
}
ввод и вывод работают, а вот с остальным трудности
помогите, кто может
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2011, 20:49
Ответы с готовыми решениями:

Как доделать сортировку в структуре
Написал всё. НО! Не получается отсортировать записи в структуре для вывода на экран. Есть...

Поиск по структуре не получается
Имеется структура в которой нужно найти информацию о студентах по введенном числу массива Y, если...

В массиве К[20] элементов осуществить сортировку по увеличению элементов массива
В массиве К элементов осуществить сортировку по увеличению элементов массива .

Функция, осуществляющая поиск в структуре
Здравствуйте уважаемые форумчане! Помогите, пожалуйста, разобраться со структурами. Суть программы...

Поиск в структуре по разным полям
Доброго времени суток. Нужна небольшая консультация. Задание стандартное, работа со структурой. И...

17
Jtalk
95 / 81 / 3
Регистрация: 13.05.2011
Сообщений: 279
14.05.2011, 20:54 2
Какие конкретно трудности и где?
0
yulia137
1 / 1 / 0
Регистрация: 12.05.2011
Сообщений: 31
14.05.2011, 21:15  [ТС] 3
не могу осуществить сортировку и поиск
не понимаю где ошибки
и еще не знаю как использовать динамическую память
0
Jtalk
95 / 81 / 3
Регистрация: 13.05.2011
Сообщений: 279
14.05.2011, 21:34 4
Цитата Сообщение от yulia137 Посмотреть сообщение
не могу осуществить сортировку и поиск
не понимаю где ошибки
и еще не знаю как использовать динамическую память
Где ошибки показывает компилятор.
Логические ошибки ищутся трассировкой.
Работа с памятью динамически осуществляется операторами new, new[], delete и delete[].

А вообще, в algorithm давно есть функция сортировки всего и вся - зачем новые костыли?
0
yulia137
1 / 1 / 0
Регистрация: 12.05.2011
Сообщений: 31
14.05.2011, 21:43  [ТС] 5
компилятор ошибок не выдает
она работает, только не так, как нужно
я понимаю как нужно делать, но не могу это описать в программе
0
Jtalk
95 / 81 / 3
Регистрация: 13.05.2011
Сообщений: 279
14.05.2011, 21:51 6
Цитата Сообщение от yulia137 Посмотреть сообщение
компилятор ошибок не выдает
она работает, только не так, как нужно
я понимаю как нужно делать, но не могу это описать в программе
Когда "она работает, только не так, как нужно" - это называется "логические ошибки". Как их искать выше уже написал.

А что вам нужно для того, чтобы смочь? Спрашивайте.
0
yulia137
1 / 1 / 0
Регистрация: 12.05.2011
Сообщений: 31
14.05.2011, 21:58  [ТС] 7
вообще мне нужно помочь исправить логические ошибки в двух процедурах, где они есть
т.к. я не вижу, где именно я ошиблась при написании
0
adico
13 / 13 / 4
Регистрация: 24.02.2011
Сообщений: 64
14.05.2011, 22:03 8
Попробуйте выводить промежуточные значения. Или воспользуйтесь дебагером. Про динамическую память прочитайте у Г.Шилдта или Б.Страуструпа первый вроде попонятнее. Но перед динамической памятью нужно разобратся в работе указателей.
0
Jtalk
95 / 81 / 3
Регистрация: 13.05.2011
Сообщений: 279
14.05.2011, 22:06 9
Цитата Сообщение от yulia137 Посмотреть сообщение
вообще мне нужно помочь исправить логические ошибки в двух процедурах, где они есть
т.к. я не вижу, где именно я ошиблась при написании
Выполните пошагово, просматривайте значения переменных на предмет невалидных значений.
0
yulia137
1 / 1 / 0
Регистрация: 12.05.2011
Сообщений: 31
14.05.2011, 22:10  [ТС] 10
а попробовать переделать вы не могли бы?
я понимаю, что это очень нагло с моей стороны просить об этом, но я уже долго вожусь с прогой и совершенно не понимаю что в ней не так
0
adico
13 / 13 / 4
Регистрация: 24.02.2011
Сообщений: 64
14.05.2011, 22:28 11
ну так на взляд пузыриковая сортировка делается так
C++
1
2
3
4
5
6
for(int i){
    for(int j){
       if(mas[j]>mas[j+1])
            swap();//обмен значениями
    }
}
0
yulia137
1 / 1 / 0
Регистрация: 12.05.2011
Сообщений: 31
14.05.2011, 22:55  [ТС] 12
все равно я ни капли не поняла
0
adico
13 / 13 / 4
Регистрация: 24.02.2011
Сообщений: 64
14.05.2011, 23:22 13
Ха вот тут я вас обманул .... в коде все было правильно не увидел, простите. В сортировке все верно.

Добавлено через 12 минут
Цитата Сообщение от yulia137 Посмотреть сообщение
void main()
Странно, странно.
0
yulia137
1 / 1 / 0
Регистрация: 12.05.2011
Сообщений: 31
15.05.2011, 00:01  [ТС] 14
тогда что в нем не правильного?
0
adico
13 / 13 / 4
Регистрация: 24.02.2011
Сообщений: 64
15.05.2011, 00:30 15
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#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;
    }
}
Вот почитайте, поправил помаленьку. В следующий раз будьте добры отформатируйте работу получше.
2
yulia137
1 / 1 / 0
Регистрация: 12.05.2011
Сообщений: 31
15.05.2011, 02:47  [ТС] 16
я вообще-то си изучаю, а не С++
ну ладно уж. и на этом спасибо
может научусь понимать оба языка
0
AmaTeRaTsu
94 / 27 / 2
Регистрация: 31.05.2011
Сообщений: 123
28.02.2012, 08:10 17
adico, задача пригодилась. Все работает отлично (лишь одна мелкая ошибка). Спасибо.
0
Миниатюры
Осуществить сортировку и поиск в структуре Worker  
easybudda
Модератор
Эксперт CЭксперт С++
10245 / 6136 / 1543
Регистрация: 25.07.2009
Сообщений: 11,677
28.02.2012, 10:29 18
yulia137, Вы только не обижайтесь, но на самом деле всё плохо. Глобальные переменные без веской на то причины - плохой стиль. Функции, привязанные к глобальным переменным - совсем плохой стиль. Функция ввода должна бы возвращать что-нибудь, символизирующее удачность или ошибку ввода (UNIX-стиль: 0, если всё успешно, или число, отличное от нуля, обычно -1 в случае ошибки). Объявление массива структур (мало того, что глобального) в стиле С++, то есть, как С-программа, это просто не скомпилируется (поищите в настройках студии пимпу "Компилировать, как С программу", или что-то вроде этого).
Если всё вышесказанное не смутило, вот тут как-раз про то, как структуры сортировать...
0
28.02.2012, 10:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.02.2012, 10:29

Поиск в структуре, которая содержит информацию о книгах в библиотеке
Дан массив структур. Каждая структура содержит информацию о книгах в библиотеке (придумать 5 полей...

Обеспечить поиск нужных элементов в несортованых массивах, осуществить их сортировку
Элементы массива А, которые повторяются и одновременно отсутствуют в массиве В

[Error] no matching function for call to 'worker::worker()' (Worker-структура)
#include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;cstring&gt; using namespace std; struct worker {...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru