3 / 3 / 0
Регистрация: 19.05.2012
Сообщений: 35
1

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

19.05.2012, 07:49. Показов 41725. Ответов 39

Author24 — интернет-сервис помощи студентам
Прошу Вас помочь в написании программы, вообще не понимаю.

Описать структуру с именем ZNAK, содержащую следующие поля:
* фамилия, имя;
* знак Зодиака;
* дата рождения (массив из трех чисел).
Написать программу, выполняющую следующие действия:
* ввод с клавиатуры данных в массив, состоящий из восьми элементов типа ZNAK; записи должны быть упорядочены по датам рождения;
* вывод на экран информации о людях, родившихся под знаком, название которого введено с клавиатуры;
* если таких нет, выдать на дисплей соответствующее сообщение.
2
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.05.2012, 07:49
Ответы с готовыми решениями:

Описать структуру с именем Znak
Здравствуйте. Помогите пожалуйста изменить сортировку а коде. С сортировки по фамилии на сортировку...

Описать структуру с именем ZNAK
вот код программы всё работает, тут ввод с клавиатуры а нужно чтобы из файла Добавлено через 32...

Описать структуру с именем ZNAK
Кто нибудь может написать такую задачу? Описать структуру с именем ZNAK, содержащую следующие...

Описать структуру с именем ZNAK
Дорогие программисты здравствуйте ,я в отчаянии , который день я ломаю голову как же построить код...

39
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
19.05.2012, 11:17 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;
}
4
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
19.05.2012, 11:20 3
Описать структуру с именем Znak
Описать структуру с именем ZNAK
Описать структуру с именем ZNAK
Описать структуру "знак зодиака"
4
3 / 3 / 0
Регистрация: 19.05.2012
Сообщений: 35
19.05.2012, 13:19  [ТС] 4
Спасибо большое, очень помогли!
0
3 / 3 / 0
Регистрация: 19.05.2012
Сообщений: 3
19.05.2012, 18:42 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;
}
3
3 / 3 / 0
Регистрация: 19.05.2012
Сообщений: 35
20.05.2012, 07:52  [ТС] 6
Огромное всем спасибо!!!
1
Заблокирован
Автор FAQ
20.05.2012, 10:18 7

Не по теме:

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



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

Не по теме:

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

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

Добавлено через 1 минуту
За основу взят пример пользователя daslex
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
10.12.2015, 12:12 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  
5
1 / 1 / 4
Регистрация: 24.10.2014
Сообщений: 200
10.12.2015, 19:51 10
gru74ik, спасибо большое!!! А какой тут метод сортировки?
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
10.12.2015, 20:06 11
gru74ik, Так даты не сортируют. Надо брать минимальную единицу и приводить всю дату к этой единице.

Т.е. в моем примере, например, используется три единицы, обозначающие день, месяц, год.
1. Нужно заранее оговаривать на каком месте что есть. Это важно.
2. В моем примере минимальной единицей будет день. Следовательно нужно выполнять расчет. Перевести всю дату в число дней. Для этого существует специальная формула перевода, можно найти, выискивая "перевод календарной даты в количество дней". На форуме такие задачи по любому решались.
А уже эти данные надо сравнивать. Привязка к году не сулит ничего хорошего.
0
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
10.12.2015, 20:16 12
daslex, да да а еще можно бедного студента нагрузить boost/date_time так вообще красота будет, не усложняйте жизнь другим, а то запутается в конец и приехали!
1
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
10.12.2015, 20:43 13
Mesteriis, а это тут причем. Пойдет он сдавать. Препод введет несколько близких по значениям дат и скажет: "Друг, а у тебя не сортирует".

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

Не по теме:

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

0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
10.12.2015, 21:25 18
Цитата Сообщение от daslex Посмотреть сообщение
не по году
По году нормально сортирует и будет сортировать. Не могу с этим спорить. Но в условии не по году, а по дате рождения надо.
Не понимаю тебя. Дата - это день + месяц + год. У меня сперва ищется меньший год, потом меньший месяц, потом меньший день. В лоб, грубо, топорно, неэлегантно, некрасиво, но работает. И именно что по дате сортирует.
Приведи пример когда мой код "ненормально" сортирует.
1
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
10.12.2015, 21:26 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  
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
10.12.2015, 21:47 20
daslex, как-то странно у тебя сортирует, честно говоря:
Миниатюры
Описать структуру с именем ZNAK  
1
10.12.2015, 21:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.12.2015, 21:47
Помогаю со студенческими работами здесь

Описать структуру с именем ZNAK
Описать структуру с именем ZNAK, содержащую следующие поля: * фамилия, имя; * знак Зодиака; *...

Описать структуру с именем ZNAK
описать скрутуру с именем ZNAK, содержащую следущщие поля: STUDENT AEROFLOT TRAIN WORKER...

Описать структуру с именем ZNAK
Описать структуру с именем ZNAK, содержащую следущие поля:NAME - фамилия, имя; ZODIAC - знак...

Описать структуру с именем ZNAK
описать структуру с именем ZNAK содержащие следующие поля фамилия,имя знак зодиака дата рождения...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru