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

Структуры - C++

Восстановить пароль Регистрация
 
Babochka_
 Аватар для Babochka_
0 / 0 / 0
Регистрация: 13.02.2013
Сообщений: 54
31.03.2013, 17:40     Структуры #1
Помогите пожалуйста
Такое вот задание: Заданы два массива записей, каждый из которых содержит фамилии и адреса сотрудников. Составленная программа должна перенести (в любом порядке) записи с двух массивов в третий, причем с двух одинаковых записей переносится только одна.
Проблема в том чтобы сделать цикл который выводит с двух одинаковых записей одну что-то у меня не выходит...(
Вот то что я написала:

C++ (Qt)
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
#include<iostream>
#include<string.h>
#include<stdlib.h>
using namespace std;
 
#define size 5
 
struct addr
{
       char surname[30]; 
       char street[40];
       char city[20];
       char building[4];
       char flat[6];
      // addr *next;
};
 
/* bool isSurname(addr *root, char surname)  
 {
      addr *p;
      p = root;
      while(p)
      {
              if(p->surname == surname) return true;
              p = p->next;
      }
      return false;
 }*/
 
int main()
{
    addr a[size];
    addr b[size];
    addr c[size*2];
   /* addr *root;   
       root=0;  
    char  surname;*/
    int k,j, sum=size;
    
    for(int i=0; i<size; i++)
    {    cout<<"Enter surname "<<i+1 <<" person in the first list "<<endl;
         gets((a+i)->surname);
         
         cout<<"Enter city, street, building and flat where lived "<<i+1 <<" person in the first list"<<endl;
         gets((a+i)->city);
         gets((a+i)->street);
         gets((a+i)->building);
         gets((a+i)->flat);
         
         cout<<"Enter surname city, street, building and flat where lived"<<i+1 <<" person in the second list "<<endl;
         gets((b+i)->surname);
         gets((b+i)->city);
         gets((b+i)->street);
         gets((b+i)->building);
         gets((b+i)->flat);
         
    }
    for (k=0; k<size; k++)c[k]=a[k];
    for (k=0; k<size; k++)
    {
        bool included=true;
        for (j=0; j<size && included; j++)
        {
            if(b[j]!=a[j])included = included;
            else return false;
        }
  //  if(!isSurname(root, surname))
  if (included) 
         {
            c[sum]=b[k];
            sum++;
         }
    }
    
     for (k=0; k<sum; k++)
        cout<<c[k]<<endl;
       
system ("pause");
return 0;    
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.03.2013, 17:40     Структуры
Посмотрите здесь:

Структуры. Работа с файлами, содержащими структуры C++
C++ Динамические структуры данных. Программа ввода в структуры и вывода информации из неё.
Исследование структуры FILE или: что вообще можно выудить из этой структуры, указатель на которую мы получаем при открытии файла? C++
Структуры. Вызов данных структуры по указателю. с++ C++
Структуры, массивы структур (как можно присваивать(инициализировать) значения полям структуры) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Praktolock
 Аватар для Praktolock
58 / 58 / 0
Регистрация: 29.11.2011
Сообщений: 272
31.03.2013, 17:57     Структуры #2
if(b[j]!=a[j])included = included;
else return false;

странные строки первая ни при каких обсоятельствах ничего не делает
во второй, зачем то выход из программы

Добавлено через 2 минуты
оно вообще компилируется?
Babochka_
 Аватар для Babochka_
0 / 0 / 0
Регистрация: 13.02.2013
Сообщений: 54
31.03.2013, 17:59  [ТС]     Структуры #3
да там ошибка но это должно значить если b[j]!=a[j] то у нас значение true а если равно то false чтобы значение incuded не всегда было true и потом мы могли записать элементы из b в с
Помогите это исправить чтобы оно работало)))
Praktolock
 Аватар для Praktolock
58 / 58 / 0
Регистрация: 29.11.2011
Сообщений: 272
31.03.2013, 18:02     Структуры #4
мне кажется нужно добавить оператор != для структур addr и конструктор копии, чтобы оно хотябы скомпилировалось
Babochka_
 Аватар для Babochka_
0 / 0 / 0
Регистрация: 13.02.2013
Сообщений: 54
31.03.2013, 18:05  [ТС]     Структуры #5
для структур != это как в структуру записать? а конструктор копии это typedef ?
Praktolock
 Аватар для Praktolock
58 / 58 / 0
Регистрация: 29.11.2011
Сообщений: 272
31.03.2013, 18:37     Структуры #6
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
#include<iostream>
#include<string.h>
#include<stdlib.h>
using namespace std;
 
#define size 5
 
struct addr
{
       char surname[30]; 
       char street[40];
       char city[20];
       char building[4];
       char flat[6];
      // addr *next;
};
 
bool operator !=(addr a, addr b)
{
 for(int i=0;i<sizeof(addr);i++)
 {
  if((*(char*)(&a+i))^(*(char*)(&b+i)))return false;
 };
 return true;
};
 
/* bool isSurname(addr *root, char surname)  
 {
      addr *p;
      p = root;
      while(p)
      {
              if(p->surname == surname) return true;
              p = p->next;
      }
      return false;
 }*/
 
int main()
{
    addr a[size];
    addr b[size];
    addr c[size*2];
   /* addr *root;   
       root=0;  
    char  surname;*/
    int k,j, sum=size;
    
    for(int i=0; i<size; i++)
    {    cout<<"Enter surname "<<i+1 <<" person in the first list "<<endl;
         gets((a+i)->surname);
         
         cout<<"Enter city, street, building and flat where lived "<<i+1 <<" person in the first list"<<endl;
         gets((a+i)->city);
         gets((a+i)->street);
         gets((a+i)->building);
         gets((a+i)->flat);
         
         cout<<"Enter surname city, street, building and flat where lived"<<i+1 <<" person in the second list "<<endl;
         gets((b+i)->surname);
         gets((b+i)->city);
         gets((b+i)->street);
         gets((b+i)->building);
         gets((b+i)->flat);
         
    }
    for (k=0; k<size; k++)c[k]=a[k];
    for (k=0; k<size; k++)
    {
        bool included=false;
        for (j=0; j<size && included; j++)
        {
            if(b[k]!=a[j])
            {
            //ничего не делаем
            }
            else
            {
                included=true;//а вот если равны значит оно уже должно быть в массиве с
                break;        //и смысла дальше листать этот цыкл нет
            }
        }
        if(!included)c[sum++]=b[k];
    }
  //  if(!isSurname(root, surname))
     for (k=0; k<sum; k++)
        cout<<c[k].surname<<endl;
       
system ("pause");
return 0;    
}
попробуй, мне лень запускать и набивать эти все значения для теста

Добавлено через 5 минут
йойойой нето operator != не такой, щас переделаю

Добавлено через 4 минуты
C++
1
2
3
4
5
6
7
8
9
bool operator !=(addr a, addr b)
{
 if(strcmp((char*)&a.surname, (char*)&b.surname)) return false;
 if(strcmp((char*)&a.street,  (char*)&b.street))  return false;
 if(strcmp((char*)&a.city,    (char*)&b.city))    return false;
 if(strcmp((char*)&a.building,(char*)&b.building))return false;
 if(strcmp((char*)&a.flat,    (char*)&b.flat))    return false;
 return true;
};
примерно так он должен выглядеть
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2013, 19:39     Структуры
Еще ссылки по теме:

C++ Оператор if и структуры. Возвращение структуры из функции
Функция внутри структуры использует указатель, как поле этой структуры C++
Вывод структуры, строка как элемент структуры C++

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

Или воспользуйтесь поиском по форуму:
Babochka_
 Аватар для Babochka_
0 / 0 / 0
Регистрация: 13.02.2013
Сообщений: 54
31.03.2013, 19:39  [ТС]     Структуры #7
спасибо, но есть одна проблема программа выводит просто те элементы которые есть и в a и в b а нужно чтоб бы повторы не печатались
Yandex
Объявления
31.03.2013, 19:39     Структуры
Ответ Создать тему
Опции темы

Текущее время: 19:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru