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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 37, средняя оценка - 4.89
vnaumenko
2 / 2 / 0
Регистрация: 19.05.2012
Сообщений: 35
#1

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

19.05.2012, 07:49. Просмотров 6269. Ответов 39

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

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

Описать структуру с именем ZNAK - C++
Кто нибудь может написать такую задачу? Описать структуру с именем ZNAK, содержащую следующие поля: фамилия, имя; знак зодиака; дата...

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

Описать структуру с именем ZNAK - C++
Пожалуйста помогите!!!! Никак не получается,надо на С++ Описать структуру с именем ZNAK, содержащую следующие поля: • фамилия,...

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

Описать структуру с именем ZNAK - C++
описать структуру с именем ZNAK содержащие следующие поля фамилия,имя знак зодиака дата рождения Как сделать файл что бы не...

Описать структуру с именем ZNAK - C++
Добрый вечер. Прошу помощи с программой: Описать структуру с именем ZNAK, содержащую следующие поля: NAME – фамилия, имя; ZODIAC –...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
daslex
1271 / 516 / 106
Регистрация: 02.08.2011
Сообщений: 2,669
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;
}
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.05.2012, 11:20 #3
Описать структуру с именем Znak
Описать структуру с именем ZNAK
Описать структуру с именем ZNAK
Описать структуру "знак зодиака"
vnaumenko
2 / 2 / 0
Регистрация: 19.05.2012
Сообщений: 35
19.05.2012, 13:19  [ТС] #4
Спасибо большое, очень помогли!
vilya_i
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;
}
vnaumenko
2 / 2 / 0
Регистрация: 19.05.2012
Сообщений: 35
20.05.2012, 07:52  [ТС] #6
Огромное всем спасибо!!!
-=ЮрА=-
Заблокирован
Автор FAQ
20.05.2012, 10:18 #7

Не по теме:

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



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

Не по теме:

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

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

Добавлено через 1 минуту
За основу взят пример пользователя daslex
gru74ik
Модератор
Эксперт CЭксперт С++
4158 / 1784 / 197
Регистрация: 20.02.2013
Сообщений: 4,913
Записей в блоге: 21
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  
ITALIANO
1 / 1 / 1
Регистрация: 24.10.2014
Сообщений: 176
10.12.2015, 19:51 #10
gru74ik, спасибо большое!!! А какой тут метод сортировки?
daslex
1271 / 516 / 106
Регистрация: 02.08.2011
Сообщений: 2,669
10.12.2015, 20:06 #11
gru74ik, Так даты не сортируют. Надо брать минимальную единицу и приводить всю дату к этой единице.

Т.е. в моем примере, например, используется три единицы, обозначающие день, месяц, год.
1. Нужно заранее оговаривать на каком месте что есть. Это важно.
2. В моем примере минимальной единицей будет день. Следовательно нужно выполнять расчет. Перевести всю дату в число дней. Для этого существует специальная формула перевода, можно найти, выискивая "перевод календарной даты в количество дней". На форуме такие задачи по любому решались.
А уже эти данные надо сравнивать. Привязка к году не сулит ничего хорошего.
Mesteriis
373 / 156 / 40
Регистрация: 08.08.2015
Сообщений: 1,107
Завершенные тесты: 1
10.12.2015, 20:16 #12
daslex, да да а еще можно бедного студента нагрузить boost/date_time так вообще красота будет, не усложняйте жизнь другим, а то запутается в конец и приехали!
daslex
1271 / 516 / 106
Регистрация: 02.08.2011
Сообщений: 2,669
10.12.2015, 20:43 #13
Mesteriis, а это тут причем. Пойдет он сдавать. Препод введет несколько близких по значениям дат и скажет: "Друг, а у тебя не сортирует".

Здесь чисто логическая ошибка, связанная с человеческим мышлением.
gru74ik
Модератор
Эксперт CЭксперт С++
4158 / 1784 / 197
Регистрация: 20.02.2013
Сообщений: 4,913
Записей в блоге: 21
10.12.2015, 20:43 #14
Цитата Сообщение от daslex Посмотреть сообщение
Так даты не сортируют. Надо брать минимальную единицу и приводить всю дату к этой единице.
Всё гениальное - просто. Ты молодец. А я просто как-то упустил из виду такой простой вариант. Overengineering - вечные грабли новичков. Что ж, опыт приходит со временем. А с опытом и умение не усложнять. Буду набираться опыта.
gru74ik
Модератор
Эксперт CЭксперт С++
4158 / 1784 / 197
Регистрация: 20.02.2013
Сообщений: 4,913
Записей в блоге: 21
10.12.2015, 20:52 #15
Цитата Сообщение от daslex Посмотреть сообщение
Препод введет несколько близких по значениям дат и скажет: "Друг, а у тебя не сортирует".
Друг, у меня норм сортирует:
Миниатюры
Описать структуру с именем ZNAK  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.12.2015, 20:52
Привет! Вот еще темы с ответами:

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

Описать структуру с именем Znak - C++
1.Описать структуру с именем Znak,содержащую поля фамилия и имя знак зодиака день рождения(массив из 3х чисел) 2.Ввод с клавиатуры...

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

Описать структуру с именем ZNAK - C++
Описать структуру с именем ZNAK, содержащую следующие поля: фамилия, имя, знак зодиака, дата рождения (массив из трёх чисел). Написать...


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

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

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