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

Описать структуру с именем ZNAK - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 37, средняя оценка - 4.89
vnaumenko
2 / 2 / 0
Регистрация: 19.05.2012
Сообщений: 35
19.05.2012, 07:49     Описать структуру с именем ZNAK #1
Прошу Вас помочь в написании программы, вообще не понимаю.

Описать структуру с именем ZNAK, содержащую следующие поля:
* фамилия, имя;
* знак Зодиака;
* дата рождения (массив из трех чисел).
Написать программу, выполняющую следующие действия:
* ввод с клавиатуры данных в массив, состоящий из восьми элементов типа ZNAK; записи должны быть упорядочены по датам рождения;
* вывод на экран информации о людях, родившихся под знаком, название которого введено с клавиатуры;
* если таких нет, выдать на дисплей соответствующее сообщение.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2012, 07:49     Описать структуру с именем ZNAK
Посмотрите здесь:

C++ Описать структуру с именем ZNAK
Описать структуру с именем Znak C++
C++ Описать структуру с именем ZNAK
C++ Описать структуру с именем ZNAK
C++ Описать структуру с именем ZNAK
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
19.05.2012, 11:17     Описать структуру с именем ZNAK #2
Visual c++ Консоль Первая половина программы

Цитата Сообщение от vnaumenko Посмотреть сообщение
Описать структуру с именем ZNAK, содержащую следующие поля:
* фамилия, имя;
* знак Зодиака;
* дата рождения (массив из трех чисел).
Написать программу, выполняющую следующие действия:
* ввод с клавиатуры данных в массив, состоящий из восьми элементов типа ZNAK
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
#include "stdafx.h"
#include <iostream>
#include "string.h"
 
    const int N=256;
 
//Описание структуры по заданию
    struct Znak
    {
      char
       FirstName[N],
       LastName[N],
       Zodiak[N];
      int DR[3];
    }  A[]; //Массив структур в восемь элементов
 
//Заполнение структуры
    void init(Znak *A,int size)
     {
      char S[N];
 
       for (int i=0;i<size;i++)
    {
        std::cout<<"FirstName: "; std::cin>>S;
        strcpy(A[i].FirstName,S);
     std::cout<<"LastName: "; std::cin>>S;
     strcpy(A[i].LastName,S);
     std::cout<<"Zodiak: "; std::cin>>S;
     strcpy(A[i].Zodiak,S);
     std::cout<<"Date: "<<'\n';
      for (int j=0;j<3;j++)
          std::cin>>A[i].DR[j];
 
      std::cout<<'\n';
    }
     }
 
//Вывод всей структуры на экран
    void Show(Znak *A,int N)
    {
      for (int i=0;i<N;i++)
      {
          std::cout<<A[i].FirstName<<'\t';
          std::cout<<A[i].LastName<<'\t';
          std::cout<<A[i].Zodiak<<'\t';
          for (int j=0;j<3;j++) std::cout<<A[i].DR[j]<<".";
          std::cout<<"\n";
      }
    }
 
void main()
{
  const int N=8;
  Znak obj1[N];
      init(obj1,N);
      Show(obj1,N);
 system("PAUSE");
 return;
}
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.05.2012, 11:20     Описать структуру с именем ZNAK #3
Описать структуру с именем Znak
Описать структуру с именем ZNAK
Описать структуру с именем ZNAK
Описать структуру "знак зодиака"
vnaumenko
2 / 2 / 0
Регистрация: 19.05.2012
Сообщений: 35
19.05.2012, 13:19  [ТС]     Описать структуру с именем ZNAK #4
Спасибо большое, очень помогли!
vilya_i
3 / 3 / 0
Регистрация: 19.05.2012
Сообщений: 3
19.05.2012, 18:42     Описать структуру с именем ZNAK #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
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
#include "stdafx.h"
#include "conio.h"
#include "locale.h"
#include "stdio.h"
#include "string.h"
//#include ".h"
//using namespace System;
 
int _tmain(int a)
{    int i, j, n, b,d, flag; char isk[10]; char dan[10];
    setlocale(LC_ALL,"Russian");    
    n=5;
  struct ZNAK
   {//определение структурного типа ZNAK
     char f[10];//Фамилия
     char name[7];//Имя
     char znak[9];//Знак
     int x[3];//День, Месяц, Год
     
   } array[6];
  flag=0;
  for (i=0; i<n; i++)
{
  printf("Введите фамилию: ");
  scanf("%s", array[i].f);
  printf("Введите имя: ");
  scanf("%s", array[i].name);
  printf("Введите знак зодиака: ");
  scanf("%s", array[i].znak);
  printf("Введите дату рождения в цифровом формате: ");
  
  for (j=0; j<3;j++)
  scanf("%d",&(array[i].x[j]));
  printf("\n");
}
   for (d=0; d<n-1; d++) 
        for (i=0; i<n-1-d; i++){          
            if (array[i].x[2] > array[i+1].x[2])
             {array[5]=array[i];
             array[i]=array[i+1];
             array[i+1]=array[5];}
          if (array[i].x[2] == array[i+1].x[2]){
           if (array[i].x[1] > array[i+1].x[1]){
              array[5]=array[i];
              array[i]=array[i+1];
              array[i+1]=array[5];}
           if (array[i].x[1] == array[i+1].x[1])
              if (array[i].x[0] > array[i+1].x[0]){
                  array[5]=array[i];
                  array[i]=array[i+1];
                  array[i+1]=array[5];}
 
          } }
   for (i=0; i<n; i++){
    printf("\n\nФамилия: %s",array[i].f);
    printf("\nИмя: %s",array[i].name);
    printf("\nЗнак зодиака: %s", array[i].znak);
     for (j=0; j<3;j++)
    printf("\nДата рождения: %d", array[i].x[j]);
    printf("\n");
   }
  printf("Введите фамилию искомого человека: ");
  scanf("%s", isk);
  printf("\n\nИмеющаяся информация:");
 
  for (i=0; i<n; i++)
{if (strcmp(array[i].f,isk)==0) {
    printf("\nФамилия: %s",array[i].f);
    printf("\nИмя: %s",array[i].name);
    printf("\nЗнак зодиака: %s", array[i].znak);
    flag=1;
     for (j=0; j<3;j++)
    printf("\nДата рождения: %d", array[i].x[j]);
  }
 }
  if (flag==0) printf("Искомый человек не найден");
     getch();
     return 0;
}
vnaumenko
2 / 2 / 0
Регистрация: 19.05.2012
Сообщений: 35
20.05.2012, 07:52  [ТС]     Описать структуру с именем ZNAK #6
Огромное всем спасибо!!!
-=ЮрА=-
Заблокирован
Автор FAQ
20.05.2012, 10:18     Описать структуру с именем ZNAK #7

Не по теме:

Jupiter, чесн слово, на столько часто это задане встречается, что вынес бы его в отдельную тему вначала раздела Си/С++ для начинающих с названием - Надоевшие всем структруы - читайте прежде чем спрашиватьТуда же запихвиваем телефонный справочник и структуры Студенты а также расписание автобусов



Добавлено через 2 минуты

Не по теме:

От себя даю костяк оценок
Структуры данных "Абонент"
А также костяк теефонных номеров
Структуры данных "Абонент"
На форуме ещё где-то бродят знак задоака, расисание автобусов, овощная база, зоопарк и ещё что-то похожее

ITALIANO
1 / 1 / 1
Регистрация: 24.10.2014
Сообщений: 139
10.12.2015, 03:20     Описать структуру с именем ZNAK #8
Подскажите пожалуйста, какими методами сортировки лучше всего воспользоваться в этой структуре, по условию идёт сортировка по дате рождения, и я так понимаю нужно вынести сортировку по элементу массива, а конкретнее по году, т.е. 97, 98, 99. С полным массивом соответственно, только я не знаю как это делается, помогите пожалуйста...

Добавлено через 1 минуту
За основу взят пример пользователя daslex
gru74ik
Модератор
 Аватар для gru74ik
3120 / 1346 / 167
Регистрация: 20.02.2013
Сообщений: 3,837
Записей в блоге: 17
10.12.2015, 12:12     Описать структуру с именем ZNAK #9
ITALIANO, вот:
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
/*
Описать структуру с именем ZNAK, содержащую следующие поля:
1) фамилия, имя;
2) знак Зодиака;
3) дата рождения (массив из трех чисел).
 
Написать программу, выполняющую следующие действия:
a) ввод с клавиатуры данных в массив, состоящий из восьми элементов
   типа ZNAK; записи должны быть упорядочены по датам рождения;
b) вывод на экран информации о людях, родившихся под знаком,
   название которого введено с клавиатуры;
c) если таких нет, выдать на дисплей соответствующее сообщение.
*/
 
#include <iostream>
#include "cstring"
 
const int N = 4;
 
//Описание структуры по заданию
struct Znak
{
    static const int SZ = 256;
    char FirstName[SZ];
    char LastName[SZ];
    char Zodiak[SZ];
    int DR[3];
}  A[N]; //Массив структур в восемь элементов
 
//Заполнение структуры
void fill_by_user(Znak * A, const int ARR_SIZE)
{
    char S[Znak::SZ];
 
    for (int i=0; i < ARR_SIZE; i++)
    {
        std::cout << "FirstName: ";
        std::cin >> S;
        strcpy(A[i].FirstName, S);
 
        std::cout << "LastName: ";
        std::cin >> S;
        strcpy(A[i].LastName, S);
 
        std::cout << "Zodiak: ";
        std::cin >> S;
        strcpy(A[i].Zodiak, S);
 
        std::cout << "Date: " << '\n';
        for (int j=0; j<3; j++)
            std::cin >> A[i].DR[j];
 
        std::cout<<'\n';
    }
}
 
//Вывод массива структур на экран
void show(const Znak * A, const int ARR_SIZE)
{
    for (int i=0; i < ARR_SIZE; i++)
    {
        std::cout << A[i].FirstName << " ";
        std::cout << A[i].LastName << " ";
        std::cout << A[i].Zodiak << " ";
 
        for (int j=0; j<3; j++)
          std::cout << A[i].DR[j] << ".";
        std::cout << "\n";
    }
    std::cout << "\n";
}
 
template <size_t NN>
void sort_by_date(Znak (&z)[NN], const int ARR_SIZE)
{
    Znak tmp;
    bool is_larger_by_date;
    for (int k=0; k < ARR_SIZE-1; k++)
    {
        for (int i=0, j; i < ARR_SIZE-1; i++)
        {
            is_larger_by_date = false;
            j = i+1;
            if (z[i].DR[2] > z[j].DR[2])
                is_larger_by_date = true;
            else if (z[i].DR[2] == z[j].DR[2])
            {
                if (z[i].DR[1] > z[j].DR[1])
                    is_larger_by_date = true;
                else if (z[i].DR[1] == z[j].DR[1])
                {
                    if (z[i].DR[0] > z[j].DR[0])
                        is_larger_by_date = true;
                }
            }
 
            if (is_larger_by_date)
            {
                tmp = z[i];
                z[i] = z[j];
                z[j] = tmp;
            }
        }
    }
}
 
int main()
{
    Znak obj1[N];
    fill_by_user(obj1, N);
    show(obj1, N);
    sort_by_date(obj1, N);
    show(obj1, N);
 
    return 0;
}
Миниатюры
Описать структуру с именем ZNAK  
ITALIANO
1 / 1 / 1
Регистрация: 24.10.2014
Сообщений: 139
10.12.2015, 19:51     Описать структуру с именем ZNAK #10
gru74ik, спасибо большое!!! А какой тут метод сортировки?
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
10.12.2015, 20:06     Описать структуру с именем ZNAK #11
gru74ik, Так даты не сортируют. Надо брать минимальную единицу и приводить всю дату к этой единице.

Т.е. в моем примере, например, используется три единицы, обозначающие день, месяц, год.
1. Нужно заранее оговаривать на каком месте что есть. Это важно.
2. В моем примере минимальной единицей будет день. Следовательно нужно выполнять расчет. Перевести всю дату в число дней. Для этого существует специальная формула перевода, можно найти, выискивая "перевод календарной даты в количество дней". На форуме такие задачи по любому решались.
А уже эти данные надо сравнивать. Привязка к году не сулит ничего хорошего.
Mesteriis
 Аватар для Mesteriis
371 / 154 / 40
Регистрация: 08.08.2015
Сообщений: 1,059
Завершенные тесты: 1
10.12.2015, 20:16     Описать структуру с именем ZNAK #12
daslex, да да а еще можно бедного студента нагрузить boost/date_time так вообще красота будет, не усложняйте жизнь другим, а то запутается в конец и приехали!
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
10.12.2015, 20:43     Описать структуру с именем ZNAK #13
Mesteriis, а это тут причем. Пойдет он сдавать. Препод введет несколько близких по значениям дат и скажет: "Друг, а у тебя не сортирует".

Здесь чисто логическая ошибка, связанная с человеческим мышлением.
gru74ik
Модератор
 Аватар для gru74ik
3120 / 1346 / 167
Регистрация: 20.02.2013
Сообщений: 3,837
Записей в блоге: 17
10.12.2015, 20:43     Описать структуру с именем ZNAK #14
Цитата Сообщение от daslex Посмотреть сообщение
Так даты не сортируют. Надо брать минимальную единицу и приводить всю дату к этой единице.
Всё гениальное - просто. Ты молодец. А я просто как-то упустил из виду такой простой вариант. Overengineering - вечные грабли новичков. Что ж, опыт приходит со временем. А с опытом и умение не усложнять. Буду набираться опыта.
gru74ik
Модератор
 Аватар для gru74ik
3120 / 1346 / 167
Регистрация: 20.02.2013
Сообщений: 3,837
Записей в блоге: 17
10.12.2015, 20:52     Описать структуру с именем ZNAK #15
Цитата Сообщение от daslex Посмотреть сообщение
Препод введет несколько близких по значениям дат и скажет: "Друг, а у тебя не сортирует".
Друг, у меня норм сортирует:
Миниатюры
Описать структуру с именем ZNAK  
gru74ik
Модератор
 Аватар для gru74ik
3120 / 1346 / 167
Регистрация: 20.02.2013
Сообщений: 3,837
Записей в блоге: 17
10.12.2015, 20:58     Описать структуру с именем ZNAK #16
Цитата Сообщение от ITALIANO Посмотреть сообщение
А какой тут метод сортировки?
Ну, не знаю как его назвать. "Метод перебора" что ли? Наверное "метод перебора". Очень такого прямолинейного и тупого перебора.
Рецепт:
  1. Сравниваем соседние элементы, если первый больше второго, меняем их местами. И так до конца массива (внутренний цикл for).
  2. Сделать таких проходов от начала массива и до конца ровно ARR_SIZE - 1 раз (внешний цикл for).
daslex
10.12.2015, 21:03
  #17

Не по теме:

Цитата Сообщение от ITALIANO Посмотреть сообщение
по условию идёт сортировка по дате рождения
не по году
По году нормально сортирует и будет сортировать. Не могу с этим спорить. Но в условии не по году, а по дате рождения надо. Просто кое кто неправильно понимает и просит неправильное.

gru74ik
Модератор
 Аватар для gru74ik
3120 / 1346 / 167
Регистрация: 20.02.2013
Сообщений: 3,837
Записей в блоге: 17
10.12.2015, 21:25     Описать структуру с именем ZNAK #18
Цитата Сообщение от daslex Посмотреть сообщение
не по году
По году нормально сортирует и будет сортировать. Не могу с этим спорить. Но в условии не по году, а по дате рождения надо.
Не понимаю тебя. Дата - это день + месяц + год. У меня сперва ищется меньший год, потом меньший месяц, потом меньший день. В лоб, грубо, топорно, неэлегантно, некрасиво, но работает. И именно что по дате сортирует.
Приведи пример когда мой код "ненормально" сортирует.
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
10.12.2015, 21:26     Описать структуру с именем ZNAK #19
ITALIANO, у меня - пузырек.

gru74ik, Смотри насколько это проще. И посмотри эти же даты у себя в коде потом.
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
#include <iostream>
#include "string.h"
 
const int N = 256;
 
//Описание структуры по заданию
struct Znak
{
    char
        FirstName[N],
        LastName[N],
        Zodiak[N];
    int DR[3];
}  A[]; //Массив структур в восемь элементов
 
        //Заполнение структуры
void init(Znak *A, int size)
{
    char S[N];
 
    for (int i = 0; i<size; i++)
    {
        std::cout << "FirstName: "; std::cin >> S;
        strcpy(A[i].FirstName, S);
        std::cout << "LastName: "; std::cin >> S;
        strcpy(A[i].LastName, S);
        std::cout << "Zodiak: "; std::cin >> S;
        strcpy(A[i].Zodiak, S);
        std::cout << "Date: " << '\n';
        for (int j = 0; j<3; j++)
            std::cin >> A[i].DR[j];
 
        std::cout << '\n';
    }
}
 
void sort_znak(Znak *A, int size) {
    for (int i = 1; i < size; i++) {
        for (int j = i - 1; j < size - 1; j++) {
            if (A[i].DR[0]*1000 + A[i].DR[0] * 100 + A[i].DR[0]  > A[j].DR[0] * 1000 + A[j].DR[0] * 100 + A[j].DR[0]) std::swap(A[i],A[j]);
        }
    }
}
 
//Вывод всей структуры на экран
void Show(Znak *A, int N)
{
    for (int i = 0; i<N; i++)
    {
        std::cout << A[i].FirstName << '\t';
        std::cout << A[i].LastName << '\t';
        std::cout << A[i].Zodiak << '\t';
        for (int j = 0; j<3; j++) std::cout << A[i].DR[j] << ".";
        std::cout << "\n";
    }
}
 
void main()
{
    const int N = 4;
    Znak obj1[N];
    init(obj1, N);
    Show(obj1, N);
    sort_znak(obj1, N);
    std::cout << '\n';
    Show(obj1, N);
    system("PAUSE");
    return;
}

Обратишь внимание на то как идут месяца.
Миниатюры
Описать структуру с именем ZNAK  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.12.2015, 21:47     Описать структуру с именем ZNAK
Еще ссылки по теме:

C++ Описать структуру с именем ZNAK

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

Или воспользуйтесь поиском по форуму:
gru74ik
Модератор
 Аватар для gru74ik
3120 / 1346 / 167
Регистрация: 20.02.2013
Сообщений: 3,837
Записей в блоге: 17
10.12.2015, 21:47     Описать структуру с именем ZNAK #20
daslex, как-то странно у тебя сортирует, честно говоря:
Миниатюры
Описать структуру с именем ZNAK  
Yandex
Объявления
10.12.2015, 21:47     Описать структуру с именем ZNAK
Ответ Создать тему

Метки
znak, znak c++, описать структуру, описать структуру c++, описать структуру znak c++, описать структуру znak, описать структуру с именем znak, описать структуру с именем znak c++, структуры данных, структуры данных c++
Опции темы

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