Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.91
All
1758 / 437 / 43
Регистрация: 09.04.2009
Сообщений: 2,599
#1

Дан массив данных о работающих в фирме - C++

09.06.2009, 23:12. Просмотров 2761. Ответов 27
Метки нет (Все метки)

Дан массив данных о работающих в фирме:
фамилия, имя, отчество, адрес ( улица, дом, квартира) и дата поступления на работу (месяц, год).
Напечатать данные тех из них, кто на сегодняшний день проработал уже не менее 5 лет.
Вот результаты трудов.
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
//Дан массив данных о работающих в фирме.
//Напечатать данные тех из них, кто на 
//сегодняшний день проработал уже не менее 5 лет.
#include<iostream>
#include<conio.h>
#include<stdio.h>
#define FNAME "Workers.dat"//Имя файла
void main()
{
char fname[200]=FNAME;
FILE *out;//Файл
int year;//Дата пост. на работу
char fio;//Фам. Имя Отчест.
char adress;//Адресс
int i;//Дата для сортировки
 
printf("\nВведите дату:",i);
//Открываем файл для чтения
out=fopen("Workers.dat","rd");
printf("\nОшибка при открытии файла");
getch();
  while(!feof(out))
  {
  fscanf(out,"%f",&year);
  if (year>=i-5)//Сравнение, я думаю это не правильно.
      printf("\n:Проработал(и,а)не менее 5 лет:", fio, adress, year);
  }
fclose(out); //Закpываем файл
getch();
}
Как реализовать вот это "Напечатать данные тех из них, кто на сегодняшний день проработал уже не менее 5 лет."

И почему компилятор ругается вот так" использована неинициализированная локальная переменная "adress"", так же ругается на "i" и "fio".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2009, 23:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Дан массив данных о работающих в фирме (C++):

Массив данных. Дан файл f, содержащий информацию о багаже нескольких пассажиров. Найти: - C++
Багаж пассажира характеризуется количеством вещей и общим весом вещей. Дан файл f, содержащий информацию о багаже нескольких пассажиров,...

Дан массив. Записать во второй массив все элементы, не совпадающие с минимальным - C++
Дан массив M(14).Записать в массив B все элементы , не совпадающие с минимальным. Cоставить блок схему программы

Дан массив А(4,4). Сформировать массив В(4) из среднеарифметических значений элементов в каждой строке. - C++
Дан массив А(4,4). Сформировать массив В(4) из среднеарифметических значений элементов в каждой строке. Посмотрите пожалуйста... ...

Дан массив. Создать массив 2 из четных чисел первого массива - C++
Задача: Дан массив. Создать новый массив из чётных чисел исходного массива. #endif #include &lt;stdio.h&gt; #include &lt;iostream.h&gt; ...

Дан массив A[N]. заполнить массив В[N] элементами массива A[N], которые удовлетворяют двойному неравенству - C++
Дан массив A. заполнить массив В элементами массива A, которые удовлетворяют двойному неравенству: A&lt; A или A&lt; A. Незаполненные элементы...

Дан массив из 25 элементов. Сформировать из него новый массив, элементы которого кратны 5 - C++
Помогите решить задачу. Дан массив из 25 элементов. Сформировать из него новый массив, элементы которого кратны 5.

27
All
1758 / 437 / 43
Регистрация: 09.04.2009
Сообщений: 2,599
15.06.2009, 09:48  [ТС] #16
data это дата для сравнения
Пишу так, выводит всех без сортировки.
C++
1
2
if (j=(*data -*workers[i].year))
   (j>=5);
Так , так же выводит всех без сортировки.
C++
1
2
if (j=(data -workers[i].year))
   (j>=5);
0
Lerikh
14 / 14 / 0
Регистрация: 09.06.2009
Сообщений: 42
15.06.2009, 09:53 #17
Цитата Сообщение от All Посмотреть сообщение
Пишу так, выводит всех без сортировки.
Код C++1
2
if (j=(*data -*workers[i].year))
* *(j>=5);Так , так же выводит всех без сортировки.
Код C++1
2
if (j=(data -workers[i].year))
* *(j>=5);
по-порядку: как ты получил дату? и вообще ты хоть сам понимаешь, что ты написал в этих условиях?
0
All
1758 / 437 / 43
Регистрация: 09.04.2009
Сообщений: 2,599
15.06.2009, 10:01  [ТС] #18
Вот весь код.
Там из даты для сравнения вычитается дата поступления на работу, j присваивается разность, потом j проверяетcя на >=5.
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
#include <iostream>
 
using namespace std;
int j, g;
 
struct Works{
        char fio[30];  
        char adres[30];
        char year[10];  
};
 
int main(){
        setlocale(0,"RUS");
        const int count = 3;
        //const int years = 5;
        char data[10];
        
        cout<<"Введите дату:";
        cin.getline(data,10);
        Works workers[count];
 
        for (int i = 0; i < count; ++i)
        {
                cout<<"Введите ФИО: ";   
                cin.getline(workers[i].fio,30);
                cout<<"Введите адрес: "; 
                cin.getline(workers[i].adres,30);
                cout<<"Введите дату трудоустройства: "; 
                cin.getline(workers[i].year,10);
        }
        
        for (int i = 0; i < count; ++i)
        {
                if (j=(*data -*workers[i].year))
                   (j>=5);
                        cout << "\nНе менее 5 лет проработал(а): \n"<< workers[i].fio
                             << "\nАдрес: " << workers[i].adres << '\n'
                             << "\nДата трудоустройства: " << workers[i].year << '\n'
                             << '\n';
        }
        system("pause");
        return 0;
}
0
Lerikh
14 / 14 / 0
Регистрация: 09.06.2009
Сообщений: 42
15.06.2009, 10:03 #19
C++
1
2
3
4
5
6
7
8
9
10
SYSTEMTIME lpSystemTime;
 
        GetLocalTime(&lpSystemTime);
 
        for(int i = 0; i < Count; i++)
        {
                if((lpSystemTime.wYear - workers[i].year) >= 5)
                {
                       .........
                }
Добавлено через 1 минуту 49 секунд
только дате верни значение int. и не забудь про <windows.h>
0
All
1758 / 437 / 43
Регистрация: 09.04.2009
Сообщений: 2,599
15.06.2009, 10:12  [ТС] #20
Цитата Сообщение от Lerikh Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
SYSTEMTIME lpSystemTime;
 
        GetLocalTime(&lpSystemTime);
 
        for(int i = 0; i < Count; i++)
        {
                if((lpSystemTime.wYear - workers[i].year) >= 5)
                {
                       .........
                }
Добавлено через 1 минуту 49 секунд
только дате верни значение int. и не забудь про <windows.h>
А это всё можно написать попроще, примерно как я пытался.
Просто у нас этого в лекциях нет.

только дате верни значение int. - char -это для записи вида 12 2004
иначе ерунда получается 122004
0
Lerikh
14 / 14 / 0
Регистрация: 09.06.2009
Сообщений: 42
15.06.2009, 10:17 #21
допустим, но выражение, типа
(j=(*data -*workers[i].year))
полная ересть. тебе придется в таком случае (если работать с char'ами) переводить в строки в целочисленные форматы, иначе ты не сможешь выполнять математические операции
1
All
1758 / 437 / 43
Регистрация: 09.04.2009
Сообщений: 2,599
15.06.2009, 10:26  [ТС] #22
Цитата Сообщение от Lerikh Посмотреть сообщение
допустим, но выражение, типа

полная ересть. тебе придется в таком случае (если работать с char'ами) переводить в строки в целочисленные форматы, иначе ты не сможешь выполнять математические операции
А как иначе сравнить две даты, а потом проверить на условие.

дате значение int верну, иначе я из этого никогда не выберусь.
0
Lerikh
14 / 14 / 0
Регистрация: 09.06.2009
Сообщений: 42
15.06.2009, 10:41 #23
попробуй хотябы так:

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
#include <iostream>
 
using namespace std;
int j, g;
 
struct Works{
        char fio[30];  
        char adres[30];
        int year;  
};
 
int main(){
        setlocale(0,"RUS");
        const int count = 3;
 
        int data;
                
                cout<<"Введите дату:";
                cin>>data;
        Works workers[count];
 
        for (int i = 0; i < count; i++)
                {
                            cout<<"Введите ФИО: ";   
                                cin.getline(workers[i].fio,30);
                cout<<"Введите адрес: "; 
                                cin.getline(workers[i].adres,30);
                cout<<"Введите дату трудоустройства: "; 
                                cin>>workers[i].year;
        }
                
        for (int i = 0; i < count; i++)
                {
                if ((data-workers[i].year) >= 5)
                        cout << "\nНе менее 5 лет проработал(а): \n"<< workers[i].fio
                             << "\nАдрес: " << workers[i].adres << '\n'
                             << "\nДата трудоустройства: " << workers[i].year << '\n'
                             << '\n';
        }
        system("pause");
        return 0;
}
Добавлено через 1 минуту 44 секунды
и вместо ++i используй i++.

Добавлено через 8 минут 51 секунду
вот еще что вспомнил есть функция getdate описана в dos.h можешь пользовать её
1
All
1758 / 437 / 43
Регистрация: 09.04.2009
Сообщений: 2,599
15.06.2009, 10:45  [ТС] #24
Это уже испытано ночью, пишет (Введите дату) вводишь
нажимаешь Enter, выводит сразу две строки(Введите ФИО: Введите адрес)
0
Lerikh
14 / 14 / 0
Регистрация: 09.06.2009
Сообщений: 42
15.06.2009, 10:47 #25
ну попробуй вместо cin использовать scanf
1
All
1758 / 437 / 43
Регистрация: 09.04.2009
Сообщений: 2,599
15.06.2009, 11:11  [ТС] #26
Тоже самое
пишет (Введите дату) вводишь
нажимаешь Enter, выводит сразу две строки(Введите ФИО: Введите адрес)
0
All
1758 / 437 / 43
Регистрация: 09.04.2009
Сообщений: 2,599
20.06.2009, 19:01  [ТС] #27
Спасибо всем за помощь.
Доделал.
Вот работающий код:
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
#include <iostream>
 
using namespace std;
int  m, y, diff;
 
struct Works{
        char fio[30];   //ФИО
        char adres[30]; //Адрес
        int year;       //Год
        int m;          //Месяц
};
 
int main(){
        setlocale(0,"RUS");
        const int count = 3;
        char temp[2];
               
                cout<<"Введите месяц:";//дата для сравнения
                cin>>m;
                cin.getline(temp, 2);
                m=m/10000;
                cout<<"Введите год:";//дата для сравнения
                cin>>y;
                cin.getline(temp, 2);
                y=y%10000;
                
        Works workers[count];
 
        for (int i = 0; i < count; i++)
                {
                cout<<"Введите ФИО: ";   
                                cin.getline(workers[i].fio,30);
                cout<<"Введите адрес: ";
                                cin.getline(workers[i].adres,30);
                cout<<"Введите месяц трудоустройства: ";
                                cin>>workers[i].m;                                                              
                                cin.getline(temp, 2);
                cout<<"Введите год трудоустройства: ";
                                cin>>workers[i].year;                                                               
                                cin.getline(temp, 2);
        }     
        for (int i = 0; i < count; i++)
        {
             diff=(y-(workers[i].year%10000));
             if ((workers[i].m/10000)>(m))
                 diff=diff-1;
                {
                if (diff >= 5)//сравнение
                        cout << "\nНе менее 5 лет проработал(а): \n"<< workers[i].fio
                             << "\nАдрес: " << workers[i].adres << '\n'
                             << "\nМесяц трудоустройства: " << workers[i].m << '\n'
                             << "\nГод трудоустройства: " << workers[i].year << '\n'
                             << '\n';
                }
        }
        system("pause");
        return 0;
}
0
cristaloleg
148 / 49 / 1
Регистрация: 21.12.2008
Сообщений: 961
28.06.2009, 19:24 #28
А зачем подключать iostream, если используется printf...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.06.2009, 19:24
Привет! Вот еще темы с ответами:

Дан двумерный массив 3х3. Получить одномерный массив из из отрицательных элементов матрицы. - C++
Пожалуйста, помогите решить простым методом задачку, просто не могу понять смысл ее выполнения. Дан двумерный массив 3х3.Получить...

Дан массив В[0:n-1] целых чисел и числа x и y , где x<y. на основе элементов массива В сформировать массив D[0:m-1] - C++
Нужен полный текст программы, заранее благодарен

Дан массив A(23). Переписать в новый массив все элементы, расположенные после последнего отрицательного. - C++
Задача Дан массив A(23). Переписать в новый массив все элементы, расположенные после последнего отрицательного. В новом массиве...

Дан вещественный массив А[N]. Сформировать массив В[3] следующим образом: - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int main() { setlocale (LC_CTYPE,...


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

Или воспользуйтесь поиском по форуму:
28
Yandex
Объявления
28.06.2009, 19:24
Ответ Создать тему
Опции темы

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