Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
2 / 2 / 1
Регистрация: 18.11.2012
Сообщений: 90
1

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

03.04.2013, 03:00. Показов 2184. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задание
1. Описать структуру с именем KNIGA, содержащую следующие поля:
• название;
• автор;
• издательство.
2. Написать программу, выполняющую следующие действия:
• ввод с клавиатуры данных в массив, состоящий из восьми элементов типа KNIGA;
• вывод в один файл информации по всем книгам определенного автора и издательства.
Помогите пожалуйста написать код программы!!!(Поле на выбор,метод сортировки пузырьковый)
вот стандартный шаблон для начала
C
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#include <string.h>
struct KNIGA
{
char NAZVA[256];
char AVTOR;
float IZD;
}
int main ()
{
(дальше я разобраться не могу,кроме вывода на екран, поетому очень нужна помощь)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.04.2013, 03:00
Ответы с готовыми решениями:

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

Описать структуру с именем STUDENT
Описать структуру с именем STUDENT, содержащую следующие поля: фамилия и инициалы, номер группы,...

Описать структуру с именем WORKER
Уважаемые програмисты. Я учусь програмированию и натолкнулся на задачу: Вариант 6. Описать...

Описать структуру с именем NOTE
Описать структуру с именем NOTE, содержащий следующие поля: • фамилия, имя; • номер телефона •...

19
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
03.04.2013, 09:57 2
Цитата Сообщение от Olga1212 Посмотреть сообщение
C
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#include <string.h>
struct KNIGA
{
char NAZVA[256];
char AVTOR;
float IZD;
}
int main ()
{
То есть автор одной буквой задаётся? И зачем издательство вещественным числом задавать?
1
44 / 42 / 31
Регистрация: 15.03.2013
Сообщений: 91
03.04.2013, 10:22 3
понятное дело что нужно все поля символьным строками задавать:
C
1
2
3
4
5
6
struct KNIGA
{
char NAZVA[256];
char AVTOR[256];
char IZD[256];
};
1
2 / 2 / 1
Регистрация: 18.11.2012
Сообщений: 90
03.04.2013, 23:32  [ТС] 4
ой,это всё из за невнимательности!я поняла что все поля надо символьными строками задавать!но а как вообщим всю программу написать,подскажите пожалуйста,хотя бы начало.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
04.04.2013, 01:08 5
Цитата Сообщение от Olga1212 Посмотреть сообщение
но а как вообщим всю программу написать
С этим
Цитата Сообщение от Olga1212 Посмотреть сообщение
метод сортировки пузырьковый
не задалось, а так вот:
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
typedef char string_t[256];
#define get_string(s) ( scanf("%255[^\n]%*c", (s)) == 1 )
 
typedef struct BOOK {
    string_t title;
    string_t autor;
    string_t publisher;
} book_t;
 
#define get_book(b) ( printf("Title: ") > 0 && get_string((b)->title) && \
                        printf("Autor: ") > 0 && get_string((b)->autor) && \
                        printf("Publisher: ") > 0 && get_string((b)->publisher) \
                    )
 
#define put_book(b, f) ( fprintf((f), "Title: %s\nAutor: %s\nPublisher: %s\n\n", \
                            (b)->title, (b)->autor, (b)->publisher) > 0 \
                        )
 
int books_cmp(const void * a, const void * b) {
    return strcmp(((book_t*)a)->title, ((book_t*)b)->title);
}
 
#define NUMBER_OF_BOOKS (8)
 
#define OUTPUT_FILE_NAME "books.txt"
 
int main(void) {
    book_t * books;
    FILE * fout;
    string_t autor, publisher;
    int i, count;
    
    if ( ! ( books = malloc(sizeof(book_t) * NUMBER_OF_BOOKS) ) ) {
        perror("malloc");
        exit(1);
    }
    
    for ( i = 0; i < NUMBER_OF_BOOKS; ++i ) {
        printf("Book #%d:\n", i + 1);
        if ( ! get_book(&books[i]) ) {
            fprintf(stderr, "Input error!\n");
            exit(1);
        }
        printf("\n");
    }
    
    printf("\n\nNeeded autor: ");
    if ( ! get_string(autor) ) {
        fprintf(stderr, "Wrong input!\n");
        exit(1);
    }
    
    printf("Needed publisher: ");
    if ( ! get_string(publisher) ) {
        fprintf(stderr, "Wrong input!\n");
        exit(1);
    }
    
    if ( ! ( fout = fopen(OUTPUT_FILE_NAME, "w") ) ) {
        perror("fopen");
        exit(1);
    }
    
    qsort(books, NUMBER_OF_BOOKS, sizeof(book_t), books_cmp);
    for ( i = count = 0; i < NUMBER_OF_BOOKS; ++i ) {
        if ( ! ( strcmp(autor, books[i].autor) || strcmp(publisher, books[i].publisher) || put_book(&books[i], fout) && ++count ) ) {
            fprintf(stderr, "Can't write to output file\n");
            if ( fclose(fout) )
                perror("fclose");
            exit(1);
        }
    }
    
    if ( fclose(fout) ) {
        perror("fclose");
        exit(1);
    }
    
    printf("Found %d book(s). See in %s\n", count, OUTPUT_FILE_NAME);
    
    free(books);
    exit(0);
}
1
2 / 2 / 1
Регистрация: 18.11.2012
Сообщений: 90
06.04.2013, 21:42  [ТС] 6
Спасибо большое,не ожидала получить помощь)Я проверила,там выбивает ошибку в 37 строке,посмотрите пожалуйста,может сможете исправить. И если Вам не сложно,не могли бы вы прокомментировать такие строки как:24,37,38,42,44,45,68,69,70
0
118 / 110 / 78
Регистрация: 30.01.2013
Сообщений: 297
06.04.2013, 22:41 7
C
1
37 if ( ! ( books = malloc(sizeof(book_t) * NUMBER_OF_BOOKS) ) ) {
пропущен тип перед malloc
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
06.04.2013, 22:52 8
Цитата Сообщение от Olga1212 Посмотреть сообщение
выбивает ошибку в 37 строке
Вы программу компилируете, как С++, а не как С. Простое решение
C
1
if ( ! ( books = (book_t*)malloc(sizeof(book_t) * NUMBER_OF_BOOKS) ) ) {
правильное - разобраться с тем, как нужно компилировать программу. В мелкостудии где-то в настройках проекта должно быть "Компилировать код как...", вот там нужно С выбрать.

Цитата Сообщение от Olga1212 Посмотреть сообщение
прокомментировать такие строки как:24,37,38,42,44,45,68,69,70
24 - сравнение названий книг, нужно для сортировки. Для лучшего понимания см. руководство к функциям strcmp, qsort
37 - выделение памяти под массив структур
38 - сообщение об ошибке, если не удастся выделить нужное количество памяти
42 - 47 - заполнение массива структур. В случае ошибки ввода выдаёт сообщение и прекращает выполнение программы
68 - сортировка структур в массиве по названиям книг
69 - 75 в цикле по массиву поиск книг с нужными автором и издательством (снова смотри описание strcmp), при нахождении запись их в файл с проверкой результата.

Добавлено через 3 минуты
Цитата Сообщение от ZeR_0 Посмотреть сообщение
C
1
37 if ( ! ( books = malloc(sizeof(book_t) * NUMBER_OF_BOOKS) ) ) {
пропущен тип перед malloc
В программе на С он там и не нужен, мало того - может быть вреден. Обсуждалось уже не раз на форуме, поищите, если интересно.
0
2 / 2 / 1
Регистрация: 18.11.2012
Сообщений: 90
07.04.2013, 22:10  [ТС] 9
спасибо большое,буду разбираться,а не могли бы Вы пожалуйста,скинуть скриншот как работает программа(если можно)
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
08.04.2013, 01:30 10
Цитата Сообщение от Olga1212 Посмотреть сообщение
скинуть скриншот как работает программа
Мёдом не намазать?

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


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


Описать структуру с именем KNIGA
1
2 / 2 / 1
Регистрация: 18.11.2012
Сообщений: 90
08.04.2013, 23:50  [ТС] 11
Извините,если я как то Вас "обтягиваю" своими просьбами,но на самом деле,я хотела посмотреть как иначе можно написать код к этому заданию,пыталась разобраться,но если честно для меня это сложно,так как не имею ещё таких знаний(а по скольку,я хочу научиться программировать на языке Си,я буду пытаться своими силами писать код,который для меня будет проще и понятней,если что сюда буду скидывать свои попытки,а если у Вас будет возможность, корректировать меня,я буду очень признательна!
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
09.04.2013, 00:22 12
Цитата Сообщение от Olga1212 Посмотреть сообщение
Извините,если я как то Вас "обтягиваю" своими просьбами


Цитата Сообщение от Olga1212 Посмотреть сообщение
пыталась разобраться,но если честно для меня это сложно
Ну так спрашивайте, не стесняйтесь. На самом деле там ничего сложного-то нет. Ну и всё-таки советую разобраться, как там что - как минимум, будет проще по-своему написать...
1
2 / 2 / 1
Регистрация: 18.11.2012
Сообщений: 90
14.04.2013, 22:15  [ТС] 13
План этого задания такой
1.ввод данных
2.Вывод данных
3.Сортировка(поле и метод сортировки на выбор)
4. По заданию
5.Выход
Начало такое
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<stdio.h>
#include <string.h>
#include <conio.h>
struct KNIGA
{
char TITLE [256];
char AUTOR [256];
char PUBLISHER [256];
}
int main ()
{
int i;
strucr KNIGA s2 [8];
for ( i=0;i<8; i++)
{
printf("Print TITLE:               ");
gets (s2 [0]. TITLE);
printf("Print AUTOR:               ")
scanf( "%f",& s2[1]. AUTOR);
}
Мы создаем массив,как указано в задании "массив, состоящий из восьми элементов типа KNIGA",а теперь должны заполнить все по порядку,подскажите как это можно сделать?!
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
15.04.2013, 00:48 14
C
1
2
3
4
5
6
7
8
for ( i = 0; i < 8; ++i ) {
    printf("Title: ");
    scanf("%255[^\n]%*c", s2[i].TITLE);
    printf("Autor: ");
    scanf("%255[^\n]%*c", s2[i].AUTOR);
    printf("Publisher: ");
    scanf("%255[^\n]%*c", s2[i].PUBLISHER);
}
Но должен заметить, всё в целом - очень плохой стиль программирования. Лучше сразу приучаться писать правильно. Например не использовать "магические числа". Не дай Бог, менять прийдётся...
1
2 / 2 / 1
Регистрация: 18.11.2012
Сообщений: 90
15.04.2013, 01:52  [ТС] 15
Просто так учат нас в универе и соответственно так и требуют,поэтому написанный код по другому считают сложным
Это получается я заполнила массив?Ввод и вывод данных нужно делать с использованием цикла,подскажите как по проще это можно сделать?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
15.04.2013, 02:24 16
Цитата Сообщение от Olga1212 Посмотреть сообщение
Просто так учат нас в универе и соответственно так и требуют,поэтому написанный код по другому считают сложным
Ужас какой-то. Если действительно хотите научиться программированию на С, читайте книги. Здесь в разделе есть прикреплённая тема с литературой. Ну и в первую очередь Керниган, Ритчи "Язык программирования С".

Цитата Сообщение от Olga1212 Посмотреть сообщение
Это получается я заполнила массив?Ввод и вывод данных нужно делать с использованием цикла,подскажите как по проще это можно сделать?
Получается. Вывод:
C
1
2
for ( i = 0; i < 8; ++i )
    printf("Title: %s\nAutor: %s\nPublisher: %s\n\n", s2[i].TITLE, s2[i].AUTOR, s2[i].PUBLISHER);
0
2 / 2 / 1
Регистрация: 18.11.2012
Сообщений: 90
17.05.2013, 20:14  [ТС] 17
1. Описать структуру с именем KNIGA, содержащую следующие поля:
• название;
• автор;
• издательство.
2. Написать программу, выполняющую следующие действия:
• ввод с клавиатуры данных в массив, состоящий из восьми элементов типа KNIGA;
• вывод в один файл информации по всем книгам определенного автора и издательства.

Вот моя программа которую я начала делать,но есть ошибки и я не знаю как сделать задание 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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# include <stdio.h>
# include <string.h>
# include <conio.h>
struct KNIGA
{
    char autor[256];
    char kniga[256];
    char publisher[256];
};
void input ( struct KNIGA t1[8])
    {
    int i;
    for(i=0;i<8;i++)
    {
        printf("Enter autor: ");
        scanf ("%s",& t1[8].autor);
        printf("Enter kniga: ");
        scanf ("%s",& t1[8].kniga); getchar();
        printf("Enter publisher: ");
        scanf ("%s",& t1[8].publisher); getchar ();
                        
    }
}
void output(struct KNIGA t1[8])
    {
        int i;
            for(i=0;i<8;i++)
    {
        printf (" autor=%s\n",t1[i].autor);
        printf ( " kniga=%s\n",t1[i]. kniga);
        printf ("puplisher=%s\n",t1[i]. publisher);
        }
    }
void sort(struct KNIGA t1[8])
     {
         struct KNIGA temp;
         int i,j;
         for ( i=0;i<8;i++)
             for (j=0;j<8-1;j++)
             {
                 if (t1[j].autor<t1[j+1].autor)
                 {
                     temp=t1[j];
                     t1[j]=t1[j+1];
                     t1[j+1]=temp;
                 }
             }
     }
/*zadanie ( struct KNIGA t1[8])
{
int k=0,n,i;
    printf("Vvedite autor:/n");
      scanf("%s",&k);
for(i=0;i<8;i++)
   if(t==t1[i].autor)*/
 
  int main()
  {
    int n;
    struct KNIGA t[8];
    while (n!=5)
    {
        printf ("1.Vvod\n");
        printf ("2.Vivod\n");
        printf ("3.sort\n");
        printf ("5.vihod\n");
        scanf ("%d",&n);
        switch(n)
        {
        case 1:input(t);break;
        case 2:output(t);break;
        case 3:sort(t);break;
        case 5:printf("Good buy"); }
    }
return 0;
  }
0
КонецСвета
18.05.2013, 20:47
  #18
 Комментарий модератора 
Olga1212, чтобы оформить тему в соответствии с правилами форума, выделите свой код и нажмите кнопочку в редакторе сообщений с надписью С.
Если вы продолжите игнорировать правила форума в отношении оформления тем, придется прибегнуть к более действенным мерам воздействия.
1
2 / 2 / 1
Регистрация: 18.11.2012
Сообщений: 90
20.05.2013, 02:51  [ТС] 19
...
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
20.05.2013, 04:12 20
Olga1212,
C
1
#define SIZE 256
после хедеров и все размеры меняются в одно мгновение.
И про magic number все же почитайте. Сам хотел написать, да опередили.
Методы должны работать не с массивами с каждой переменной отдельно.

Сплошными заглавными я бы называл лишь глобальные константы и макросы, а структуры с заглавной только начинал бы. И с отступами получше разберитесь. У оператора множественного выбора не хватает default-a. И оформил бы я все в цикл do-while. А еще транслит не есть гуд.
0
20.05.2013, 04:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.05.2013, 04:12
Помогаю со студенческими работами здесь

Описать структуру с именем Student
--&gt; Вот как требуется сделать. #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; ...

Описать структуру с именем WORKER
Помогите написать программку на си!! Описать структуру с именем WORKER. содержащую следующие поля...

Описать структуру с именем AEROFLOT
нужно решение этой задачи,буду очень благодарен... Описать структуру с именем AER0FL0T,...

Описать структуру с именем ZNАК
1. Описать структуру с именем ZNАК, содержащую следующие поля: NАМЕ - фамилия, имя; ZODIAC -...


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

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