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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.59
LuenFen
 Аватар для LuenFen
3 / 3 / 0
Регистрация: 27.02.2009
Сообщений: 18
16.04.2009, 20:22     Описать структуру с именем ZNAK #1
Описать структуру с именем 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");
     }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.04.2009, 20:22     Описать структуру с именем ZNAK
Посмотрите здесь:

C++ Описать структуру с именем ZNAK
C++ Описать структуру с именем ZNAK
Описать структуру с именем ZNAK C++
Описать структуру с именем Znak C++
C++ Описать структуру с именем ZNAK
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
KamalovRadik
7 / 7 / 2
Регистрация: 10.07.2009
Сообщений: 206
13.12.2009, 16:24     Описать структуру с именем ZNAK #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Разве вводить фамилии надо не с экрана?

Добавлено через 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();
 }
Почему дату рождения выдает нету которая написана, а какую то левую?
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
14.12.2009, 05:54     Описать структуру с именем ZNAK #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
    );
KamalovRadik
7 / 7 / 2
Регистрация: 10.07.2009
Сообщений: 206
14.12.2009, 14:10     Описать структуру с именем ZNAK #4
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();
 }
KamalovRadik
7 / 7 / 2
Регистрация: 10.07.2009
Сообщений: 206
14.12.2009, 19:07     Описать структуру с именем ZNAK #5
Ало
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
15.12.2009, 02:09     Описать структуру с именем ZNAK #6
C
1
01,04
не надо ставить ноль перед цифрами, просто 1, 4

Цитата Сообщение от KamalovRadik
Почему когда ввожу в строчку месяц 8 или 9 месяц выдает ошибку?
потому что в восьмеричной системе нет цифр больше семи
это из-за нуля
Necrasov
0 / 0 / 0
Регистрация: 09.01.2010
Сообщений: 3
09.01.2010, 19:14     Описать структуру с именем ZNAK #7
Итак имеется:
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;"?
Очень хотелось бы узнать.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
09.01.2010, 21:48     Описать структуру с именем ZNAK #8
C
1
{"Ivanov","olen",{01,04,1990}},
когда видишь такую строчку - это значит, что структура заполняется без ввода, то есть напрямую программой

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

scanf'у будет всё равно как поданы данные
Код
"a"
"b"
"c"
"d"
"e"
"f"
или
Код
"a b c d"
"e f"
или
Код
"a"
"b c"
"d"
"e f"
для scanf'а это всё одинаковые подачи

а для fgets всегда один вариант
Код
"a"
"b"
"c"
"d"
"e"
"f"
взял строку - обработал начало
взял строку - обработал начало
...
пока строки не закончатся

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

Я к примеру даже если и понял как работают ети функции ввода, но всё равно без понятия как их впихнуть в программу. Плиз хелп)
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
09.01.2010, 23:12     Описать структуру с именем ZNAK #10
для одной структуры
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 секунды
вывод

Код
[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 минуты
дальше цикл делаешь и каждую структуру подаёшь в функцию, проверяешь на ошибки ввода (по результату функции), если ошибок нет, все структуры после цикла заполнены
Necrasov
0 / 0 / 0
Регистрация: 09.01.2010
Сообщений: 3
09.01.2010, 23:27     Описать структуру с именем ZNAK #11
Если ето какая то другая программа то я ее не понимаю.
Если ето под мою то это как то ёмко слишком.

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

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();
 }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2010, 01:04     Описать структуру с именем ZNAK
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
10.01.2010, 01:04     Описать структуру с именем ZNAK #12
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 минуту
нужно ещё на ошибки проверять (чтобы он не продолжал запрашивать строки, когда какая-то подана неправильно), иначе в чьё-нибудь имя может записаться чей-то зодиак, а в зодиак - дата
Yandex
Объявления
10.01.2010, 01:04     Описать структуру с именем ZNAK
Ответ Создать тему
Опции темы

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