Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
nstwf
88 / 78 / 56
Регистрация: 19.02.2016
Сообщений: 336
Завершенные тесты: 1
#1

Реализовать структуру "Анкета" с полями "Фамилия", "Пол" и "Адрес"

19.02.2016, 15:18. Просмотров 893. Ответов 19
Метки нет (Все метки)

Здравствуйте.
Проходим тему Структуры, не могу понять, как определить количество, само задание:
Описать запись "Анкета" и поместить туда "Фамидия, Пол и Адрес".
После всего определить, сколько лиц мужского и женского рода проживают по одному адресу.
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
#include <iostream>
#include <conio.h>
#include <cstdio>
#include <windows.h>
 
using namespace std;
 
struct anketa
{
    char surname[15];       //фамилия
    char adress[15];        //улица
    char gender[15];        //пол
};
 
int main()
{
    int n;
    cout << "Введите кол-во анкетируемых: ";
    cin >> n;
 
    anketa *mas = new anketa[n];
 
    for (int i = 0; i < n; i++)
    {
        cout << i + 1 << "-я анкета: " << endl;
        cout << "Фамилия: ";
        scanf("\n");
        cin.getline(mas[i].surname, 15);
        cout << "Пол(м/ж): ";
        cin.getline(mas[i].gender, 15);
        cout << "Улица: ";
        cin.getline(mas[i].adress, 15);
        cout << endl;
    }
 
    system("pause");
    return 0;
}
Заранее благодарю!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2016, 15:18
Ответы с готовыми решениями:

Определить тип данных "Запись", имеющий поля "Фамилия", "Пол", "Зарплата"
определить тип данных запись имеющий поля фамилия пол зарплата. определить...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно"
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить...

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование)
Разработать программу с использованием наследования классов, реализующую...

Создать класс "Книга" с полями "название книги", "количество страниц", "год издания"
Создать класс Книга поля: название книги,количество страниц,год издания...

Структура «Преподаватель» с полями "ФИО", "стаж", "категория", "нагрузка"
Функция - расчёт зарплаты по нагрузке и оплате часа для определенной категории....

19
Raali
639 / 343 / 74
Регистрация: 06.07.2013
Сообщений: 1,107
Завершенные тесты: 1
19.02.2016, 15:39 #2
Цитата Сообщение от fleqfvkb Посмотреть сообщение
сколько лиц мужского и женского рода проживают по одному адресу.
C++
1
2
3
4
5
6
7
8
9
10
11
int count = 0;
 
    for (int i = 0; i < n; ++i)
    {
     anketa* node = &anketa[i];
        for (int ii = i + 1; ii < n; ++ii)
        {
          if( !strcmp(node->adress, anketa[ii].adress))
            ++count ;
        }
    }
первое что приходит в голову, но надо проверять, возможно надо на пол проверять, если конечно есть такой вариант, что два мужика в одной квартире будут жить)
1
_Valera_
489 / 371 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
19.02.2016, 15:41 #3
Цитата Сообщение от fleqfvkb Посмотреть сообщение
char gender[15];
м/ж занимает 15 символов?
0
Raali
639 / 343 / 74
Регистрация: 06.07.2013
Сообщений: 1,107
Завершенные тесты: 1
19.02.2016, 15:45 #4
Цитата Сообщение от _Valera_ Посмотреть сообщение
м/ж занимает 15 символов?
да, тут bool хватит, либо хотябы просто char ('M', 'F')
0
_Valera_
19.02.2016, 15:53
  #5

Не по теме:

Цитата Сообщение от Raali Посмотреть сообщение
да, тут bool
ну как сказать, я когда анкету заполнял там было три пола м/ж/андроид)

0
nstwf
88 / 78 / 56
Регистрация: 19.02.2016
Сообщений: 336
Завершенные тесты: 1
19.02.2016, 15:58  [ТС] #6
Пишет ошибку:
Недопустимое использование этого типа в качестве выражения
0
Raali
639 / 343 / 74
Регистрация: 06.07.2013
Сообщений: 1,107
Завершенные тесты: 1
19.02.2016, 16:20 #7
Цитата Сообщение от fleqfvkb Посмотреть сообщение
Недопустимое использование этого типа в качестве выражения
на какой строке именно? strcmp ?
C++
1
#include <cstring>
0
nstwf
88 / 78 / 56
Регистрация: 19.02.2016
Сообщений: 336
Завершенные тесты: 1
19.02.2016, 16:25  [ТС] #8
Цитата Сообщение от Raali Посмотреть сообщение
на какой строке именно? strcmp ?
Получился такой код, ругается на 45 строку и 48, а именно
anketa* node = &anketa[i];
anketa[i][ii]
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
#include <iostream>
#include <conio.h>
#include <cstdio>
#include <windows.h>
#include <cstring>
 
using namespace std;
 
struct anketa
{
    char surname[15];       //фамилия
    char adress[15];        //улица
    char gender[15];        //пол
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    setlocale(LC_ALL, "rus");
    int n;
    cout << "Введите кол-во анкетируемых: ";
    cin >> n;
 
    anketa *mas = new anketa[n];
 
    for (int i = 0; i < n; i++)
    {
        cout << i + 1 << "-я анкета: " << endl;
        cout << "Фамилия: ";
        scanf("\n");
        cin.getline(mas[i].surname, 15);
        cout << "Пол(м/ж): ";
        cin.getline(mas[i].gender, 15);
        cout << "Улица: ";
        cin.getline(mas[i].adress, 15);
        cout << endl;
    }
 
 
    int count = 0;
 
    for (int i = 0; i < n; ++i)
    {
        anketa* node = &anketa;
        for (int ii = i + 1; ii < n; ++ii)
        {
            if (!strcmp(node->adress, anketa.adress))
                ++count;
        }
    }
 
    system("pause");
    return 0;
}
Добавлено через 1 минуту
Еще я немного ошибся в вопросе: нужно посчитать сколько мужчин и сколько женщин живет в одном доме, вот.
0
Raali
639 / 343 / 74
Регистрация: 06.07.2013
Сообщений: 1,107
Завершенные тесты: 1
19.02.2016, 16:26 #9
45- anketa* node = &mas[i];
48- if( !strcmp(node->adress, mas[ii].adress))
1
nstwf
88 / 78 / 56
Регистрация: 19.02.2016
Сообщений: 336
Завершенные тесты: 1
19.02.2016, 16:27  [ТС] #10
Цитата Сообщение от Raali Посмотреть сообщение
35 - anketa* node = &mas[i];
38 - if( !strcmp(node->adress, mas[ii].adress))
Благодарю, а можно как-то посчитать отдельно мужчин и женщин?
0
Raali
639 / 343 / 74
Регистрация: 06.07.2013
Сообщений: 1,107
Завершенные тесты: 1
19.02.2016, 16:29 #11
Цитата Сообщение от fleqfvkb Посмотреть сообщение
Благодарю, а можно как-то посчитать отдельно мужчин и женщин?
конечно, так же циклом

C++
1
2
3
4
5
6
7
8
9
10
int men = 0;
int woomen = 0;
 
for (int i = 0; i < n; ++i)
    {
      if( !strcmp( mas[i].gender , "M") ) // или как там будет мужской пол
        ++men;
      else 
        ++woomen;
    }
1
nstwf
88 / 78 / 56
Регистрация: 19.02.2016
Сообщений: 336
Завершенные тесты: 1
19.02.2016, 16:47  [ТС] #12
Цитата Сообщение от Raali Посмотреть сообщение
конечно, так же циклом
C++Выделить код
1
2
3
4
5
6
7
8
9
10
int men = 0;
int woomen = 0;
for (int i = 0; i < n; ++i)
* * {
* * * if( !strcmp( mas[i].gender , "M") ) // или как там будет мужской пол
* * * * ++men;
* * * else
* * * * ++woomen;
* * }
Огромное спасибо, выручили

Добавлено через 14 минут
Цитата Сообщение от Raali Посмотреть сообщение
конечно, так же циклом
C++Выделить код
1
2
3
4
5
6
7
8
9
10
int men = 0;
int woomen = 0;
for (int i = 0; i < n; ++i)
* * {
* * * if( !strcmp( mas[i].gender , "M") ) // или как там будет мужской пол
* * * * ++men;
* * * else
* * * * ++woomen;
* * }
Извиняюсь еще раз, но код вообще считает как-то криво
В общем у него получается 1, а мужчин 5 и женщин 3, странно, может я что-то не так делаю?
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
#include <iostream>
#include <conio.h>
#include <cstdio>
#include <windows.h>
#include <cstring>
 
using namespace std;
 
struct anketa
{
    char surname[15];       //фамилия
    char adress[15];        //улица
    char gender[15];        //пол
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    setlocale(LC_ALL, "rus");
    int n;
    cout << "Введите кол-во анкетируемых: ";
    cin >> n;
 
    anketa *mas = new anketa[n];
 
    for (int i = 0; i < n; i++)
    {
        cout << i + 1 << "-я анкета: " << endl;
        cout << "Фамилия: ";
        scanf("\n");
        cin.getline(mas[i].surname, 15);
        cout << "Пол(м/ж): ";
        cin.getline(mas[i].gender, 15);
        cout << "Улица: ";
        cin.getline(mas[i].adress, 15);
        cout << endl;
    }
 
    int men = 0;
    int women = 0;
    int count = 0;
 
    for (int i = 0; i < n; ++i)
    {
        anketa* node = &mas[i];
        for (int ii = i + 1; ii < n; ++ii)
        {
            if (!strcmp(node->adress, mas[ii].adress))
                ++count;
            
 
 
            for (int i = 0; i < n; ++i)
            {
                if (!strcmp(mas[i].gender, "M")) // или как там будет мужской пол
                    ++men;
                else
                    ++women;
                
            }
        }
    }
    cout << "Всего живут в одном доме: " << count << endl;
    cout << "Мужчин: " << men << endl;
    cout << "Женщин: " << women << endl;
 
 
    system("pause");
    return 0;
}
0
Raali
639 / 343 / 74
Регистрация: 06.07.2013
Сообщений: 1,107
Завершенные тесты: 1
19.02.2016, 16:50 #13
C++
1
2
3
4
5
6
7
for (int i = 0; i < n; ++i)
{
if (!strcmp(mas[i].gender, "M")) // или как там будет мужской пол
++men;
 else
++women;
}
этот цикл отдельно вообще надо
0
nstwf
88 / 78 / 56
Регистрация: 19.02.2016
Сообщений: 336
Завершенные тесты: 1
19.02.2016, 17:08  [ТС] #14
Цитата Сообщение от Raali Посмотреть сообщение
этот цикл отдельно вообще надо
Если можно, то напишите полный код программы, а то я немного не догоняю, куда его запихивать нужно

Добавлено через 9 минут
И еще, алгоритм не считает, если данные идут не по порядку, например:
анкета 1, адрес 1
анкета 2, адрес 2
анкета 3, адрес 1.
Он пишет, что найден только 1 человек, который живет в доме, хотя написано, что таких 2
0
Raali
639 / 343 / 74
Регистрация: 06.07.2013
Сообщений: 1,107
Завершенные тесты: 1
19.02.2016, 17:11 #15
Цитата Сообщение от fleqfvkb Посмотреть сообщение
Он пишет, что найден только 1 такой пользователь
да, тут я затупил, потому что надо к счетчику 1 прибавлять, так как считаем и первого, которого сверяли (только 1 раз и только если нашли пару)
0
nstwf
88 / 78 / 56
Регистрация: 19.02.2016
Сообщений: 336
Завершенные тесты: 1
19.02.2016, 17:19  [ТС] #16
Цитата Сообщение от Raali Посмотреть сообщение
да, тут я затупил, потому что надо к счетчику 1 прибавлять, так как считаем и первого, которого сверяли (только 1 раз и только если нашли пару)
C++
1
2
3
4
5
6
7
8
9
10
11
12
    for (int i = 0; i < n; ++i)
    {
        anketa* node = &mas[i];
        for (int ii = i + 1; ii < n; ++ii)
        {
            if (!strcmp(node->adress, mas[ii].adress)) c=c+1;
            
        }
 
    }
 
    cout << "Всего живут в одном доме: " << c << endl;
Так тоже не работает, если адреса разбросаны
0
Raali
639 / 343 / 74
Регистрация: 06.07.2013
Сообщений: 1,107
Завершенные тесты: 1
19.02.2016, 17:20 #17
дак, погоди, тебе ж надо сколько всего живут в одном доме, а я считал - сколько пар М + Ж , которые живут в одном доме,
не совсем понимаю что в задании подразумевается
0
nstwf
88 / 78 / 56
Регистрация: 19.02.2016
Сообщений: 336
Завершенные тесты: 1
19.02.2016, 17:28  [ТС] #18
C++
1
2
3
4
5
6
7
8
9
10
11
12
    for (int i = 0; i < n; ++i)
    {
        anketa* node = &mas[i];
        for (int ii = i + 1; ii < n; ++ii)
        {
            if (!strcmp(node->adress, mas[ii].adress)) c=c+1;
            
        }
 
    }
 
    cout << "Всего живут в одном доме: " << c << endl;
А где именно тут указано, что считаются только пары?
И да, как сделать так, чтобы мужчин и женщин считало по отдельности, а не только в парах?

Добавлено через 3 минуты
В задании нужно сначала сделать структуру
1. Фамилия
2. Род
3. Улица
Затем посчитать сколько людей всего проживают по одному адресу, после этого количество всех проживающих в одном доме поделить на женщин и мужчин.
Пример:
Анкета1:
Вася
М
Петрова

Анкета 2
Петя
М
Петрова

Анкета 3
Маша
Ж
Иванова

Анкета 4
Женя
Ж
Петрова

Анкета 5
Александр
М
Федорова.

Отчет программы: Всего в одном доме *Петрова* проживает 3 человека: 2 мужчины и 1 женщина
0
Raali
639 / 343 / 74
Регистрация: 06.07.2013
Сообщений: 1,107
Завершенные тесты: 1
19.02.2016, 17:37 #19
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
for(int i=0 ; i < n; ++i)
{
    int counter = 0;
    anketa* node = &mod[i];
 
    int men = 0;
    int woomen = 0;
 
    if(!strcmp( node->gender, "M"))
        ++men;
    else
        ++woomen;
 
    for(int ii = i + 1; ii < n; ++ii)
    {
        if(!strcmp(node->adress, mod[ii].adress))
        {
            if(counter == 0)
            {
                counter += 2
            }
            else
                ++counter;
 
            if(!strcmp( mod[ii].gender, "M"))
                ++men;
            else
                ++woomen;
    
        }
    }
 
    if(counter > 0)
    {
        cout << "na ulice " << node->adress << " projivaet " << counter << " chelovek " << men << " mujchin " << woomen << " jenshin\n";
    }
}
я не могу взять и скомпилить сейчас по этому могу давать только пример, который надо доводить до ума, может он с ошибками
1
nstwf
88 / 78 / 56
Регистрация: 19.02.2016
Сообщений: 336
Завершенные тесты: 1
20.02.2016, 08:57  [ТС] #20
Цитата Сообщение от Raali Посмотреть сообщение
я не могу взять и скомпилить сейчас по этому могу давать только пример, который надо доводить до ума, может он с ошибками
Программа не совсем прямо работает, но и на этом спасибо, пойду разбираться.

Добавлено через 14 минут
Конечная программа
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
#include <iostream>
#include <conio.h>
#include <cstdio>
#include <windows.h>
#include <cstring>
 
using namespace std;
 
struct anketa
{
    char surname[15];       //фамилия
    char adress[15];        //улица
    char gender[15];        //пол
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    setlocale(LC_ALL, "rus");
    int n, i;
    cout << "Введите кол-во анкетируемых: ";
    cin >> n;
 
    anketa *mas = new anketa[n];
 
    for (int i = 0; i < n; i++)
    {
        cout << i + 1 << "-я анкета: " << endl;
        cout << "Фамилия: ";
        scanf_s("\n");
        cin.getline(mas[i].surname, 15);
        cout << "Пол(м/ж): ";
        cin.getline(mas[i].gender, 15);
        cout << "Улица: ";
        cin.getline(mas[i].adress, 15);
        cout << endl;
    }
 
 
    anketa* node = &mas[i];
    int men = 0;
    int women = 0;
    int counter = 0;
 
    for (int i = 0; i < n; ++i)
    {
        if (!strcmp(node->gender, "M"))
            ++men;
        else
            ++women;
 
        for (int ii = i + 1; ii < n; ++ii)
        {
            if (!strcmp(node->adress, mas[ii].adress))
            {
                if (counter == 0)
                {
                    counter += 2;
                }
                else
                    ++counter;
                if (!strcmp(mas[ii].gender, "М"))
                    ++men;
                else
                    ++women;
            }
        }
    }
    cout << "na ulice " << node->adress << " projivaet " << counter << " chelovek " << men << " mujchin " << women << " jenshin\n";
 
    system("pause");
    return 0;
}
Если кто-то найдет ошибку, почему не хочет считать правильно программа, отпишите, ибо у меня уже голова взрывается, весь день над этим заданием сижу..

Добавлено через 14 часов 56 минут
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
#include <iostream>
#include <conio.h>
#include <cstdio>
#include <windows.h>
#include<string.h>
#include<stdio.h>
 
 
using namespace std;
void Searchname(char *adress, int homenumber, int col);
const int col = 1;
struct form
{
    char surname[15];       //фамилия
    char adress[15];        //улица
    int homenumber;         //номер дома
    char gender[15];        //пол
}
forma[col];
 
void main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    setlocale(LC_ALL, "rus");
    int n; char* adress1;
    adress1 = 0;
    cout << "Введите кол-во анкетируемых: ";
    cin >> n;
 
    for (int i = 0; i < n; i++)
    {
        cout << i + 1 << "-я анкета: " << endl;
        cout << "Фамилия: ";
        scanf_s("\n");
        cin.getline(forma[i].surname, 15);
        cout << "Пол(м/ж): ";
        cin.getline(forma[i].gender, 15);
        cout << "Улица: ";
        cin.getline(forma[i].adress, 15);
        cout << "Номер дома: ";
        cin >> forma[i].homenumber;
        cout << endl;
    }
 
    cout << "========================= Добавленные анкеты: =========================" << endl;
    for (int i = 0; i < n; i++)
    {
        cout << "========== " << i + 1 << "-я анкета. ==========\n" << "ФИО: " << forma[i].surname << ".\n";
        cout << "Адрес: " << forma[i].adress << " " << forma[i].homenumber << ".\n";
        cout << "Пол: " << forma[i].gender << ".\n";
    }
 
    cout << "=======================================================================\n\n" << endl;
 
    cout << "Введите название\n";
 
    char adress[20]; int homenumber;
    cin >> adress >> homenumber;
    Searchname(adress, homenumber, n);
 
    system("pause");
}
 
void Searchname(char *adress, int homenumber, int col)
{
    int men = 0;
    int women = 0;
    int counter = 0;
    for (int i = 0; i < col; i++)
    {
        if ((_stricmp(adress, forma[i].adress) == 0) && ((homenumber == forma[i].homenumber)))
            ++counter;
        if ((_stricmp(forma[i].gender, "м")))
            ++women;
        else
            ++men;
    }
 
    cout << "Всего людей, проживающих по адресу " << adress << " " << homenumber << ", - " << counter << ".\n" << "Мужчин: " << men << "\nЖенщин: " << women << endl;
}
Дописал программу, только теперь проблема с тем, что она неправильно считает женщин/мужчин, а "всего" - правильно.
0
20.02.2016, 08:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.02.2016, 08:57

Для каждой строки найти слова, которые не имеют ни одного из букв: "l", "k", "r", "s" i "j"
Задано символьные строки. Строка состоит из нескольких слов (наборов символов),...

Чтения структуры из файла (описать структуру с именем "ORDER": "счет плательщика"; "счет получателя"; "сумма, переводится банковской операцией")
Описать структуру с именем &quot;ORDER&quot;, содержащий следующие поля: &quot;Счет...

Написать функцию поиска человека по полю "фамилия" в массиве структур "Note" ("Персональная информация")
Вывести из структуры информацию о человеке, чья фамилия введена с клавиатуры ...


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

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

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