Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/40: Рейтинг темы: голосов - 40, средняя оценка - 4.88
 Аватар для LuenFen
3 / 3 / 0
Регистрация: 27.02.2009
Сообщений: 18

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

16.04.2009, 20:22. Показов 8712. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Описать структуру с именем ZNAK, содержащую следущие поля:NAME - фамилия, имя; ZODIAC - знак зодиака;BDAY - день рождения(массив из трех чисел) и сформировать массив BOOK состоящий из восьми сруктур типа ZNAK; записи должны быть неупорядочены по любому из полей. Выполнить следущие действия: вывод на дисплей содержимого массива, упорядоченного по знакам зодиака; вывод на экран информации о людях, родившхся в месяц, значение которого введено с клавиатуры; если такх нет, выдать на дисплей соответсвующее сообщение.

Добавлено через 3 минуты 0 секунд
Получилось вот только это. 1. Помогите с днем рождения - не могу понять "BDAY - день рождения(массив из трех чисел)" 2. Как упорядочить по зодиакам? Заранее спасибо
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
#include <stdio.h>
#include <string.h>
#include <conio.h>
struct ZNAK{
       char NAME[100];
       char ZODIAC[100];
       int BDAY[3];};
void SORT(ZNAK *x);
void NTR(ZNAK    x[8]);
int main()
{
 
clrscr();
ZNAK BOOK[8]={     {"Ivanov","oven",1,04,91},
      {"Petrov","strelec",12,9,64},
      {"Sidorov","ribi",1,03,38},
      {"Kuznecov","telec",7,05,64},
      {"Krilov","vesi",18,10,86},
      {"Tolstoy","lev",20,8,78},
      {"Pushkin","vodoley",10,02,06},
      {"Lermontov","rak",22,07,12}};
SORT(BOOK);
NTR(BOOK);
getch();
return 0;
}
 
void SORT(ZNAK x[8])
     {
     ZNAK temp;
     int i,j,imin;
     for(i=0;i<6;i++)
      {
      imin=i;
      for(j=i+1;j<7;j++) if(x[j].BDAY<x[imin].BDAY) imin=j;
      temp=x[i];
      x[i]=x[imin];
      x[imin]=temp;
     }
for(i=0;i<8;i++)
     {
     printf("----------------------------------------\n");
     printf("%s #: %s BDAY: %d\n",x[i].NAME,x[i].ZODIAC,x[i].BDAY);}
     for (int i=0; i < 8; i++){
     printf("%2.1lf ", BDAY[i]);
     printf("----------------------------------------\n");
     }
 
void NTR(ZNAK x[8])
     {
     int i,count=0;
     scanf("%d", &i);
     for(int k=0;k<8;k++)
     if(x[k].BDAY[i]==i)
      {
      printf("%s #: %s BDAY: %d\n",x[k].NAME,x[k].ZODIAC,x[k].BDAY);
      count++;
      }
     if(!count) printf("Net ludey");
     }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.04.2009, 20:22
Ответы с готовыми решениями:

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

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

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

11
8 / 8 / 2
Регистрация: 10.07.2009
Сообщений: 206
13.12.2009, 16:24
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Разве вводить фамилии надо не с экрана?

Добавлено через 8 минут
Кто нибудь откликнитесь, у меня такая же задача

Добавлено через 50 секунд
Только надо под С

Добавлено через 1 час 48 минут
Вот решил, но выдает ошибку, ругается на 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
#include<stdio.h>
#include<string.h>
#include<conio.h>
struct ZNAK
{
char name[30];
char zodiak[100];
int bday[3]; }
 
 
 
struct ZNAK mas[8]=
{
          {"Ivanov","oven",1.04.91},
          {"Petrov","strelec",12.09.64},
          {"Sidorov","ribi",1.03.38},
          {"Kuznecov","telec",7.05.64},
          {"Krilov","vesi",18.10.86},
          {"Tolstoy","lev",20.08.78},
          {"Pushkin","vodoley",10.02.06},
          {"Lermontov","rak",22.07.12}};
 
main()
{char familia[20];
int i;
puts("\n Vvedite familiu:");
gets(familia);
for(i=0; i<8; && strcmp(familia,mas[i].name)==0; i++)
{printf("%d ", mas[i].bday);
printf("%s", mas[i].zodiak); }   ;
else printf(" net takoi familii poprobuite druguy");
 
getch();
return 0; }
Добавлено через 1 час 1 минуту
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
#include<stdio.h>
#include<string.h>
#include<conio.h>
struct znak
{
char name[30];
char zodiak[100];
int bday[30];
};
int n=0;
 
 
struct znak mas[8]=
{
          {"Ivanov","olen",1.04},
          {"Petrov","strelec",12.09},
          {"Sidorov","ribi",1.03},
          {"Kuznecov","telec",7.05},
          {"Krilov","vesi",18.10},
          {"Tolstoy","lev",20.08},
          {"Pushkin","vodoley",10.02},
          {"Lermontov","rak",22.07}
};
 
void main()
{
 
char familia[20];
int i;
puts("\n Vvedite familiu:");
gets(familia);
for(i=0; i<8;  i++)
if  ( strcmp(familia, mas[i].name)==0)
{printf("rodilsya: %d ", mas[i].bday);
printf(" \nzodiak: %s", mas[i].zodiak); n=n+1; }
if(n==0) printf(" net takoi familii poprobuite druguy");
 
getch();
 }
Почему дату рождения выдает нету которая написана, а какую то левую?
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
14.12.2009, 05:54
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
struct date {
    int day, month, year;
};
 
struct znak {
    char name[30], zodiac[20];
    struct date birthday;
};
 
...
 
    struct znak people[8] = {
        { "one", "two", { 1, 1, 1990 } },
        { "three", "four", { 2, 12, 1990 } },
        { "five", "six", { 1, 5, 2000 } },
        ...
    };
Добавлено через 1 минуту
чтобы сравнивать по датам, нужна функция, сравнивающая две структуры типа date
чтобы сравнивать по знакам зодиака, можно использовать strcmp из string.h

Добавлено через 7 минут
C
1
2
3
4
5
6
7
8
9
    printf(
        "%s %s %d.%d.%d"
        "\n",
        people[0].name,
        people[0].zodiac,
        people[0].birthday.day,
        people[0].birthday.month,
        people[0].birthday.year
    );
Добавлено через 8 минут
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    struct znak *p;
 
    p = people;
    
    printf("Enter a name:\n");
    scanf("%29[^\n]%*c", p->name);
    
    printf("Enter a zodiac:\n");
    scanf("%19[^\n]%*c", p->zodiac);
    
    printf("Enter a date (mm.dd.yyyy):\n");
    scanf("%2d.%2d.%4d",
        &p->birthday.day,
        &p->birthday.month,
        &p->birthday.year
    );
1
8 / 8 / 2
Регистрация: 10.07.2009
Сообщений: 206
14.12.2009, 14:10
BDAY - день рождения(массив из трех чисел)

Добавлено через 22 минуты
Почему когда ввожу в строчку месяц 8 или 9 месяц выдает ошибку?
Вот задача:
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
#include<stdio.h>
#include<string.h>
#include<conio.h>
struct date {
int day, month, year;};
struct znak
{
char name[30];
char zodiak[20];
struct date birthday;
};
int n=0;
 
 
struct znak mas[8]=
{
          {"Ivanov","olen",{01,04,1990}},
          {"Sidorov","ribi",{1,03,1991}},
          {"Kuznecov","telec",{7,05,2012}},
          {"Krilov","vesi",{18,10,2009}},
          {"Tolstoy","lev",{20,02,1340}},
          {"Pushkin","vodoley",{10,04,1600}},
          {"Lermontov","rak",{22,07,1860}}
};
 
void main()
{
 
char familia[20];
int i;
puts("\n Vvedite familiu:");
gets(familia);
for(i=0; i<8;  i++)
if  ( strcmp(familia, mas[i].name)==0)
{printf("rodilsya: %d.%d.%d ", mas[i].birthday.day, mas[i].birthday.month, mas[i].birthday.year );
printf(" \nzodiak: %s", mas[i].zodiak); n=n+1; }
if(n==0) printf(" net takoi familii poprobuite druguy");
 
getch();
 }
0
8 / 8 / 2
Регистрация: 10.07.2009
Сообщений: 206
14.12.2009, 19:07
Ало
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
15.12.2009, 02:09
C
1
01,04
не надо ставить ноль перед цифрами, просто 1, 4

Цитата Сообщение от KamalovRadik
Почему когда ввожу в строчку месяц 8 или 9 месяц выдает ошибку?
потому что в восьмеричной системе нет цифр больше семи
это из-за нуля
0
0 / 0 / 0
Регистрация: 09.01.2010
Сообщений: 3
09.01.2010, 19: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
#include<stdio.h>
#include<string.h>
#include<conio.h>
struct date {
int day, month, year;};
struct znak
{
char name[30];
char zodiak[20];
struct date birthday;
};
int n=0;
 
 
struct znak mas[8]=
{
          {"Ivanov","olen",{01,04,1990}},
          {"Sidorov","ribi",{1,03,1991}},
          {"Kuznecov","telec",{7,05,2012}},
          {"Krilov","vesi",{18,10,2009}},
          {"Tolstoy","lev",{20,02,1340}},
          {"Pushkin","vodoley",{10,04,1600}},
          {"Lermontov","rak",{22,07,1860}}
};
 
void main()
{
 
char familia[20];
int i;
puts("\n Vvedite familiu:");
gets(familia);
for(i=0; i<8;  i++)
if  ( strcmp(familia, mas[i].name)==0)
{printf("rodilsya: %d.%d.%d ", mas[i].birthday.day, mas[i].birthday.month, mas[i].birthday.year );
printf(" \nzodiak: %s", mas[i].zodiak); n=n+1; }
if(n==0) printf("Error 404");
 
getch();
 }
И вроде работает, но может ктонибудь объяснит что значит в задании "• ввод с клавиатуры данных в массив, состоящий из восьми элементов типа ZNAK;"?
Очень хотелось бы узнать.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
09.01.2010, 21:48
C
1
{"Ivanov","olen",{01,04,1990}},
когда видишь такую строчку - это значит, что структура заполняется без ввода, то есть напрямую программой

а ввод - это, к примеру, ипользование scanf для заполнения каждого элемента структуры
часто можно юзать fgets (это чтобы строку прочитать и из неё извлечь один элемент структуры, так как при нажатии enter'а, в программу отправляется строка)
scanf не различает строки

scanf'у будет всё равно как поданы данные
Code
1
2
3
4
5
6
"a"
"b"
"c"
"d"
"e"
"f"
или
Code
1
2
"a b c d"
"e f"
или
Code
1
2
3
4
"a"
"b c"
"d"
"e f"
для scanf'а это всё одинаковые подачи

а для fgets всегда один вариант
Code
1
2
3
4
5
6
"a"
"b"
"c"
"d"
"e"
"f"
взял строку - обработал начало
взял строку - обработал начало
...
пока строки не закончатся

Добавлено через 6 минут
Цитата Сообщение от Necrasov
состоящий из восьми элементов типа ZNAK
это значит принять группу строк для одной структуры восемь раз, переходя к следующей структуре в массиве структур
в конце все структуры будут заполнены данными, которые вводились с клавиатуры
при заполнении каждой структуры вначале хорошо бы выводить сообщение о том, что заполняется такая-то структура
0
0 / 0 / 0
Регистрация: 09.01.2010
Сообщений: 3
09.01.2010, 22:23
Могли бы вы мне по моему заданию отредактировать то, что тут наколдовали остальные?

Я к примеру даже если и понял как работают ети функции ввода, но всё равно без понятия как их впихнуть в программу. Плиз хелп)
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
09.01.2010, 23:12
для одной структуры
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
#include <stdio.h>
#include <stdlib.h>
 
struct date {
    int day, month, year;
};
 
struct znak {
    char name[30];
    char zodiak[20];
    struct date birthday;
};
 
int GetSign(struct znak *p, FILE *ifp);
 
int main(void) /* C89 ANSI */
{
    struct znak one;
    
    if (GetSign(&one, NULL) == 0)
        exit(EXIT_FAILURE);
    
    printf(
        "%s %s %d/%d/%d" "\n",
        one.name,
        one.zodiak,
        one.birthday.day,
        one.birthday.month,
        one.birthday.year
    );
    
    exit(EXIT_SUCCESS);
}
 
int GetSign(struct znak *p, FILE *ifp)
{
    char line[200] = { '\0' };
    int result;
    
    if (ifp == NULL)
        ifp = stdin;
    
    if (ifp == stdin) {
        printf("enter the name: ");
        fflush(stdout);
    }
    fgets(line, sizeof line, ifp);
    
    result = sscanf(line, "%s", p->name);
    
    if (result != 1) {
        fprintf(stderr, "error: can't read the name" "\n");
        return 0;
    }
    
    if (ifp == stdin) {
        printf("enter the sign: ");
        fflush(stdout);
    }
    fgets(line, sizeof line, ifp);
    
    result = sscanf(line, "%s", p->zodiak);
    
    if (result != 1) {
        fprintf(stderr, "error: can't read the sign" "\n");
        return 0;
    }
        
    if (ifp == stdin) {
        printf(
            "enter the birth date "
            "(dd mm yyyy): "
        );
        fflush(stdout);
    }
    fgets(line, sizeof line, ifp);
    
    result = sscanf(
        line,
        "%2d %2d %4d",
        &p->birthday.day,
        &p->birthday.month,
        &p->birthday.year
    );
    
    if (result != 3) {
        fprintf(stderr, "error: can't read the birth date" "\n");
        return 0;
    }
    
    return 1;
}


Добавлено через 54 секунды
вывод

Code
1
2
3
4
5
6
[guest@station src]$ ./test
enter the name: abc
enter the sign: libra
enter the birth date (dd mm yyyy): 15 10 1982
abc libra 15/10/1982
[guest@station src]$


Добавлено через 3 минуты
дальше цикл делаешь и каждую структуру подаёшь в функцию, проверяешь на ошибки ввода (по результату функции), если ошибок нет, все структуры после цикла заполнены
0
0 / 0 / 0
Регистрация: 09.01.2010
Сообщений: 3
09.01.2010, 23:27
Если ето какая то другая программа то я ее не понимаю.
Если ето под мою то это как то ёмко слишком.

Может быть можно чтото слепить из:

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
#include<stdio.h>
#include<string.h>
#include<conio.h>
#define N 3
struct date {
int day, month, year;};
struct ZNAK
{
   char name [50];
   char zodiak [50];
   struct date birthday [20];
}
pipl[N], temp;
void zap()
{
  int i,j;
  printf ("Vvedite familiu, zodiak, datu rojdeniya (dd.mm.yyyy)\n");
  for (i=0;i<N;i++)
{
scanf("%s",&pipl[i].name);
scanf("%s",&pipl[i].zodiak);
scanf("%d",&pipl[i].birthday.day);
scanf("%d",&pipl[i].birthday.month);
scanf("%d",&pipl[i].birthday.year);
 
}
printf ("Press any key\n");
getch();
}
 
void main()
{
 
char familia[20];
int i,n;
puts("\n Vvedite familiu:");
gets(familia);
for(i=0; i<8;  i++)
if  ( strcmp(familia, pipl[i].name)==0)
{printf("rodilsya: %d.%d.%d ", pilp[i].birthday.day, pipl[i].birthday.month, pipl[i].birthday.year );
printf(" \nzodiak: %s", pipl[i].zodiak); n=n+1; }
if(n==0) printf("Error 404");
 
getch();
 }
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
10.01.2010, 01:04
C
1
2
3
4
5
    scanf("%s",&pipl[i].name);
    scanf("%s",&pipl[i].zodiak);
    scanf("%d",&pipl[i].birthday.day);
    scanf("%d",&pipl[i].birthday.month);
    scanf("%d",&pipl[i].birthday.year);
это не очень уматно, лучше тогда fgets'ом взять эту строку
и одним sscanf'ом из неё все элементы одним махом сохранить

Добавлено через 1 минуту
нужно ещё на ошибки проверять (чтобы он не продолжал запрашивать строки, когда какая-то подана неправильно), иначе в чьё-нибудь имя может записаться чей-то зодиак, а в зодиак - дата
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.01.2010, 01:04
Помогаю со студенческими работами здесь

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

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

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

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

Описать структуру с именем ZNAK
Прошу Вас помочь в написании программы, вообще не понимаю. Описать структуру с именем ZNAK, содержащую следующие поля: * фамилия,...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru